|
From: Paulo C. P. de A. <pc...@ma...> - 2011-03-13 15:02:50
|
Hi, I just switched development of my language, and its jit generation based on gnu lightning on a x86_64 computer, and this happens when running jit generated code under valgrind. (other valgrind messages about bug report, etc) ==16208== Process terminating with default action of signal 4 (SIGILL) ==16208== Illegal opcode at address 0x9F14FD8 ==16208== at 0x9F14FD8: ??? ==16208== ==16208== ---- Attach to debugger ? --- [Return/N/n/Y/y/C/c] ---- y (gdb) x/20i 0x0000000009f14fd8-20 0x9f14fc4: xor %rax,%rax 0x9f14fc7: rex.WB callq *%r13 0x9f14fca: nopw 0x0(%rax,%rax,1) 0x9f14fd0: mov 0x20(%rbx),%r10 0x9f14fd4: mov -0x28(%r10),%r10 => 0x9f14fd8: movslq 0x24(%r10),%r13d 0x9f14fdc: mov 0x28(%rbx),%r10 0x9f14fe0: lea 0x18(%r10),%rax 0x9f14fe4: mov %rax,0x28(%rbx) 0x9f14fe8: movabs $0x1,%rax 0x9f14ff2: mov %eax,(%r10) 0x9f14ff5: mov %r13,0x8(%r10) (gdb) x/4x 0x9f14fd8 0x9f14fd8: 0x45 0x63 0x6a 0x24 (gdb) x/4t 0x9f14fd8 0x9f14fd8: 01000101 01100011 01101010 00100100 $ rpm -q valgrind valgrind-3.6.1-1-mdv2011.0.x86_64 Sorry if this is an error in the code generation, but since it works, load and sign extends a 32 bit integer from memory to a 64 bit register, I believe it should be correct to some extent... In case it is useful, sources can be browsed at https://code.google.com/p/exl/source/browse/ and/or https://code.google.com/p/exl/source/browse/trunk/lib/ejit_x86-cpu.c Thanks, Paulo |