[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