Replace EXCEPTION_FLT_XXX by STATUS_FLOAT_XXX. Set ExceptionFlags to 0 for exceptions dispatched from ntoskrnl.
Modified: trunk/reactos/ntoskrnl/ke/i386/exp.c
Modified: trunk/reactos/ntoskrnl/ke/i386/fpu.c
Modified: trunk/reactos/ntoskrnl/ke/i386/usertrap.c

Modified: trunk/reactos/ntoskrnl/ke/i386/exp.c
--- trunk/reactos/ntoskrnl/ke/i386/exp.c	2005-01-14 16:12:34 UTC (rev 13044)
+++ trunk/reactos/ntoskrnl/ke/i386/exp.c	2005-01-14 19:42:47 UTC (rev 13045)
@@ -99,7 +99,7 @@
     "SIMD Fault"
   };
 
-static NTSTATUS ExceptionToNtStatus[] =
+NTSTATUS ExceptionToNtStatus[] =
   {
     STATUS_INTEGER_DIVIDE_BY_ZERO,
     STATUS_SINGLE_STEP,
@@ -108,7 +108,7 @@
     STATUS_INTEGER_OVERFLOW,
     STATUS_ARRAY_BOUNDS_EXCEEDED,
     STATUS_ILLEGAL_INSTRUCTION,
-    STATUS_ACCESS_VIOLATION, /* STATUS_FLT_INVALID_OPERATION */
+    STATUS_FLOAT_INVALID_OPERATION,
     STATUS_ACCESS_VIOLATION,
     STATUS_ACCESS_VIOLATION,
     STATUS_ACCESS_VIOLATION,
@@ -117,10 +117,10 @@
     STATUS_ACCESS_VIOLATION,
     STATUS_ACCESS_VIOLATION,
     STATUS_ACCESS_VIOLATION, /* RESERVED */
-    STATUS_ACCESS_VIOLATION, /* STATUS_FLT_INVALID_OPERATION */
+    STATUS_FLOAT_INVALID_OPERATION, /* Should not be used, the FPU can give more specific info */
     STATUS_DATATYPE_MISALIGNMENT,
     STATUS_ACCESS_VIOLATION,
-    STATUS_ACCESS_VIOLATION  /* STATUS_FLT_MULTIPLE_TRAPS? */
+    STATUS_FLOAT_MULTIPLE_TRAPS,
   };
 
 /* FUNCTIONS ****************************************************************/
@@ -190,9 +190,8 @@
       Er.NumberParameters = 0;
     }
 
-  Er.ExceptionFlags = (STATUS_SINGLE_STEP == Er.ExceptionCode ||
-                       STATUS_BREAKPOINT  == Er.ExceptionCode) ?
-                       0 : EXCEPTION_NONCONTINUABLE;
+  /* FIXME: Which exceptions are noncontinuable? */
+  Er.ExceptionFlags = 0;
 
   KiDispatchException(&Er, 0, Tf, KernelMode, TRUE);
 

Modified: trunk/reactos/ntoskrnl/ke/i386/fpu.c
--- trunk/reactos/ntoskrnl/ke/i386/fpu.c	2005-01-14 16:12:34 UTC (rev 13044)
+++ trunk/reactos/ntoskrnl/ke/i386/fpu.c	2005-01-14 19:42:47 UTC (rev 13045)
@@ -35,16 +35,6 @@
 
 /* DEFINES *******************************************************************/
 
-#define EXCEPTION_FLT_DENORMAL_OPERAND          (0xc000008dL)
-#define EXCEPTION_FLT_DIVIDE_BY_ZERO            (0xc000008eL)
-#define EXCEPTION_FLT_INEXACT_RESULT            (0xc000008fL)
-#define EXCEPTION_FLT_INVALID_OPERATION         (0xc0000090L)
-#define EXCEPTION_FLT_OVERFLOW                  (0xc0000091L)
-#define EXCEPTION_FLT_STACK_CHECK               (0xc0000092L)
-#define EXCEPTION_FLT_UNDERFLOW                 (0xc0000093L)
-#define EXCEPTION_FLT_MULTIPLE_FAULTS           (0xC00002B4L)
-#define EXCEPTION_FLT_MULTIPLE_TRAPS            (0xC00002B5L)
-
 /* x87 Status Word exception flags */
 #define X87_SW_IE       (1<<0)   /* Invalid Operation */
 #define X87_SW_DE       (1<<1)   /* Denormalized Operand */
