Additionally, machine-specific requests can exist. On i386 systems where
the kernel has been configured with "options BRANCH_SINGLE_STEP", these
include
PT_SINGLE_STEP_ON_BRANCHES, PT_SINGLE_STEP_ON_INSTRUCTIONS
These two requests set the semantics of the TF (single
step) flag in the EFLAGS register and thus change the be-
haviour of the PT_STEP request. The default behaviour is
to single step on instructions.
The PT_SINGLE_STEP_ON_BRANCHES request changes that behav-
iour to "single step on branches", i.e. a PT_STEP request
will continue execution of the ptraced program until it
executes a branch instruction (e.g. JMP, JCC, CALL, RET,
etc.) or generates an interrupt or exception.
The PT_SINGLE_STEP_ON_INSTRUCTIONS restores the default be-
haviour.
PT_GETLASTBRANCHFROMIP, PT_GETLASTBRANCHTOIP
When single-stepping on branches, these requests will
return the address of the last branch instruction taken and
the address of the target of that branch.
PT_GETLASTEXCEPTIONFROMIP, PT_GETLASTEXCEPTIONTOIP
When single-stepping on branches, these requests will
return the address of the instruction that was interrupted
by the last exception or interrupt (except for debug excep-
tions) and the address of the exception or interrupt han-
dler that was called to service the exception or interrupt.