* infrun.c (handle_inferior_event): Check the current frame ID
authorDaniel Jacobowitz <drow@false.org>
Sat, 19 Aug 2006 03:19:00 +0000 (03:19 +0000)
committerDaniel Jacobowitz <drow@false.org>
Sat, 19 Aug 2006 03:19:00 +0000 (03:19 +0000)
before unwinding to the previous frame.

gdb/ChangeLog
gdb/infrun.c

index 226077be874c5a4fda680a0b74d85b36e02769ff..908e7e48446506d5c723de77c4b359cc033301d6 100644 (file)
@@ -1,3 +1,8 @@
+2006-08-18  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * infrun.c (handle_inferior_event): Check the current frame ID
+       before unwinding to the previous frame.
+
 2006-08-18  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * dwarf2read.c (quirk_gcc_member_function_pointer): Add GCC PR
index de976367bf9f774f8ef447f15283858c4008678d..1c31a846bb4b6b15e03390a47723036ffd864a16 100644 (file)
@@ -2368,12 +2368,16 @@ process_event_stop_test:
       return;
     }
 
-  /* Check for subroutine calls.
+  /* Check for subroutine calls.  The check for the current frame
+     equalling the step ID is not necessary - the check of the
+     previous frame's ID is sufficient - but it is a common case and
+     cheaper than checking the previous frame's ID.
 
      NOTE: frame_id_eq will never report two invalid frame IDs as
      being equal, so to get into this block, both the current and
      previous frame must have valid frame IDs.  */
-  if (frame_id_eq (frame_unwind_id (get_current_frame ()), step_frame_id))
+  if (!frame_id_eq (get_frame_id (get_current_frame ()), step_frame_id)
+      && frame_id_eq (frame_unwind_id (get_current_frame ()), step_frame_id))
     {
       CORE_ADDR real_stop_pc;