https://bugs.kde.org/show_bug.cgi?id=379525
Bug ID: 379525 Summary: Support more x86 nop opcodes Product: valgrind Version: 3.13 SVN Platform: unspecified OS: Linux Status: UNCONFIRMED Severity: normal Priority: NOR Component: general Assignee: jsew...@acm.org Reporter: hjl.to...@gmail.com Target Milestone: --- For x86, the follow opcodes are NOP with a register or memory operand, which can take regular prefixes: 0f 19 0f 1c 0f 1d 0f 1e 0f 1f [hjl@gnu-6 tmp]$ cat x.c #include <stdio.h> int main () { asm (".byte 0x67, 0xf2, 0xf3, 0x66, 0x0f, 0x19, 0x44, 0x0, 0x0"); asm (".byte 0x67, 0xf2, 0xf3, 0x66, 0x0f, 0x1c, 0x44, 0x0, 0x0"); asm (".byte 0x67, 0xf2, 0xf3, 0x66, 0x0f, 0x1d, 0x44, 0x0, 0x0"); asm (".byte 0x67, 0xf2, 0xf3, 0x66, 0x0f, 0x1e, 0x44, 0x0, 0x0"); asm (".byte 0x67, 0xf2, 0xf3, 0x66, 0x0f, 0x1f, 0x44, 0x0, 0x0"); printf ("hello\n"); return 0; } [hjl@gnu-6 tmp]$ gcc x.c [hjl@gnu-6 tmp]$ (gdb) r Starting program: /tmp/a.out Missing separate debuginfos, use: dnf debuginfo-install glibc-2.24-5.3.fc25.x86_64 hello [Inferior 1 (process 26135) exited normally] (gdb) disass/r main Dump of assembler code for function main: 0x00000000004004f6 <+0>: 55 push %rbp 0x00000000004004f7 <+1>: 48 89 e5 mov %rsp,%rbp 0x00000000004004fa <+4>: 67 f2 f3 66 0f 19 44 00 00 repnz repz nopw 0x0(%eax,%eax,1) 0x0000000000400503 <+13>: 67 f2 f3 66 0f 1c 44 00 00 repnz repz nopw 0x0(%eax,%eax,1) 0x000000000040050c <+22>: 67 f2 f3 66 0f 1d 44 00 00 repnz repz nopw 0x0(%eax,%eax,1) 0x0000000000400515 <+31>: 67 f2 f3 66 0f 1e 44 00 00 repnz repz nopw 0x0(%eax,%eax,1) 0x000000000040051e <+40>: 67 f2 f3 66 0f 1f 44 00 00 repnz repz nopw 0x0(%eax,%eax,1) 0x0000000000400527 <+49>: bf d0 05 40 00 mov $0x4005d0,%edi 0x000000000040052c <+54>: e8 bf fe ff ff callq 0x4003f0 <puts@plt> 0x0000000000400531 <+59>: b8 00 00 00 00 mov $0x0,%eax 0x0000000000400536 <+64>: 5d pop %rbp 0x0000000000400537 <+65>: c3 retq End of assembler dump. (gdb) [hjl@gnu-6 tmp]$ valgrind ./a.out ==26187== Memcheck, a memory error detector ==26187== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==26187== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info ==26187== Command: ./a.out ==26187== vex amd64->IR: unhandled instruction bytes: 0x67 0xF2 0xF3 0x66 0xF 0x19 0x44 0x0 0x0 0x67 vex amd64->IR: REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0 vex amd64->IR: VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=NONE vex amd64->IR: PFX.66=1 PFX.F2=1 PFX.F3=1 ==26187== valgrind: Unrecognised instruction at address 0x4004fa. ==26187== at 0x4004FA: main (in /tmp/a.out) ==26187== Your program just tried to execute an instruction that Valgrind ==26187== did not recognise. There are two possible reasons for this. ==26187== 1. Your program has a bug and erroneously jumped to a non-code ==26187== location. If you are running Memcheck and you just saw a ==26187== warning about a bad jump, it's probably your program's fault. ==26187== 2. The instruction is legitimate but Valgrind doesn't handle it, ==26187== i.e. it's Valgrind's fault. If you think this is the case or ==26187== you are not sure, please let us know and we'll try to fix it. ==26187== Either way, Valgrind will now raise a SIGILL signal which will ==26187== probably kill your program. ==26187== ==26187== Process terminating with default action of signal 4 (SIGILL) ==26187== Illegal opcode at address 0x4004FA ==26187== at 0x4004FA: main (in /tmp/a.out) ==26187== ==26187== HEAP SUMMARY: ==26187== in use at exit: 0 bytes in 0 blocks ==26187== total heap usage: 0 allocs, 0 frees, 0 bytes allocated ==26187== ==26187== All heap blocks were freed -- no leaks are possible ==26187== ==26187== For counts of detected and suppressed errors, rerun with: -v ==26187== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) Illegal instruction [hjl@gnu-6 tmp]$ -- You are receiving this mail because: You are watching all bug changes.