[PATCH 2/5] readelf: Use BYTE_GET_SIZE in RELR relocation processing
H.J. Lu
hjl.tools@gmail.com
Thu Jul 9 12:40:49 GMT 2026
Replace
if (relr_entsize == sizeof (Elf32_External_Relr))
entry = BYTE_GET (((Elf32_External_Relr *)relrs)[i].r_data);
else
entry = BYTE_GET (((Elf64_External_Relr *)relrs)[i].r_data);
with
BYTE_GET_SIZE (entry, relrs, relr_entsize);
PR binutils/34356
* readelf.c (count_relr_relocations): Change relrs_p to void **.
Use BYTE_GET_SIZE.
(dump_relr_relocations): Change relrs to void *. Use
BYTE_GET_SIZE.
(display_relocations): Change relrs to void *.
(process_relocs): Likewise.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
binutils/readelf.c | 21 ++++++++-------------
1 file changed, 8 insertions(+), 13 deletions(-)
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 16480340b4d..1e3caeec252 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -1856,9 +1856,9 @@ update_all_relocations (size_t nentries)
static uint64_t
count_relr_relocations (Filedata * filedata,
Elf_Internal_Shdr * section,
- uint64_t ** relrs_p)
+ void ** relrs_p)
{
- uint64_t * relrs;
+ void * relrs;
uint64_t nentries;
uint64_t i;
uint64_t count;
@@ -1886,14 +1886,12 @@ count_relr_relocations (Filedata * filedata,
if (relrs == NULL)
return 0;
+ void *ptr = relrs;
for (count = i = 0; i < nentries; i++)
{
uint64_t entry;
- if (entsize == sizeof (Elf32_External_Relr))
- entry = BYTE_GET (((Elf32_External_Relr *)relrs)[i].r_data);
- else
- entry = BYTE_GET (((Elf64_External_Relr *)relrs)[i].r_data);
+ BYTE_GET_SIZE (entry, ptr, entsize);
if ((entry & 1) == 0)
{
@@ -1923,7 +1921,7 @@ dump_relr_relocations (Filedata * filedata,
uint64_t relr_size,
int relr_entsize,
uint64_t relr_offset,
- uint64_t * relrs,
+ void * relrs,
const Elf_Internal_Sym * symtab_p,
uint64_t nsyms,
char * strtab,
@@ -2151,10 +2149,7 @@ dump_relr_relocations (Filedata * filedata,
{
uint64_t entry;
- if (relr_entsize == sizeof (Elf32_External_Relr))
- entry = BYTE_GET (((Elf32_External_Relr *)relrs)[i].r_data);
- else
- entry = BYTE_GET (((Elf64_External_Relr *)relrs)[i].r_data);
+ BYTE_GET_SIZE (entry, relrs, relr_entsize);
if (dump_reloc)
{
@@ -9999,7 +9994,7 @@ display_relocations (Elf_Internal_Shdr * section,
uint64_t rel_offset = section->sh_offset;
uint64_t num_rela = rel_size / section->sh_entsize;
uint64_t num_reloc;
- uint64_t *relrs = NULL;
+ void *relrs = NULL;
if (rel_type == reltype_relr)
{
@@ -10187,7 +10182,7 @@ process_relocs (Filedata * filedata)
/* Count DT_RELR relocations when "-D --got-contents"
is passed to readelf. */
uint64_t num_reloc;
- uint64_t *relrs = NULL;
+ void *relrs = NULL;
Elf_Internal_Shdr section = {};
Elf_Internal_Shdr *orig_section = NULL;
section.sh_offset
--
2.55.0
More information about the Binutils
mailing list