getustack(2) System Calls getustack(2)NAME
getustack, setustack - retrieve or change the address of per-LWP stack boundary information
SYNOPSIS
#include <ucontext.h>
int getustack(stack_t **spp);
int setustack(stack_t *sp);
DESCRIPTION
The getustack() function retrieves the address of per-LWP stack boundary information. The address is stored at the location pointed to by
spp. If this address has not been defined using a previous call to setustack(), NULL is stored at the location pointed to by spp.
The setustack() function changes the address of the current thread's stack boundary information to the value of sp.
RETURN VALUES
Upon successful completion, these functions return 0. Otherwise, -1 is returned and errno is set to indicate the error.
ERRORS
These functions will fail if:
EFAULT The spp or sp argument does not refer to a valid address.
USAGE
Only implementors of custom threading libraries should use these functions to get and set the address of the stack bound to an internal
per-thread data structure. Other users should use stack_getbounds(3C) and stack_setbounds(3C).
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Interface Stability | Evolving |
+-----------------------------+-----------------------------+
|MT-Level | Async-Signal-Safe |
+-----------------------------+-----------------------------+
SEE ALSO _stack_grow(3C), stack_getbounds(3C), stack_inbounds(3C), stack_setbounds(3C), stack_violation(3C), attributes(5)SunOS 5.10 2 Nov 2004 getustack(2)
Check Out this Related Man Page
stack_violation(3C) Standard C Library Functions stack_violation(3C)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 repre-
sent 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.
";
else
str = "no stack violation.
";
(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_SIG-
INFO flag set and is configured to run on an alternate signal stack.
ATTRIBUTES
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|Interface Stability |Evolving |
+-----------------------------+-----------------------------+
|MT-Level |Async-Signal-Safe |
+-----------------------------+-----------------------------+
SEE ALSO sigaction(2), sigaltstack(2), stack_getbounds(3C), stack_inbounds(3C), stack_setbounds(3C), attributes(5)SunOS 5.10 18 Jul 2002 stack_violation(3C)