Report actual SEH code on Windows instead of 'signal 11'

db4
Slava Pestov 2009-04-20 01:55:27 -05:00
parent 1c68b389cc
commit 5ac1358aea
4 changed files with 7 additions and 19 deletions

6
vm/bignum.c Normal file → Executable file
View File

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

View File

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

View File

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

View File

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