+2020-12-04 Simon Marchi <simon.marchi@efficios.com>
+
+ * gdbthread.h (thread_step_over_chain_enqueue): Rename to...
+ (global_thread_step_over_chain_enqueue): ... this. Update all
+ users.
+ (thread_step_over_chain_remove): Rename to...
+ (global_thread_step_over_chain_remove): ... this. Update all
+ users.
+ (thread_step_over_chain_next): Rename to...
+ (global_thread_step_over_chain_next): ... this. Update all
+ users.
+ * infrun.h (step_over_queue_head): Rename to...
+ (global_thread_step_over_chain_head): ... this. Update all
+ users.
+ * infrun.c (step_over_queue_head): Rename to...
+ (global_thread_step_over_chain_head): ... this. Update all
+ users.
+ * thread.c (step_over_chain_remove): Rename to...
+ (thread_step_over_chain_remove): ... this. Update all users.
+ (thread_step_over_chain_next): Rename to...
+ (global_thread_step_over_chain_next): ... this. Update all
+ users.
+ (thread_step_over_chain_enqueue): Rename to...
+ (global_thread_step_over_chain_enqueue): ... this. Update all
+ users.
+ (thread_step_over_chain_remove): Rename to...
+ (global_thread_step_over_chain_remove): ... this. Update all
+ users.
+
2020-12-04 Simon Marchi <simon.marchi@polymtl.ca>
* infrun.c (get_displaced_stepping_state): Remove, change
extern bool value_in_thread_stack_temporaries (struct value *,
struct thread_info *thr);
-/* Add TP to the end of its inferior's pending step-over chain. */
+/* Add TP to the end of the global pending step-over chain. */
-extern void thread_step_over_chain_enqueue (struct thread_info *tp);
+extern void global_thread_step_over_chain_enqueue (thread_info *tp);
-/* Remove TP from its inferior's pending step-over chain. */
+/* Remove TP from the global pending step-over chain. */
-extern void thread_step_over_chain_remove (struct thread_info *tp);
+extern void global_thread_step_over_chain_remove (thread_info *tp);
-/* Return the next thread in the step-over chain starting at TP. NULL
- if TP is the last entry in the chain. */
+/* Return the thread following TP in the global step-over chain, or NULL if TP
+ is the last entry in the chain. */
-extern struct thread_info *thread_step_over_chain_next (struct thread_info *tp);
+extern thread_info *global_thread_step_over_chain_next (thread_info *tp);
-/* Return true if TP is in the step-over chain. */
+/* Return true if TP is in any step-over chain. */
extern int thread_is_in_step_over_chain (struct thread_info *tp);
matically get reset there in the new process.). */
}
-/* The queue of threads that need to do a step-over operation to get
+/* The chain of threads that need to do a step-over operation to get
past e.g., a breakpoint. What technique is used to step over the
breakpoint/watchpoint does not matter -- all threads end up in the
same queue, to maintain rough temporal order of execution, in order
to avoid starvation, otherwise, we could e.g., find ourselves
constantly stepping the same couple threads past their breakpoints
over and over, if the single-step finish fast enough. */
-struct thread_info *step_over_queue_head;
+struct thread_info *global_thread_step_over_chain_head;
/* Bit flags indicating what the thread needs to step over. */
displaced_debug_printf ("deferring step of %s",
target_pid_to_str (tp->ptid).c_str ());
- thread_step_over_chain_enqueue (tp);
+ global_thread_step_over_chain_enqueue (tp);
return 0;
}
else
if (step_over_info_valid_p ())
return false;
- for (tp = step_over_queue_head; tp != NULL; tp = next)
+ for (tp = global_thread_step_over_chain_head; tp != NULL; tp = next)
{
struct execution_control_state ecss;
struct execution_control_state *ecs = &ecss;
gdb_assert (!tp->stop_requested);
- next = thread_step_over_chain_next (tp);
+ next = global_thread_step_over_chain_next (tp);
/* If this inferior already has a displaced step in process,
don't start a new one. */
if (must_be_in_line && displaced_step_in_progress_any_inferior ())
return false;
- thread_step_over_chain_remove (tp);
+ global_thread_step_over_chain_remove (tp);
- if (step_over_queue_head == NULL)
+ if (global_thread_step_over_chain_head == NULL)
infrun_debug_printf ("step-over queue now empty");
if (tp->control.trap_expected
infrun_debug_printf ("need to step-over [%s] first",
target_pid_to_str (tp->ptid).c_str ());
- thread_step_over_chain_enqueue (tp);
+ global_thread_step_over_chain_enqueue (tp);
}
switch_to_thread (cur_thr);
/* Enqueue the current thread last, so that we move all other
threads over their breakpoints first. */
if (cur_thr->stepping_over_breakpoint)
- thread_step_over_chain_enqueue (cur_thr);
+ global_thread_step_over_chain_enqueue (cur_thr);
/* If the thread isn't started, we'll still need to set its prev_pc,
so that switch_back_to_stepped_thread knows the thread hasn't
start_step_over doesn't try to resume them
automatically. */
if (thread_is_in_step_over_chain (tp))
- thread_step_over_chain_remove (tp);
+ global_thread_step_over_chain_remove (tp);
/* If the thread is stopped, but the user/frontend doesn't
know about that yet, queue a pending event, as if the
target_pid_to_str (t->ptid).c_str ());
t->control.trap_expected = 0;
- thread_step_over_chain_enqueue (t);
+ global_thread_step_over_chain_enqueue (t);
}
}
else
{
/* Add it back to the step-over queue. */
t->control.trap_expected = 0;
- thread_step_over_chain_enqueue (t);
+ global_thread_step_over_chain_enqueue (t);
}
regcache = get_thread_regcache (t);
infrun_debug_printf ("step-over already in progress: "
"step-over for %s deferred",
target_pid_to_str (tp->ptid).c_str ());
- thread_step_over_chain_enqueue (tp);
+ global_thread_step_over_chain_enqueue (tp);
}
else
{
loop. */
extern void mark_infrun_async_event_handler (void);
-/* The global queue of threads that need to do a step-over operation
+/* The global chain of threads that need to do a step-over operation
to get past e.g., a breakpoint. */
-extern struct thread_info *step_over_queue_head;
+extern struct thread_info *global_thread_step_over_chain_head;
/* Remove breakpoints if possible (usually that means, if everything
is stopped). On failure, print a message. */
static void
set_thread_exited (thread_info *tp, bool silent)
{
- /* Dead threads don't need to step-over. Remove from queue. */
+ /* Dead threads don't need to step-over. Remove from chain. */
if (tp->step_over_next != NULL)
- thread_step_over_chain_remove (tp);
+ global_thread_step_over_chain_remove (tp);
if (tp->state != THREAD_EXITED)
{
/* Remove TP from step-over chain LIST_P. */
static void
-step_over_chain_remove (struct thread_info **list_p, struct thread_info *tp)
+thread_step_over_chain_remove (struct thread_info **list_p, struct thread_info *tp)
{
gdb_assert (tp->step_over_next != NULL);
gdb_assert (tp->step_over_prev != NULL);
/* See gdbthread.h. */
struct thread_info *
-thread_step_over_chain_next (struct thread_info *tp)
+global_thread_step_over_chain_next (struct thread_info *tp)
{
struct thread_info *next = tp->step_over_next;
- return (next == step_over_queue_head ? NULL : next);
+ return (next == global_thread_step_over_chain_head ? NULL : next);
}
/* See gdbthread.h. */
/* See gdbthread.h. */
void
-thread_step_over_chain_enqueue (struct thread_info *tp)
+global_thread_step_over_chain_enqueue (struct thread_info *tp)
{
- step_over_chain_enqueue (&step_over_queue_head, tp);
+ step_over_chain_enqueue (&global_thread_step_over_chain_head, tp);
}
/* See gdbthread.h. */
void
-thread_step_over_chain_remove (struct thread_info *tp)
+global_thread_step_over_chain_remove (struct thread_info *tp)
{
- step_over_chain_remove (&step_over_queue_head, tp);
+ thread_step_over_chain_remove (&global_thread_step_over_chain_head, tp);
}
/* Delete the thread referenced by THR. If SILENT, don't notify
the step-over queue, so that we don't try to resume
it until the user wants it to. */
if (tp->step_over_next != NULL)
- thread_step_over_chain_remove (tp);
+ global_thread_step_over_chain_remove (tp);
}
return started;