| ======================= |
| 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`` |