aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2023-08-14 13:38:42 -0700
committerJohn Baldwin <jhb@FreeBSD.org>2023-08-14 13:38:42 -0700
commit57c28d45f9ad14130c8375b3b5ec6996b63574fd (patch)
tree05b0702888f882196e3f8bc58a837fdadb35e2e6 /gdb
parente1d94b3b5216e9ef8a32d229fc13f62a2f1818a6 (diff)
downloadbinutils-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.c8
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;