* strace.c (maybe_allocate_tcb) <WIFSTOPPED(status) && !followfork>:
The expected ptrace stop signal in case of !use seize is not
syscall_trap_sig but SIGSTOP. An idea of using PTRACE_GETSIGINFO to
distinguish signal stops that should be re-injected from other kinds
of stops didn't work out due to kernel implementation peculiarities
of initial ptrace-stop.
* This can happen if a clone call misused CLONE_PTRACE itself.
*/
unsigned int sig = WSTOPSIG(status);
- unsigned int event = (unsigned int) status >> 16;
- if (event == PTRACE_EVENT_STOP || sig == syscall_trap_sig)
- sig = 0;
+ if (use_seize) {
+ unsigned int event = (unsigned int) status >> 16;
+ if (event == PTRACE_EVENT_STOP)
+ sig = 0;
+ } else {
+ if (sig == SIGSTOP)
+ sig = 0;
+ }
ptrace(PTRACE_DETACH, pid, NULL, (unsigned long) sig);
error_msg("Detached unknown pid %d%s%s", pid,