Index: compiler-rt/trunk/lib/interception/interception_win.cc =================================================================== --- compiler-rt/trunk/lib/interception/interception_win.cc +++ compiler-rt/trunk/lib/interception/interception_win.cc @@ -461,6 +461,7 @@ case 0x5541: // push r13 case 0x5641: // push r14 case 0x5741: // push r15 + case 0x9066: // Two-byte NOP return 2; } Index: compiler-rt/trunk/lib/interception/tests/interception_win_test.cc =================================================================== --- compiler-rt/trunk/lib/interception/tests/interception_win_test.cc +++ compiler-rt/trunk/lib/interception/tests/interception_win_test.cc @@ -234,8 +234,18 @@ // Add the detour instruction (i.e. mov edi, edi) if (prefix_kind == FunctionPrefixDetour) { +#if SANITIZER_WINDOWS64 + // Note that "mov edi,edi" is NOP in 32-bit only, in 64-bit it clears + // higher bits of RDI. + // Use 66,90H as NOP for Windows64. + ActiveCode[position++] = 0x66; + ActiveCode[position++] = 0x90; +#else + // mov edi,edi. ActiveCode[position++] = 0x8B; ActiveCode[position++] = 0xFF; +#endif + } // Copy the function body.