From 2cf2dab48e26431772b615e252bcc17034b6a390 Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Sun, 13 Sep 2009 21:50:20 +0100 Subject: [PATCH] fpe signals working on unix again --- vm/os-unix.cpp | 17 +++++++++++------ vm/vm.hpp | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/vm/os-unix.cpp b/vm/os-unix.cpp index 3f4e1b29f7..65b32066e5 100644 --- a/vm/os-unix.cpp +++ b/vm/os-unix.cpp @@ -174,16 +174,21 @@ void misc_signal_handler(int signal, siginfo_t *siginfo, void *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_callstack_top = uap_stack_pointer(uap); - signal_fpu_status = fpu_status(uap_fpu_status(uap)); - uap_clear_fpu_status(uap); + signal_fpu_status = fpu_status(uap_fpu_status(uap)); + uap_clear_fpu_status(uap); UAP_PROGRAM_COUNTER(uap) = - (siginfo->si_code == FPE_INTDIV || siginfo->si_code == FPE_INTOVF) - ? (cell)misc_signal_handler_impl - : (cell)fp_signal_handler_impl; + (siginfo->si_code == FPE_INTDIV || siginfo->si_code == FPE_INTOVF) + ? (cell)factor::misc_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) diff --git a/vm/vm.hpp b/vm/vm.hpp index e4cd633fb1..b426ff67d8 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -602,6 +602,7 @@ struct factorvm : factorvmdata { #else // UNIX void memory_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); #endif