[PATCH] readelf: Handle 0 sh_entsize of GOT sections for x86
Alan Modra
amodra@gmail.com
Thu Sep 4 00:24:29 GMT 2025
On Wed, Sep 03, 2025 at 04:28:30PM -0700, H.J. Lu wrote:
> Some linker sets sh_entsize on .got and .got.plt sections, for example
> x86-64 Google chrome browser:
>
> $ readelf -SW /opt/google/chrome/chrome | grep got
> [27] .got PROGBITS 000000000fb29fc0 fb27fc0 001be0 00 WA 0 0 8
> [28] .got.plt PROGBITS 000000000fb2bba0 fb29ba0 0029a8 00 WA 0 0 8
> $
>
> If sh_entsize of GOT sections is 0 for x86, assume 4 for i386 and 8 for
> x86-64.
>
> PR binutils/33368
> * readelf.c (process_got_section_contents): Handle 0 sh_entsize
> of GOT sections for i386 and x86-64.
>
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> ---
> binutils/readelf.c | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/binutils/readelf.c b/binutils/readelf.c
> index 4b1a26602c2..c7a66d2a8e0 100644
> --- a/binutils/readelf.c
> +++ b/binutils/readelf.c
> @@ -21150,6 +21150,24 @@ process_got_section_contents (Filedata * filedata)
> }
>
> uint32_t entsz = section->sh_entsize;
> + /* NB: Some linker sets sh_entsize on .got and .got.plt
You mean, "Some linkers don't set sh_entsize..."
> + sections, for example x86-64 Google chrome browser. */
> + if (entsz == 0)
> + switch (filedata->file_header.e_machine)
Why only a fix for x86? It seems reasonable to choose entsz based on
file_header.e_ident[EI_CLASS].
> + {
> + default:
> + warn (_("Can't determine section '%s' sh_entsize\n"),
> + name);
> + res = false;
> + goto out;
> + case EM_386:
> + entsz = 4;
> + break;
> + case EM_X86_64:
> + entsz = 8;
> + break;
> + }
> +
> entries = section->sh_size / entsz;
> if (entries == 1)
> printf (_("\nGlobal Offset Table '%s' contains 1 entry:\n"),
> --
> 2.51.0
--
Alan Modra
More information about the Binutils
mailing list