[PATCH] readelf: Handle 0 sh_entsize of GOT sections for x86
H.J. Lu
hjl.tools@gmail.com
Thu Sep 4 01:04:35 GMT 2025
On Wed, Sep 3, 2025 at 5:24 PM Alan Modra <amodra@gmail.com> wrote:
>
> 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..."
Fixed in the v2 patch.
> > + 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].
Updated in the v2 patch to set it to 8 for ELFCLASS64 and skip with
a warning for ELFCLASS32 which may use 8, like x32.
>
> > + {
> > + 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
--
H.J.
More information about the Binutils
mailing list