From 0618b0884435271931b88c801c6cbe0ac28a2740 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Tue, 1 Mar 2022 11:29:06 -0500 Subject: [PATCH] binutils/readelf: handle AMDGPU relocation types Make readelf recognize AMDGPU relocation types, as documented here: https://llvm.org/docs/AMDGPUUsage.html#amdgpu-relocation-records The user-visible change looks like: -000000000004 000400000001 unrecognized: 1 0000000000000000 SCRATCH_RSRC_DWORD0 -00000000000c 000500000001 unrecognized: 1 0000000000000000 SCRATCH_RSRC_DWORD1 -000000000014 000600000007 unrecognized: 7 0000000000000000 global_var0 -00000000001c 000700000008 unrecognized: 8 0000000000000000 global_var1 -000000000024 000800000009 unrecognized: 9 0000000000000000 global_var2 -00000000002c 00090000000a unrecognized: a 0000000000000000 global_var3 -000000000034 000a0000000b unrecognized: b 0000000000000000 global_var4 +000000000004 000400000001 R_AMDGPU_ABS32_LO 0000000000000000 SCRATCH_RSRC_DWORD0 +00000000000c 000500000001 R_AMDGPU_ABS32_LO 0000000000000000 SCRATCH_RSRC_DWORD1 +000000000014 000600000007 R_AMDGPU_GOTPCREL 0000000000000000 global_var0 +00000000001c 000700000008 R_AMDGPU_GOTPCREL 0000000000000000 global_var1 +000000000024 000800000009 R_AMDGPU_GOTPCREL 0000000000000000 global_var2 +00000000002c 00090000000a R_AMDGPU_REL32_LO 0000000000000000 global_var3 +000000000034 000a0000000b R_AMDGPU_REL32_HI 0000000000000000 global_var4 binutils/ChangeLog: * readelf.c (dump_relocations): Handle EM_AMDGPU. include/ChangeLog: * elf/amdgpu.h: Add relocation values. Change-Id: I2ed4589f4cd37ea11ad2e0cb38d4b682271e1334 --- binutils/readelf.c | 3 +++ include/elf/amdgpu.h | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/binutils/readelf.c b/binutils/readelf.c index ff07112eb84..a2dbaa4722e 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -1930,6 +1930,9 @@ dump_relocations (Filedata * filedata, rtype = elf_loongarch_reloc_type (type); break; + case EM_AMDGPU: + rtype = elf_amdgpu_reloc_type (type); + break; } if (rtype == NULL) diff --git a/include/elf/amdgpu.h b/include/elf/amdgpu.h index e3c90dc74e8..140e8996ad2 100644 --- a/include/elf/amdgpu.h +++ b/include/elf/amdgpu.h @@ -20,6 +20,8 @@ #ifndef _ELF_AMDGPU_H #define _ELF_AMDGPU_H +#include "elf/reloc-macros.h" + /* e_ident[EI_ABIVERSION] values, when e_ident[EI_OSABI] is ELFOSABI_AMDGPU_HSA. */ @@ -91,4 +93,23 @@ #define NT_AMDGPU_METADATA 32 +/* Relocations. */ + +START_RELOC_NUMBERS (elf_amdgpu_reloc_type) + RELOC_NUMBER (R_AMDGPU_NONE, 0) + RELOC_NUMBER (R_AMDGPU_ABS32_LO, 1) + RELOC_NUMBER (R_AMDGPU_ABS32_HI, 2) + RELOC_NUMBER (R_AMDGPU_ABS64, 3) + RELOC_NUMBER (R_AMDGPU_REL32, 4) + RELOC_NUMBER (R_AMDGPU_REL64, 5) + RELOC_NUMBER (R_AMDGPU_ABS32, 6) + RELOC_NUMBER (R_AMDGPU_GOTPCREL, 7) + RELOC_NUMBER (R_AMDGPU_GOTPCREL32_LO, 8) + RELOC_NUMBER (R_AMDGPU_GOTPCREL32_HI, 9) + RELOC_NUMBER (R_AMDGPU_REL32_LO, 10) + RELOC_NUMBER (R_AMDGPU_REL32_HI, 11) + RELOC_NUMBER (R_AMDGPU_RELATIVE64, 13) + RELOC_NUMBER (R_AMDGPU_REL16, 16) +END_RELOC_NUMBERS (R_AMDGPU_max) + #endif /* _ELF_AMDGPU_H */ -- 2.39.5