sigaltstack(2) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

sigaltstack(2)

sigaltstack(2)                   System Calls                   sigaltstack(2)

NAME
       sigaltstack - set or get signal alternate stack context

SYNOPSIS
       #include <signal.h>

       int sigaltstack(const stack_t *restrict ss, stack_t *restrict oss);

DESCRIPTION
       The  sigaltstack()  function  allows a thread to define and examine the
       state of an alternate stack area on which signals are processed. If  ss
       is  non-zero, it specifies a pointer to and the size of a stack area on
       which to deliver signals, and informs the system whether the thread  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 whether the thread chosen to exe‐
       cute the signal handler is currently executing on that  stack.  If  the
       thread  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 stack_t structure includes the following members:

         int   *ss_sp
         long  ss_size
         int   ss_flags



       If ss is not NULL, it points to a structure  specifying  the  alternate
       signal  stack that will take effect upon successful return from sigalt‐
       stack(). The ss_sp and ss_size members specify the new base and size of
       the stack, which is automatically adjusted for direction of growth  and
       alignment. The ss_flags member specifies the new stack state and may be
       set to the following:

       SS_DISABLE    The stack is to be disabled and ss_sp and ss_size are ig‐
                     nored.  If  SS_DISABLE  is not set, the stack will be en‐
                     abled.



       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
       ss_sp  and ss_size members specify the base and size of that stack. The
       ss_flags member specifies the stack's state, and may contain  the  fol‐
       lowing values:

       SS_ONSTACK    The thread is currently executing on the alternate signal
                     stack.  Attempts  to  modify  the  alternate signal stack
                     while the thread is executing on it will fail.


       SS_DISABLE    The alternate signal stack is currently disabled.


RETURN VALUES
       Upon successful completion, 0 is return. Otherwise, −1 is returned  and
       errno is set to indicate the error.

ERRORS
       The sigaltstack() function will fail if:

       EFAULT    The ss or oss argument points to an illegal address.


       EINVAL    The  ss argument is not a null pointer, and the ss_flags mem‐
                 ber pointed to by ss contains flags other than SS_DISABLE.


       ENOMEM    The size of the  alternate  stack  area  is  less  than  MIN‐
                 SIGSTKSZ.


       EPERM     An attempt was made to modify an active stack.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Interface  StabilityCommitted  _  MT-LevelAsync-Signal-
       Safe _ StandardSee standards(7).


SEE ALSO
       sigaction(2), getcontext(2), mmap(2), ucontext.h(3HEAD), attributes(7),
       standards(7), sxadm(8)

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  with  an  adjacent  red zone (an unmapped page) to guard against
       stack overflow, as with default stacks:

         #include <signal.h>
         #include <sys/mman.h>

         stack_t sigstk;
         sigstk.ss_sp = mmap(NULL, SIGSTKSZ, PROT_READ | PROT_WRITE,
                 MAP_PRIVATE | MAP_ANON, -1, 0);
         if (sigstk.ss_sp == MAP_FAILED)
                 /* error return */;
         sigstk.ss_size = SIGSTKSZ;
         sigstk.ss_flags = 0;
         if (sigaltstack(&sigstk, NULL) < 0)
                 perror("sigaltstack");



       If the ADISTACK security extension is enabled for the process, ADI must
       be enabled on the specified alternate stack area  in  order  to  extend
       coverage to the stack. See mmap(2) and sxadm(8).

Oracle Solaris 11.4              18 July 2016                   sigaltstack(2)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3