diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp index 2f35c3ff05d6df..5498df03c7abe0 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(&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 00000000000000..a15f0024cfd053 --- /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' -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' -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 +}