mirror of
https://github.com/reactos/reactos.git
synced 2024-08-03 10:00:56 +00:00
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:
parent
ee34d784d4
commit
b06d14e94f
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue