version 1.15, 2002/10/25 15:57:03
|
version 1.17, 2002/10/27 09:57:11
|
Line 52 UCell rows=DEFAULTROWS;
|
Line 52 UCell rows=DEFAULTROWS;
|
/* systems that don't have SA_NODEFER hopefully don't block anyway */ |
/* systems that don't have SA_NODEFER hopefully don't block anyway */ |
#endif |
#endif |
|
|
|
#ifndef SA_ONSTACK |
|
#define SA_ONSTACK 0 |
|
#endif |
|
|
#ifdef SA_SIGINFO |
#ifdef SA_SIGINFO |
void install_signal_handler(int sig, void (*handler)(int, siginfo_t *, void *)) |
void install_signal_handler(int sig, void (*handler)(int, siginfo_t *, void *)) |
/* installs three-argument signal handler for sig */ |
/* installs three-argument signal handler for sig */ |
Line 114 static void fpe_handler(int sig, siginfo
|
Line 118 static void fpe_handler(int sig, siginfo
|
int code; |
int code; |
|
|
switch(info->si_code) { |
switch(info->si_code) { |
|
#ifdef FPE_INTDIV |
case FPE_INTDIV: code=-10; break; /* integer divide by zero */ |
case FPE_INTDIV: code=-10; break; /* integer divide by zero */ |
|
#endif |
|
#ifdef FPE_INTOVF |
case FPE_INTOVF: code=-11; break; /* integer overflow */ |
case FPE_INTOVF: code=-11; break; /* integer overflow */ |
|
#endif |
case FPE_FLTDIV: code=-42; break; /* floating point divide by zero */ |
case FPE_FLTDIV: code=-42; break; /* floating point divide by zero */ |
case FPE_FLTOVF: code=-43; break; /* floating point overflow */ |
case FPE_FLTOVF: code=-43; break; /* floating point overflow */ |
case FPE_FLTUND: code=-54; break; /* floating point underflow */ |
case FPE_FLTUND: code=-54; break; /* floating point underflow */ |
case FPE_FLTRES: code=-41; break; /* floating point inexact result */ |
case FPE_FLTRES: code=-41; break; /* floating point inexact result */ |
|
#if 0 /* defined by Unix95, but unnecessary */ |
case FPE_FLTINV: /* invalid floating point operation */ |
case FPE_FLTINV: /* invalid floating point operation */ |
case FPE_FLTSUB: /* subscript out of range */ |
case FPE_FLTSUB: /* subscript out of range */ |
|
#endif |
default: code=-55; break; |
default: code=-55; break; |
} |
} |
longjmp(throw_jmp_buf,code); |
longjmp(throw_jmp_buf,code); |
Line 356 void install_signal_handlers(void)
|
Line 366 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 |
stack_t sigstack; |
stack_t sigstack; |
int sas_retval=-1; |
int sas_retval=-1; |
|
|
Line 366 void install_signal_handlers(void)
|
Line 377 void install_signal_handlers(void)
|
} |
} |
if (debug) |
if (debug) |
fprintf(stderr,"sigaltstack: %s\n",strerror(sas_retval)); |
fprintf(stderr,"sigaltstack: %s\n",strerror(sas_retval)); |
|
#endif |
|
|
#define DIM(X) (sizeof (X) / sizeof *(X)) |
#define DIM(X) (sizeof (X) / sizeof *(X)) |
/* |
/* |