[compiler-rt] Pr patch hsa dlopen (PR #201081)

Amit Kumar Pandey via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 2 03:03:33 PDT 2026


https://github.com/ampandey-1995 updated https://github.com/llvm/llvm-project/pull/201081

>From 18e7454fbe235247060831e7e9c34807d667f65f Mon Sep 17 00:00:00 2001
From: Amit Pandey <pandey.kumaramit2023 at gmail.com>
Date: Fri, 29 May 2026 18:24:44 +0530
Subject: [PATCH] [compiler-rt][asan] Force RTLD_GLOBAL for HSA/HIP/OpenCL
 runtime dlopen.

- When ASan intercepts dlopen of libamdhip64.so, libhsa-runtime64.so, or
  libamdocl64.so, add RTLD_GLOBAL if it was omitted, so symbols are visible as
  required by the AMDGPU device sanitizer runtime.

- Add PatchHsaRuntimeDlopenFlag in sanitizer_common/sanitizer_linux and call it
  from the dlopen interceptor.
---
 .../lib/sanitizer_common/sanitizer_linux.cpp  | 24 ++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
index 6f0259f31dbf5..2505019dc34c8 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
@@ -2886,7 +2886,25 @@ void CheckMPROTECT() {
 #  endif
 }
 
-void OnDlOpen(const char* filename, int flag) {
+#  if SANITIZER_AMDGPU
+void PatchHsaRuntimeDlopenFlag(const char* filename, int& flag) {
+  if (filename &&
+      (internal_strstr(filename, "libamdhip64.so") ||
+       internal_strstr(filename, "libhsa-runtime64.so") ||
+       internal_strstr(filename, "libamdocl64.so")) &&
+      !(flag & RTLD_GLOBAL)) {
+    flag |= RTLD_GLOBAL;
+    if (Verbosity() >= 2) {
+      Printf(
+          "RTLD_GLOBAL flag on dlopen call forced on for %s due to AMDGPU "
+          "device sanitizer runtime requirements.\n",
+          filename);
+    }
+  }
+}
+#  endif
+
+void OnDlOpen(const char *filename, int flag) {
 #  ifdef RTLD_DEEPBIND
   if (flag & RTLD_DEEPBIND) {
     Report(
@@ -2899,6 +2917,10 @@ void OnDlOpen(const char* filename, int flag) {
     Die();
   }
 #  endif
+
+#  if SANITIZER_AMDGPU
+  PatchHsaRuntimeDlopenFlag(filename, flag);
+#  endif
 }
 
 uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding,



More information about the llvm-commits mailing list