[AMDGPU] Change ASAN init/fini kernels linkage to external.
authorPraveen Velliengiri <praveen.velliengiri@amd.com>
Mon, 27 Sep 2021 17:49:49 +0000 (11:49 -0600)
committerAnshil Gandhi <gandhi21299@gmail.com>
Mon, 27 Sep 2021 17:50:37 +0000 (11:50 -0600)
HSA runtime fails to find the symbols for Init and Fini kernels as
they mark with internal linkage, changing the linkage to external
to fix those errors.

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

llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp
llvm/test/CodeGen/AMDGPU/lower-ctor-dtor.ll
llvm/test/CodeGen/AMDGPU/lower-multiple-ctor-dtor.ll

index 1111b12e099ab04171f91c1a88a1feeb085f08a4..95b848e26f46854a76ce52094b1b30fbfd234ebb 100644 (file)
@@ -36,7 +36,7 @@ public:
 
     Function *InitOrFiniKernel = Function::createWithDefaultAttr(
         FunctionType::get(Type::getVoidTy(M.getContext()), false),
-        GlobalValue::InternalLinkage, 0, InitOrFiniKernelName, &M);
+        GlobalValue::ExternalLinkage, 0, InitOrFiniKernelName, &M);
     BasicBlock *InitOrFiniKernelBB =
         BasicBlock::Create(M.getContext(), "", InitOrFiniKernel);
     ReturnInst::Create(M.getContext(), InitOrFiniKernelBB);
index 1a247070b99fc5b92f27a4da5dd5f96d96b88c1f..475f00f84450a038b0bb0c71929b62bae3e94c84 100644 (file)
@@ -1,4 +1,5 @@
 ; RUN: opt -S -mtriple=amdgcn--  -amdgpu-lower-ctor-dtor < %s | FileCheck %s
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readelf -s - 2>&1 | FileCheck %s -check-prefix=CHECK-VIS
 
 @llvm.global_ctors = appending addrspace(1) global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* @foo, i8* null }]
 @llvm.global_dtors = appending addrspace(1) global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* @bar, i8* null }]
@@ -9,6 +10,11 @@
 ; CHECK-LABEL: amdgpu_kernel void @amdgcn.device.fini() #1
 ; CHECK-NEXT: call void @bar
 
+; CHECK-VIS: FUNC   GLOBAL PROTECTED {{.*}} amdgcn.device.init
+; CHECK-VIS: OBJECT GLOBAL DEFAULT {{.*}} amdgcn.device.init.kd
+; CHECK-VIS: FUNC   GLOBAL PROTECTED {{.*}} amdgcn.device.fini
+; CHECK-VIS: OBJECT   GLOBAL DEFAULT {{.*}} amdgcn.device.fini.kd
+
 define internal void @foo() {
   ret void
 }
index e23ea2329b92f8a72c58e756167057e7e22098e3..113c7b0f08c4e55b78e43b872b5efcea42edabde 100644 (file)
@@ -1,4 +1,5 @@
 ; RUN: opt -S -mtriple=amdgcn--  -amdgpu-lower-ctor-dtor < %s | FileCheck %s
+; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readelf -s - 2>&1 | FileCheck %s -check-prefix=CHECK-VIS
 
 @llvm.global_ctors = appending addrspace(1) global [2 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* @foo, i8* null }, { i32, void ()*, i8* } { i32 1, void ()* @foo.5, i8* null }]
 @llvm.global_dtors = appending addrspace(1) global [2 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* @bar, i8* null }, { i32, void ()*, i8* } { i32 1, void ()* @bar.5, i8* null }]
 ; CHECK-NEXT: call void @bar
 ; CHECK-NEXT: call void @bar.5
 
+; CHECK-VIS: FUNC   GLOBAL PROTECTED {{.*}} amdgcn.device.init
+; CHECK-VIS: OBJECT GLOBAL DEFAULT {{.*}} amdgcn.device.init.kd
+; CHECK-VIS: FUNC   GLOBAL PROTECTED {{.*}} amdgcn.device.fini
+; CHECK-VIS: OBJECT   GLOBAL DEFAULT {{.*}} amdgcn.device.fini.kd
+
 define internal void @foo() {
   ret void
 }
@@ -28,4 +34,4 @@ define internal void @bar.5() {
 }
 
 ; CHECK: attributes #0 = { "device-init" }
-; CHECK: attributes #1 = { "device-fini" } 
+; CHECK: attributes #1 = { "device-fini" }
\ No newline at end of file