[compiler-rt] 287b24e - [asan] Implement address sanitizer on AIX: address descriptions (#138891)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 25 08:18:19 PDT 2025


Author: Jake Egan
Date: 2025-06-25T11:18:15-04:00
New Revision: 287b24e1899eb6ce62eb9daef5a24faae5e66c1e

URL: https://github.com/llvm/llvm-project/commit/287b24e1899eb6ce62eb9daef5a24faae5e66c1e
DIFF: https://github.com/llvm/llvm-project/commit/287b24e1899eb6ce62eb9daef5a24faae5e66c1e.diff

LOG: [asan] Implement address sanitizer on AIX: address descriptions (#138891)

Adapt address description logic for AIX. 

Issue: https://github.com/llvm/llvm-project/issues/138916

Added: 
    

Modified: 
    compiler-rt/lib/asan/asan_descriptions.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/asan/asan_descriptions.cpp b/compiler-rt/lib/asan/asan_descriptions.cpp
index c9f3e4d682d95..0c30959b23e28 100644
--- a/compiler-rt/lib/asan/asan_descriptions.cpp
+++ b/compiler-rt/lib/asan/asan_descriptions.cpp
@@ -211,10 +211,10 @@ bool GetStackAddressInformation(uptr addr, uptr access_size,
   descr->frame_pc = access.frame_pc;
   descr->frame_descr = access.frame_descr;
 
-#if SANITIZER_PPC64V1
-  // On PowerPC64 ELFv1, the address of a function actually points to a
-  // three-doubleword data structure with the first field containing
-  // the address of the function's code.
+#if SANITIZER_PPC64V1 || SANITIZER_AIX
+  // On PowerPC64 ELFv1 or AIX, the address of a function actually points to a
+  // three-doubleword (or three-word for 32-bit AIX) data structure with
+  // the first field containing the address of the function's code.
   descr->frame_pc = *reinterpret_cast<uptr *>(descr->frame_pc);
 #endif
   descr->frame_pc += 16;
@@ -444,6 +444,16 @@ AddressDescription::AddressDescription(uptr addr, uptr access_size,
     data.kind = kAddressKindShadow;
     return;
   }
+
+  // Check global first. On AIX, some global data defined in shared libraries
+  // are put to the STACK region for unknown reasons. Check global first can
+  // workaround this issue.
+  // TODO: Look into whether there's a 
diff erent solution to this problem.
+  if (GetGlobalAddressInformation(addr, access_size, &data.global)) {
+    data.kind = kAddressKindGlobal;
+    return;
+  }
+
   if (GetHeapAddressInformation(addr, access_size, &data.heap)) {
     data.kind = kAddressKindHeap;
     return;
@@ -461,10 +471,6 @@ AddressDescription::AddressDescription(uptr addr, uptr access_size,
     return;
   }
 
-  if (GetGlobalAddressInformation(addr, access_size, &data.global)) {
-    data.kind = kAddressKindGlobal;
-    return;
-  }
   data.kind = kAddressKindWild;
   data.wild.addr = addr;
   data.wild.access_size = access_size;


        


More information about the llvm-commits mailing list