aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver/lynx-low.c
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2013-01-07 11:39:00 +0000
committerJoel Brobecker <brobecker@gnat.com>2013-01-07 11:39:00 +0000
commit3f6e77ef16e580abf959d28f5a090a79160937aa (patch)
tree6a90f0ecc7bc1edeed4b2154a706eb4411cd1721 /gdb/gdbserver/lynx-low.c
parent7fda33ae8d596863ddfbf1521934bb23675c9390 (diff)
downloadgdb-3f6e77ef16e580abf959d28f5a090a79160937aa.zip
gdb-3f6e77ef16e580abf959d28f5a090a79160937aa.tar.gz
gdb-3f6e77ef16e580abf959d28f5a090a79160937aa.tar.bz2
LynxOS: Resume the same thread when receiving a thread create/exit event.
Before this patch, the ptid passed to lynx_resume was completely ignored, and we used the current_inferior. This resulted in trying to resume the inferior execution using the wrong ptid after having received a thread create/exit event, because the inferior_ptid was still set to the ptid prior to receiving the signal. gdb/gdbserver/ChangeLog: * lynx-low.c (lynx_resume): Use the resume_info parameter to determine the ptid for the lynx_ptrace call, unless it is equal to minus_one_ptid, in which case we use the ptid of the current_inferior. (lynx_wait_1): After having received a thread create/exit event, resume the inferior's execution using the signaling thread's ptid, rather than the old ptid.
Diffstat (limited to 'gdb/gdbserver/lynx-low.c')
-rw-r--r--gdb/gdbserver/lynx-low.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gdb/gdbserver/lynx-low.c b/gdb/gdbserver/lynx-low.c
index 9aa0140..4aba379 100644
--- a/gdb/gdbserver/lynx-low.c
+++ b/gdb/gdbserver/lynx-low.c
@@ -349,14 +349,17 @@ lynx_attach (unsigned long pid)
static void
lynx_resume (struct thread_resume *resume_info, size_t n)
{
- ptid_t inferior_ptid = thread_to_gdb_id (current_inferior);
/* FIXME: Assume for now that n == 1. */
+ ptid_t ptid = resume_info[0].thread;
const int request = (resume_info[0].kind == resume_step
? PTRACE_SINGLESTEP : PTRACE_CONT);
const int signal = resume_info[0].sig;
+ if (ptid_equal (ptid, minus_one_ptid))
+ ptid = thread_to_gdb_id (current_inferior);
+
regcache_invalidate ();
- lynx_ptrace (request, inferior_ptid, 1, signal, 0);
+ lynx_ptrace (request, ptid, 1, signal, 0);
}
/* Resume the execution of the given PTID. */
@@ -497,12 +500,12 @@ retry:
case SIGNEWTHREAD:
/* We just added the new thread above. No need to do anything
further. Just resume the execution again. */
- lynx_continue (ptid);
+ lynx_continue (new_ptid);
goto retry;
case SIGTHREADEXIT:
remove_thread (find_thread_ptid (new_ptid));
- lynx_continue (ptid);
+ lynx_continue (new_ptid);
goto retry;
}
}