Author: aandrejevic
Date: Sat Oct 11 14:03:17 2014
New Revision: 64668
URL:
http://svn.reactos.org/svn/reactos?rev=64668&view=rev
Log:
[FAST486]
Save and restore the prefix flags in Fast486InterruptInternal instead of hacking around
this
everywhere else.
Modified:
trunk/reactos/lib/fast486/common.c
trunk/reactos/lib/fast486/fast486.c
Modified: trunk/reactos/lib/fast486/common.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/common.c?rev=6…
==============================================================================
--- trunk/reactos/lib/fast486/common.c [iso-8859-1] (original)
+++ trunk/reactos/lib/fast486/common.c [iso-8859-1] Sat Oct 11 14:03:17 2014
@@ -168,6 +168,8 @@
{
BOOLEAN GateSize = (GateType == FAST486_IDT_INT_GATE_32)
|| (GateType == FAST486_IDT_TRAP_GATE_32);
+ BOOLEAN Success = FALSE;
+ ULONG OldPrefixFlags = State->PrefixFlags;
/* Check for protected mode */
if (State->ControlRegisters[FAST486_REG_CR0] & FAST486_CR0_PE)
@@ -195,7 +197,7 @@
sizeof(Tss)))
{
/* Exception occurred */
- return FALSE;
+ goto Cleanup;
}
/* Check the new (higher) privilege level */
@@ -206,7 +208,7 @@
if (!Fast486LoadSegment(State, FAST486_REG_SS, Tss.Ss0))
{
/* Exception occurred */
- return FALSE;
+ goto Cleanup;
}
State->GeneralRegs[FAST486_REG_ESP].Long = Tss.Esp0;
@@ -218,7 +220,7 @@
if (!Fast486LoadSegment(State, FAST486_REG_SS, Tss.Ss1))
{
/* Exception occurred */
- return FALSE;
+ goto Cleanup;
}
State->GeneralRegs[FAST486_REG_ESP].Long = Tss.Esp1;
@@ -230,7 +232,7 @@
if (!Fast486LoadSegment(State, FAST486_REG_SS, Tss.Ss2))
{
/* Exception occurred */
- return FALSE;
+ goto Cleanup;
}
State->GeneralRegs[FAST486_REG_ESP].Long = Tss.Esp2;
@@ -245,10 +247,10 @@
}
/* Push SS selector */
- if (!Fast486StackPush(State, OldSs)) return FALSE;
+ if (!Fast486StackPush(State, OldSs)) goto Cleanup;
/* Push stack pointer */
- if (!Fast486StackPush(State, OldEsp)) return FALSE;
+ if (!Fast486StackPush(State, OldEsp)) goto Cleanup;
}
}
else
@@ -261,13 +263,13 @@
}
/* Push EFLAGS */
- if (!Fast486StackPush(State, State->Flags.Long)) return FALSE;
+ if (!Fast486StackPush(State, State->Flags.Long)) goto Cleanup;
/* Push CS selector */
- if (!Fast486StackPush(State, State->SegmentRegs[FAST486_REG_CS].Selector)) return
FALSE;
+ if (!Fast486StackPush(State, State->SegmentRegs[FAST486_REG_CS].Selector)) goto
Cleanup;
/* Push the instruction pointer */
- if (!Fast486StackPush(State, State->InstPtr.Long)) return FALSE;
+ if (!Fast486StackPush(State, State->InstPtr.Long)) goto Cleanup;
if ((GateType == FAST486_IDT_INT_GATE) || (GateType == FAST486_IDT_INT_GATE_32))
{
@@ -279,7 +281,7 @@
if (!Fast486LoadSegment(State, FAST486_REG_CS, SegmentSelector))
{
/* An exception occurred during the jump */
- return FALSE;
+ goto Cleanup;
}
if (GateSize)
@@ -293,7 +295,13 @@
State->InstPtr.LowWord = LOWORD(Offset);
}
- return TRUE;
+ Success = TRUE;
+
+Cleanup:
+ /* Restore the prefix flags */
+ State->PrefixFlags = OldPrefixFlags;
+
+ return Success;
}
VOID
Modified: trunk/reactos/lib/fast486/fast486.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/fast486/fast486.c?rev=…
==============================================================================
--- trunk/reactos/lib/fast486/fast486.c [iso-8859-1] (original)
+++ trunk/reactos/lib/fast486/fast486.c [iso-8859-1] Sat Oct 11 14:03:17 2014
@@ -103,9 +103,6 @@
IdtEntry.Selector,
MAKELONG(IdtEntry.Offset, IdtEntry.OffsetHigh),
IdtEntry.Type);
-
- /* Restore the prefix flags, which would be set to OPSIZE for 32-bit real
mode */
- State->PrefixFlags = 0;
}
/* Clear the interrupt status */