changeset 4bbd6239223c in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=4bbd6239223c
description:
        X86: Update CS later so stack accesses have the right permission checks.

diffstat:

1 file changed, 15 insertions(+), 16 deletions(-)
src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py
 |   31 ++++------

diffs (71 lines):

diff -r 156cc0770e74 -r 4bbd6239223c 
src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py
--- 
a/src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py
      Wed Feb 25 10:18:45 2009 -0800
+++ 
b/src/arch/x86/isa/insts/general_purpose/control_transfer/interrupts_and_exceptions.py
      Wed Feb 25 10:18:51 2009 -0800
@@ -118,20 +118,13 @@
     andi t6, t2, 0xF8, dataSize=8
     andi t0, t2, 0x4, flags=(EZF,), dataSize=2
     br label("globalCSDescriptor"), flags=(CEZF,)
-    ld t6, tsl, [1, t0, t6], dataSize=8
+    ld t8, tsl, [1, t0, t6], dataSize=8
     br label("processCSDescriptor")
 globalCSDescriptor:
-    ld t6, tsg, [1, t0, t6], dataSize=8
+    ld t8, tsg, [1, t0, t6], dataSize=8
 processCSDescriptor:
     chks t2, t6, dataSize=8
 
-    # 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, t6, t2
-    wrsel cs, t2
-
-    #CPL = temp_CPL
-
 
 ###
 ### Get the new stack pointer and stack segment off the old stack if necessary,
@@ -175,24 +168,24 @@
     #    POP.v temp_RSP
     ld t6, ss, [1, t0, rsp], "3 * env.dataSize", dataSize=ssz
     #    POP.v temp_SS
-    ld t2, ss, [1, t0, rsp], "4 * env.dataSize", dataSize=ssz
+    ld t9, ss, [1, t0, rsp], "4 * env.dataSize", dataSize=ssz
     #    SS = READ_DESCRIPTOR (temp_SS, ss_chk)
-    andi t0, t2, 0xFC, flags=(EZF,), dataSize=2
+    andi t0, t9, 0xFC, flags=(EZF,), dataSize=2
     br label("processSSDescriptor"), flags=(CEZF,)
-    andi t7, t2, 0xF8, dataSize=8
-    andi t0, t2, 0x4, flags=(EZF,), dataSize=2
+    andi t7, t9, 0xF8, dataSize=8
+    andi t0, t9, 0x4, flags=(EZF,), dataSize=2
     br label("globalSSDescriptor"), flags=(CEZF,)
     ld t7, tsl, [1, t0, t7], dataSize=8
     br label("processSSDescriptor")
 globalSSDescriptor:
     ld t7, tsg, [1, t0, t7], dataSize=8
 processSSDescriptor:
-    chks t2, t7, dataSize=8
+    chks t9, t7, dataSize=8
 
     # 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 ss, t7, t2
-    wrsel ss, t2
+    wrdl ss, t7, t9
+    wrsel ss, t9
 
 ###
 ### From this point downwards, we can't fault. We can update user visible 
state.
@@ -204,6 +197,12 @@
 
 fallThroughPopStackStuff:
 
+    # Update CS
+    wrdl cs, t8, t2
+    wrsel cs, t2
+
+    #CPL = temp_CPL
+
     #IF (changing CPL)
     #{
     srli t7, t4, 4
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to