vm: fix fp_trap_error() so that it can work properly in signal handlers
parent
1337f82ce6
commit
9ccf5811b3
|
@ -130,9 +130,9 @@ void divide_by_zero_error()
|
|||
general_error(ERROR_DIVIDE_BY_ZERO,F,F,NULL);
|
||||
}
|
||||
|
||||
void fp_trap_error()
|
||||
void fp_trap_error(stack_frame *signal_callstack_top)
|
||||
{
|
||||
general_error(ERROR_FP_TRAP,F,F,NULL);
|
||||
general_error(ERROR_FP_TRAP,F,F,signal_callstack_top);
|
||||
}
|
||||
|
||||
PRIMITIVE(call_clear)
|
||||
|
@ -158,7 +158,7 @@ void misc_signal_handler_impl()
|
|||
|
||||
void fp_signal_handler_impl()
|
||||
{
|
||||
fp_trap_error();
|
||||
fp_trap_error(signal_callstack_top);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -55,12 +55,12 @@ static void call_fault_handler(
|
|||
MACH_PROGRAM_COUNTER(thread_state) = (cell)memory_signal_handler_impl;
|
||||
}
|
||||
else if(exception == EXC_ARITHMETIC && code != MACH_EXC_INTEGER_DIV)
|
||||
{
|
||||
{
|
||||
MACH_PROGRAM_COUNTER(thread_state) = (cell)fp_signal_handler_impl;
|
||||
}
|
||||
else
|
||||
{
|
||||
signal_number = exception == EXC_ARITHMETIC ? SIGFPE : SIGABRT;
|
||||
}
|
||||
else
|
||||
{
|
||||
signal_number = (exception == EXC_ARITHMETIC ? SIGFPE : SIGABRT);
|
||||
MACH_PROGRAM_COUNTER(thread_state) = (cell)misc_signal_handler_impl;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue