Replace EXCEPTION_FLT_XXX by STATUS_FLOAT_XXX. Set ExceptionFlags to 0 for exceptions dispatched from ntoskrnl.

svn path=/trunk/; revision=13045
This commit is contained in:
Gregor Anich 2005-01-14 19:42:47 +00:00
parent ee34d784d4
commit b06d14e94f
3 changed files with 17 additions and 30 deletions

View file

@ -99,7 +99,7 @@ static char *ExceptionTypeStrings[] =
"SIMD Fault"
};
static NTSTATUS ExceptionToNtStatus[] =
NTSTATUS ExceptionToNtStatus[] =
{
STATUS_INTEGER_DIVIDE_BY_ZERO,
STATUS_SINGLE_STEP,
@ -108,7 +108,7 @@ static NTSTATUS ExceptionToNtStatus[] =
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 @@ static NTSTATUS ExceptionToNtStatus[] =
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 @@ KiKernelTrapHandler(PKTRAP_FRAME Tf, ULONG ExceptionNr, PVOID Cr2)
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);

View file

@ -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 @@ KiHandleFpuFault(PKTRAP_FRAME Tf, ULONG ExceptionNr)
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 @@ KiHandleFpuFault(PKTRAP_FRAME Tf, ULONG ExceptionNr)
}
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;
}

View file

@ -131,10 +131,8 @@ KiUserTrapHandler(PKTRAP_FRAME Tf, ULONG ExceptionNr, PVOID Cr2)
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, UserMode, TRUE);
return(0);