Author: aandrejevic Date: Fri Oct 2 15:11:24 2015 New Revision: 69427
URL: http://svn.reactos.org/svn/reactos?rev=69427&view=rev Log: [FAST486] Reading/writing to memory should #SS(0) when the segment is the stack segment, and #GP(0) otherwise. It should never generate #NP.
Modified: trunk/reactos/lib/fast486/common.c
Modified: trunk/reactos/lib/fast486/common.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/common.c?rev=69... ============================================================================== --- trunk/reactos/lib/fast486/common.c [iso-8859-1] (original) +++ trunk/reactos/lib/fast486/common.c [iso-8859-1] Fri Oct 2 15:11:24 2015 @@ -42,6 +42,8 @@ { ULONG LinearAddress; PFAST486_SEG_REG CachedDescriptor; + FAST486_EXCEPTIONS Exception = SegmentReg != FAST486_REG_SS + ? FAST486_EXCEPTION_GP : FAST486_EXCEPTION_SS;
ASSERT(SegmentReg < FAST486_NUM_SEG_REGS);
@@ -53,7 +55,7 @@ if ((Offset + Size - 1) > CachedDescriptor->Limit) { /* Read beyond limit */ - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; } } @@ -62,7 +64,7 @@ if (Offset < CachedDescriptor->Limit) { /* Read beyond limit */ - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; } } @@ -74,14 +76,14 @@
if (!CachedDescriptor->Present) { - Fast486Exception(State, FAST486_EXCEPTION_NP); + Fast486Exception(State, Exception); return FALSE; }
if ((!InstFetch && (CachedDescriptor->Rpl > CachedDescriptor->Dpl)) || (Fast486GetCurrentPrivLevel(State) > CachedDescriptor->Dpl)) { - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; }
@@ -90,7 +92,7 @@ if (!CachedDescriptor->Executable) { /* Data segment not executable */ - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; } } @@ -99,7 +101,7 @@ if (CachedDescriptor->Executable && (!CachedDescriptor->ReadWrite)) { /* Code segment not readable */ - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; } } @@ -166,6 +168,8 @@ { ULONG LinearAddress; PFAST486_SEG_REG CachedDescriptor; + FAST486_EXCEPTIONS Exception = SegmentReg != FAST486_REG_SS + ? FAST486_EXCEPTION_GP : FAST486_EXCEPTION_SS;
ASSERT(SegmentReg < FAST486_NUM_SEG_REGS);
@@ -177,7 +181,7 @@ if ((Offset + Size - 1) > CachedDescriptor->Limit) { /* Write beyond limit */ - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; } } @@ -185,8 +189,8 @@ { if (Offset < CachedDescriptor->Limit) { - /* Read beyond limit */ - Fast486Exception(State, FAST486_EXCEPTION_GP); + /* Write beyond limit */ + Fast486Exception(State, Exception); return FALSE; } } @@ -198,27 +202,27 @@
if (!CachedDescriptor->Present) { - Fast486Exception(State, FAST486_EXCEPTION_NP); + Fast486Exception(State, Exception); return FALSE; }
if ((CachedDescriptor->Rpl > CachedDescriptor->Dpl) || (Fast486GetCurrentPrivLevel(State) > CachedDescriptor->Dpl)) { - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; }
if (CachedDescriptor->Executable) { /* Code segment not writable */ - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; } else if (!CachedDescriptor->ReadWrite) { /* Data segment not writeable */ - Fast486Exception(State, FAST486_EXCEPTION_GP); + Fast486Exception(State, Exception); return FALSE; } }