[compiler-rt] Changes to support running tests for Windows arm64 asan (PR #66973)

Farzon Lotfi via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 13 12:04:19 PST 2023


https://github.com/farzonl updated https://github.com/llvm/llvm-project/pull/66973

>From 885226fc83656dc4ee0b5ac73c77fa63a4f20ce4 Mon Sep 17 00:00:00 2001
From: Farzon Lotfi <farzon at farzon.org>
Date: Wed, 20 Sep 2023 22:58:08 -0400
Subject: [PATCH 1/2] Changes to support running tests for Windows arm64 asan
 1. Differentiate SANITIZER_WINDOWS64 for x64 and arm64. 2. turn off
 interception tests that expect x86 assembly.

---
 compiler-rt/lib/interception/interception_win.cpp         | 7 ++++---
 .../lib/interception/tests/interception_win_test.cpp      | 3 +++
 compiler-rt/lib/sanitizer_common/sanitizer_platform.h     | 8 ++++++++
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/compiler-rt/lib/interception/interception_win.cpp b/compiler-rt/lib/interception/interception_win.cpp
index 1b681ada37b170d..7092bee59df145c 100644
--- a/compiler-rt/lib/interception/interception_win.cpp
+++ b/compiler-rt/lib/interception/interception_win.cpp
@@ -431,7 +431,8 @@ static uptr AllocateMemoryForTrampoline(uptr image_address, size_t size) {
 // The following prologues cannot be patched because of the short jump
 // jumping to the patching region.
 
-#if SANITIZER_WINDOWS64
+// Short jump patterns  below are only for x86_64.
+#if SANITIZER_WINDOWS_x64
 // ntdll!wcslen in Win11
 //   488bc1          mov     rax,rcx
 //   0fb710          movzx   edx,word ptr [rax]
@@ -462,7 +463,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
   return 4;
 #endif
 
-#if SANITIZER_WINDOWS64
+#if SANITIZER_WINDOWS_x64
   if (memcmp((u8*)address, kPrologueWithShortJump1,
              sizeof(kPrologueWithShortJump1)) == 0 ||
       memcmp((u8*)address, kPrologueWithShortJump2,
@@ -544,7 +545,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
       return 7;
   }
 
-#if SANITIZER_WINDOWS64
+#if SANITIZER_WINDOWS_x64
   switch (*(u8*)address) {
     case 0xA1:  // A1 XX XX XX XX XX XX XX XX :
                 //   movabs eax, dword ptr ds:[XXXXXXXX]
diff --git a/compiler-rt/lib/interception/tests/interception_win_test.cpp b/compiler-rt/lib/interception/tests/interception_win_test.cpp
index 9159ce405f2dc49..669b84f1eea7dc4 100644
--- a/compiler-rt/lib/interception/tests/interception_win_test.cpp
+++ b/compiler-rt/lib/interception/tests/interception_win_test.cpp
@@ -15,8 +15,10 @@
 #include "gtest/gtest.h"
 
 // Too slow for debug build
+// Disabling for ARM64 since testcases are x86/x64 assembly.
 #if !SANITIZER_DEBUG
 #if SANITIZER_WINDOWS
+#if !SANITIZER_WINDOWS_ARM64
 
 #include <stdarg.h>
 
@@ -793,5 +795,6 @@ TEST(Interception, EmptyExportTable) {
 
 }  // namespace __interception
 
+#endif  // !SANITIZER_WINDOWS_ARM64
 #endif  // SANITIZER_WINDOWS
 #endif  // #if !SANITIZER_DEBUG
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
index 3e1b078a0212f5e..49d8a67cc12db3f 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
@@ -260,6 +260,14 @@
 #  define SANITIZER_ARM64 0
 #endif
 
+#if SANITIZER_WINDOWS64 && SANITIZER_ARM64
+#  define SANITIZER_WINDOWS_ARM64 1
+#  define SANITIZER_WINDOWS_x64 0
+#else
+#  define SANITIZER_WINDOWS_ARM64 0
+#  define SANITIZER_WINDOWS_x64 1
+#endif
+
 #if SANITIZER_SOLARIS && SANITIZER_WORDSIZE == 32
 #  define SANITIZER_SOLARIS32 1
 #else

>From 116bbf27d205818ea149c4ebf908453e7d535e56 Mon Sep 17 00:00:00 2001
From: Farzon Lotfi <farzon at farzon.com>
Date: Mon, 13 Nov 2023 15:04:06 -0500
Subject: [PATCH 2/2] apply clang format

---
 compiler-rt/lib/interception/interception_win.cpp      |  6 +++---
 .../lib/interception/tests/interception_win_test.cpp   | 10 +++++-----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/compiler-rt/lib/interception/interception_win.cpp b/compiler-rt/lib/interception/interception_win.cpp
index 7092bee59df145c..f3e62419beff128 100644
--- a/compiler-rt/lib/interception/interception_win.cpp
+++ b/compiler-rt/lib/interception/interception_win.cpp
@@ -432,7 +432,7 @@ static uptr AllocateMemoryForTrampoline(uptr image_address, size_t size) {
 // jumping to the patching region.
 
 // Short jump patterns  below are only for x86_64.
-#if SANITIZER_WINDOWS_x64
+#  if SANITIZER_WINDOWS_x64
 // ntdll!wcslen in Win11
 //   488bc1          mov     rax,rcx
 //   0fb710          movzx   edx,word ptr [rax]
@@ -463,7 +463,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
   return 4;
 #endif
 
-#if SANITIZER_WINDOWS_x64
+#  if SANITIZER_WINDOWS_x64
   if (memcmp((u8*)address, kPrologueWithShortJump1,
              sizeof(kPrologueWithShortJump1)) == 0 ||
       memcmp((u8*)address, kPrologueWithShortJump2,
@@ -545,7 +545,7 @@ static size_t GetInstructionSize(uptr address, size_t* rel_offset = nullptr) {
       return 7;
   }
 
-#if SANITIZER_WINDOWS_x64
+#  if SANITIZER_WINDOWS_x64
   switch (*(u8*)address) {
     case 0xA1:  // A1 XX XX XX XX XX XX XX XX :
                 //   movabs eax, dword ptr ds:[XXXXXXXX]
diff --git a/compiler-rt/lib/interception/tests/interception_win_test.cpp b/compiler-rt/lib/interception/tests/interception_win_test.cpp
index 669b84f1eea7dc4..c004d187768de6a 100644
--- a/compiler-rt/lib/interception/tests/interception_win_test.cpp
+++ b/compiler-rt/lib/interception/tests/interception_win_test.cpp
@@ -18,12 +18,12 @@
 // Disabling for ARM64 since testcases are x86/x64 assembly.
 #if !SANITIZER_DEBUG
 #if SANITIZER_WINDOWS
-#if !SANITIZER_WINDOWS_ARM64
+#    if !SANITIZER_WINDOWS_ARM64
 
-#include <stdarg.h>
+#      include <stdarg.h>
 
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
+#      define WIN32_LEAN_AND_MEAN
+#      include <windows.h>
 
 namespace __interception {
 namespace {
@@ -795,6 +795,6 @@ TEST(Interception, EmptyExportTable) {
 
 }  // namespace __interception
 
-#endif  // !SANITIZER_WINDOWS_ARM64
+#    endif  // !SANITIZER_WINDOWS_ARM64
 #endif  // SANITIZER_WINDOWS
 #endif  // #if !SANITIZER_DEBUG



More information about the llvm-commits mailing list