fbsd-nat: Fix thread_alive against a running thread.
authorJohn Baldwin <jhb@FreeBSD.org>
Mon, 14 Aug 2023 20:38:42 +0000 (13:38 -0700)
committerJohn Baldwin <jhb@FreeBSD.org>
Mon, 14 Aug 2023 20:38:42 +0000 (13:38 -0700)
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.

gdb/fbsd-nat.c

index d09f4b12bee44e3dbaf2ca69d43ccf8f9de4d3a2..5f66a3053d5ccb684330610ec226d5d781c5c19b 100644 (file)
@@ -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;