2004-12-10 22:47:03 -05:00
|
|
|
#include "../factor.h"
|
2005-10-23 20:50:29 -04:00
|
|
|
#include "mach_signal.h"
|
2004-10-17 19:01:16 -04:00
|
|
|
|
|
|
|
void signal_handler(int signal, siginfo_t* siginfo, void* uap)
|
|
|
|
{
|
2005-05-12 03:52:56 -04:00
|
|
|
if(nursery.here > nursery.limit)
|
2004-10-17 19:01:16 -04:00
|
|
|
{
|
2005-05-11 00:43:52 -04:00
|
|
|
fprintf(stderr,"Out of memory!\n");
|
2005-05-12 01:02:39 -04:00
|
|
|
factorbug();
|
2004-10-17 19:01:16 -04:00
|
|
|
}
|
|
|
|
else
|
2004-11-09 12:29:25 -05:00
|
|
|
signal_error(signal);
|
2004-10-17 19:01:16 -04:00
|
|
|
}
|
|
|
|
|
2004-12-29 03:35:46 -05:00
|
|
|
void dump_stack_signal(int signal, siginfo_t* siginfo, void* uap)
|
|
|
|
{
|
2005-09-20 20:18:01 -04:00
|
|
|
interrupt = true;
|
2004-12-29 03:35:46 -05:00
|
|
|
}
|
|
|
|
|
2004-10-17 19:01:16 -04:00
|
|
|
void init_signals(void)
|
|
|
|
{
|
|
|
|
struct sigaction custom_sigaction;
|
|
|
|
struct sigaction ign_sigaction;
|
2004-12-29 03:35:46 -05:00
|
|
|
struct sigaction dump_sigaction;
|
2005-05-12 01:02:39 -04:00
|
|
|
sigemptyset(&custom_sigaction.sa_mask);
|
2004-10-17 19:01:16 -04:00
|
|
|
custom_sigaction.sa_sigaction = signal_handler;
|
|
|
|
custom_sigaction.sa_flags = SA_SIGINFO;
|
2005-05-12 01:02:39 -04:00
|
|
|
sigemptyset(&dump_sigaction.sa_mask);
|
2004-12-29 03:35:46 -05:00
|
|
|
dump_sigaction.sa_sigaction = dump_stack_signal;
|
|
|
|
dump_sigaction.sa_flags = SA_SIGINFO;
|
2005-05-12 01:02:39 -04:00
|
|
|
sigemptyset(&ign_sigaction.sa_mask);
|
2004-10-17 19:01:16 -04:00
|
|
|
ign_sigaction.sa_handler = SIG_IGN;
|
|
|
|
sigaction(SIGABRT,&custom_sigaction,NULL);
|
|
|
|
sigaction(SIGFPE,&custom_sigaction,NULL);
|
2004-11-09 12:29:25 -05:00
|
|
|
sigaction(SIGBUS,&custom_sigaction,NULL);
|
2005-09-20 20:18:01 -04:00
|
|
|
sigaction(SIGQUIT,&custom_sigaction,NULL);
|
|
|
|
sigaction(SIGINT,&dump_sigaction,NULL);
|
2004-10-17 19:01:16 -04:00
|
|
|
sigaction(SIGPIPE,&ign_sigaction,NULL);
|
2005-10-23 20:50:29 -04:00
|
|
|
sigaction(SIGSEGV,&custom_sigaction,NULL);
|
|
|
|
|
|
|
|
#ifdef __APPLE__
|
|
|
|
mach_initialize();
|
|
|
|
#endif
|
2004-10-17 19:01:16 -04:00
|
|
|
}
|