sigaltstack(2) sigaltstack(2)
NAME
sigaltstack - set or get signal alternate stack context
SYNOPSIS
#include <signal.h>
int sigaltstack(const stackt *ss, stackt *oss);
DESCRIPTION
sigaltstack() is used to define an alternate stack area on which sig-
nals are to be processed. If ss is non-zero, it specifies a pointer to
a stack area 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 alternate 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 alternate signal stack for the duration of the signal handler's
execution.
The structure sigaltstack includes the following members.
char *sssp
int 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 disabled.
Page 1 Reliant UNIX 5.44 Printed 11/98
sigaltstack(2) sigaltstack(2)
The value SIGSTKSZ is a system default specifying the number of bytes
that would be used to cover the usual case when manually allocating an
alternate stack area. The value MINSIGSTKSZ is defined to be the
minimum stack size for a signal handler. In computing an alternate
stack size, a program should add that amount to its stack requirements
to allow for the system implementation overhead. The constants
SSONSTACK, SSDISABLE, SIGSTKSZ, and MINSIGSTKSZ are defined in
signal(5).
After a successful call to one of the exec functions, there are no
alternate signal stacks in the new process image.
ERRORS
The following error code descriptions are function-specific. You will
find a general description in introprm2(2) or in errno(5).
sigaltstack() fails if any of the following are true:
EFAULT ss or oss points outside the process' allocated address
space.
EINVAL The ss argument is not a null pointer, and the ssflags
member pointed to by ss contains flags other than
SSDISABLE.
ENOMEM The size of the alternate stack area is less than
MINSIGSTKSZ.
EPERM An attempt was made to modify an active stack.
NOTES
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");
RESULT
On success, sigaltstack() returns 0. On failure, it returns -1 and
sets errno to indicate the error.
SEE ALSO
getcontext(2), sigaction(2), sigsetjmp(3C), signal(5), ucontext(5).
Page 2 Reliant UNIX 5.44 Printed 11/98