X86: Fix the segment setting code in IRET, and make it restore the flags.
authorGabe Black <gblack@eecs.umich.edu>
Mon, 13 Oct 2008 06:05:22 +0000 (23:05 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Mon, 13 Oct 2008 06:05:22 +0000 (23:05 -0700)
src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py

index 125866ce5bec704aa120682e7f651f6d65622292..57bc136983c8616402ecfcbb788633c1f997cd37 100644 (file)
@@ -190,8 +190,8 @@ processSSDescriptor:
 
     # This actually updates state which is wrong. It should wait until we know
     # we're not going to fault. Unfortunately, that's hard to do.
-    wrdl cs, t7, t2
-    wrsel cs, t2
+    wrdl ss, t7, t2
+    wrsel ss, t2
 
 ###
 ### From this point downwards, we can't fault. We can update user visible state.
@@ -224,6 +224,7 @@ skipSegmentSquashing:
 
     # Ignore this for now.
     #RFLAGS.v = temp_RFLAGS
+    wrflags t0, t3
     #  VIF,VIP,IOPL only changed if (old_CPL = 0)
     #  IF only changed if (old_CPL <= old_RFLAGS.IOPL)
     #  VM unchanged