LLD 7.0.0 Release Notes¶
Introduction¶
lld is a high-performance linker that supports ELF (Unix), COFF (Windows), Mach-O (macOS), MinGW and WebAssembly. lld is command-line-compatible with GNU linkers and Microsoft link.exe, and is significantly faster than the system default linkers.
lld 7 for ELF, COFF and MinGW are production-ready.
- lld/ELF can build the entire FreeBSD/{AMD64,ARMv7} and will be the default linker of the next version of the operating system.
- lld/COFF is being used to create official builds of large popular programs such as Chrome and Firefox.
- lld/MinGW is being used by Firefox for their MinGW builds. lld/MinGW still needs a sysroot specifically built for lld, with llvm-dlltool, though.
- lld/WebAssembly is used as the default (only) linker in Emscripten when using the upstream LLVM compiler.
- lld/Mach-O is still experimental.
Non-comprehensive list of changes in this release¶
ELF Improvements¶
- Fixed a lot of long-tail compatibility issues with GNU linkers.
- Added
-z retpolineplt
to emit a PLT entry that doesn’t contain an indirect jump instruction to mitigate Spectre v2 vulnerability. - Added experimental support for SHT_RELR sections to create a compact dynamic relocation table.
- Added support for split stacks.
- Added support for address significance table (section with type
SHT_LLVM_ADDRSIG) to improve Identical Code Folding (ICF). Combined with the
-faddrsig
compiler option added to Clang 7, lld’s--icf=all
can now safely merge functions and data to generate smaller outputs than before. - Improved
--gdb-index
so that it is faster (r336790) and uses less memory (r336672). - Reduced memory usage of
--compress-debug-sections
(r338913). - Added linker script OVERLAY support (r335714).
- Added
--warn-backref
to make it easy to identify command line option order that doesn’t work with GNU linkers (r329636) - Added ld.lld.1 man page (r324512).
- Added support for multi-GOT.
- Added support for MIPS position-independent executable (PIE).
- Fixed MIPS TLS GOT entries for local symbols in shared libraries.
- Fixed calculation of MIPS GP relative relocations in case of relocatable output.
- Added support for PPCv2 ABI.
- Removed an incomplete support of PPCv1 ABI.
- Added support for Qualcomm Hexagon ISA.
- Added the following flags:
--apply-dynamic-relocs
,--check-sections
,--cref
,--just-symbols
,--keep-unique
,--no-allow-multiple-definition
,--no-apply-dynamic-relocs
,--no-check-sections
,--no-gnu-unique, ``--no-pic-executable
,--no-undefined-version
,--no-warn-common
,--pack-dyn-relocs=relr
,--pop-state
,--print-icf-sections
,--push-state
,--thinlto-index-only
,--thinlto-object-suffix-replace
,--thinlto-prefix-replace
,--warn-backref
,-z combreloc
,-z copyreloc
,-z initfirst
,-z keep-text-section-prefix
,-z lazy
,-z noexecstack
,-z relro
,-z retpolineplt
,-z text
COFF Improvements¶
- Improved correctness of exporting mangled stdcall symbols.
- Completed support for ARM64 relocations.
- Added support for outputting PDB debug info for MinGW targets.
- Improved compatibility of output binaries with GNU binutils objcopy/strip.
- Sped up PDB file creation.
- Changed section layout to improve compatibility with link.exe.
- /subsystem inference is improved to cover more corner cases.
- Added the following flags:
--color-diagnostics={always,never,auto}
,--no-color-diagnostics
,/brepro
,/debug:full
,/debug:ghash
,/guard:cf
,/guard:longjmp
,/guard:nolongjmp
,/integritycheck
,/order
,/pdbsourcepath
,/timestamp