Skip to content

[Object][AMDGPU] Support REL relocations #143966

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion llvm/docs/AMDGPUUsage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2709,7 +2709,8 @@ The following relocation types are supported:
the ``mesa3d`` OS, which does not support ``R_AMDGPU_ABS64``.

There is no current OS loader support for 32-bit programs and so
``R_AMDGPU_ABS32`` is not used.
``R_AMDGPU_ABS32`` is only generated for static relocations, for example to
implement some DWARF32 forms.

.. _amdgpu-loaded-code-object-path-uniform-resource-identifier:

Expand Down
6 changes: 4 additions & 2 deletions llvm/lib/Object/RelocationResolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,11 +274,13 @@ static bool supportsAmdgpu(uint64_t Type) {
}

static uint64_t resolveAmdgpu(uint64_t Type, uint64_t Offset, uint64_t S,
uint64_t /*LocData*/, int64_t Addend) {
uint64_t LocData, int64_t Addend) {
assert((LocData == 0 || Addend == 0) &&
"one of LocData and Addend must be 0");
switch (Type) {
case ELF::R_AMDGPU_ABS32:
case ELF::R_AMDGPU_ABS64:
return S + Addend;
return S + LocData + Addend;
default:
llvm_unreachable("Invalid relocation type");
}
Expand Down
86 changes: 86 additions & 0 deletions llvm/test/DebugInfo/AMDGPU/dwarfdump-rel.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# RUN: yaml2obj %s -o %t
# RUN: llvm-dwarfdump -i %t | FileCheck %s

# Test REL relocation handling for AMDGPU

# CHECK: DW_TAG_compile_unit
# CHECK: DW_AT_producer ("dxc")
# CHECK: DW_AT_name (".\\example.hlsl")
# CHECK: DW_AT_str_offsets_base (0x00000008)

--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
OSABI: ELFOSABI_AMDGPU_PAL
Type: ET_REL
Machine: EM_AMDGPU
Flags: [ EF_AMDGPU_MACH_AMDGCN_GFX1201 ]
SectionHeaderStringTable: .strtab
Sections:
- Name: .debug_abbrev
Type: SHT_PROGBITS
AddressAlign: 0x1
Content: 01110125251305032572171017110B120673178C0117000000
- Name: .debug_info
Type: SHT_PROGBITS
AddressAlign: 0x1
Content: 23000000050001080000000001000400010800000000000000005C000000080000000C00000000
- Name: .debug_str_offsets
Type: SHT_PROGBITS
AddressAlign: 0x1
Content: 0C000000050000000000000004000000
- Name: .rel.debug_info
Type: SHT_REL
Flags: [ SHF_INFO_LINK ]
Link: .symtab
AddressAlign: 0x8
Info: .debug_info
Relocations:
- Offset: 0x8
Symbol: .debug_abbrev
Type: R_AMDGPU_ABS32
- Offset: 0x11
Symbol: .debug_str_offsets
Type: R_AMDGPU_ABS32
- Name: .rel.debug_str_offsets
Type: SHT_REL
Flags: [ SHF_INFO_LINK ]
Link: .symtab
AddressAlign: 0x8
Info: .debug_str_offsets
Relocations:
- Offset: 0x8
Symbol: .debug_str
Type: R_AMDGPU_ABS32
- Offset: 0xC
Symbol: .debug_str
Type: R_AMDGPU_ABS32
- Type: SectionHeaderTable
Sections:
- Name: .strtab
- Name: .debug_abbrev
- Name: .debug_info
- Name: .rel.debug_info
- Name: .debug_str_offsets
- Name: .rel.debug_str_offsets
- Name: .debug_str
- Name: .symtab
Symbols:
- Name: .debug_abbrev
Type: STT_SECTION
Section: .debug_abbrev
- Name: .debug_info
Type: STT_SECTION
Section: .debug_info
- Name: .debug_str_offsets
Type: STT_SECTION
Section: .debug_str_offsets
- Name: .debug_str
Type: STT_SECTION
Section: .debug_str
DWARF:
debug_str:
- 'dxc'
- '.\example.hlsl'
...
Loading