Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getcontext(2)

sigaction(2)

sigsetjmp(3C)

signal(5)

ucontext(5)

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

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