This ought to be fixed for 3.0.1.
-FIXED-TRUNK: TODO
+FIXED-TRUNK: done(1331,)
FIXED-30BRANCH: TODO
----------------------------------------------------------------
110591 amd64: rdtsc not implemented properly
-(Also afflicts x86)
+Under consideration. (Also afflicts x86)
FIXED-TRUNK: no
FIXED-30BRANCH: no
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
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 \
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
--- /dev/null
+
+#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;
+}