* frame.c (get_prev_frame): Use result from
authorMark Kettenis <kettenis@gnu.org>
Wed, 19 Nov 2003 17:35:46 +0000 (17:35 +0000)
committerMark Kettenis <kettenis@gnu.org>
Wed, 19 Nov 2003 17:35:46 +0000 (17:35 +0000)
get_frame_address_in_block instead of get_frame_pc as argument to
inside_main_func.  Fixes PR backtrace/1435.

gdb/ChangeLog
gdb/frame.c

index 58001db..067abd9 100644 (file)
@@ -1,3 +1,9 @@
+2003-11-19  Mark Kettenis  <kettenis@gnu.org>
+
+       * frame.c (get_prev_frame): Use result from
+       get_frame_address_in_block instead of get_frame_pc as argument to
+       inside_main_func.  Fixes PR backtrace/1435.
+
 2003-11-19  Andrew Cagney  <cagney@redhat.com>
 
        * stack.c (return_command): Handle "void", "legacy" and "unknown
index a405a6b..bedbae4 100644 (file)
@@ -1790,9 +1790,13 @@ get_prev_frame (struct frame_info *this_frame)
      get_current_frame().  */
   gdb_assert (this_frame != NULL);
 
+  /* Make sure we pass an address within THIS_FRAME's code block to
+     inside_main_func.  Otherwise, we might stop unwinding at a
+     function which has a call instruction as its last instruction if
+     that function immediately precedes main().  */
   if (this_frame->level >= 0
       && !backtrace_past_main
-      && inside_main_func (get_frame_pc (this_frame)))
+      && inside_main_func (get_frame_address_in_block (this_frame)))
     /* Don't unwind past main(), bug always unwind the sentinel frame.
        Note, this is done _before_ the frame has been marked as
        previously unwound.  That way if the user later decides to