Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SIGALTSTACK(2)		    BSD	System Calls Manual		SIGALTSTACK(2)

NAME
     sigaltstack -- set	and/or get signal stack	context

LIBRARY
     Standard C	Library	(libc, -lc)

SYNOPSIS
     #include <signal.h>

     typedef struct sigaltstack	{
	     void   *ss_sp;
	     size_t  ss_size;
	     int     ss_flags;
     } stack_t;

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

DESCRIPTION
     sigaltstack() allows users	to define an alternative stack on which	sig-
     nals are to be processed.	If ss is non-zero, it specifies	a pointer to
     and the size of a signal stack on which to	deliver	signals, and tells the
     system if the process is currently	executing on that stack.  When a sig-
     nal's action indicates its	handler	should execute on the 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 cur-
     rently executing on the signal stack, the system arranges a switch	to the
     signal stack for the duration of the signal handler's execution.

     If	SS_DISABLE is set in ss_flags, ss_sp and ss_size are ignored and the
     signal stack will be disabled.  Trying to disable an active stack will
     cause sigaltstack to return -1 with errno set to EINVAL.  A disabled
     stack will	cause all signals to be	taken on the regular user stack.  If
     the stack is later	re-enabled then	all signals that were specified	to be
     processed on an alternative stack will resume doing so.

     If	oss is non-zero, the current signal stack state	is returned.  The
     ss_flags field will contain the value SS_ONSTACK if the process is	cur-
     rently on a signal	stack and SS_DISABLE if	the signal stack is currently
     disabled.

NOTES
     The value SIGSTKSZ	is defined to be the number of bytes/chars that	would
     be	used to	cover the usual	case when allocating an	alternative stack
     area.  The	following code fragment	is typically used to allocate an al-
     ternative stack.

	   if ((sigstk.ss_sp = malloc(SIGSTKSZ)) == NULL)
		   /* error return */
	   sigstk.ss_size = SIGSTKSZ;
	   sigstk.ss_flags = 0;
	   if (sigaltstack(&sigstk,0) <	0)
		   perror("sigaltstack");

     An	alternative approach is	provided for programs with signal handlers
     that require a specific amount of stack space other than the default
     size.  The	value MINSIGSTKSZ is defined to	be the number of bytes/chars
     that is required by the operating system to implement the alternative
     stack feature.  In	computing an alternative stack size, programs should
     add MINSIGSTKSZ to	their stack requirements to allow for the operating
     system overhead.

     Signal stacks are automatically adjusted for the direction	of stack
     growth and	alignment requirements.	 Signal	stacks may or may not be pro-
     tected by the hardware and	are not	``grown'' automatically	as is done for
     the normal	stack.	If the stack overflows and this	space is not protected
     unpredictable results may occur.

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

ERRORS
     sigaltstack() will	fail and the signal stack context will remain un-
     changed if	one of the following occurs.

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

     [EINVAL]		An attempt was made to disable an active stack.

     [ENOMEM]		Size of	alternative stack area is less than
			MINSIGSTKSZ.

SEE ALSO
     sigaction(2), setjmp(3), signal(7)

STANDARDS
     The sigaltstack() function	conforms to X/Open Portability Guide Issue 4,
     Version 2 ("XPG4.2").

HISTORY
     The predecessor to	sigaltstack, the sigstack() system call, appeared in
     4.2BSD.

CAVEATS
     Due to limitations	in the current pthread implementation, sigaltstack
     should not	be used	in programs which link against the pthread(3) library
     (whether threads are used or not).

BSD				April 16, 2009				   BSD

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | NOTES | RETURN VALUES | ERRORS | SEE ALSO | STANDARDS | HISTORY | CAVEATS

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=sigaltstack&sektion=2&manpath=NetBSD+6.0>

home | help