Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigaltstack(2) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getcontext(2)

sigaction(2)

sigsetjmp(3C)

ucontext(5)



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



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026