From 67609c9c701ea8a679d80e3352266b058b184f4b Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Tue, 16 Nov 2021 13:03:57 -0800 Subject: [PATCH] readelf: Support SHT_RELR/DT_RELR for -r The -r output for SHT_RELR looks like: Relocation section '.relr.dyn' at offset 0x530 contains 4 entries: 7 offsets 00000000000028c0 00000000000028c8 0000000000003ad0 0000000000003ad8 0000000000003ae0 0000000000003ae8 0000000000003af0 For --use-dynamic, the header looks like 'RELR' relocation section at offset 0x530 contains 32 bytes: include/ * elf/common.h (DT_ENCODING): Bump to 38. * elf/external.h (Elf32_External_Relr): New. (Elf64_External_Relr): New. (cherry picked from commit a7fd11862703e45d2774981a4888bc127d473b06) --- include/elf/common.h | 2 +- include/elf/external.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/elf/common.h b/include/elf/common.h index 8c6a595fea..dff90c4d9e 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -1053,13 +1053,13 @@ #define DT_FINI_ARRAYSZ 28 #define DT_RUNPATH 29 #define DT_FLAGS 30 -#define DT_ENCODING 32 #define DT_PREINIT_ARRAY 32 #define DT_PREINIT_ARRAYSZ 33 #define DT_SYMTAB_SHNDX 34 #define DT_RELRSZ 35 #define DT_RELR 36 #define DT_RELRENT 37 +#define DT_ENCODING 38 /* Note, the Oct 4, 1999 draft of the ELF ABI changed the values for DT_LOOS and DT_HIOS. Some implementations however, use diff --git a/include/elf/external.h b/include/elf/external.h index b24985687e..815e39c283 100644 --- a/include/elf/external.h +++ b/include/elf/external.h @@ -211,6 +211,10 @@ typedef struct { unsigned char r_addend[4]; /* Constant addend used to compute value */ } Elf32_External_Rela; +typedef struct { + unsigned char r_data[4]; /* RELR entry */ +} Elf32_External_Relr; + typedef struct { unsigned char r_offset[8]; /* Location at which to apply the action */ unsigned char r_info[8]; /* index and type of relocation */ @@ -222,6 +226,10 @@ typedef struct { unsigned char r_addend[8]; /* Constant addend used to compute value */ } Elf64_External_Rela; +typedef struct { + unsigned char r_data[8]; /* RELR entry */ +} Elf64_External_Relr; + /* dynamic section structure */ typedef struct { -- 2.34.1