Content-type: text/html Man page of stack_violation

stack_violation

Section: Standard C Library Functions (3C)
Updated: 18 Jul 2002
Index Return to Main Contents
 

NAME

stack_violation - determine stack boundary violation event  

SYNOPSIS

#include <ucontext.h>

int stack_violation(int sig, const siginfo_t *sip, const ucontext_t *ucp);  

DESCRIPTION

The stack_violation() function returns a boolean value indicating whether the signal, sig, and accompanying signal information, sip, and saved context, ucp, represent a stack boundary violation event or a stack overflow.  

RETURN VALUES

The stack_violation() function returns 0 if the signal does not represent a stack boundary violation event and 1 if the signal does represent a stack boundary violation event.  

ERRORS

No errors are defined.  

EXAMPLES

Example 1: Set up a signal handler to run on an alternate stack.

The following example sets up a signal handler for SIGSEGV to run on an alternate signal stack. For each signal it handles, the handler emits a message to indicate if the signal was produced due to a stack boundary violation.

#include <stdlib.h>
#include <unistd.h>
#include <ucontext.h>
#include <signal.h>


static void
handler(int sig, siginfo_t *sip, void *p)
{
        ucontext_t *ucp = p;
        const char *str;

        if (stack_violation(sig, sip, ucp))
                str = "stack violation.\n";
        else
                str = "no stack violation.\n";

        (void) write(STDERR_FILENO, str, strlen(str));

        exit(1);
}

int
main(int argc, char **argv)
{
        struct sigaction sa;
        stack_t altstack;

        altstack.ss_size = SIGSTKSZ;
        altstack.ss_sp = malloc(SIGSTKSZ);
        altstack.ss_flags = 0;

        (void) sigaltstack(&altstack, NULL);

        sa.sa_sigaction = handler;
        (void) sigfillset(&sa.sa_mask);
        sa.sa_flags = SA_ONSTACK | SA_SIGINFO;
        (void) sigaction(SIGSEGV, &sa, NULL);

        /*
         * The application is now set up to use stack_violation(3C).
         */

        return (0);
}

 

USAGE

An application typically uses stack_violation() in a signal handler that has been installed for SIGSEGV using sigaction(2) with the SA_SIGINFO flag set and is configured to run on an alternate signal stack.  

ATTRIBUTES

See attributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPEATTRIBUTE VALUE
Interface StabilityEvolving
MT-LevelAsync-Signal-Safe

 

SEE ALSO

sigaction(2), sigaltstack(2), stack_getbounds(3C), stack_inbounds(3C), stack_setbounds(3C), attributes(5)


 

Index

NAME
SYNOPSIS
DESCRIPTION
RETURN VALUES
ERRORS
EXAMPLES
USAGE
ATTRIBUTES
SEE ALSO

This document was created by man2html, using the manual pages.
Time: 02:37:18 GMT, October 02, 2010