diff options
author | John Baldwin <jhb@FreeBSD.org> | 2023-08-14 13:38:42 -0700 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2023-08-14 13:38:42 -0700 |
commit | 57c28d45f9ad14130c8375b3b5ec6996b63574fd (patch) | |
tree | 05b0702888f882196e3f8bc58a837fdadb35e2e6 /gdb | |
parent | e1d94b3b5216e9ef8a32d229fc13f62a2f1818a6 (diff) | |
download | binutils-57c28d45f9ad14130c8375b3b5ec6996b63574fd.zip binutils-57c28d45f9ad14130c8375b3b5ec6996b63574fd.tar.gz binutils-57c28d45f9ad14130c8375b3b5ec6996b63574fd.tar.bz2 |
fbsd-nat: Fix thread_alive against a running thread.
FreeBSD's ptrace fails requests with EBUSY against a running process.
Report that the thread is alive instead of dead if ptrace fails with
EBUSY.
This fixes an internal error in the gdb.threads/detach-step-over.exp
test where one process was detached while a thread in a second process
was being stepped. The core incorrectly assumed the stepping thread
had vanished and discarded the pending stepping state. When the
thread later reported a SIGTRAP from completing the step, this
triggered an assertion.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/fbsd-nat.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c index d09f4b1..5f66a30 100644 --- a/gdb/fbsd-nat.c +++ b/gdb/fbsd-nat.c @@ -843,7 +843,13 @@ fbsd_nat_target::thread_alive (ptid_t ptid) if (ptrace (PT_LWPINFO, ptid.lwp (), (caddr_t) &pl, sizeof pl) == -1) - return false; + { + /* EBUSY means the associated process is running which means + the LWP does exist and belongs to a running process. */ + if (errno == EBUSY) + return true; + return false; + } #ifdef PL_FLAG_EXITED if (pl.pl_flags & PL_FLAG_EXITED) return false; |