fpe signals working on unix again
parent
8049b441c2
commit
2cf2dab48e
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue