From 76cfc4175df8ce313c8a4ffb63ec6fdb56c6da64 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Fri, 12 Aug 2005 23:40:55 +0000 Subject: [PATCH] Add regtest for x86 cmpxchg8b. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4390 --- docs/internals/3_0_BUGSTATUS.txt | 19 ++++++- none/tests/x86/Makefile.am | 3 +- none/tests/x86/cmpxchg8b.c | 82 +++++++++++++++++++++++++++++ none/tests/x86/cmpxchg8b.stderr.exp | 2 + none/tests/x86/cmpxchg8b.stdout.exp | 4 ++ none/tests/x86/cmpxchg8b.vgtest | 1 + 6 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 none/tests/x86/cmpxchg8b.c create mode 100644 none/tests/x86/cmpxchg8b.stderr.exp create mode 100644 none/tests/x86/cmpxchg8b.stdout.exp create mode 100644 none/tests/x86/cmpxchg8b.vgtest diff --git a/docs/internals/3_0_BUGSTATUS.txt b/docs/internals/3_0_BUGSTATUS.txt index bd13673703..f59add7068 100644 --- a/docs/internals/3_0_BUGSTATUS.txt +++ b/docs/internals/3_0_BUGSTATUS.txt @@ -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 diff --git a/none/tests/x86/Makefile.am b/none/tests/x86/Makefile.am index 5c5a52c930..855fee3814 100644 --- a/none/tests/x86/Makefile.am +++ b/none/tests/x86/Makefile.am @@ -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 index 0000000000..6e252f1ce1 --- /dev/null +++ b/none/tests/x86/cmpxchg8b.c @@ -0,0 +1,82 @@ + +#include + +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 index 0000000000..139597f9cb --- /dev/null +++ b/none/tests/x86/cmpxchg8b.stderr.exp @@ -0,0 +1,2 @@ + + diff --git a/none/tests/x86/cmpxchg8b.stdout.exp b/none/tests/x86/cmpxchg8b.stdout.exp new file mode 100644 index 0000000000..0d01bc327a --- /dev/null +++ b/none/tests/x86/cmpxchg8b.stdout.exp @@ -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 index 0000000000..6dea39f05f --- /dev/null +++ b/none/tests/x86/cmpxchg8b.vgtest @@ -0,0 +1 @@ +prog: cmpxchg8b -- 2.47.3