diff options
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index d6c20f3..13a9635 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -4416,6 +4416,12 @@ append_resumption (char *p, char *endp, return p; } +static int +currently_stepping_callback (struct thread_info *tp, void *data) +{ + return currently_stepping (tp); +} + /* Resume the remote inferior by using a "vCont" packet. The thread to be resumed is PTID; STEP and SIGGNAL indicate whether the resumed thread should be single-stepped and/or signalled. If PTID @@ -4458,6 +4464,8 @@ remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal) } else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid)) { + struct thread_info *tp; + /* Resume all threads (of all processes, or of a single process), with preference for INFERIOR_PTID. This assumes inferior_ptid belongs to the set of all threads we are about @@ -4468,6 +4476,12 @@ remote_vcont_resume (ptid_t ptid, int step, enum target_signal siggnal) p = append_resumption (p, endp, inferior_ptid, step, siggnal); } + tp = iterate_over_threads (currently_stepping_callback, NULL); + if (tp && !ptid_equal (tp->ptid, inferior_ptid)) + { + p = append_resumption (p, endp, tp->ptid, 1, TARGET_SIGNAL_0); + } + /* And continue others without a signal. */ p = append_resumption (p, endp, ptid, /*step=*/ 0, TARGET_SIGNAL_0); } |