Is the lld linker a drop-in replacement for ld and gold?

17.1k Views Asked by At

The linker from the LLVM project lld is currently developed with new features added week by week. Its developers promise that lld is faster than ld. How does it compete compared to gold?

Is lld a drop-in replacement for ld? With gold there are some hoops to jump through.

3

There are 3 best solutions below

1
On BEST ANSWER

One of the LLD developers, Rui Ueyama, looks back at the progress LLD did in 2016, see http://lists.llvm.org/pipermail/llvm-dev/2016-December/107981.html.

  • "Now I'm pretty sure that that [LLD] is going to be a serious (and better, in my opinion) alternative to the existing GNU linkers [..]."
  • "LLD is now able to link most x86-64 userland programs."
  • "The FreeBSD project and we are trying to make LLD the system default linker of the operating system, and except a few tricky programs such as the kernel or a bootloader, the linker works mostly fine." Already achieved!
  • "LLD supports x86, x86-64, x32, AArch64, AMDGPU, ARM, PPC64 and MIPS32/64, though completeness varies."
  • "[T]here are already a few systems that are using LLD as system linkers, such as CloudABI or Fuchsia. Chromium and Clang/LLVM itself has build options to use LLD to build them."

And, as a bonus:

  • "LLD got faster [..] At the beginning of this year, LLD took about 16 seconds to produce a 1.5 GB clang (debug build) executable. Now, it takes about 14.5 seconds on single core and 8.5 seconds on 20 cores. ld.gold takes about 25 seconds and 20 seconds, respectively. [..] If you have a problem of too long link time, I'd recommend to try LLD."

Update spring 2017 According to one of the developers "LLD/ELF is now ready for production use at least for x86-64 (and probably for AArch64 and MIPS).", see http://lists.llvm.org/pipermail/llvm-dev/2017-March/111083.html It also contains a brief description on how to make use of LLD.

0
On

The program itself claims compatibility goal, and seems to work fine on simple tests

This design goal is claimed on their website:

LLD is a drop-in replacement for the GNU linkers that accepts the same command line arguments and linker scripts as GNU.

E.g. on Ubuntu 20.04 I install:

sudo apt install lld
lld --version

says:

LLD 10.0.0 (compatible with GNU linkers)

and I'm able to compile a C hello world with -fuse-ld=lld:

gcc -fuse-ld=lld -ggdb3 -O0 -std=c11 -Wall -Wextra -pedantic -o hello.out hello.c

Performance benchmark vs gold

I'll document results soon at: Replacing ld with gold - any experience?

0
On

FreeBSD / OpenBSD use lld as the system linker. FreeBSD does across all supported archs, for OpenBSD we do for all minus mips64 at the moment (amd64 arm i386 powerpc -- aarch64 powerpc64 riscv64 ports were from scratch and never used the BFD linker, but do use lld). We're building the whole OS and 99.9999% of the ports tree. I can count on one hand how many are left that do not.

It's definitely much faster for larger projects especially larger C++ projects like Chrome, Firefox, Thunderbird, KDE, etc. Also lower memory utilization which can be problematic on 32-bit archs.