Slightly tweak and clarify target_resume's interface
The current target_resume interface is a bit odd & non-intuitive. I've found myself explaining it a couple times the recent past, while reviewing patches that assumed STEP/SIGNAL always applied to the passed in PTID. It goes like this today: - if the passed in PTID is a thread, then the step/signal request is for that thread. - otherwise, if PTID is a wildcard (all threads or all threads of process), the step/signal request is for inferior_ptid, and PTID indicates which set of threads run free. Because GDB always switches the current thread to "leader" thread being resumed/stepped/signalled, we can simplify this a bit to: - step/signal are always for inferior_ptid. - PTID indicates the set of threads that run free. Still not ideal, but it's a minimal change and at least there are no special cases this way. That's what this patch does. It renames the PTID parameter to SCOPE_PTID, adds some assertions to target_resume, and tweaks target_resume's description. In addition, it also renames PTID to SCOPE_PTID in the remote and linux-nat targets, and simplifies their implementation a little bit. Other targets could do the same, but they don't have to. Change-Id: I02a2ec2ab3a3e9b191de1e9a84f55c17cab7daaf
This commit is contained in:
parent
8a2ef85186
commit
d51926f06a
4 changed files with 63 additions and 62 deletions
31
gdb/target.h
31
gdb/target.h
|
@ -1471,23 +1471,32 @@ extern void target_detach (inferior *inf, int from_tty);
|
|||
|
||||
extern void target_disconnect (const char *, int);
|
||||
|
||||
/* Resume execution (or prepare for execution) of a target thread,
|
||||
process or all processes. STEP says whether to hardware
|
||||
single-step or to run free; SIGGNAL is the signal to be given to
|
||||
the target, or GDB_SIGNAL_0 for no signal. The caller may not pass
|
||||
GDB_SIGNAL_DEFAULT. A specific PTID means `step/resume only this
|
||||
process id'. A wildcard PTID (all threads, or all threads of
|
||||
process) means `step/resume INFERIOR_PTID, and let other threads
|
||||
(for which the wildcard PTID matches) resume with their
|
||||
'thread->suspend.stop_signal' signal (usually GDB_SIGNAL_0) if it
|
||||
is in "pass" state, or with no signal if in "no pass" state.
|
||||
/* Resume execution (or prepare for execution) of the current thread
|
||||
(INFERIOR_PTID), while optionally letting other threads of the
|
||||
current process or all processes run free.
|
||||
|
||||
STEP says whether to hardware single-step the current thread or to
|
||||
let it run free; SIGNAL is the signal to be given to the current
|
||||
thread, or GDB_SIGNAL_0 for no signal. The caller may not pass
|
||||
GDB_SIGNAL_DEFAULT.
|
||||
|
||||
SCOPE_PTID indicates the resumption scope. I.e., which threads
|
||||
(other than the current) run free. If resuming a single thread,
|
||||
SCOPE_PTID is the same thread as the current thread. A wildcard
|
||||
SCOPE_PTID (all threads, or all threads of process) lets threads
|
||||
other than the current (for which the wildcard SCOPE_PTID matches)
|
||||
resume with their 'thread->suspend.stop_signal' signal (usually
|
||||
GDB_SIGNAL_0) if it is in "pass" state, or with no signal if in "no
|
||||
pass" state. Note neither STEP nor SIGNAL apply to any thread
|
||||
other than the current.
|
||||
|
||||
In order to efficiently handle batches of resumption requests,
|
||||
targets may implement this method such that it records the
|
||||
resumption request, but defers the actual resumption to the
|
||||
target_commit_resume method implementation. See
|
||||
target_commit_resume below. */
|
||||
extern void target_resume (ptid_t ptid, int step, enum gdb_signal signal);
|
||||
extern void target_resume (ptid_t scope_ptid,
|
||||
int step, enum gdb_signal signal);
|
||||
|
||||
/* Ensure that all resumed threads are committed to the target.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue