linux: place alternate signal stack in stack area

The alternate stack must use the stack area as, e.g., Thread::myself()
depends on this property. Hybrid components do not depend on this
property and, therefore, use a static stack buffer.

Fixes #1935
This commit is contained in:
Christian Helmuth
2016-06-22 16:14:18 +02:00
parent d8c34237bf
commit d7ddc83fa9
6 changed files with 36 additions and 23 deletions

View File

@ -78,17 +78,18 @@ void exception_signal_handler(int signum)
* We reset the signal handler to SIG_DFL and trigger exception again,
* i.e., terminate the process.
*/
lx_sigaction(signum, nullptr);
lx_sigaction(signum, nullptr, false);
return;
}
void lx_exception_signal_handlers()
{
lx_sigaction(LX_SIGILL, exception_signal_handler);
lx_sigaction(LX_SIGBUS, exception_signal_handler);
lx_sigaction(LX_SIGFPE, exception_signal_handler);
lx_sigaction(LX_SIGSEGV, exception_signal_handler);
/* use alternate stack in fatal-signal handlers */
lx_sigaction(LX_SIGILL, exception_signal_handler, true);
lx_sigaction(LX_SIGBUS, exception_signal_handler, true);
lx_sigaction(LX_SIGFPE, exception_signal_handler, true);
lx_sigaction(LX_SIGSEGV, exception_signal_handler, true);
}