diff options
author | Joel Brobecker <brobecker@gnat.com> | 2013-01-07 11:39:00 +0000 |
---|---|---|
committer | Joel Brobecker <brobecker@gnat.com> | 2013-01-07 11:39:00 +0000 |
commit | 3f6e77ef16e580abf959d28f5a090a79160937aa (patch) | |
tree | 6a90f0ecc7bc1edeed4b2154a706eb4411cd1721 /gdb/gdbserver/lynx-low.c | |
parent | 7fda33ae8d596863ddfbf1521934bb23675c9390 (diff) | |
download | gdb-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.c | 11 |
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; } } |