[eros-cvs] cvs commit: eros/src/base/sys/arch/i486/kernel UserContext.cxx
shap@eros.cs.jhu.edu
shap@eros.cs.jhu.edu
Wed, 8 Aug 2001 12:45:36 -0400
shap 01/08/08 12:45:36
Modified: src/base/sys/arch/i486/kernel UserContext.cxx
Log:
This is a TEMPORARY patch for an EFLAGS mismanagement bug
Revision Changes Path
1.271 +14 -0 eros/src/base/sys/arch/i486/kernel/UserContext.cxx
Index: UserContext.cxx
===================================================================
RCS file: /cvs/eros/src/base/sys/arch/i486/kernel/UserContext.cxx,v
retrieving revision 1.270
retrieving revision 1.271
diff -u -r1.270 -r1.271
--- UserContext.cxx 2001/08/01 15:05:38 1.270
+++ UserContext.cxx 2001/08/08 16:45:36 1.271
@@ -654,6 +654,13 @@
stats.evtCounter1 = 0;
#endif
+ fixreg_t iopl = (fixRegs.EFLAGS & MASK_EFLAGS_IOPL) >> SHIFT_EFLAGS_IOPL;
+ if (iopl != 2) {
+ fixRegs.EFLAGS &= ~MASK_EFLAGS_IOPL;
+ fixRegs.EFLAGS |= 2u << SHIFT_EFLAGS_IOPL;
+ MsgLog::printf("FixRegs were patched!\n");
+ }
+
fixRegs.ReloadUnits = 0;
for (uint32_t k = FIRST_ROOT_REG_SLOT; k <= LAST_ROOT_REG_SLOT; k++)
@@ -1460,6 +1467,13 @@
#if 0
MsgLog::dprintf(true, "SetRegs(): ctxt=0x%08x: EFLAGS now 0x%08x\n", this, fixRegs.EFLAGS);
#endif
+
+ fixreg_t iopl = (fixRegs.EFLAGS & MASK_EFLAGS_IOPL) >> SHIFT_EFLAGS_IOPL;
+ if (iopl != 2) {
+ fixRegs.EFLAGS &= ~MASK_EFLAGS_IOPL;
+ fixRegs.EFLAGS |= (2u << SHIFT_EFLAGS_IOPL);
+ MsgLog::printf("FixRegs were patched in setregs!\n");
+ }
NeedRevalidate();