From 0d254d6f30e7bf8fc5227f4a562f3a65a9be5b61 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Mon, 30 Jun 2008 17:59:03 +0000 Subject: [PATCH] * frame.c (get_prev_frame_1): Call frame_unwind_find_by_frame directly instead of get_frame_id. --- gdb/ChangeLog | 5 +++++ gdb/frame.c | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c1ad2858dff..c0ec8bc5192 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-06-30 Daniel Jacobowitz + + * frame.c (get_prev_frame_1): Call frame_unwind_find_by_frame + directly instead of get_frame_id. + 2008-06-30 Luis Machado * rs6000-tdep.c (ppc_displaced_step_fixup): New function. diff --git a/gdb/frame.c b/gdb/frame.c index 937aced8d7d..a14367cf8ae 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) -- 2.30.2