moved signal handlers into vm object

db4
Phil Dawes 2009-09-04 19:23:20 +01:00
parent eee1de23c8
commit b02944c6d5
2 changed files with 24 additions and 12 deletions

View File

@ -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)

View File

@ -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