Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigaltstack(2) — DG/UX 5.4R3.00

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getcontext(2)

sigaction(2)

sigvec(2)

sigsetjmp(3C)

ucontext(5)



sigaltstack(2)                 DG/UX 5.4R3.00                 sigaltstack(2)


NAME
       sigaltstack - set or get signal alternate stack context

SYNOPSIS
       #include <signal.h>

       int sigaltstack(const stackt *ss, stackt *oss);

   where:
       ss     A structure specifying the new alternate signal stack
       oss    A structure specifying the old alternate signal stack

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 call to sigaction(2)
       or sigvec(2)], 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.

              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 disabled.





Licensed material--property of copyright holder(s)                         1




sigaltstack(2)                 DG/UX 5.4R3.00                 sigaltstack(2)


ACCESS CONTROL
       No access checking is performed.

RETURN VALUE
       On success, sigaltstack returns zero.  On failure, it returns -1 and
       sets errno to indicate the error.

DIAGNOSTICS
       EINVAL  ss is non-null and its ssflags field has one or more invalid
               flags.

       EPERM   An attempt was made to modify an active stack.

       ENOMEM  The size of the alternate stack area is less than
               MINSIGSTKSZ.

       EFAULT  Either ss or oss points to memory which is not a valid part
               of the process's address space.

SEE ALSO
       getcontext(2), sigaction(2), sigvec(2), sigsetjmp(3C), ucontext(5).

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 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");

















Licensed material--property of copyright holder(s)                         2


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