Report actual SEH code on Windows instead of 'signal 11'
parent
1c68b389cc
commit
5ac1358aea
|
@ -170,7 +170,7 @@ bignum_divide(bignum_type numerator, bignum_type denominator,
|
|||
{
|
||||
if (BIGNUM_ZERO_P (denominator))
|
||||
{
|
||||
divide_by_zero_error(NULL);
|
||||
divide_by_zero_error();
|
||||
return;
|
||||
}
|
||||
if (BIGNUM_ZERO_P (numerator))
|
||||
|
@ -242,7 +242,7 @@ bignum_quotient(bignum_type numerator, bignum_type denominator)
|
|||
{
|
||||
if (BIGNUM_ZERO_P (denominator))
|
||||
{
|
||||
divide_by_zero_error(NULL);
|
||||
divide_by_zero_error();
|
||||
return (BIGNUM_OUT_OF_BAND);
|
||||
}
|
||||
if (BIGNUM_ZERO_P (numerator))
|
||||
|
@ -295,7 +295,7 @@ bignum_remainder(bignum_type numerator, bignum_type denominator)
|
|||
{
|
||||
if (BIGNUM_ZERO_P (denominator))
|
||||
{
|
||||
divide_by_zero_error(NULL);
|
||||
divide_by_zero_error();
|
||||
return (BIGNUM_OUT_OF_BAND);
|
||||
}
|
||||
if (BIGNUM_ZERO_P (numerator))
|
||||
|
|
|
@ -124,9 +124,9 @@ void signal_error(int signal, F_STACK_FRAME *native_stack)
|
|||
general_error(ERROR_SIGNAL,tag_fixnum(signal),F,native_stack);
|
||||
}
|
||||
|
||||
void divide_by_zero_error(F_STACK_FRAME *native_stack)
|
||||
void divide_by_zero_error(void)
|
||||
{
|
||||
general_error(ERROR_DIVIDE_BY_ZERO,F,F,native_stack);
|
||||
general_error(ERROR_DIVIDE_BY_ZERO,F,F,NULL);
|
||||
}
|
||||
|
||||
void memory_signal_handler_impl(void)
|
||||
|
@ -134,11 +134,6 @@ void memory_signal_handler_impl(void)
|
|||
memory_protection_error(signal_fault_addr,signal_callstack_top);
|
||||
}
|
||||
|
||||
void divide_by_zero_signal_handler_impl(void)
|
||||
{
|
||||
divide_by_zero_error(signal_callstack_top);
|
||||
}
|
||||
|
||||
void misc_signal_handler_impl(void)
|
||||
{
|
||||
signal_error(signal_number,signal_callstack_top);
|
||||
|
|
|
@ -26,7 +26,7 @@ void primitive_die(void);
|
|||
|
||||
void throw_error(CELL error, F_STACK_FRAME *native_stack);
|
||||
void general_error(F_ERRORTYPE error, CELL arg1, CELL arg2, F_STACK_FRAME *native_stack);
|
||||
void divide_by_zero_error(F_STACK_FRAME *native_stack);
|
||||
void divide_by_zero_error(void);
|
||||
void memory_protection_error(CELL addr, F_STACK_FRAME *native_stack);
|
||||
void signal_error(int signal, F_STACK_FRAME *native_stack);
|
||||
void type_error(CELL type, CELL tagged);
|
||||
|
@ -53,7 +53,6 @@ CELL signal_fault_addr;
|
|||
void *signal_callstack_top;
|
||||
|
||||
void memory_signal_handler_impl(void);
|
||||
void divide_by_zero_signal_handler_impl(void);
|
||||
void misc_signal_handler_impl(void);
|
||||
|
||||
void primitive_unimplemented(void);
|
||||
|
|
|
@ -23,12 +23,6 @@ long exception_handler(PEXCEPTION_POINTERS pe)
|
|||
signal_fault_addr = e->ExceptionInformation[1];
|
||||
c->EIP = (CELL)memory_signal_handler_impl;
|
||||
}
|
||||
else if(e->ExceptionCode == EXCEPTION_FLT_DIVIDE_BY_ZERO
|
||||
|| e->ExceptionCode == EXCEPTION_INT_DIVIDE_BY_ZERO)
|
||||
{
|
||||
signal_number = ERROR_DIVIDE_BY_ZERO;
|
||||
c->EIP = (CELL)divide_by_zero_signal_handler_impl;
|
||||
}
|
||||
/* If the Widcomm bluetooth stack is installed, the BTTray.exe process
|
||||
injects code into running programs. For some reason this results in
|
||||
random SEH exceptions with this (undocumented) exception code being
|
||||
|
@ -37,7 +31,7 @@ long exception_handler(PEXCEPTION_POINTERS pe)
|
|||
this exception means. */
|
||||
else if(e->ExceptionCode != 0x40010006)
|
||||
{
|
||||
signal_number = 11;
|
||||
signal_number = e->ExceptionCode;
|
||||
c->EIP = (CELL)misc_signal_handler_impl;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue