This is the mail archive of the
rda@sourceware.org
mailing list for the rda project.
[commit] Don't allow more than one LWP to have `do_step' flag setat a time
- From: Kevin Buettner <kevinb at redhat dot com>
- To: rda at sources dot redhat dot com
- Date: Fri, 11 Nov 2005 13:47:40 -0700
- Subject: [commit] Don't allow more than one LWP to have `do_step' flag setat a time
- Organization: Red Hat
I've just committed the patch below. As indicated by the comment, the
software singlestep code internal to RDA does not expect to step more
than one thread at a time. (It's rather naive about how it saves the
singlestep breakpoints.) I considered making it more robust, it seems
to me that GDB only expects one thread to be singlestepped at a time.
At the present time, I don't think there's any functionality to be gained
by allowing more than one thread to singlestep simultaneously.
* lwp-pool.c (clear_all_do_step_flags): New function.
(lwp_pool_singlestep_lwp): Use it.
Index: lwp-pool.c
===================================================================
RCS file: /cvs/src/src/rda/unix/lwp-pool.c,v
retrieving revision 1.5
diff -u -p -r1.5 lwp-pool.c
--- lwp-pool.c 10 Nov 2005 21:32:15 -0000 1.5
+++ lwp-pool.c 11 Nov 2005 20:26:23 -0000
@@ -1395,6 +1395,23 @@ lwp_pool_continue_lwp (struct gdbserv *s
}
+/* Clear the `do_step' flags for all LWPs in the hash table. */
+
+static void
+clear_all_do_step_flags (void)
+{
+ int i;
+
+ for (i = 0; i < hash_size; i++)
+ {
+ struct lwp *l = hash[i];
+
+ if (l)
+ l->do_step = 0;
+ }
+}
+
+
int
lwp_pool_singlestep_lwp (struct gdbserv *serv, pid_t lwp, int signal)
{
@@ -1406,6 +1423,12 @@ lwp_pool_singlestep_lwp (struct gdbserv
fprintf (stderr, "lwp_pool_singlestep_lwp (%p, %d, %d)\n",
serv, (int) lwp, signal);
+ /* Neither GDB nor the software singlestep code contained in RDA
+ expect more than one LWP to be stepped simultaneously. Clear the
+ `do_step' flag in all LWPs. The flag for the LWP that we're about
+ to step will be set later on. */
+ clear_all_do_step_flags ();
+
switch (l->state)
{
case lwp_state_uninitialized: