From: H.J. Lu Date: Thu, 4 Sep 2025 13:05:33 +0000 (-0700) Subject: readelf: Handle 0 sh_entsize of GOT sections X-Git-Tag: gdb-17-branchpoint~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3e1716c9fc203f5654d49c17b160a466c78a2a2c;p=thirdparty%2Fbinutils-gdb.git readelf: Handle 0 sh_entsize of GOT sections Gold, lld and mold set sh_entsize to 0 on .got and .got.plt sections. If sh_entsize of GOT sections is 0, assume 8 for ELFCLASS64 and 4 for ELFCLASS32, except for x32 which uses 8. PR binutils/33368 * readelf.c (process_got_section_contents): Handle 0 sh_entsize of GOT sections. Signed-off-by: H.J. Lu --- diff --git a/binutils/readelf.c b/binutils/readelf.c index 705b7761bc8..03c4520ff92 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -21075,6 +21075,25 @@ process_got_section_contents (Filedata * filedata) } uint32_t entsz = section->sh_entsize; + /* NB: Gold, lld and mold set sh_entsize to 0 on .got and + .got.plt sections. */ + if (entsz == 0) + { + if (is_32bit_elf) + switch (filedata->file_header.e_machine) + { + default: + entsz = 4; + break; + case EM_X86_64: + /* x32 uses 8 byte GOT sh_entsize. */ + entsz = 8; + break; + } + else + entsz = 8; + } + entries = section->sh_size / entsz; if (entries == 1) printf (_("\nGlobal Offset Table '%s' contains 1 entry:\n"),