sigaltstack() allows users to define an alternative stack on which signals are to be processed. If
ss is non-zero, it specifies a pointer to and the size of a
signal stack on which to deliver signals, and tells the system if the process is currently executing on that stack. When a signal's action indicates its handler should execute on the signal stack (specified with a
sigaction(2) call), the system checks to see if the process is currently executing on that stack. If the process is not currently executing on the signal stack, the system arranges a switch to the signal stack for the duration of the signal handler's execution.
If
SS_DISABLE is set in
ss_flags,
ss_sp and
ss_size are ignored and the signal stack will be disabled. Trying to disable an active stack will cause
sigaltstack to return -1 with
errno set to
EINVAL. A disabled stack will cause all signals to be taken on the regular user stack. If the stack is later re-enabled then all signals that were specified to be processed on an alternative stack will resume doing so.
If
oss is non-zero, the current signal stack state is returned. The
ss_flags field will contain the value
SS_ONSTACK if the process is currently on a signal stack and
SS_DISABLE if the signal stack is currently disabled.