mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
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:
@ -1595,32 +1595,22 @@ resume_set_callback (struct lwp_info *lp)
|
||||
}
|
||||
|
||||
void
|
||||
linux_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
|
||||
linux_nat_target::resume (ptid_t scope_ptid, int step, enum gdb_signal signo)
|
||||
{
|
||||
struct lwp_info *lp;
|
||||
int resume_many;
|
||||
|
||||
linux_nat_debug_printf ("Preparing to %s %s, %s, inferior_ptid %s",
|
||||
step ? "step" : "resume",
|
||||
ptid.to_string ().c_str (),
|
||||
scope_ptid.to_string ().c_str (),
|
||||
(signo != GDB_SIGNAL_0
|
||||
? strsignal (gdb_signal_to_host (signo)) : "0"),
|
||||
inferior_ptid.to_string ().c_str ());
|
||||
|
||||
/* A specific PTID means `step only this process id'. */
|
||||
resume_many = (minus_one_ptid == ptid
|
||||
|| ptid.is_pid ());
|
||||
|
||||
/* Mark the lwps we're resuming as resumed and update their
|
||||
last_resume_kind to resume_continue. */
|
||||
iterate_over_lwps (ptid, resume_set_callback);
|
||||
iterate_over_lwps (scope_ptid, resume_set_callback);
|
||||
|
||||
/* See if it's the current inferior that should be handled
|
||||
specially. */
|
||||
if (resume_many)
|
||||
lp = find_lwp_pid (inferior_ptid);
|
||||
else
|
||||
lp = find_lwp_pid (ptid);
|
||||
lp = find_lwp_pid (inferior_ptid);
|
||||
gdb_assert (lp != NULL);
|
||||
|
||||
/* Remember if we're stepping. */
|
||||
@ -1669,11 +1659,12 @@ linux_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo)
|
||||
return;
|
||||
}
|
||||
|
||||
if (resume_many)
|
||||
iterate_over_lwps (ptid, [=] (struct lwp_info *info)
|
||||
{
|
||||
return linux_nat_resume_callback (info, lp);
|
||||
});
|
||||
/* No use iterating unless we're resuming other threads. */
|
||||
if (scope_ptid != lp->ptid)
|
||||
iterate_over_lwps (scope_ptid, [=] (struct lwp_info *info)
|
||||
{
|
||||
return linux_nat_resume_callback (info, lp);
|
||||
});
|
||||
|
||||
linux_nat_debug_printf ("%s %s, %s (resume event thread)",
|
||||
step ? "PTRACE_SINGLESTEP" : "PTRACE_CONT",
|
||||
|
Reference in New Issue
Block a user