Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigaltstack(2) — Atari System V ue12

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





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

   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                                                                 7/91





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