Adjust ptrace interface to properly suport single threaded continue.
authorclaudio <claudio@openbsd.org>
Tue, 1 Oct 2024 08:28:34 +0000 (08:28 +0000)
committerclaudio <claudio@openbsd.org>
Tue, 1 Oct 2024 08:28:34 +0000 (08:28 +0000)
commit67526adf6fb7ac2e85efea943bd9c67badb42b18
treea57561cbaa2021372b68223eae18027077350972
parentd1cbf82e13469de3d1070a8404a440b8b01e8ae3
Adjust ptrace interface to properly suport single threaded continue.

Introduce P_TRACESINGLE flag to instruct the trapped thread to not
wakeup the other threads (via single_thread_clear). This must be done
like this since ptrace must wake just the single thread to ensure it
runs first and gets the ps_xsig value from ptrace.

Modern gdb depends on this for multi-threaded processes, when a breakpoint
is hit gdb fixes up the trapping instruction and then single steps over
it with only that thread. After that single step gdb continues with all
threads. If all threads are run like now it is possible that one of the
other threads hits a breakpoint before the single step is done which results
in an assertion in gdb (because that is not expected).
OK mpi@
sys/kern/kern_sig.c
sys/kern/sys_process.c
sys/sys/proc.h