Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigstack(3) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

fork(2)

sigaltstack(2)

signal(2)

sigvec(3)

signal(3-ucb)

setjmp(3C)

sigsetjmp(3C)

signal(5)

sigstack(3)             (BSD Compatibility Package)             sigstack(3)

NAME
     sigstack - set and/or get signal stack context

SYNOPSIS
     /usr/ucb/cc [flag ...] file ... -lucb

     #include <signal.h>

     int sigstack(struct sigstack *ss, struct sigstack *oss);

DESCRIPTION
     sigstack allows users to define an alternate stack, called the signal
     stack, on which signals are to be processed. When a signal's action
     indicates its handler should execute on the signal stack (specified
     with a sigvec(3) 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
     signal stack for the duration of the signal handler's execution.

     A signal stack is specified by a sigstack structure, which includes
     the following members:

          char *sssp;             /* signal stack pointer */
          int  ssonstack;         /* current status */

     sssp is the initial value to be assigned to the stack pointer when
     the system switches the process to the signal stack. On machines where
     the stack grows downwards in memory, this is not the address of the
     beginning of the signal stack area. ssonstack field is zero or non-
     zero depending on whether the process is currently executing on the
     signal stack or not.

     If ss is not a NULL pointer, sigstack sets the signal stack state to
     the value in the sigstack structure pointed to by ss. If ssonstack is
     non-zero, the system will think that the process is executing on the
     signal stack. If ss is a NULL pointer, the signal stack state will be
     unchanged. If oss is not a NULL pointer, the current signal stack
     state is stored in the sigstack structure pointed to by oss.

     After a successful call to one of the exec functions, there are no
     alternate signal stacks in the new process image.

RETURN VALUE
     Upon successful completion, a value of 0 is returned. Otherwise, a
     value of -1 is returned and errno is set to indicate the error.










Page 1                       Reliant UNIX 5.44                Printed 11/98

sigstack(3)             (BSD Compatibility Package)             sigstack(3)

DIAGNOSTICS
     sigstack fails and the signal stack context remains unchanged.

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

     EPERM     An attempt was made to modify an active stack.

NOTES
     Signal stacks are not grown automatically, as is done for the normal
     stack. If the stack overflows unpredictable results may occur.

     A portable application, when being written or rewritten, should use
     sigaltstack() instead of sigstack().

     On some implementations, stack space is automatically extended as
     needed. On those implementations, automatic extension is typically not
     available for an alternate stack. If a signal stack overflows, the
     resulting behavior of the process is undefined.

     The direction of stack growth is not indicated in the historical
     definition of struct sigstack. The only way to portably establish a
     stack pointer is for the application to determine stack growth direc-
     tion, or to allocate a block of storage and set the stack pointer to
     the middle. The implementation may assume that the size of the signal
     stack is SIGSTKSZ as found in <signal.h>. An implementation that would
     like to specify a signal stack size other than SIGSTKSZ should use
     sigaltstack().

     Programs should not use longjmp() to leave a signal handler that is
     running on a stack established with sigstack(). Doing so may disable
     future use of the signal stack. For abnormal exit from a signal
     handler, siglongjmp(), setcontext(), or swapcontext() may be used.
     These functions fully support switching from one stack to another.

     The sigstack() function requires the application to have knowledge of
     the underlying system's stack architecture. For this reason,
     sigaltstack() is recommended over this function.

SEE ALSO
     exec(2), fork(2), sigaltstack(2), signal(2), sigvec(3), signal(3-ucb),
     setjmp(3C), sigsetjmp(3C), signal(5).












Page 2                       Reliant UNIX 5.44                Printed 11/98

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