From: John Baldwin Date: Mon, 14 Aug 2023 20:38:42 +0000 (-0700) Subject: fbsd-nat: Fix thread_alive against a running thread. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=57c28d45f9ad14130c8375b3b5ec6996b63574fd;p=binutils-gdb.git 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. --- diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c index d09f4b12bee..5f66a3053d5 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;