Skip to content

Commit e90b512

Browse files
pvelliengandhi56
authored andcommitted
[AMDGPU] Change ASAN init/fini kernels linkage to external.
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
1 parent b2af2ae commit e90b512

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

llvm/lib/Target/AMDGPU/AMDGPUCtorDtorLowering.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class AMDGPUCtorDtorLowering final : public ModulePass {
3636

3737
Function *InitOrFiniKernel = Function::createWithDefaultAttr(
3838
FunctionType::get(Type::getVoidTy(M.getContext()), false),
39-
GlobalValue::InternalLinkage, 0, InitOrFiniKernelName, &M);
39+
GlobalValue::ExternalLinkage, 0, InitOrFiniKernelName, &M);
4040
BasicBlock *InitOrFiniKernelBB =
4141
BasicBlock::Create(M.getContext(), "", InitOrFiniKernel);
4242
ReturnInst::Create(M.getContext(), InitOrFiniKernelBB);

llvm/test/CodeGen/AMDGPU/lower-ctor-dtor.ll

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
; RUN: opt -S -mtriple=amdgcn-- -amdgpu-lower-ctor-dtor < %s | FileCheck %s
2+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readelf -s - 2>&1 | FileCheck %s -check-prefix=CHECK-VIS
23

34
@llvm.global_ctors = appending addrspace(1) global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 1, void ()* @foo, i8* null }]
45
@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 @@
910
; CHECK-LABEL: amdgpu_kernel void @amdgcn.device.fini() #1
1011
; CHECK-NEXT: call void @bar
1112

13+
; CHECK-VIS: FUNC GLOBAL PROTECTED {{.*}} amdgcn.device.init
14+
; CHECK-VIS: OBJECT GLOBAL DEFAULT {{.*}} amdgcn.device.init.kd
15+
; CHECK-VIS: FUNC GLOBAL PROTECTED {{.*}} amdgcn.device.fini
16+
; CHECK-VIS: OBJECT GLOBAL DEFAULT {{.*}} amdgcn.device.fini.kd
17+
1218
define internal void @foo() {
1319
ret void
1420
}

llvm/test/CodeGen/AMDGPU/lower-multiple-ctor-dtor.ll

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
; RUN: opt -S -mtriple=amdgcn-- -amdgpu-lower-ctor-dtor < %s | FileCheck %s
2+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readelf -s - 2>&1 | FileCheck %s -check-prefix=CHECK-VIS
23

34
@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 }]
45
@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 }]
@@ -11,6 +12,11 @@
1112
; CHECK-NEXT: call void @bar
1213
; CHECK-NEXT: call void @bar.5
1314

15+
; CHECK-VIS: FUNC GLOBAL PROTECTED {{.*}} amdgcn.device.init
16+
; CHECK-VIS: OBJECT GLOBAL DEFAULT {{.*}} amdgcn.device.init.kd
17+
; CHECK-VIS: FUNC GLOBAL PROTECTED {{.*}} amdgcn.device.fini
18+
; CHECK-VIS: OBJECT GLOBAL DEFAULT {{.*}} amdgcn.device.fini.kd
19+
1420
define internal void @foo() {
1521
ret void
1622
}
@@ -28,4 +34,4 @@ define internal void @bar.5() {
2834
}
2935

3036
; CHECK: attributes #0 = { "device-init" }
31-
; CHECK: attributes #1 = { "device-fini" }
37+
; CHECK: attributes #1 = { "device-fini" }

0 commit comments

Comments
 (0)