version 1.44, 2012/03/23 19:32:25
|
version 1.48, 2012/03/23 22:39:00
|
Line 101 graceful_exit (int sig)
|
Line 101 graceful_exit (int sig)
|
exit (0x80|sig); |
exit (0x80|sig); |
} |
} |
|
|
__thread jmp_buf throw_jmp_buf; |
__thread jmp_buf * throw_jmp_handler; |
|
|
void throw(int code) |
void throw(int code) |
{ |
{ |
debugp(stderr,"\nthrow code %d\n", code); |
debugp(stderr,"\nthrow code %d to %p\n", code, *throw_jmp_handler); |
longjmp(throw_jmp_buf,code); /* !! or use siglongjmp ? */ |
longjmp(*throw_jmp_handler,code); /* !! or use siglongjmp ? */ |
} |
} |
|
|
static void |
static void |
Line 142 signal_throw(int sig)
|
Line 142 signal_throw(int sig)
|
static void |
static void |
sigaction_throw(int sig, siginfo_t *info, void *_) |
sigaction_throw(int sig, siginfo_t *info, void *_) |
{ |
{ |
debugp(stderr,"\nsigaction_throw %d %x %x\n", sig, info, _); |
debugp(stderr,"\nsigaction_throw %d 0x%p 0x%p\n", sig, info, _); |
signal_throw(sig); |
signal_throw(sig); |
} |
} |
|
|
Line 199 static void segv_handler(int sig, siginf
|
Line 199 static void segv_handler(int sig, siginf
|
Address addr=info->si_addr; |
Address addr=info->si_addr; |
ImageHeader *h=gforth_header; |
ImageHeader *h=gforth_header; |
|
|
debugp(stderr,"\nsegv_handler %d %x %x\n", sig, info, _); |
debugp(stderr,"\nsegv_handler %d 0x%p 0x%p\n", sig, info, _); |
|
|
if (JUSTUNDER(addr, h->data_stack_base)) |
if (JUSTUNDER(addr, h->data_stack_base)) |
code=-3; |
code=-3; |
Line 416 void install_signal_handlers(void)
|
Line 416 void install_signal_handlers(void)
|
}; |
}; |
int i; |
int i; |
void (*throw_handler)() = die_on_signal ? graceful_exit : signal_throw; |
void (*throw_handler)() = die_on_signal ? graceful_exit : signal_throw; |
#ifdef SIGSTKSZ |
#if defined(SIGSTKSZ) && defined(HAS_SIGALTSTACK) |
stack_t sigstack; |
stack_t sigstack; |
int sas_retval=-1; |
int sas_retval=-1; |
|
|