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 <hjl.tools@gmail.com>
This commit is contained in:
H.J. Lu
2025-09-04 06:05:33 -07:00
parent 507d144bbf
commit 3e1716c9fc

View File

@@ -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"),