lld status on the freebsd ports
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 12 10:56:07 PST 2016
Thank you for the update!
On Mon, Dec 12, 2016 at 9:28 AM, Rafael Avila de Espindola via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> For the last week or so I did a push to build the freebsd ports with lld
> and see how mature lld was.
>
> The results were overall very good and identified a few bugs I fixed in
> lld and also a few issues in freebsd and other projects. Looking at
> these we should be able to get an idea of what differences in behavior
> lld users are likely to noticed and what to call out in the
> documentation.
>
> The short summary is that we can link 19828 packages and 179 fail. There
> were
> also 6175 skipped. Some of these packages are interpreters and
> compilers, so there is also quite a bit of testing of the linked
> programs.
>
Why were 6175 packages skipped?
I am going on vacation tomorrow (will probably still do some code
> reviews), but I have uploaded all the logs and the failed build
> directories to
>
> https://s3.amazonaws.com/freebsd-poudriere/result.tar.xz
>
> In case anyone wants to dig into it.
>
> Some of the problems I found were easy to hack around, but the hack is
> not what I think is the correct solution. A commutative patch is
> attached. The issues it avoids are
>
> * While clang passes all the -L the linker needs, it looks like gcc does
> not. Adding "/usr/lib" as a hard coded path fixed an error when
> bootstraping one of the gcc packages. The package/upstream should be
> changed instead. One of the big design decisions of lld is that it is
> always a cross linker, so always searching /usr/lib is really just a
> hack.
>
> * Making libtool happy. Unfortunately libtool looks for the string GNU
> in --version to decide if a linker supports the same command lines as
> bfd ld. It also looks for "supported targets" in --help and checks if
> there is some elf in there to decide if shared libraries are
> supported. To work around that the patch prints "LLD (not GNU)" in
> --version and ": supported targets: elf" in --help. The real fix is to
> update libtool. Hopefully its defaults can be changed. I would
> expected that any new linker it doesn't know about will support shared
> libraries and resemble the bfd command line.
>
> * Handling broken comdats. The name of a comdat is stored in a symbol
> name. Really old versions of the gnu assembler would use a section
> symbol and expect the section name to be used instead. The current
> assembler in freebsd doesn't have that bug, but there is a bootstrap
> package for ada that has some .o files that were assembled with a
> broken assembler. The correct fix is just to regenerate them.
>
> * Ignoring R_X86_64_RELATIVE. Dtrace on freebsd creates object files
> with the R_X86_64_RELATIVE relocation in it. The relocation only
> really makes sense for a dynamic linker. We have to change dtrace to
> use one of the existing .o relocations or as a last resort create a
> new one if for some reason it cannot use any of the existing ones
> (this would be a psabi change, no a lld only change). For now the
> patch just ignores it.
>
> The other issues I noticed were
>
> * Mono tries to use a local dynamic relocation against a symbol that can
> be preempted (https://bugzilla.xamarin.com/show_bug.cgi?id=49218).
>
> * The seabios package has a build time check to see if the linker is
> working. Looks like they over reduced a testcase for a previous bfd
> bug. We fail that (pr31335), but link the package if the test is
> disabled.
>
> * We are missing some options
> https://llvm.org/bugs/show_bug.cgi?id=31334
>
> * The postgresql contrib package tries to build what I think is a plugin
> and passes a non pic library early in the command line. With bfd that
> works because it never looks at that library. It looks like all that
> is needed is to remove the -l from the command line.
>
> * The open al project builds a library with a protected symbol but then
> tries to access it as an absolute value from a program. The truly
> correct fix is to make sure that something like dllimport works in
> clang. The short term fix is to add -fPIE to the build of the program.
>
> I have also hit non lld specific issues, like
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=200937 and some
> package missing a dependency on makeinfo, so our numbers might not be
> that much worse than bfd building the same revision. I had no time to do
> a bfd run to compare.
>
> Thanks a lot to Ed Maste for the help with the various bumps along the
> way. LLD is looking really good, and I can't help but start thinking
> about how can we make things better once it is the default linker. In
> particular, the way dtrace works (editing .o files in place) seems very
> unfriendly to build systems and I would love to chat with people at the
> next BSDCan on how to make it better :-)
>
>
>
> Cheers,
> Rafael
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161212/290d5538/attachment.html>
More information about the llvm-commits
mailing list