sigaltstack(2) SYSTEM CALLS sigaltstack(2)
NAME
sigaltstack - set or get signal alternate stack context
SYNOPSIS
#include <signal.h> int sigaltstack(const stackt *ss,
stackt *oss);
DESCRIPTION
sigaltstack allows users to define an alternate stack area
on which signals are to be processed. If ss is non-zero, it
specifies a pointer to, and the size of a stack area on
which to deliver signals, and tells the system if the pro-
cess is currently executing on that stack. When a signal's
action indicates its handler should execute on the alternate
signal stack [specified with a sigaction(2) call], the sys-
tem 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 alter-
nate signal stack for the duration of the signal handler's
execution. The structure sigaltstack includes the following
members.
int *sssp
long sssize
int ssflags
If ss is not NULL, it points to a structure specifying the
alternate signal stack that will take effect upon return
from sigaltstack. The sssp and sssize fields specify the
new base and size of the stack, which is automatically
adjusted for direction of growth and alignment. The
ssflags field specifies the new stack state and may be set
to the following:
SSDISABLE The stack is to be disabled and sssp and
sssize are ignored. If SSDISABLE is not
set, the stack will be enabled.
If oss is not NULL, it points to a structure specifying the
alternate signal stack that was in effect prior to the call
to sigaltstack. The sssp and sssize fields specify the
base and size of that stack. The ssflags field specifies
the stack's state, and may contain the following values:
SSONSTACK The process is currently executing on the
alternate signal stack. Attempts to modify
the alternate signal stack while the process
is executing on it will fail.
SSDISABLE The alternate signal stack is currently dis-
abled.
sigaltstack fails if any of the following is true:
1
sigaltstack(2) SYSTEM CALLS sigaltstack(2)
EFAULT Either ss or oss points outside the process's
allocated address space.
EINVAL An attempt was made to disable an active stack
or the ssflags field specifies invalid flags.
ENOMEM The size of the alternate stack area is less
than MINSIGSTKSZ.
NOTES
The value SIGSTKSZ is defined to be the number of bytes that
would be used to cover the usual case when allocating an
alternate stack area. The value MINSIGSTKSZ is defined to
be the minimum stack size for a signal handler. In comput-
ing an alternate stack size, a program should add that
amount to its stack requirements to allow for the operating
system overhead.
The following code fragment is typically used to allocate an
alternate stack.
if ((sigstk.sssp = (char *)malloc(SIGSTKSZ)) == NULL)
/* error return */;
sigstk.sssize = SIGSTKSZ;
sigstk.ssflags = 0;
if (sigaltstack(&sigstk, (stackt *)0) < 0)
perror("sigaltstack");
SEE ALSO
getcontext(2), sigaction(2), sigsetjmp(3C), ucontext(5).
DIAGNOSTICS
On success, sigaltstack returns zero. On failure, it
returns -1 and sets errno to indicate the error.
2