Skip to content
Snippets Groups Projects
Commit 52fca1ac authored by rtoy's avatar rtoy
Browse files

Use an alternate signal stack for delivering signals.

parent 539c7147
No related branches found
No related tags found
No related merge requests found
/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.c,v 1.33 2003/11/01 15:40:35 toy Exp $ */ /* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/interrupt.c,v 1.34 2004/05/04 12:38:13 rtoy Exp $ */
/* Interrupt handing magic. */ /* Interrupt handing magic. */
...@@ -513,6 +513,11 @@ boolean interrupt_maybe_gc(HANDLER_ARGS) ...@@ -513,6 +513,11 @@ boolean interrupt_maybe_gc(HANDLER_ARGS)
* Noise to install handlers. * * Noise to install handlers. *
\****************************************************************/ \****************************************************************/
#ifndef i386
#define SIGNAL_STACK_SIZE SIGSTKSZ
static char altstack[SIGNAL_STACK_SIZE];
#endif
void void
interrupt_install_low_level_handler (int signal, void handler (HANDLER_ARGS)) interrupt_install_low_level_handler (int signal, void handler (HANDLER_ARGS))
{ {
...@@ -542,6 +547,17 @@ interrupt_install_low_level_handler (int signal, void handler (HANDLER_ARGS)) ...@@ -542,6 +547,17 @@ interrupt_install_low_level_handler (int signal, void handler (HANDLER_ARGS))
perror ("sigaltstack"); perror ("sigaltstack");
sa.sa_flags |= SA_ONSTACK; sa.sa_flags |= SA_ONSTACK;
} }
#else
if (signal == PROTECTION_VIOLATION_SIGNAL)
{
stack_t sigstack;
sigstack.ss_sp = (void *) altstack;
sigstack.ss_flags = 0;
sigstack.ss_size = SIGNAL_STACK_SIZE;
if (sigaltstack (&sigstack, 0) == -1)
perror ("sigaltstack");
sa.sa_flags |= SA_ONSTACK;
}
#endif /* RED_ZONE_HIT */ #endif /* RED_ZONE_HIT */
sigaction (signal, &sa, NULL); sigaction (signal, &sa, NULL);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment