aboutsummaryrefslogtreecommitdiff
path: root/gdb/infrun.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/infrun.c')
-rw-r--r--gdb/infrun.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 08c39eb..6ba336d 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -7312,6 +7312,11 @@ process_event_stop_test (struct execution_control_state *ecs)
frame = get_current_frame ();
gdbarch = get_frame_arch (frame);
+ /* Shorthand to make if statements smaller. */
+ struct frame_id original_frame_id
+ = ecs->event_thread->control.step_frame_id;
+ struct frame_id curr_frame_id = get_frame_id (get_current_frame ());
+
switch (what.main_action)
{
case BPSTAT_WHAT_SET_LONGJMP_RESUME:
@@ -8124,6 +8129,19 @@ process_event_stop_test (struct execution_control_state *ecs)
"it's not the start of a statement");
}
}
+ else if (execution_direction == EXEC_REVERSE
+ && curr_frame_id != original_frame_id
+ && original_frame_id.code_addr_p && curr_frame_id.code_addr_p
+ && original_frame_id.code_addr == curr_frame_id.code_addr)
+ {
+ /* If we enter here, we're leaving a recursive function call. In this
+ situation, we shouldn't refresh the step information, because if we
+ do, we'll lose the frame_id of when we started stepping, and this
+ will make GDB not know we need to print frame information. */
+ refresh_step_info = false;
+ infrun_debug_printf ("reverse stepping, left a recursive call, don't "
+ "update step info so we remember we left a frame");
+ }
/* We aren't done stepping.