Make step_start_function be per thread
I noticed that step_start_function is still a global, while it obviously should be a per-thread field. gdb/ChangeLog: 2015-03-24 Pedro Alves <palves@redhat.com> * infrun.c (step_start_function): Delete and ... * gdbthread.h (struct thread_control_state) <step_start_function>: ... now a field here. * infrun.c (clear_proceed_status_thread): Clear the thread's step_start_function. (proceed, process_event_stop_test, print_stop_event): Adjust.
This commit is contained in:
parent
3333f03ae1
commit
885eeb5b8e
3 changed files with 17 additions and 7 deletions
|
@ -1,3 +1,12 @@
|
|||
2015-03-24 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* infrun.c (step_start_function): Delete and ...
|
||||
* gdbthread.h (struct thread_control_state) <step_start_function>:
|
||||
... now a field here.
|
||||
* infrun.c (clear_proceed_status_thread): Clear the thread's
|
||||
step_start_function.
|
||||
(proceed, process_event_stop_test, print_stop_event): Adjust.
|
||||
|
||||
2015-03-24 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* infrun.c (proceed): No longer handle negative step.
|
||||
|
|
|
@ -73,6 +73,9 @@ struct thread_control_state
|
|||
CORE_ADDR step_range_start; /* Inclusive */
|
||||
CORE_ADDR step_range_end; /* Exclusive */
|
||||
|
||||
/* Function the thread was in as of last it started stepping. */
|
||||
struct symbol *step_start_function;
|
||||
|
||||
/* If GDB issues a target step request, and this is nonzero, the
|
||||
target should single-step this thread once, and then continue
|
||||
single-stepping it without GDB core involvement as long as the
|
||||
|
|
12
gdb/infrun.c
12
gdb/infrun.c
|
@ -326,10 +326,6 @@ update_signals_program_target (void)
|
|||
|
||||
static struct cmd_list_element *stop_command;
|
||||
|
||||
/* Function inferior was in as of last step command. */
|
||||
|
||||
static struct symbol *step_start_function;
|
||||
|
||||
/* Nonzero if we want to give control to the user when we're notified
|
||||
of shared library events by the dynamic linker. */
|
||||
int stop_on_solib_events;
|
||||
|
@ -2409,6 +2405,7 @@ clear_proceed_status_thread (struct thread_info *tp)
|
|||
tp->control.step_frame_id = null_frame_id;
|
||||
tp->control.step_stack_frame_id = null_frame_id;
|
||||
tp->control.step_over_calls = STEP_OVER_UNDEBUGGABLE;
|
||||
tp->control.step_start_function = NULL;
|
||||
tp->stop_requested = 0;
|
||||
|
||||
tp->control.stop_step = 0;
|
||||
|
@ -2589,7 +2586,7 @@ proceed (CORE_ADDR addr, enum gdb_signal siggnal, int step)
|
|||
tp = inferior_thread ();
|
||||
|
||||
if (step)
|
||||
step_start_function = find_pc_function (pc);
|
||||
tp->control.step_start_function = find_pc_function (pc);
|
||||
|
||||
/* Fill in with reasonable starting values. */
|
||||
init_thread_stepping_state (tp);
|
||||
|
@ -5171,7 +5168,8 @@ process_event_stop_test (struct execution_control_state *ecs)
|
|||
ecs->event_thread->control.step_stack_frame_id)
|
||||
&& (!frame_id_eq (ecs->event_thread->control.step_stack_frame_id,
|
||||
outer_frame_id)
|
||||
|| step_start_function != find_pc_function (stop_pc))))
|
||||
|| (ecs->event_thread->control.step_start_function
|
||||
!= find_pc_function (stop_pc)))))
|
||||
{
|
||||
CORE_ADDR real_stop_pc;
|
||||
|
||||
|
@ -6444,7 +6442,7 @@ print_stop_event (struct target_waitstatus *ws)
|
|||
if (tp->control.stop_step
|
||||
&& frame_id_eq (tp->control.step_frame_id,
|
||||
get_frame_id (get_current_frame ()))
|
||||
&& step_start_function == find_pc_function (stop_pc))
|
||||
&& tp->control.step_start_function == find_pc_function (stop_pc))
|
||||
{
|
||||
/* Finished step, just print source line. */
|
||||
source_flag = SRC_LINE;
|
||||
|
|
Loading…
Reference in a new issue