aboutsummaryrefslogtreecommitdiff
path: root/gdb/infrun.c
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2006-08-19 03:19:00 +0000
committerDaniel Jacobowitz <drow@false.org>2006-08-19 03:19:00 +0000
commitc17eaafea78b9fef73ab2ec654812c8a1f31987a (patch)
treedfab5537984180deca334a2eeda267210e8c3128 /gdb/infrun.c
parent12284abaa4dc2bd0fb0db287103617f2ba2366ac (diff)
downloadgdb-c17eaafea78b9fef73ab2ec654812c8a1f31987a.zip
gdb-c17eaafea78b9fef73ab2ec654812c8a1f31987a.tar.gz
gdb-c17eaafea78b9fef73ab2ec654812c8a1f31987a.tar.bz2
* infrun.c (handle_inferior_event): Check the current frame ID
before unwinding to the previous frame.
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r--gdb/infrun.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gdb/infrun.c b/gdb/infrun.c
index de97636..1c31a84 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -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;