fpe signals working on unix again

db4
Phil Dawes 2009-09-13 21:50:20 +01:00
parent 8049b441c2
commit 2cf2dab48e
2 changed files with 12 additions and 6 deletions

View File

@ -174,16 +174,21 @@ void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap)
SIGNAL_VM_PTR()->misc_signal_handler(signal,siginfo,uap); SIGNAL_VM_PTR()->misc_signal_handler(signal,siginfo,uap);
} }
void fpe_signal_handler(int signal, siginfo_t *siginfo, void *uap) void factorvm::fpe_signal_handler(int signal, siginfo_t *siginfo, void *uap)
{ {
signal_number = signal; signal_number = signal;
signal_callstack_top = uap_stack_pointer(uap); signal_callstack_top = uap_stack_pointer(uap);
signal_fpu_status = fpu_status(uap_fpu_status(uap)); signal_fpu_status = fpu_status(uap_fpu_status(uap));
uap_clear_fpu_status(uap); uap_clear_fpu_status(uap);
UAP_PROGRAM_COUNTER(uap) = UAP_PROGRAM_COUNTER(uap) =
(siginfo->si_code == FPE_INTDIV || siginfo->si_code == FPE_INTOVF) (siginfo->si_code == FPE_INTDIV || siginfo->si_code == FPE_INTOVF)
? (cell)misc_signal_handler_impl ? (cell)factor::misc_signal_handler_impl
: (cell)fp_signal_handler_impl; : (cell)factor::fp_signal_handler_impl;
}
void fpe_signal_handler(int signal, siginfo_t *siginfo, void *uap)
{
SIGNAL_VM_PTR()->fpe_signal_handler(signal, siginfo, uap);
} }
static void sigaction_safe(int signum, const struct sigaction *act, struct sigaction *oldact) static void sigaction_safe(int signum, const struct sigaction *act, struct sigaction *oldact)

View File

@ -602,6 +602,7 @@ struct factorvm : factorvmdata {
#else // UNIX #else // UNIX
void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap); void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap);
void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap); void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap);
void fpe_signal_handler(int signal, siginfo_t *siginfo, void *uap);
stack_frame *uap_stack_pointer(void *uap); stack_frame *uap_stack_pointer(void *uap);
#endif #endif