[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 07/16] x86/boot: create *.lnk files with linker script



On Fri, Jun 17, 2016 at 04:04:20AM -0600, Jan Beulich wrote:
> >>> On 17.06.16 at 11:06, <daniel.kiper@xxxxxxxxxx> wrote:
> > On Tue, May 24, 2016 at 06:52:39AM -0600, Jan Beulich wrote:
> >> >>> On 24.05.16 at 14:28, <daniel.kiper@xxxxxxxxxx> wrote:
> >> > On Tue, May 24, 2016 at 03:05:06AM -0600, Jan Beulich wrote:
> >> >> >>> On 15.04.16 at 14:33, <daniel.kiper@xxxxxxxxxx> wrote:
> >> >> > +  /DISCARD/ : {
> >> >> > +        /*
> >> >> > +         * .got.plt section is used only by dynamic linker
> >> >> > +         * and our output is not supposed to be loaded by
> >> >> > +         * dynamic linker. Additionally, it just contains
> >> >> > +         * .PLT0 which is referenced from nowhere. So, we
> >> >> > +         * can safely drop .got.plt here.
> >> >> > +         *
> >> >> > +         * Ha! This should be really discarded here. However,
> >> >> > +         * .got.plt section contains _GLOBAL_OFFSET_TABLE_
> >> >> > +         * symbol too and it is used as a reference for relative
> >> >> > +         * addressing (and only for that thing). Hence, ld
> >> >> > +         * complains if we remove that section because it
> >> >> > +         * cannot find _GLOBAL_OFFSET_TABLE_. So, drop .got.plt
> >> >> > +         * section during conversion to plain binary format.
> >> >> > +         * Please check build32.mk for more details.
> >> >> > +         */
> >> >> > +        /* *(.got.plt) */
> >> >> > +  }
> >> >>
> >> >> I'm afraid this needs more investigation: Afaik there should be no
> >> >
> >> > I am not sure what else we should look for.
> >>
> >> The reason why such an empty .got.plt gets created in the first place.
> >> If e.g. that turns out to be a bug in (some versions of) binutils, then
> >> that bug should be named here as the reason.
> >
> > If PIC/PIE code is build then .got.plt exists in executable even if it
> > is not linked with dynamic libraries.
>
> Well - then just don't force -fPIC or -fPIE for the compilation of this
> code?

No way. Then final code is not relocatable. And this code must be relocatable.

> >> >> reason for the linker to create an otherwise empty .got.plt in the
> >> >
> >> > As I wrote above. It contains _GLOBAL_OFFSET_TABLE_ which is used
> >> > as a reference for relative addressing.
> >>
> >> But we don't use any such, so without being needed I don't think
> >> the symbol needs to be created.
> >
> > R_386_GOTPC and R_386_GOTOFF relocations use address of
> > _GLOBAL_OFFSET_TABLE_
> > as a reference. So, it is needed during linking phase. However, later it is
> > not needed.  Hence, .got.plt with _GLOBAL_OFFSET_TABLE_ and .PLT0 can safely
> > be dropped.
>
> These two relocation types should not appear for non-PIC/PIE code.

Sure but as above.

Daniel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.