Index: ELF/Target.cpp =================================================================== --- ELF/Target.cpp +++ ELF/Target.cpp @@ -1458,6 +1458,7 @@ void AMDGPUTargetInfo::relocateOne(uint8_t *Loc, uint32_t Type, uint64_t Val) const { switch (Type) { + case R_AMDGPU_ABS32: case R_AMDGPU_GOTPCREL: case R_AMDGPU_REL32: write32le(Loc, Val); @@ -1469,6 +1470,8 @@ RelExpr AMDGPUTargetInfo::getRelExpr(uint32_t Type, const SymbolBody &S) const { switch (Type) { + case R_AMDGPU_ABS32: + return R_ABS; case R_AMDGPU_REL32: return R_PC; case R_AMDGPU_GOTPCREL: Index: test/ELF/amdgpu-relocs.s =================================================================== --- test/ELF/amdgpu-relocs.s +++ test/ELF/amdgpu-relocs.s @@ -1,6 +1,7 @@ # RUN: llvm-mc -filetype=obj -triple=amdgcn--amdhsa -mcpu=fiji %s -o %t.o # RUN: ld.lld -shared %t.o -o %t.so # RUN: llvm-readobj -r %t.so | FileCheck %s +# RUN: llvm-objdump -s %t.so | FileCheck %s --check-prefix=OBJDUMP # REQUIRES: amdgpu @@ -21,7 +22,10 @@ .weak weak_var .weakref weakref_var, weakref_alias_var -# The relocation for local_var should be resolved by the linker. +.section nonalloc, "w", @progbits + .long var, common_var + +# The relocation for local_var and var should be resolved by the linker. # CHECK: Relocations [ # CHECK: .rela.dyn { # CHECK-NEXT: R_AMDGPU_ABS64 common_var 0x0 @@ -31,3 +35,6 @@ # CHECK-NEXT: R_AMDGPU_ABS64 weakref_alias_var 0x0 # CHECK-NEXT: } # CHECK-NEXT: ] + +# OBJDUMP: Contents of section nonalloc: +# OBJDUMP-NEXT: 0000 00000000 00300000