[PATCH 0/5] readelf.c: Consolidating get_[32|64]bit_XXX into get_XXX
H.J. Lu
hjl.tools@gmail.com
Thu Jul 9 12:40:47 GMT 2026
There are duplicated codes in readelf.c:
1. get_32bit_dynamic_section and get_64bit_dynamic_section.
2. get_32bit_elf_symbols and get_64bit_elf_symbols.
3. get_32bit_program_headers and get_64bit_program_headers.
4. get_32bit_section_headers and get_64bit_section_headers.
These functions are very similar. They copy external representations,
which are different, Elf32_External_XXX vs Elf64_External_XXX, to internal
representations, using BYTE_GET. BYTE_GET is defined as
#define BYTE_GET(field) byte_get (field, sizeof (field))
and used as
internal[i].field = BYTE_GET (external[i].field);
where external[i].field can have different sizes and offsets between
Elf32_External_XXX and Elf64_External_XXX. We add a new macro
#define BYTE_GET_SIZE(var, ptr, size) \
{ \
(var) = byte_get (ptr, (size)); \
ptr += (size); \
}
and replace
internal[i].field1 = BYTE_GET (external[i].field1);
internal[i].field2 = BYTE_GET (external[i].field2);
with
ptr = external;
...
BYTE_GET_SIZE (internal[i].field1, ptr, sizeof external field1);
BYTE_GET_SIZE (internal[i].field2, ptr, sizeof external field2);
...
Then we can remove duplicated codes by consolidating get_32bit_XXX and
get_64bit_XXX into get_XXX.
H.J. Lu (5):
readelf: Consolidate get_[32|64]bit_section_headers
readelf: Use BYTE_GET_SIZE in RELR relocation processing
readelf: Consolidate get_[32|64]bit_program_headers
readelf: Consolidate get_[32|64]bit_elf_symbols
readelf: Consolidate get_[32|64]bit_dynamic_section
binutils/elfcomm.h | 6 +
binutils/readelf.c | 587 ++++++++++++---------------------------------
2 files changed, 154 insertions(+), 439 deletions(-)
--
2.55.0
More information about the Binutils
mailing list