SIGSTACK(2) System Calls Manual SIGSTACK(2)
sigstack - set and/or get signal stack context
int sigstack (ss, oss)
struct sigstack *ss, *oss;
sigstack() allows users to define an alternate stack, called the ``sig-
nal stack'', on which signals are to be processed. When a signal's
action indicates its handler should execute on the signal stack (speci-
fied with a sigvec(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 sig-
nal stack for the duration of the signal handler's execution.
A signal stack is specified by a sigstack() structure, which includes
the following members:
char *ss_sp; /* signal stack pointer */
int ss_onstack; /* current status */
ss_sp is the initial value to be assigned to the stack pointer when the
system switches the process to the signal stack. Note that, on
machines where the stack grows downwards in memory, this is not the
address of the beginning of the signal stack area. ss_onstack field is
zero or non-zero depending on whether the process is currently execut-
ing on the signal stack or not.
If ss is not a NULL pointer, sigstack() sets the signal stack state to
the value in the sigstack() structure pointed to by ss. Note: if
ss_onstack is non-zero, the system will think that the process is exe-
cuting on the signal stack. If ss is a NULL pointer, the signal stack
state will be unchanged. If oss is not a NULL pointer, the current
signal stack state is stored in the sigstack() structure pointed to by
0 on success.
-1 on failure and sets errno to indicate the error.
sigstack() will fail and the signal stack context will remain unchanged
if one of the following occurs.
EFAULT ss or oss points to memory that is not a valid part of
the process address space.
sigvec(2), setjmp(3V), signal(3V)
Signal stacks are not ``grown'' automatically, as is done for the nor-
mal stack. If the stack overflows unpredictable results may occur.
21 January 1990 SIGSTACK(2)