aboutsummaryrefslogtreecommitdiff
path: root/gdb/remote.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2010-10-17 18:24:47 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2010-10-17 18:24:47 +0000
commit8aeb23f3648c6ef10c5715e30f04563d1cc28709 (patch)
tree09ebcca5a6758a48adbce553314e6b2fc71befe3 /gdb/remote.c
parentc1e56572463d2126e46eda8ce8d4bce221667f98 (diff)
downloadgdb-8aeb23f3648c6ef10c5715e30f04563d1cc28709.zip
gdb-8aeb23f3648c6ef10c5715e30f04563d1cc28709.tar.gz
gdb-8aeb23f3648c6ef10c5715e30f04563d1cc28709.tar.bz2
gdb/
* gdbthread.h (currently_stepping): New declaration. * infrun.c (currently_stepping): Remove the forward declaration. (currently_stepping): Make it global. * linux-nat.c (resume_callback) <lp->stopped && lp->status == 0>: New variables tp and step, initialized them. Pass STEP to to_resume. Print also possibly "PTRACE_SINGLESTEP" if STEP. Initialize LP->STEP. * remote.c (currently_stepping_callback): New. (remote_vcont_resume) <ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid)>: New variable tp. Call currently_stepping_callback and step such thread. gdb/testsuite/ * gdb.threads/sigstep-threads.exp: New file. * gdb.threads/sigstep-threads.c: New file.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r--gdb/remote.c14
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);
}