Skip to content

[win/asan] GetInstructionSize: Support the instruction 0f 29 74 24 XX. #152361

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

bernhardu
Copy link
Contributor

No description provided.

@llvmbot
Copy link
Member

llvmbot commented Aug 6, 2025

@llvm/pr-subscribers-compiler-rt-sanitizer

Author: None (bernhardu)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/152361.diff

2 Files Affected:

  • (modified) compiler-rt/lib/interception/interception_win.cpp (+5)
  • (modified) compiler-rt/lib/interception/tests/interception_win_test.cpp (+1)
diff --git a/compiler-rt/lib/interception/interception_win.cpp b/compiler-rt/lib/interception/interception_win.cpp
index 246a22c56c31a..5402f8368a409 100644
--- a/compiler-rt/lib/interception/interception_win.cpp
+++ b/compiler-rt/lib/interception/interception_win.cpp
@@ -684,6 +684,11 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
       return 3;
   }
 
+  switch (*(u32 *)address) {
+    case 0x2474290f :  // 0f 29 74 24 XX : movaps %xmm6, XX(%rsp)
+      return 5;
+  }
+
 #  if SANITIZER_WINDOWS_x64
   switch (*(u8*)address) {
     case 0xA1:  // A1 XX XX XX XX XX XX XX XX :
diff --git a/compiler-rt/lib/interception/tests/interception_win_test.cpp b/compiler-rt/lib/interception/tests/interception_win_test.cpp
index f11c1d1458556..ef1e94d02b793 100644
--- a/compiler-rt/lib/interception/tests/interception_win_test.cpp
+++ b/compiler-rt/lib/interception/tests/interception_win_test.cpp
@@ -867,6 +867,7 @@ const struct InstructionSizeData {
     { 3, {0xc2, 0x71, 0x72}, 0, "C2 XX XX : ret XX (needed for registering weak functions)"},
     { 4, {0x8D, 0x4C, 0x24, 0x73}, 0, "8D 4C 24 XX : lea ecx, [esp + XX]"},
     { 4, {0xFF, 0x74, 0x24, 0x73}, 0, "FF 74 24 XX : push qword ptr [rsp + XX]"},
+    { 5, {0x0f, 0x29, 0x74, 0x24, 0x74}, 0, "0f 29 74 24 XX : movaps %xmm6, XX(%rsp)"},
     { 5, {0x68, 0x71, 0x72, 0x73, 0x74}, 0, "68 XX XX XX XX : push imm32"},
     { 5, {0xb8, 0x71, 0x72, 0x73, 0x74}, 0, "b8 XX XX XX XX : mov eax, XX XX XX XX"},
     { 5, {0xB9, 0x71, 0x72, 0x73, 0x74}, 0, "b9 XX XX XX XX : mov ecx, XX XX XX XX"},

@bernhardu
Copy link
Contributor Author

bernhardu commented Aug 6, 2025

This instruction appeared in CI here,
while trying to run the Windows ASan tests for i686 and amd64.

==5976==interception_win: unhandled instruction at 0x7ff7662a48d4: 0f 29 74 24 30 0f 28 f0
==2188==interception_win: unhandled instruction at 0x7ff7dc8848d4: 0f 29 74 24 30 0f 28 f0

Unfortunately this did not show up in any other run before or afterwards,
so I cannot say from which file this instruction originates from.

This is how lldb interprets them:

(lldb) disassemble --bytes --start-address 0x0000555555556004 --end-address 0x0000555555556024
    0x555555556004: 0f 29 74 24 30  movaps %xmm6, 0x30(%rsp)

CC: @zmodem

Copy link

github-actions bot commented Aug 6, 2025

✅ With the latest revision this PR passed the C/C++ code formatter.

@bernhardu bernhardu force-pushed the instruction-0f-29-74-24-XX branch from 21ceb02 to 4cb22d4 Compare August 6, 2025 18:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants