sigstack(3C)




NAME

     sigstack - set and/or get alternate signal stack context


SYNOPSIS

     #include <signal.h>

     int sigstack(struct sigstack *ss, struct sigstack *oss);


DESCRIPTION

     The sigstack() function allows the calling process to  indi-
     cate  to  the system an area of its address space to be used
     for processing signals received by the process.

     If the ss argument is not a null pointer, it must point to a
     sigstack  structure.  The length of the application-supplied
     stack must be at least SIGSTKSZ bytes. If the alternate sig-
     nal  stack  overflows,  the resulting behavior is undefined.
     (See USAGE below.)

        o  The value of the ss_onstack member  indicates  whether
           the  process wants the system to use an alternate sig-
           nal stack when delivering signals.

        o  The value of the ss_sp member  indicates  the  desired
           location  of  the  alternate  signal stack area in the
           process' address space.

        o  If the ss argument is  a  null  pointer,  the  current
           alternate signal stack context is not changed.

     If the oss argument is not a null pointer, it  points  to  a
     sigstack  structure  in  which  the current alternate signal
     stack context is placed.  The value stored in the ss_onstack
     member  of  oss will be non-zero if the process is currently
     executing on the alternate signal stack.  If the  oss  argu-
     ment  is  a null pointer, the current alternate signal stack
     context is not returned.

     When a signal's action indicates its handler should  execute
     on  the  alternate signal stack (specified by calling sigac-
     tion(2)),  sigstack()  checks  to  see  if  the  process  is
     currently  executing  on  that stack.  If the process is not
     currently executing on the alternate signal stack, the  sys-
     tem  arranges a switch to the alternate signal stack for the
     duration of the signal handler's execution.

     After a successful call to one of the exec functions,  there
     are no alternate signal stacks in the new process image.


RETURN VALUES

     Upon successful completion, sigstack()  returns  0.   Other-
     wise, it returns -1 and sets errno to indicate the error.


ERRORS

     The sigstack() function will fail if:

     EPERM An attempt was made to modify an active stack.


USAGE

     A portable application, when  being  written  or  rewritten,
     should use sigaltstack(2) instead of sigstack().

     The direction of stack growth is not indicated in  the  his-
     torical definition of struct sigstack. The only way to port-
     ably establish a stack pointer is  for  the  application  to
     determine  stack growth direction, or to allocate a block of
     storage and set the stack pointer to the middle.  sigstack()
     may  assume that the size of the signal stack is SIGSTKSZ as
     found in <signal.h>.  An  application  that  would  like  to
     specify  a  signal stack size other than SIGSTKSZ should use
     sigaltstack(2).

     Applications should not use longjmp(3C) to  leave  a  signal
     handler  that  is  running  on a stack established with sig-
     stack(). Doing so may  disable  future  use  of  the  signal
     stack.    For   abnormal   exit   from   a  signal  handler,
     siglongjmp(3C), setcontext(2),  or  swapcontext(3C)  may  be
     used. These functions fully support switching from one stack
     to another.

     The sigstack() function requires  the  application  to  have
     knowledge  of  the  underlying  system's stack architecture.
     For this reason, sigaltstack(2)  is  recommended  over  this
     function.


SEE ALSO

     fork(2),     _longjmp(3C),     longjmp(3C),      setjmp(3C),
     sigaltstack(2), siglongjmp(3C), sigsetjmp(3C)


Man(1) output converted with man2html