moved signal handlers into vm object
parent
eee1de23c8
commit
b02944c6d5
|
@ -147,20 +147,31 @@ stack_frame *factorvm::uap_stack_pointer(void *uap)
|
||||||
return NULL;
|
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)
|
void memory_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
||||||
{
|
{
|
||||||
factorvm *myvm = SIGNAL_VM_PTR();
|
SIGNAL_VM_PTR()->memory_signal_handler(signal,siginfo,uap);
|
||||||
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;
|
|
||||||
|
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)
|
void misc_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
||||||
{
|
{
|
||||||
factorvm *myvm = SIGNAL_VM_PTR();
|
SIGNAL_VM_PTR()->misc_signal_handler(signal,siginfo,uap);
|
||||||
myvm->signal_number = signal;
|
|
||||||
myvm->signal_callstack_top = myvm->uap_stack_pointer(uap);
|
|
||||||
UAP_PROGRAM_COUNTER(uap) = (cell)misc_signal_handler_impl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void fpe_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
void fpe_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
||||||
|
|
|
@ -355,9 +355,9 @@ struct factorvm : factorvmdata {
|
||||||
float to_float(cell value);
|
float to_float(cell value);
|
||||||
void box_double(double flo);
|
void box_double(double flo);
|
||||||
double to_double(cell value);
|
double to_double(cell value);
|
||||||
void overflow_fixnum_add(fixnum x, fixnum y);
|
inline void overflow_fixnum_add(fixnum x, fixnum y);
|
||||||
void overflow_fixnum_subtract(fixnum x, fixnum y);
|
inline void overflow_fixnum_subtract(fixnum x, fixnum y);
|
||||||
void overflow_fixnum_multiply(fixnum x, fixnum y);
|
inline void overflow_fixnum_multiply(fixnum x, fixnum y);
|
||||||
inline cell allot_integer(fixnum x);
|
inline cell allot_integer(fixnum x);
|
||||||
inline cell allot_cell(cell x);
|
inline cell allot_cell(cell x);
|
||||||
inline cell allot_float(double n);
|
inline cell allot_float(double n);
|
||||||
|
@ -600,7 +600,8 @@ struct factorvm : factorvmdata {
|
||||||
// next method here:
|
// next method here:
|
||||||
#endif
|
#endif
|
||||||
#else // UNIX
|
#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);
|
stack_frame *uap_stack_pointer(void *uap);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue