[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();