qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [5403] Do not use load_seg_vm to load CS in real mode iret


From: malc
Subject: [Qemu-devel] [5403] Do not use load_seg_vm to load CS in real mode iret handling
Date: Thu, 02 Oct 2008 20:02:28 +0000

Revision: 5403
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5403
Author:   malc
Date:     2008-10-02 20:02:27 +0000 (Thu, 02 Oct 2008)

Log Message:
-----------
Do not use load_seg_vm to load CS in real mode iret handling

load_seg_vm calls cpu_x86_load_seg_cache which updates hflags of
current env, real hardware doesn't do this, nor the code that handles
real mode lret/lcall/ljmp.

This unbreaks "unreal mode" and makes QEMU the first emulator being
able to run Project Angel demo by IMPACT Studios. (Not that there are
many physical machines out there capable of doing the same)

Modified Paths:
--------------
    trunk/target-i386/op_helper.c

Modified: trunk/target-i386/op_helper.c
===================================================================
--- trunk/target-i386/op_helper.c       2008-10-02 19:55:50 UTC (rev 5402)
+++ trunk/target-i386/op_helper.c       2008-10-02 20:02:27 UTC (rev 5403)
@@ -2651,7 +2651,8 @@
         POPW(ssp, sp, sp_mask, new_eflags);
     }
     ESP = (ESP & ~sp_mask) | (sp & sp_mask);
-    load_seg_vm(R_CS, new_cs);
+    env->segs[R_CS].selector = new_cs;
+    env->segs[R_CS].base = (new_cs << 4);
     env->eip = new_eip;
     if (env->eflags & VM_MASK)
         eflags_mask = TF_MASK | AC_MASK | ID_MASK | IF_MASK | RF_MASK | 
NT_MASK;






reply via email to

[Prev in Thread] Current Thread [Next in Thread]