]> gitweb.factorcode.org Git - factor.git/commitdiff
Report actual SEH code on Windows instead of 'signal 11'
authorSlava Pestov <slava@factorcode.org>
Mon, 20 Apr 2009 06:55:27 +0000 (01:55 -0500)
committerSlava Pestov <slava@factorcode.org>
Mon, 20 Apr 2009 06:55:27 +0000 (01:55 -0500)
vm/bignum.c [changed mode: 0644->0755]
vm/errors.c
vm/errors.h
vm/os-windows-nt.c

old mode 100644 (file)
new mode 100755 (executable)
index 497a4bb..c799691
@@ -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))
index 9b7b7843d247fa4aac507490d269c37a1a006f73..8e7b4818bf2163f4c0e97fe0e17b929a8f8c76f8 100755 (executable)
@@ -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);
index da3ee8bbe04bf04c3136acdb7799f8599925dabb..56aaf60d54051b50e2837998a9c4b0625c071c69 100755 (executable)
@@ -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);
index bcddd0b140cff83b128499f92c8ed31cbbaabb88..501463378a9f6669f15e1fccf2dfe069a80c1ec8 100755 (executable)
@@ -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;
        }