@@ -566,19 +556,19 @@
           DPRINT("FpuStatusWord = 0x%04x\n", FpuStatusWord);
 
           if (FpuStatusWord & X87_SW_IE)
-            Er.ExceptionCode = EXCEPTION_FLT_INVALID_OPERATION;
+            Er.ExceptionCode = STATUS_FLOAT_INVALID_OPERATION;
           else if (FpuStatusWord & X87_SW_DE)
-            Er.ExceptionCode = EXCEPTION_FLT_DENORMAL_OPERAND;
+            Er.ExceptionCode = STATUS_FLOAT_DENORMAL_OPERAND;
           else if (FpuStatusWord & X87_SW_ZE)
-            Er.ExceptionCode = EXCEPTION_FLT_DIVIDE_BY_ZERO;
+            Er.ExceptionCode = STATUS_FLOAT_DIVIDE_BY_ZERO;
           else if (FpuStatusWord & X87_SW_OE)
-            Er.ExceptionCode = EXCEPTION_FLT_OVERFLOW;
+            Er.ExceptionCode = STATUS_FLOAT_OVERFLOW;
           else if (FpuStatusWord & X87_SW_UE)
-            Er.ExceptionCode = EXCEPTION_FLT_UNDERFLOW;
+            Er.ExceptionCode = STATUS_FLOAT_UNDERFLOW;
           else if (FpuStatusWord & X87_SW_PE)
-            Er.ExceptionCode = EXCEPTION_FLT_INEXACT_RESULT;
+            Er.ExceptionCode = STATUS_FLOAT_INEXACT_RESULT;
           else if (FpuStatusWord & X87_SW_SE)
-            Er.ExceptionCode = EXCEPTION_FLT_STACK_CHECK;
+            Er.ExceptionCode = STATUS_FLOAT_STACK_CHECK;
           else
             ASSERT(0); /* not reached */
           /* FIXME: is this the right way to get the correct EIP of the faulting instruction? */
@@ -586,8 +576,8 @@
         }
       else /* ExceptionNr == 19 */
         {
-          /* FIXME: When should we use EXCEPTION_FLT_MULTIPLE_FAULTS? */
-          Er.ExceptionCode = EXCEPTION_FLT_MULTIPLE_TRAPS;
+          /* FIXME: When should we use STATUS_FLOAT_MULTIPLE_FAULTS? */
+          Er.ExceptionCode = STATUS_FLOAT_MULTIPLE_TRAPS;
           Er.ExceptionAddress = (PVOID)Tf->Eip;
         }
 

Modified: trunk/reactos/ntoskrnl/ke/i386/usertrap.c
--- trunk/reactos/ntoskrnl/ke/i386/usertrap.c	2005-01-14 16:12:34 UTC (rev 13044)
+++ trunk/reactos/ntoskrnl/ke/i386/usertrap.c	2005-01-14 19:42:47 UTC (rev 13045)
@@ -131,11 +131,9 @@
       Er.NumberParameters = 0;
     }
   
+  /* FIXME: Which exceptions are noncontinuable? */
+  Er.ExceptionFlags = 0;
 
-  Er.ExceptionFlags = (STATUS_SINGLE_STEP == Er.ExceptionCode ||
-                       STATUS_BREAKPOINT  == Er.ExceptionCode) ?
-                       0 : EXCEPTION_NONCONTINUABLE;
-
   KiDispatchException(&Er, 0, Tf, UserMode, TRUE);
   return(0);
 }