ptrace.2: Document the behavior of PTRACE_SYSEMU stops

Signed-off-by: Keno Fischer <keno@juliacomputing.com>
This commit is contained in:
Keno Fischer 2016-11-16 00:51:59 -05:00 committed by Michael Kerrisk
parent 2b44a16879
commit 131bcd7aaa
1 changed files with 24 additions and 8 deletions

View File

@ -737,7 +737,7 @@ is ignored.)
For For
.BR PTRACE_SYSEMU , .BR PTRACE_SYSEMU ,
continue and stop on entry to the next system call, continue and stop on entry to the next system call,
which will not be executed. which will not be executed. See the documentation on syscall-stops below.
For For
.BR PTRACE_SYSEMU_SINGLESTEP , .BR PTRACE_SYSEMU_SINGLESTEP ,
do the same but also singlestep if not a system call. do the same but also singlestep if not a system call.
@ -1568,18 +1568,35 @@ set to
.IR "(event<<8)\ |\ SIGTRAP" . .IR "(event<<8)\ |\ SIGTRAP" .
.SS Syscall-stops .SS Syscall-stops
If the tracee was restarted by If the tracee was restarted by
.BR PTRACE_SYSCALL , .BR PTRACE_SYSCALL
or
.BR PTRACE_SYSEMU ,
the tracee enters the tracee enters
syscall-enter-stop just prior to entering any system call. syscall-enter-stop just prior to entering any system call (which
If the tracer restarts the tracee with will not be executed if the restart was using
.BR PTRACE_SYSEMU,
regardless of any change made to registers at this point or how the
tracee is restarted after this stop).
No matter which method caused the syscall-entry-stop,
if the tracer restarts the tracee with
.BR PTRACE_SYSCALL , .BR PTRACE_SYSCALL ,
the tracee enters syscall-exit-stop when the system call is finished, the tracee enters syscall-exit-stop when the system call is finished,
or if it is interrupted by a signal. or if it is interrupted by a signal.
(That is, signal-delivery-stop never happens between syscall-enter-stop (That is, signal-delivery-stop never happens between syscall-enter-stop
and syscall-exit-stop; it happens and syscall-exit-stop; it happens
.I after .I after
syscall-exit-stop.) syscall-exit-stop.). If the tracee is continued using any other method
(
including
.BR PTRACE_SYSEMU
), no syscall-exit-stop occurs. Note that all mentions
.BR PTRACE_SYSEMU
apply equally to
.BR PTRACE_SYSEMU_SINGLESTEP.
.LP .LP
However, even if the tracee is was continued using
.BR PTRACE_SYSCALL
, it is not guaranteed that the next stop will be a syscall-exit-stop.
Other possibilities are that the tracee may stop in a Other possibilities are that the tracee may stop in a
.B PTRACE_EVENT .B PTRACE_EVENT
stop, exit (if it entered stop, exit (if it entered
@ -1695,12 +1712,11 @@ set to
.B SIGTRAP .B SIGTRAP
or or
.IR (SIGTRAP|0x80) . .IR (SIGTRAP|0x80) .
.SS PTRACE_SINGLESTEP, PTRACE_SYSEMU, PTRACE_SYSEMU_SINGLESTEP stops .SS PTRACE_SINGLESTEP stops
[Details of these kinds of stops are yet to be documented.] [Details of these kinds of stops are yet to be documented.]
.\" .\"
.\" FIXME . .\" FIXME .
.\" document stops occurring with PTRACE_SINGLESTEP, PTRACE_SYSEMU, .\" document stops occurring with PTRACE_SINGLESTEP
.\" PTRACE_SYSEMU_SINGLESTEP
.SS Informational and restarting ptrace commands .SS Informational and restarting ptrace commands
Most ptrace commands (all except Most ptrace commands (all except
.BR PTRACE_ATTACH , .BR PTRACE_ATTACH ,