moved signal handlers into vm object
parent
eee1de23c8
commit
b02944c6d5
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue