[PATCH] gold: Fix _GLOBAL_OFFSET_TABLE_ value for large GOTs
Stephen Crane
sjc@immunant.com
Tue May 8 19:00:00 GMT 2018
Ping. This seems to be a pretty simple copy+paste error that we should get
fixed.
On Wed, Apr 11, 2018 at 1:05 PM Stephen Crane <sjc@immunant.com> wrote:
> Apologies, gold/Changelog should actually be:
> * aarch64.cc (Target_aarch64::do_finalize_sections): Use size of
> .got section for the _GLOBAL_OFFSET_TABLE_ symbol computation.
> - Stephen
> On Wed, Apr 11, 2018 at 1:02 PM, Stephen Crane <sjc@immunant.com> wrote:
> > If this looks ok, could someone with commit access commit this for me?
Thanks.
> >
> >
> > [GOLD] Fix _GLOBAL_OFFSET_TABLE_ value for large GOTs
> >
> > Gold resolves GOT-relative relocs relative to the GOT base +
> > 0x8000 when the GOT
> > is larger than 0x8000. However, previously the
> > _GLOBAL_OFFSET_TABLE_ symbol was
> > set to GOT base + 0x8000 when the .got.plt was larger than 0x8000.
> > This patch
> > makes both checks use the size of the .got section so that they
> > agree when to
> > add 0x8000.
> >
> >
> > * aarch64.cc (do_finalize_sections): Use size of .got section for
> > the _GLOBAL_OFFSET_TABLE_ symbol computation.
> >
> >
> > diff --git a/gold/aarch64.cc b/gold/aarch64.cc
> > index 8de9a26765..67f210876d 100644
> > --- a/gold/aarch64.cc
> > +++ b/gold/aarch64.cc
> > @@ -6965,11 +6965,11 @@ Target_aarch64<size,
big_endian>::do_finalize_sections(
> > }
> >
> > // Set the size of the _GLOBAL_OFFSET_TABLE_ symbol to the size of
> > - // the .got.plt section.
> > + // the .got section.
> > Symbol* sym = this->global_offset_table_;
> > if (sym != NULL)
> > {
> > - uint64_t data_size = this->got_plt_->current_data_size();
> > + uint64_t data_size = this->got_->current_data_size();
> > symtab->get_sized_symbol<size>(sym)->set_symsize(data_size);
> >
> > // If the .got section is more than 0x8000 bytes, we add
More information about the Binutils
mailing list