* frame.c (get_prev_frame_1): Call frame_unwind_find_by_frame
authorDaniel Jacobowitz <drow@false.org>
Mon, 30 Jun 2008 17:59:03 +0000 (17:59 +0000)
committerDaniel Jacobowitz <drow@false.org>
Mon, 30 Jun 2008 17:59:03 +0000 (17:59 +0000)
directly instead of get_frame_id.

gdb/ChangeLog
gdb/frame.c

index c1ad285..c0ec8bc 100644 (file)
@@ -1,3 +1,8 @@
+2008-06-30  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * frame.c (get_prev_frame_1): Call frame_unwind_find_by_frame
+       directly instead of get_frame_id.
+
 2008-06-30  Luis Machado  <luisgpm@br.ibm.com>
 
        * rs6000-tdep.c (ppc_displaced_step_fixup): New function.
index 937aced..a14367c 100644 (file)
@@ -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)