[llvm] c0735cb - [AMDGPU] Do not internalize ASan device library functions.

via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 28 18:49:29 PDT 2021


Author: hsmahesha
Date: 2021-09-29T07:19:02+05:30
New Revision: c0735cb9f11d84b371a1e8dddc9f8fbe333ea37f

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

LOG: [AMDGPU] Do not internalize ASan device library functions.

ASan device library functions (those starts with the prefix __asan_)
are at the moment undergoing through undesired optimizations due to
internalization. Hence, in order to avoid such undesired optimizations
on ASan device library functions, do not internalize them in the first
place.

Reviewed By: yaxunl

Differential Revision: https://reviews.llvm.org/D110468

Added: 
    llvm/test/Instrumentation/AddressSanitizer/AMDGPU/asan_do_not_internalize.ll

Modified: 
    llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
index 2f35c3ff05d6d..5498df03c7abe 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
@@ -517,7 +517,9 @@ StringRef AMDGPUTargetMachine::getFeatureString(const Function &F) const {
 /// Predicate for Internalize pass.
 static bool mustPreserveGV(const GlobalValue &GV) {
   if (const Function *F = dyn_cast<Function>(&GV))
-    return F->isDeclaration() || AMDGPU::isEntryFunctionCC(F->getCallingConv());
+    return F->isDeclaration() || F->getName().startswith("__asan_") ||
+           F->getName().startswith("__sanitizer_") ||
+           AMDGPU::isEntryFunctionCC(F->getCallingConv());
 
   GV.removeDeadConstantUsers();
   return !GV.use_empty();

diff  --git a/llvm/test/Instrumentation/AddressSanitizer/AMDGPU/asan_do_not_internalize.ll b/llvm/test/Instrumentation/AddressSanitizer/AMDGPU/asan_do_not_internalize.ll
new file mode 100644
index 0000000000000..a15f0024cfd05
--- /dev/null
+++ b/llvm/test/Instrumentation/AddressSanitizer/AMDGPU/asan_do_not_internalize.ll
@@ -0,0 +1,32 @@
+; RUN: opt -O0 -S -mtriple=amdgcn-unknown-amdhsa -amdgpu-internalize-symbols < %s | FileCheck -check-prefix=OPTNONE %s
+; RUN: opt -passes='default<O0>' -S -mtriple=amdgcn-unknown-amdhsa -amdgpu-internalize-symbols < %s | FileCheck -check-prefix=OPTNONE %s
+; RUN: opt -O1 -S -mtriple=amdgcn-unknown-amdhsa -amdgpu-internalize-symbols < %s | FileCheck -check-prefix=ASAN_NO_INTERNALIZE %s
+; RUN: opt -passes='default<O1>' -S -mtriple=amdgcn-unknown-amdhsa -amdgpu-internalize-symbols < %s | FileCheck -check-prefix=ASAN_NO_INTERNALIZE %s
+
+; OPTNONE: define void @__asan_no_explicit_linkage(
+; ASAN_NO_INTERNALIZE: define void @__asan_no_explicit_linkage(
+define void @__asan_no_explicit_linkage() {
+entry:
+  ret void
+}
+
+; OPTNONE: define weak void @__asan_weak_linkage(
+; ASAN_NO_INTERNALIZE: define weak void @__asan_weak_linkage(
+define weak void @__asan_weak_linkage() {
+entry:
+  ret void
+}
+
+; OPTNONE: define void @__sanitizer_no_explicit_linkage(
+; ASAN_NO_INTERNALIZE: define void @__sanitizer_no_explicit_linkage(
+define void @__sanitizer_no_explicit_linkage() {
+entry:
+  ret void
+}
+
+; OPTNONE: define weak void @__sanitizer_weak_linkage(
+; ASAN_NO_INTERNALIZE: define weak void @__sanitizer_weak_linkage(
+define weak void @__sanitizer_weak_linkage() {
+entry:
+  ret void
+}


        


More information about the llvm-commits mailing list