This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] gold: Fix _GLOBAL_OFFSET_TABLE_ value for large GOTs


I've committed the patch on your behalf. Thanks!

-cary


On Tue, May 8, 2018 at 12:00 PM, Stephen Crane <sjc@immunant.com> wrote:

> 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
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]