From: Daniel Jacobowitz Date: Mon, 30 Jun 2008 17:59:03 +0000 (+0000) Subject: * frame.c (get_prev_frame_1): Call frame_unwind_find_by_frame X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0d254d6f30e7bf8fc5227f4a562f3a65a9be5b61;p=binutils-gdb.git * frame.c (get_prev_frame_1): Call frame_unwind_find_by_frame directly instead of get_frame_id. --- 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)