=======================
LLD 6.0.0 Release Notes
=======================

.. contents::
    :local:

Introduction
============

This document contains the release notes for the lld linker, release 6.0.0.
Here we describe the status of lld, including major improvements
from the previous release. All lld releases may be downloaded
from the `LLVM releases web site <http://llvm.org/releases/>`_.

Non-comprehensive list of changes in this release
=================================================

ELF Improvements
----------------

* A lot of bugs and compatibility issues have been identified and fixed as a
  result of people using lld 5.0 as a standard system linker. In particular,
  linker script and version script support has significantly improved that
  it should be able to handle almost all scripts.

* A mitigation for Spectre v2 has been implemented. If you pass ``-z
  retpolineplt``, lld uses RET instruction instead of JMP instruction in PLT.
  The option is available for x86 and x86-64.

* Identical Code Folding (ICF) now de-duplicates .eh_frame entries, so lld now
  generates slightly smaller outputs than before when you pass ``--icf=all``.

* Analysis for ``--as-needed`` is now done after garbage collection. If garbage
  collector eliminates all sections that use some library, that library is
  eliminated from DT_NEEDED tags. Previously, the analysis ran before garbage
  collection.

* Size of code segment is now always rounded up to page size to make sure that
  unused bytes at end of code segment is filled with trap instructions (such
  as INT3) instead of zeros.

* lld is now able to generate Android-style compact dynamic relocation table.
  You can turn on the feature by passing ``--pack-dyn-relocs=android``.

* Debug information is used in more cases when reporting errors.

* ``--gdb-index`` gets faster than before.

* String merging is now multi-threaded, which makes ``-O2`` faster.

* ``--hash-style=both`` is now default instead of ``--hash-style=sysv`` to
  match the behavior of recent versions of GNU linkers.

* ARM PLT entries automatically use short or long variants.

* lld can now identify and patch a code sequence that triggers AArch64 errata 843419.
  Add ``--fix-cortex-a53-843419`` to enable the feature.

* lld can now generate thunks for out of range branches.

* MIPS port now generates all output dynamic relocations using Elf_Rel format only.

* Added handling of the R_MIPS_26 relocation in case of N32/N64 ABIs and
  generating proper PLT entries.

* The following options have been added: ``--icf=none`` ``-z muldefs``
  ``--plugin-opt`` ``--no-eh-frame-hdr`` ``--no-gdb-index``
  ``--orphan-handling={place,discard,warn,error}``
  ``--pack-dyn-relocs={none,android}`` ``--no-omagic``
  ``--no-print-gc-sections`` ``--ignore-function-address-equality`` ``-z
  retpolineplt`` ``--print-icf-sections`` ``--no-pie``

COFF Improvements
-----------------

* A GNU ld style frontend for the COFF linker has been added for MinGW.
  In MinGW environments, the linker is invoked with GNU ld style parameters;
  which lld previously only supported when used as an ELF linker. When
  a PE/COFF target is chosen, those parameters are rewritten into the
  lld-link style parameters and the COFF linker is invoked instead.

* Initial support for the ARM64 architecture has been added.

* New ``--version`` flag.

* Significantly improved support for writing PDB Files.

* New ``--rsp-quoting`` flag, like ``clang-cl``.

* ``/manifestuac:no`` no longer incorrectly disables ``/manifestdependency:``.

* Only write ``.manifest`` files if ``/manifest`` is passed.

WebAssembly Improvements
------------------------

* Initial version of WebAssembly support has landed. You can invoke the
  WebAssembly linker by ``wasm-ld``.
