From 0c857ef4dfc083b6f5ef2d32182b8db24c5f8d55 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Wed, 16 Mar 2022 09:01:54 -0400 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/ChangeLog | 4 ++++ binutils/readelf.c | 3 +++ include/ChangeLog | 4 ++++ include/elf/amdgpu.h | 21 +++++++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index eb8c1975837..6d49d8c7125 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,7 @@ +2022-03-16 Simon Marchi + + * readelf.c (dump_relocations): Handle EM_AMDGPU. + 2022-03-16 Simon Marchi * Makefile.am (readelf_CFLAGS): New. 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/ChangeLog b/include/ChangeLog index 64aeb128398..82194629c97 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,7 @@ +2022-03-16 Simon Marchi + + * elf/amdgpu.h: Add relocation values. + 2022-03-16 Simon Marchi * elf/amdgcn.h (NT_AMDGPU_METADATA): New. 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.30.2