diff options
| -rw-r--r-- | lld/ELF/Arch/AMDGPU.cpp | 2 | ||||
| -rw-r--r-- | lld/test/ELF/amdgpu-relocs.s | 12 |
2 files changed, 14 insertions, 0 deletions
diff --git a/lld/ELF/Arch/AMDGPU.cpp b/lld/ELF/Arch/AMDGPU.cpp index 505e0e6ad48..48b27f23510 100644 --- a/lld/ELF/Arch/AMDGPU.cpp +++ b/lld/ELF/Arch/AMDGPU.cpp @@ -66,6 +66,7 @@ void AMDGPU::relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const { write32le(Loc, Val); break; case R_AMDGPU_ABS64: + case R_AMDGPU_REL64: write64le(Loc, Val); break; case R_AMDGPU_GOTPCREL32_HI: @@ -86,6 +87,7 @@ RelExpr AMDGPU::getRelExpr(RelType Type, const Symbol &S, case R_AMDGPU_REL32: case R_AMDGPU_REL32_LO: case R_AMDGPU_REL32_HI: + case R_AMDGPU_REL64: return R_PC; case R_AMDGPU_GOTPCREL: case R_AMDGPU_GOTPCREL32_LO: diff --git a/lld/test/ELF/amdgpu-relocs.s b/lld/test/ELF/amdgpu-relocs.s index 8b5a61ed21f..775a262d5eb 100644 --- a/lld/test/ELF/amdgpu-relocs.s +++ b/lld/test/ELF/amdgpu-relocs.s @@ -77,6 +77,15 @@ ptr: ptr2: .quad temp2 +# R_AMDGPU_REL64: +.type foo, @object +.rodata + .globl foo + .p2align 3 +foo: + .quad temp2@rel64 + .size foo, 8 + # The relocation for local_var{0, 1, 2} and var should be resolved by the # linker. # CHECK: Relocations [ @@ -101,6 +110,9 @@ ptr2: # CHECK-NEXT: } # CHECK-NEXT: ] +# OBJDUMP: Contents of section .rodata: +# OBJDUMP: 28fbffff ffffffff + # OBJDUMP: Contents of section nonalloc: # OBJDUMP-NEXT: 0000 00000000 04480000 00000000 08440000 # OBJDUMP-NEXT: 00000000 0c400000 |

