]> gitweb.factorcode.org Git - factor.git/commitdiff
fpe signals working on unix again
authorPhil Dawes <phil@phildawes.net>
Sun, 13 Sep 2009 20:50:20 +0000 (21:50 +0100)
committerPhil Dawes <phil@phildawes.net>
Wed, 16 Sep 2009 07:22:18 +0000 (08:22 +0100)
vm/os-unix.cpp
vm/vm.hpp

index 3f4e1b29f7dbaf21184c4a6b4dbf3c9d8819714f..65b32066e5c475cdb30e39327472d05c519975ff 100644 (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);
 }
 
-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)
index e4cd633fb18eaf27bd66c0975edd09f698e3122e..b426ff67d8f1c64ac2c4bcc8baae5ea9311b5178 100644 (file)
--- 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