So, I've been poking around at our debugging support lately, and I
had remembered Nathan complaining about ptrace(2), specifically that
it pretty much sucks when it comes to multiple LWPs.
It seems to me that we could simply add a ptrace(2) request to "set
which LWP this request is for".
To clarify:
* Those ptrace(2) requests that would cause a single-threaded
program to stop, all LWPs should be stopped in the multi-LWP
case.
* Those ptrace(2) requests that would cause a single-threaded
program to continue running should cause all LWPs to continue
running in the multi-LWP case.
* {READ,WRITE}{I,D} operate on the address space, and are thus
global to the process anyway.
* PT_{GET,SET}*REGS are per-LWP, so we need to identify which
LWP we want.
So, we would add:
PT_GET_LWP <- report back which LWP is being operated on
PT_SET_LWP <- set which LWP to operate on
GDB could easily handle issuing the PT_{GET,SET}_LWP commands before
fetching/storing registers in the traced process.
--
-- Jason R. Thorpe <thorpej@wasabisystems.com>