Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigaltstack(2) — IRIX 6.5.3f

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getcontext(2)

sigaction(2)

sigsetjmp(3C)

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 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 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 stackt 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.  The
     sssp field should be adjusted for the direction of growth (see example
     below).  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.  SSONSTACK
                   cannot be modified by users.

     SSDISABLE    The alternate signal stack is currently disabled.






                                                                        Page 1





sigaltstack(2)                                                  sigaltstack(2)



     sigaltstack fails if any of the following is true:

     EFAULT        Either ss or oss points outside the process's allocated
                   address space.

     EINVAL        If ss is non-null, and the ssflags field pointed to by ss
                   contains invalid flags.

     EPERM         If an attempt was made to modify an active stack.

     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 computing an alternate stack size, a program should
     add that amount to its stack requirements to allow for the operating
     system overhead.

     The stack grows downward from high to lower addresses.  The following
     code fragment is typically used to allocate an alternate stack.

          if ((sigstk.sssp = (char *)malloc(SIGSTKSZ)) == NULL)
               /* error return */;

          sigstk.sssp += SIGSTKSZ - 1;
               /* adjust sssp to point to base of stack */
          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.















                                                                        Page 2



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