[llvm-dev] [ThinLTO] static library failure with object files with the same name

Teresa Johnson via llvm-dev llvm-dev at lists.llvm.org
Thu Sep 7 08:18:17 PDT 2017


On Wed, Sep 6, 2017 at 1:28 PM, Davide Italiano via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> On Wed, Sep 6, 2017 at 1:10 PM, Johan Engelen via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
> > On Tue, Sep 5, 2017 at 11:34 PM, Davide Italiano <dccitaliano at gmail.com>
> > wrote:
> >>
> >> On Tue, Sep 5, 2017 at 2:09 PM, Teresa Johnson <tejohnson at google.com>
> >> wrote:
> >> >
> >> > Hi Johan,
> >> >
> >> > Right, per the bug this is fixed in lld (and was already handled in
> >> > gold-plugin), but I guess not in ld64. Note that lld and gold-plugin
> use the
> >> > new LTO API, while ld64 (and probably other linkers) are still using
> the
> >> > legacy libLTO (which is what ThinLTOCodeGenerator.cpp is part of).
> Fixing it
> >> > in the location you propose could work for all legacy libLTO users.
> But I
> >> > don't think that adding just the size will (always) be enough to
> >> > disambiguate (couldn't the 2 same named members have the same size?) -
> >> > although lld is doing the same thing so this may be as good as what
> is done
> >> > there. For gold-plugin we add the byte offset into the archive where
> the
> >> > member starts, which will be unique.
> >> > +davide for thoughts since he fixed it on the lld side.
> >> >
> >>
> >> Yes, Teresa is right, this is the correct fix.
> >> I'm not sure what subset of GNU archives Mach-O supports, but the only
> >> way of being safe is using offset in the archive + archive name.
> >
> >
> > ThinLTOCodeGenerator::addModule is called by the linker, right? (I can't
> > find any callers)
> > When it is called, we cannot retrieve the offset of the module inside the
> > archive, because the linker didn't tell us about it.
>
> See here for the fix.
> https://reviews.llvm.org/D25495
> You pass the the archive name + offset to `lto::InputFile::create`,
> assuming your linker uses the new LTO API (and I'm not sure whether
> ld64 already switched).
>

AFAIK, no. Mehdi started to look at this awhile back but likely has not
been able to pick it back up.


> The linker knows the archive name from which it's fetching the member,
> as well as its offset (it asks libArchive about it, for lld).
> I'm not sure how it works ld64, but of course, to get this mechanism
> working, you need some linker modifications.


Right, the linker can compose the new identifier. The proposed fix
in ThinLTOCodeGenerator.cpp could be a partial workaround until linkers do
this.

Agree that it should be documented, at the very least in the header file
interfaces to the new/old LTO APIs. Not sure there is a better place to
document?

Teresa



CC:ed some Mach-O people, they probably know more about this than I do.
>
> Thanks,
>
> --
> Davide
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>



-- 
Teresa Johnson |  Software Engineer |  tejohnson at google.com |  408-460-2413
<(408)%20460-2413>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170907/d7626ea9/attachment.html>


More information about the llvm-dev mailing list