From bdc36728eee582853ca53bb8b6012e8cc3b90eb7 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Thu, 27 Mar 2014 18:43:59 +0000 Subject: [PATCH] infrun.c: simplify "end stepping range" code a bit. - all end_stepping_range callers also set stop_step. - all places that set stop_step call end_stepping_range and stop_waiting too. IOW, all places where we handle "end stepping range" do: ecs->event_thread->control.stop_step = 1; end_stepping_range (); stop_waiting (ecs); Factor that out into end_stepping_range itself. Tested on x86_64 Fedora 20. gdb/ 2014-05-29 Pedro Alves * infrun.c (process_event_stop_test, handle_step_into_function) (handle_step_into_function_backward): Adjust. Don't set the even thread's stop_step and call stop_waiting before calling end_stepping_range. Instead do that ... (end_stepping_range): ... here. Take an ecs pointer parameter. --- gdb/ChangeLog | 8 ++++++ gdb/infrun.c | 72 ++++++++++++++------------------------------------- 2 files changed, 27 insertions(+), 53 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 847939b75f9..156b957b3c1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2014-05-29 Pedro Alves + + * infrun.c (process_event_stop_test, handle_step_into_function) + (handle_step_into_function_backward): Adjust. + Don't set the even thread's stop_step and call stop_waiting before + calling end_stepping_range. Instead do that ... + (end_stepping_range): ... here. Take an ecs pointer parameter. + 2014-05-29 Pedro Alves * infrun.c (stop_stepping): Rename to ... diff --git a/gdb/infrun.c b/gdb/infrun.c index a3f9a15d26e..fb0bd54f264 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -88,8 +88,6 @@ static int currently_stepping (struct thread_info *tp); static void xdb_handle_command (char *args, int from_tty); -static void end_stepping_range (void); - void _initialize_infrun (void); void nullify_last_target_wait_ptid (void); @@ -2500,6 +2498,7 @@ static void handle_signal_stop (struct execution_control_state *ecs); static void check_exception_resume (struct execution_control_state *, struct frame_info *); +static void end_stepping_range (struct execution_control_state *ecs); static void stop_waiting (struct execution_control_state *ecs); static void prepare_to_wait (struct execution_control_state *ecs); static void keep_going (struct execution_control_state *ecs); @@ -4462,9 +4461,7 @@ process_event_stop_test (struct execution_control_state *ecs) exists. */ delete_step_resume_breakpoint (ecs->event_thread); - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); } return; @@ -4626,11 +4623,7 @@ process_event_stop_test (struct execution_control_state *ecs) if (stop_pc == ecs->event_thread->control.step_range_start && stop_pc != ecs->stop_func_start && execution_direction == EXEC_REVERSE) - { - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); - } + end_stepping_range (ecs); else keep_going (ecs); @@ -4781,9 +4774,7 @@ process_event_stop_test (struct execution_control_state *ecs) thought it was a subroutine call but it was not. Stop as well. FENN */ /* And this works the same backward as frontward. MVS */ - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); return; } @@ -4897,9 +4888,7 @@ process_event_stop_test (struct execution_control_state *ecs) if (ecs->event_thread->control.step_over_calls == STEP_OVER_UNDEBUGGABLE && step_stop_if_no_debug) { - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); return; } @@ -4993,9 +4982,7 @@ process_event_stop_test (struct execution_control_state *ecs) /* If we have no line number and the step-stop-if-no-debug is set, we stop the step so that the user has a chance to switch in assembly mode. */ - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); return; } else @@ -5014,9 +5001,7 @@ process_event_stop_test (struct execution_control_state *ecs) one instruction. */ if (debug_infrun) fprintf_unfiltered (gdb_stdlog, "infrun: stepi/nexti\n"); - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); return; } @@ -5028,9 +5013,7 @@ process_event_stop_test (struct execution_control_state *ecs) or can this happen as a result of a return or longjmp?). */ if (debug_infrun) fprintf_unfiltered (gdb_stdlog, "infrun: no line number info\n"); - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); return; } @@ -5061,9 +5044,7 @@ process_event_stop_test (struct execution_control_state *ecs) && call_sal.symtab == ecs->event_thread->current_symtab) step_into_inline_frame (ecs->ptid); - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); return; } else @@ -5075,11 +5056,7 @@ process_event_stop_test (struct execution_control_state *ecs) && call_sal.symtab == ecs->event_thread->current_symtab) keep_going (ecs); else - { - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); - } + end_stepping_range (ecs); return; } } @@ -5102,11 +5079,7 @@ process_event_stop_test (struct execution_control_state *ecs) if (ecs->event_thread->control.step_over_calls == STEP_OVER_ALL) keep_going (ecs); else - { - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); - } + end_stepping_range (ecs); return; } @@ -5121,9 +5094,7 @@ process_event_stop_test (struct execution_control_state *ecs) if (debug_infrun) fprintf_unfiltered (gdb_stdlog, "infrun: stepped to a different line\n"); - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); return; } @@ -5447,9 +5418,7 @@ handle_step_into_function (struct gdbarch *gdbarch, if (ecs->stop_func_start == stop_pc) { /* We are already there: stop now. */ - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); return; } else @@ -5496,9 +5465,7 @@ handle_step_into_function_backward (struct gdbarch *gdbarch, if (stop_func_sal.pc == stop_pc) { /* We're there already. Just stop stepping now. */ - ecs->event_thread->control.stop_step = 1; - end_stepping_range (); - stop_waiting (ecs); + end_stepping_range (ecs); } else { @@ -5902,13 +5869,12 @@ prepare_to_wait (struct execution_control_state *ecs) if not in the middle of doing a "step N" operation for N > 1. */ static void -end_stepping_range (void) +end_stepping_range (struct execution_control_state *ecs) { - if (inferior_thread ()->step_multi - && inferior_thread ()->control.stop_step) - return; - - observer_notify_end_stepping_range (); + ecs->event_thread->control.stop_step = 1; + if (!ecs->event_thread->step_multi) + observer_notify_end_stepping_range (); + stop_waiting (ecs); } /* Several print_*_reason functions to print why the inferior has stopped. -- 2.30.2