forked from OSchip/llvm-project
[ELF/AMDGPU]: Add support for new relocations
Differential Revision: https://reviews.llvm.org/D25563 llvm-svn: 284197
This commit is contained in:
parent
c96b5d7073
commit
d4327e95dd
|
@ -1479,9 +1479,15 @@ void AMDGPUTargetInfo::relocateOne(uint8_t *Loc, uint32_t Type,
|
|||
switch (Type) {
|
||||
case R_AMDGPU_ABS32:
|
||||
case R_AMDGPU_GOTPCREL:
|
||||
case R_AMDGPU_GOTPCREL32_LO:
|
||||
case R_AMDGPU_REL32:
|
||||
case R_AMDGPU_REL32_LO:
|
||||
write32le(Loc, Val);
|
||||
break;
|
||||
case R_AMDGPU_GOTPCREL32_HI:
|
||||
case R_AMDGPU_REL32_HI:
|
||||
write32le(Loc, Val >> 32);
|
||||
break;
|
||||
default:
|
||||
fatal("unrecognized reloc " + Twine(Type));
|
||||
}
|
||||
|
@ -1492,8 +1498,12 @@ RelExpr AMDGPUTargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const {
|
|||
case R_AMDGPU_ABS32:
|
||||
return R_ABS;
|
||||
case R_AMDGPU_REL32:
|
||||
case R_AMDGPU_REL32_LO:
|
||||
case R_AMDGPU_REL32_HI:
|
||||
return R_PC;
|
||||
case R_AMDGPU_GOTPCREL:
|
||||
case R_AMDGPU_GOTPCREL32_LO:
|
||||
case R_AMDGPU_GOTPCREL32_HI:
|
||||
return R_GOT_PC;
|
||||
default:
|
||||
fatal("do not know how to handle relocation " + Twine(Type));
|
||||
|
|
|
@ -8,33 +8,75 @@
|
|||
.text
|
||||
|
||||
kernel0:
|
||||
s_mov_b32 s0, common_var@GOTPCREL+4
|
||||
s_mov_b32 s0, extern_var@GOTPCREL+4
|
||||
s_mov_b32 s0, local_var+4
|
||||
s_mov_b32 s0, global_var@GOTPCREL+4
|
||||
s_mov_b32 s0, weak_var@GOTPCREL+4
|
||||
s_mov_b32 s0, weakref_var@GOTPCREL+4
|
||||
s_mov_b32 s0, common_var0@GOTPCREL+4
|
||||
s_mov_b32 s0, common_var1@gotpcrel32@lo+4
|
||||
s_mov_b32 s0, common_var2@gotpcrel32@hi+4
|
||||
|
||||
s_mov_b32 s0, global_var0@GOTPCREL+4
|
||||
s_mov_b32 s0, global_var1@gotpcrel32@lo+4
|
||||
s_mov_b32 s0, global_var2@gotpcrel32@hi+4
|
||||
|
||||
s_mov_b32 s0, extern_var0@GOTPCREL+4
|
||||
s_mov_b32 s0, extern_var1@gotpcrel32@lo+4
|
||||
s_mov_b32 s0, extern_var2@gotpcrel32@hi+4
|
||||
|
||||
s_mov_b32 s0, weak_var0@GOTPCREL+4
|
||||
s_mov_b32 s0, weak_var1@gotpcrel32@lo+4
|
||||
s_mov_b32 s0, weak_var2@gotpcrel32@hi+4
|
||||
|
||||
s_mov_b32 s0, weakref_var0@GOTPCREL+4
|
||||
s_mov_b32 s0, weakref_var1@gotpcrel32@lo+4
|
||||
s_mov_b32 s0, weakref_var2@gotpcrel32@hi+4
|
||||
|
||||
s_mov_b32 s0, local_var0+4
|
||||
s_mov_b32 s0, local_var1@rel32@lo+4
|
||||
s_mov_b32 s0, local_var2@rel32@hi+4
|
||||
|
||||
s_endpgm
|
||||
|
||||
.comm common_var,1024,4
|
||||
.globl global_var
|
||||
.local local_var
|
||||
.weak weak_var
|
||||
.weakref weakref_var, weakref_alias_var
|
||||
.comm common_var0,1024,4
|
||||
.comm common_var1,1024,4
|
||||
.comm common_var2,1024,4
|
||||
.globl global_var0
|
||||
.globl global_var1
|
||||
.globl global_var1
|
||||
.weak weak_var0
|
||||
.weak weak_var1
|
||||
.weak weak_var2
|
||||
.weakref weakref_var0, weakref_alias_var0
|
||||
.weakref weakref_var1, weakref_alias_var1
|
||||
.weakref weakref_var2, weakref_alias_var2
|
||||
.local local_var0
|
||||
.local local_var1
|
||||
.local local_var2
|
||||
|
||||
.section nonalloc, "w", @progbits
|
||||
.long var, common_var
|
||||
.long var0, common_var2+4
|
||||
.long var1, common_var1+8
|
||||
.long var2, common_var0+12
|
||||
|
||||
# The relocation for local_var and var should be resolved by the linker.
|
||||
# The relocation for local_var{0, 1, 2} and var should be resolved by the
|
||||
# linker.
|
||||
# CHECK: Relocations [
|
||||
# CHECK: .rela.dyn {
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 common_var 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 extern_var 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 global_var 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 weakref_alias_var 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 common_var0 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 common_var1 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 common_var2 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 extern_var0 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 extern_var1 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 extern_var2 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 global_var0 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 global_var1 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 global_var2 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var0 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var1 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 weak_var2 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 weakref_alias_var0 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 weakref_alias_var1 0x0
|
||||
# CHECK-NEXT: R_AMDGPU_ABS64 weakref_alias_var2 0x0
|
||||
# CHECK-NEXT: }
|
||||
# CHECK-NEXT: ]
|
||||
|
||||
# OBJDUMP: Contents of section nonalloc:
|
||||
# OBJDUMP-NEXT: 0000 00000000 00300000
|
||||
# OBJDUMP-NEXT: 0000 00000000 04380000 00000000 08340000
|
||||
# OBJDUMP-NEXT: 00000000 0c300000
|
||||
|
|
Loading…
Reference in New Issue