Skip to content

Commit b625d17

Browse files
committedOct 20, 2016
[AMDGPU] Handle R_AMDGPU_ABS64 relocation
This is needed for the following case (OpenCL example): __global int Var = 0; __global int* Ptr[] = {&Var}; ... Differential Revision: https://reviews.llvm.org/D25815 llvm-svn: 284764
1 parent 6e2c89b commit b625d17

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed
 

‎lld/ELF/Target.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -1487,6 +1487,9 @@ void AMDGPUTargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
14871487
case R_AMDGPU_REL32_LO:
14881488
write32le(Loc, Val);
14891489
break;
1490+
case R_AMDGPU_ABS64:
1491+
write64le(Loc, Val);
1492+
break;
14901493
case R_AMDGPU_GOTPCREL32_HI:
14911494
case R_AMDGPU_REL32_HI:
14921495
write32le(Loc, Val >> 32);
@@ -1499,6 +1502,7 @@ void AMDGPUTargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
14991502
RelExpr AMDGPUTargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const {
15001503
switch (Type) {
15011504
case R_AMDGPU_ABS32:
1505+
case R_AMDGPU_ABS64:
15021506
return R_ABS;
15031507
case R_AMDGPU_REL32:
15041508
case R_AMDGPU_REL32_LO:

‎lld/test/ELF/amdgpu-relocs.s

+14-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
# REQUIRES: amdgpu
77

8-
.text
8+
.text
99

1010
kernel0:
1111
s_mov_b32 s0, common_var0@GOTPCREL+4
@@ -50,11 +50,21 @@ kernel0:
5050
.local local_var1
5151
.local local_var2
5252

53+
# R_AMDGPU_ABS32:
5354
.section nonalloc, "w", @progbits
5455
.long var0, common_var2+4
5556
.long var1, common_var1+8
5657
.long var2, common_var0+12
5758

59+
# R_AMDGPU_ABS64:
60+
.type ptr, @object
61+
.data
62+
.globl ptr
63+
.p2align 3
64+
ptr:
65+
.quad temp
66+
.size ptr, 8
67+
5868
# The relocation for local_var{0, 1, 2} and var should be resolved by the
5969
# linker.
6070
# CHECK: Relocations [
@@ -68,6 +78,7 @@ kernel0:
6878
# CHECK-NEXT: R_AMDGPU_ABS64 global_var0 0x0
6979
# CHECK-NEXT: R_AMDGPU_ABS64 global_var1 0x0
7080
# CHECK-NEXT: R_AMDGPU_ABS64 global_var2 0x0
81+
# CHECK-NEXT: R_AMDGPU_ABS64 temp 0x0
7182
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var0 0x0
7283
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var1 0x0
7384
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var2 0x0
@@ -78,5 +89,5 @@ kernel0:
7889
# CHECK-NEXT: ]
7990

8091
# OBJDUMP: Contents of section nonalloc:
81-
# OBJDUMP-NEXT: 0000 00000000 04380000 00000000 08340000
82-
# OBJDUMP-NEXT: 00000000 0c300000
92+
# OBJDUMP-NEXT: 0000 00000000 14380000 00000000 18340000
93+
# OBJDUMP-NEXT: 00000000 1c300000

0 commit comments

Comments
 (0)