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

[Xen-changelog] [xen-unstable] [TEST] Fix x86_emulate tests on x86/64 host.



# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1168362706 0
# Node ID ddea7363fa41a57adb6453c9594fd4e8fb6e9a20
# Parent  c98f3f3f7099ec1516354faa34a16be841e4a47c
[TEST] Fix x86_emulate tests on x86/64 host.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 tools/tests/test_x86_emulator.c |   32 ++++++++++++++++++++++++++------
 1 files changed, 26 insertions(+), 6 deletions(-)

diff -r c98f3f3f7099 -r ddea7363fa41 tools/tests/test_x86_emulator.c
--- a/tools/tests/test_x86_emulator.c   Tue Jan 09 16:59:52 2007 +0000
+++ b/tools/tests/test_x86_emulator.c   Tue Jan 09 17:11:46 2007 +0000
@@ -106,9 +106,12 @@ int main(int argc, char **argv)
 {
     struct x86_emulate_ctxt ctxt;
     struct cpu_user_regs regs;
-    char instr[20] = { 0x01, 0x08 }; /* add %ecx,(%eax) */
-    unsigned int *res, bcdres_native, bcdres_emul;
-    int rc, i;
+    char *instr;
+    unsigned int *res;
+    int rc;
+#ifndef __x86_64__
+    unsigned int i, bcdres_native, bcdres_emul;
+#endif
 
     ctxt.regs = &regs;
     ctxt.address_bytes = 4;
@@ -120,6 +123,7 @@ int main(int argc, char **argv)
         fprintf(stderr, "mmap to low address failed\n");
         exit(1);
     }
+    instr = (char *)res + 0x100;
 
     printf("%-40s", "Testing addl %%ecx,(%%eax)...");
     instr[0] = 0x01; instr[1] = 0x08;
@@ -409,6 +413,7 @@ int main(int argc, char **argv)
     printf("okay\n");
 
     printf("%-40s", "Testing daa/das (all inputs)...");
+#ifndef __x86_64__
     /* Bits 0-7: AL; Bit 8: EFLG_AF; Bit 9: EFLG_CF; Bit 10: DAA vs. DAS. */
     for ( i = 0; i < 0x800; i++ )
     {
@@ -426,6 +431,9 @@ int main(int argc, char **argv)
                 "pushf; popl %1"
                 : "=a" (bcdres_native), "=r" (regs.eflags)
                 : "0" (i & 0xff), "1" (regs.eflags) );
+        bcdres_native |= (regs.eflags & EFLG_PF) ? 0x1000 : 0;
+        bcdres_native |= (regs.eflags & EFLG_ZF) ? 0x800 : 0;
+        bcdres_native |= (regs.eflags & EFLG_SF) ? 0x400 : 0;
         bcdres_native |= (regs.eflags & EFLG_CF) ? 0x200 : 0;
         bcdres_native |= (regs.eflags & EFLG_AF) ? 0x100 : 0;
 
@@ -436,6 +444,9 @@ int main(int argc, char **argv)
         regs.eax    = (unsigned char)i;
         rc = x86_emulate(&ctxt, &emulops);
         bcdres_emul  = regs.eax;
+        bcdres_emul |= (regs.eflags & EFLG_PF) ? 0x1000 : 0;
+        bcdres_emul |= (regs.eflags & EFLG_ZF) ? 0x800 : 0;
+        bcdres_emul |= (regs.eflags & EFLG_SF) ? 0x400 : 0;
         bcdres_emul |= (regs.eflags & EFLG_CF) ? 0x200 : 0;
         bcdres_emul |= (regs.eflags & EFLG_AF) ? 0x100 : 0;
         if ( (rc != 0) || (regs.eax > 255) ||
@@ -445,8 +456,8 @@ int main(int argc, char **argv)
         if ( bcdres_emul != bcdres_native )
         {
             printf("%s:    AL=%02x %s %s\n"
-                   "Output: AL=%02x %s %s\n"
-                   "Emul.:  AL=%02x %s %s\n",
+                   "Output: AL=%02x %s %s %s %s %s\n"
+                   "Emul.:  AL=%02x %s %s %s %s %s\n",
                    (i & 0x400) ? "DAS" : "DAA",
                    (unsigned char)i,
                    (i & 0x200) ? "CF" : "  ",
@@ -454,13 +465,22 @@ int main(int argc, char **argv)
                    (unsigned char)bcdres_native,
                    (bcdres_native & 0x200) ? "CF" : "  ",
                    (bcdres_native & 0x100) ? "AF" : "  ",
+                   (bcdres_native & 0x1000) ? "PF" : "  ",
+                   (bcdres_native & 0x800) ? "ZF" : "  ",
+                   (bcdres_native & 0x400) ? "SF" : "  ",
                    (unsigned char)bcdres_emul,
                    (bcdres_emul & 0x200) ? "CF" : "  ",
-                   (bcdres_emul & 0x100) ? "AF" : "  ");
+                   (bcdres_emul & 0x100) ? "AF" : "  ",
+                   (bcdres_emul & 0x1000) ? "PF" : "  ",
+                   (bcdres_emul & 0x800) ? "ZF" : "  ",
+                   (bcdres_emul & 0x400) ? "SF" : "  ");
             goto fail;
         }
     }
     printf("okay\n");
+#else
+    printf("skipped\n");
+#endif
 
     return 0;
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.