aboutsummaryrefslogtreecommitdiff
path: root/gdb/frame.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2008-06-30 17:59:03 +0000
committerDaniel Jacobowitz <drow@false.org>2008-06-30 17:59:03 +0000
commit0d254d6f30e7bf8fc5227f4a562f3a65a9be5b61 (patch)
tree7d92106adc89267ba9c3b369794fb5b0349bf119 /gdb/frame.c
parente6fde208761f4c42ddf2409566437b4114a87429 (diff)
downloadgdb-0d254d6f30e7bf8fc5227f4a562f3a65a9be5b61.zip
gdb-0d254d6f30e7bf8fc5227f4a562f3a65a9be5b61.tar.gz
gdb-0d254d6f30e7bf8fc5227f4a562f3a65a9be5b61.tar.bz2
* frame.c (get_prev_frame_1): Call frame_unwind_find_by_frame
directly instead of get_frame_id.
Diffstat (limited to 'gdb/frame.c')
-rw-r--r--gdb/frame.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/gdb/frame.c b/gdb/frame.c
index 937aced..a14367c 100644
--- a/gdb/frame.c
+++ b/gdb/frame.c
@@ -1180,9 +1180,13 @@ get_prev_frame_1 (struct frame_info *this_frame)
return this_frame->prev;
}
- /* If the frame id hasn't been built yet, it must be done before
- setting a stop reason. */
- this_id = get_frame_id (this_frame);
+ /* If the frame unwinder hasn't been selected yet, we must do so
+ before setting prev_p; otherwise the check for misbehaved
+ sniffers will think that this frame's sniffer tried to unwind
+ further (see frame_cleanup_after_sniffer). */
+ if (this_frame->unwind == NULL)
+ this_frame->unwind
+ = frame_unwind_find_by_frame (this_frame, &this_frame->prologue_cache);
this_frame->prev_p = 1;
this_frame->stop_reason = UNWIND_NO_REASON;
@@ -1190,6 +1194,7 @@ get_prev_frame_1 (struct frame_info *this_frame)
/* Check that this frame's ID was valid. If it wasn't, don't try to
unwind to the prev frame. Be careful to not apply this test to
the sentinel frame. */
+ this_id = get_frame_id (this_frame);
if (this_frame->level >= 0 && !frame_id_p (this_id))
{
if (frame_debug)