From: Phil Dawes Date: Fri, 4 Sep 2009 18:23:20 +0000 (+0100) Subject: moved signal handlers into vm object X-Git-Tag: 0.97~5502^2~2^2~13 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=b02944c6d5f4e204e07b06806d80da8129149fb9 moved signal handlers into vm object --- diff --git a/vm/os-unix.cpp b/vm/os-unix.cpp index 7913647f3e..3f4e1b29f7 100644 --- a/vm/os-unix.cpp +++ b/vm/os-unix.cpp @@ -147,20 +147,31 @@ stack_frame *factorvm::uap_stack_pointer(void *uap) return NULL; } + + +void factorvm::memory_signal_handler(int signal, siginfo_t *siginfo, void *uap) +{ + signal_fault_addr = (cell)siginfo->si_addr; + signal_callstack_top = uap_stack_pointer(uap); + UAP_PROGRAM_COUNTER(uap) = (cell)factor::memory_signal_handler_impl; +} + void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap) { - factorvm *myvm = SIGNAL_VM_PTR(); - myvm->signal_fault_addr = (cell)siginfo->si_addr; - myvm->signal_callstack_top = myvm->uap_stack_pointer(uap); - UAP_PROGRAM_COUNTER(uap) = (cell)memory_signal_handler_impl; + SIGNAL_VM_PTR()->memory_signal_handler(signal,siginfo,uap); +} + + +void factorvm::misc_signal_handler(int signal, siginfo_t *siginfo, void *uap) +{ + signal_number = signal; + signal_callstack_top = uap_stack_pointer(uap); + UAP_PROGRAM_COUNTER(uap) = (cell)factor::misc_signal_handler_impl; } void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap) { - factorvm *myvm = SIGNAL_VM_PTR(); - myvm->signal_number = signal; - myvm->signal_callstack_top = myvm->uap_stack_pointer(uap); - UAP_PROGRAM_COUNTER(uap) = (cell)misc_signal_handler_impl; + SIGNAL_VM_PTR()->misc_signal_handler(signal,siginfo,uap); } void fpe_signal_handler(int signal, siginfo_t *siginfo, void *uap) diff --git a/vm/vm.hpp b/vm/vm.hpp index baa67deae8..efb0fa48e9 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -355,9 +355,9 @@ struct factorvm : factorvmdata { float to_float(cell value); void box_double(double flo); double to_double(cell value); - void overflow_fixnum_add(fixnum x, fixnum y); - void overflow_fixnum_subtract(fixnum x, fixnum y); - void overflow_fixnum_multiply(fixnum x, fixnum y); + inline void overflow_fixnum_add(fixnum x, fixnum y); + inline void overflow_fixnum_subtract(fixnum x, fixnum y); + inline void overflow_fixnum_multiply(fixnum x, fixnum y); inline cell allot_integer(fixnum x); inline cell allot_cell(cell x); inline cell allot_float(double n); @@ -600,7 +600,8 @@ struct factorvm : factorvmdata { // next method here: #endif #else // UNIX - + void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap); + void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap); stack_frame *uap_stack_pointer(void *uap); #endif