]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add regtest for x86 cmpxchg8b.
authorJulian Seward <jseward@acm.org>
Fri, 12 Aug 2005 23:40:55 +0000 (23:40 +0000)
committerJulian Seward <jseward@acm.org>
Fri, 12 Aug 2005 23:40:55 +0000 (23:40 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4390

docs/internals/3_0_BUGSTATUS.txt
none/tests/x86/Makefile.am
none/tests/x86/cmpxchg8b.c [new file with mode: 0644]
none/tests/x86/cmpxchg8b.stderr.exp [new file with mode: 0644]
none/tests/x86/cmpxchg8b.stdout.exp [new file with mode: 0644]
none/tests/x86/cmpxchg8b.vgtest [new file with mode: 0644]

index bd13673703c9fbe5c743798e66aec05d2d74fed9..f59add7068579a9f75ac380a455ae17ce5bfb872 100644 (file)
@@ -55,7 +55,7 @@ FIXED-30BRANCH: won't (3.1 fix only)
 
 This ought to be fixed for 3.0.1.
 
-FIXED-TRUNK:    TODO
+FIXED-TRUNK:    done(1331,)
 FIXED-30BRANCH: TODO
 
 ----------------------------------------------------------------
@@ -243,7 +243,7 @@ FIXED-30BRANCH: no
 
 110591 amd64: rdtsc not implemented properly
 
-(Also afflicts x86)
+Under consideration. (Also afflicts x86)
 
 FIXED-TRUNK:    no
 FIXED-30BRANCH: no
@@ -276,3 +276,18 @@ FIXED-30BRANCH: TODO
 FIXED-TRUNK:    done(4386)
 FIXED-30BRANCH: TODO
 
+----------------------------------------------------------------
+
+110669  valgrind attach to gdb and quitting gdb hangs valgrind
+
+Not clear if this is really a Valgrind bug.
+
+FIXED-TRUNK:    no
+FIXED-30BRANCH: no
+
+----------------------------------------------------------------
+
+110671  vex x86->IR: unhandled instruction bytes: 0xF3 0xC3 (rep ret)
+
+FIXED-TRUNK:    TODO
+FIXED-30BRANCH: TODO
index 5c5a52c930930be15ba8de80ca34f0b4ea2b88a5..855fee38147ed28c9218d73ab436ba52baea55b5 100644 (file)
@@ -8,6 +8,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        bt_everything.stderr.exp bt_everything.stdout.exp bt_everything.vgtest \
        bt_literal.stderr.exp bt_literal.stdout.exp bt_literal.vgtest \
        cpuid.stderr.exp cpuid.stdout.exp cpuid.vgtest \
+       cmpxchg8b.stderr.exp cmpxchg8b.stdout.exp cmpxchg8b.vgtest \
        fpu_lazy_eflags.stderr.exp fpu_lazy_eflags.stdout.exp \
        fpu_lazy_eflags.vgtest \
        getseg.stdout.exp getseg.stderr.exp getseg.vgtest \
@@ -22,7 +23,7 @@ EXTRA_DIST = $(noinst_SCRIPTS) \
        yield.stderr.exp yield.stdout.exp yield.vgtest
 
 check_PROGRAMS = \
-       badseg bt_everything bt_literal cpuid fpu_lazy_eflags \
+       badseg bt_everything bt_literal cmpxchg8b cpuid fpu_lazy_eflags \
        getseg $(INSN_TESTS) \
        int pushpopseg seg_override sigcontext smc1 yield
 
diff --git a/none/tests/x86/cmpxchg8b.c b/none/tests/x86/cmpxchg8b.c
new file mode 100644 (file)
index 0000000..6e252f1
--- /dev/null
@@ -0,0 +1,82 @@
+
+#include <stdio.h>
+
+typedef unsigned long long int ULong;
+typedef unsigned int UInt;
+
+ULong m64;
+
+UInt eax;
+UInt ebx;
+UInt ecx;
+UInt edx;
+UInt zout;
+
+extern void foo ( void );
+asm("\n"
+    "foo:\n"
+    "\tpushl %eax\n"
+    "\tpushl %ebx\n"
+    "\tpushl %ecx\n"
+    "\tpushl %edx\n"
+
+    "\txorl %eax, %eax\n" // get eflags in a known state
+
+    "\tmovl eax,%eax\n"
+    "\tmovl ebx,%ebx\n"
+    "\tmovl ecx,%ecx\n"
+    "\tmovl edx,%edx\n"
+    "\tcmpxchg8b m64\n"
+    "\tmovl %eax,eax\n"
+    "\tmovl %ebx,ebx\n"
+    "\tmovl %ecx,ecx\n"
+    "\tmovl %edx,edx\n"
+    "\tpushfl\n"
+    "\tpopl %eax\n"
+    "\tmovl %eax,zout\n"
+
+    "\tpopl %edx\n"
+    "\tpopl %ecx\n"
+    "\tpopl %edx\n"
+    "\tpopl %eax\n"
+    "\tret\n"
+    );
+
+int main ( void )
+{
+   edx  = 0x11111111; eax = 0x22222222;
+   ecx  = 0x33333333; ebx = 0x44444444;
+   zout = 0x55555555;
+   m64  = 0x1111111122222222ULL;
+   foo();
+   printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%llx\n",
+         eax, ebx, ecx, edx, zout & 0xFFFF, m64 );
+
+   edx  = 0x11111111; eax = 0x22222222;
+   ecx  = 0x33333333; ebx = 0x44444444;
+   zout = 0x55555555;
+   m64  = 0x1111111122222222ULL;
+   m64 += 0x1ULL;
+   foo();
+   printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%llx\n",
+         eax, ebx, ecx, edx, zout & 0xFFFF, m64 );
+
+   edx  = 0x11111111; eax = 0x22222222;
+   ecx  = 0x33333333; ebx = 0x44444444;
+   zout = 0x55555555;
+   m64  = 0x1111111122222222ULL;
+   m64 += 0x100000000ULL;
+   foo();
+   printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%llx\n",
+         eax, ebx, ecx, edx, zout & 0xFFFF, m64 );
+
+   edx  = 0x11111111; eax = 0x22222222;
+   ecx  = 0x33333333; ebx = 0x44444444;
+   zout = 0x55555555;
+   m64  = 0x6666666677777777ULL;
+   foo();
+   printf("0x%x 0x%x 0x%x 0x%x 0x%x 0x%llx\n",
+         eax, ebx, ecx, edx, zout & 0xFFFF, m64 );
+
+   return 0;
+}
diff --git a/none/tests/x86/cmpxchg8b.stderr.exp b/none/tests/x86/cmpxchg8b.stderr.exp
new file mode 100644 (file)
index 0000000..139597f
--- /dev/null
@@ -0,0 +1,2 @@
+
+
diff --git a/none/tests/x86/cmpxchg8b.stdout.exp b/none/tests/x86/cmpxchg8b.stdout.exp
new file mode 100644 (file)
index 0000000..0d01bc3
--- /dev/null
@@ -0,0 +1,4 @@
+0x22222222 0x44444444 0x33333333 0x11111111 0x246 0x3333333344444444
+0x22222223 0x44444444 0x33333333 0x11111111 0x206 0x1111111122222223
+0x22222222 0x44444444 0x33333333 0x11111112 0x206 0x1111111222222222
+0x77777777 0x44444444 0x33333333 0x66666666 0x206 0x6666666677777777
diff --git a/none/tests/x86/cmpxchg8b.vgtest b/none/tests/x86/cmpxchg8b.vgtest
new file mode 100644 (file)
index 0000000..6dea39f
--- /dev/null
@@ -0,0 +1 @@
+prog: cmpxchg8b