From 441ccab2b4b37ed35be71e4cbde48c6c25f8449c Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Sat, 26 Sep 2015 19:22:50 +0000 Subject: [PATCH] [FAST486] Whether a TSS is 16-bit or 32-bit depends solely on its signature. Its size is irrelevant. svn path=/trunk/; revision=69367 --- reactos/lib/fast486/common.c | 24 ++++++++++++------------ reactos/lib/fast486/opgroups.c | 2 ++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/reactos/lib/fast486/common.c b/reactos/lib/fast486/common.c index 2c2a4ac2111..cb47a7eb3da 100644 --- a/reactos/lib/fast486/common.c +++ b/reactos/lib/fast486/common.c @@ -328,7 +328,7 @@ Fast486InterruptInternal(PFAST486_STATE State, if (!Fast486ReadLinearMemory(State, State->TaskReg.Base, &Tss, - State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1) + State->TaskReg.Modern ? sizeof(FAST486_TSS) : sizeof(FAST486_LEGACY_TSS), FALSE)) { @@ -347,7 +347,7 @@ Fast486InterruptInternal(PFAST486_STATE State, { case 0: { - if (State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1)) + if (State->TaskReg.Modern) { NewSs = Tss.Ss0; NewEsp = Tss.Esp0; @@ -363,7 +363,7 @@ Fast486InterruptInternal(PFAST486_STATE State, case 1: { - if (State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1)) + if (State->TaskReg.Modern) { NewSs = Tss.Ss1; NewEsp = Tss.Esp1; @@ -379,7 +379,7 @@ Fast486InterruptInternal(PFAST486_STATE State, case 2: { - if (State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1)) + if (State->TaskReg.Modern) { NewSs = Tss.Ss2; NewEsp = Tss.Esp2; @@ -632,7 +632,7 @@ Fast486TaskSwitch(PFAST486_STATE State, FAST486_TASK_SWITCH_TYPE Type, USHORT Se if (!Fast486ReadLinearMemory(State, State->TaskReg.Base, &OldTss, - State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1) + State->TaskReg.Modern ? sizeof(FAST486_TSS) : sizeof(FAST486_LEGACY_TSS), FALSE)) { @@ -644,7 +644,7 @@ Fast486TaskSwitch(PFAST486_STATE State, FAST486_TASK_SWITCH_TYPE Type, USHORT Se /* If this is a task return, use the linked previous selector */ if (Type == FAST486_TASK_RETURN) { - if (State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1)) Selector = LOWORD(OldTss.Link); + if (State->TaskReg.Modern) Selector = LOWORD(OldTss.Link); else Selector = OldLegacyTss->Link; } @@ -761,7 +761,7 @@ Fast486TaskSwitch(PFAST486_STATE State, FAST486_TASK_SWITCH_TYPE Type, USHORT Se } /* Save the current task into the TSS */ - if (State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1)) + if (State->TaskReg.Modern) { OldTss.Cr3 = State->ControlRegisters[FAST486_REG_CR3]; OldTss.Eip = State->InstPtr.Long; @@ -805,7 +805,7 @@ Fast486TaskSwitch(PFAST486_STATE State, FAST486_TASK_SWITCH_TYPE Type, USHORT Se if (!Fast486WriteLinearMemory(State, State->TaskReg.Base, &OldTss, - State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1) + State->TaskReg.Modern ? sizeof(FAST486_TSS) : sizeof(FAST486_LEGACY_TSS), FALSE)) { @@ -1059,7 +1059,7 @@ Fast486CallGate(PFAST486_STATE State, if (!Fast486ReadLinearMemory(State, State->TaskReg.Base, &Tss, - State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1) + State->TaskReg.Modern ? sizeof(FAST486_TSS) : sizeof(FAST486_LEGACY_TSS), FALSE)) { @@ -1075,7 +1075,7 @@ Fast486CallGate(PFAST486_STATE State, { case 0: { - if (State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1)) + if (State->TaskReg.Modern) { NewSs = Tss.Ss0; NewEsp = Tss.Esp0; @@ -1091,7 +1091,7 @@ Fast486CallGate(PFAST486_STATE State, case 1: { - if (State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1)) + if (State->TaskReg.Modern) { NewSs = Tss.Ss1; NewEsp = Tss.Esp1; @@ -1107,7 +1107,7 @@ Fast486CallGate(PFAST486_STATE State, case 2: { - if (State->TaskReg.Limit >= (sizeof(FAST486_TSS) - 1)) + if (State->TaskReg.Modern) { NewSs = Tss.Ss2; NewEsp = Tss.Esp2; diff --git a/reactos/lib/fast486/opgroups.c b/reactos/lib/fast486/opgroups.c index 28ac67aaf1e..e7605f1b234 100644 --- a/reactos/lib/fast486/opgroups.c +++ b/reactos/lib/fast486/opgroups.c @@ -1960,6 +1960,8 @@ FAST486_OPCODE_HANDLER(Fast486ExtOpcodeGroup0F00) State->TaskReg.Selector = Selector; State->TaskReg.Base = GdtEntry.Base | (GdtEntry.BaseMid << 16) | (GdtEntry.BaseHigh << 24); State->TaskReg.Limit = GdtEntry.Limit | (GdtEntry.LimitHigh << 16); + State->TaskReg.Modern = GdtEntry.Signature == FAST486_TSS_SIGNATURE + || GdtEntry.Signature == FAST486_BUSY_TSS_SIGNATURE; if (GdtEntry.Granularity) {