blob: 0f15ee92cc8b76a20cb54269f7a14cb76e4e210d [file] [log] [blame]
=======================
LLD 7.0.0 Release Notes
=======================
.. contents::
:local:
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
<https://groups.google.com/forum/#!topic/generic-abi/bX460iggiKg>`_ to create a
compact dynamic relocation table.
* Added support for `split stacks <https://gcc.gnu.org/wiki/SplitStacks>`_.
* 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
<https://reviews.llvm.org/rL336790>`_) and uses less memory (`r336672
<https://reviews.llvm.org/rL336672>`_).
* Reduced memory usage of ``--compress-debug-sections`` (`r338913
<https://reviews.llvm.org/rL338913>`_).
* Added linker script OVERLAY support (`r335714 <https://reviews.llvm.org/rL335714>`_).
* Added ``--warn-backref`` to make it easy to identify command line option order
that doesn't work with GNU linkers (`r329636 <https://reviews.llvm.org/rL329636>`_)
* Added ld.lld.1 man page (`r324512 <https://reviews.llvm.org/rL324512>`_).
* 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``