This is an old revision of the document!
Background
lld, part of the LLVM family of projects, is a high-performance linker for the ELF, COFF, and Mach-O object formats. This page describes the ongoing project to use lld as FreeBSD's base system linker.
In-tree LLD
FreeBSD-CURRENT contains LLD 5.0.0. To build world and kernel with LLD, and install LLD as /usr/bin/ld, add to /etc/src.conf:
WITH_LLD_IS_LD=yes WITH_LLD_BOOTSTRAP=yes
WITH_LLD_BOOTSTRAP=yes uses lld as the linker for building the FreeBSD world, and has no effect on the linker installed in /usr/bin/ld. WITH_LLD_IS_LD=yes installes lld as /usr/bin/ld, and has no effect on the linker used for building world.
Upstream LLD
Build upstream lld
git clone https://github.com/llvm-mirror/llvm cd llvm/tools git clone https://github.com/llvm-mirror/lld mkdir ../build && cd ../build cmake -G "Unix Makefiles" ../ make -j8
Make lld the default linker
cd build/bin ln -s lld ld setenv PATH /path/to/llvm/build/bin:$PATH setenv LD /path/to/llvm/build/bin rehash
To check if the changes took effect:
davide@rabbit1:/home/davide/llvm/build/bin $ ld --help | head -n 1 OVERVIEW: LLVM Linker
Per-arch status (in HEAD)
| Architecture | World | Kernel | Bootstrap linker | /usr/bin/ld |
|---|---|---|---|---|
| amd64 | OK | OK | lld | bfd |
| arm64 | OK | OK (excl VIMAGE) | lld | lld |
| i386 | OK | OK (excl VIMAGE) | lld | bfd |
| arm | libc fails to link | LLD targets v7l+ | bfd | bfd |
| armv6 | libc fails to link | LLD targets v7l+ | bfd | bfd |
| armv7 | libc fails to link | OK | bfd | bfd |
| mips64 | Most links, untested | Link fails | bfd | bfd |
| mips | Most links, untested | Link fails | bfd | bfd |
| powerpc64 | libc fails to link | Untested | bfd | bfd |
| powerpc | libc fails to link | Untested | bfd | bfd |
| sparc64 | no support | no support | bfd | bfd |
| riscv | no support | no support | bfd | bfd |
TODO
WIP patches
lld
MIPS
- MIPS Multi-GOT implementation (2017-03-31)
ARM
Introduce range extension thunks for ARM (2017-06-27)Add support for multiple passes to createThunks (2017-06-27)
FreeBSD
Known Issues
A FreeBSD ports exp-run is tracked in PR214864.
- go crashes on startup go Github issue 19018
- print/gl2ps needs explicit -L/usr/lib PR218399.
Links
- Rui Ueyama's New LLD linker for ELF talk
- Linking the FreeBSD base system with LLD status update from March 2016
- lld as the FreeBSD base system linker Google Doc