1===========================
2lld |release| Release Notes
3===========================
4
5.. contents::
6    :local:
7
8.. only:: PreRelease
9
10  .. warning::
11     These are in-progress notes for the upcoming LLVM |release| release.
12     Release notes for previous releases can be found on
13     `the Download Page <https://releases.llvm.org/download.html>`_.
14
15Introduction
16============
17
18This document contains the release notes for the lld linker, release |release|.
19Here we describe the status of lld, including major improvements
20from the previous release. All lld releases may be downloaded
21from the `LLVM releases web site <https://llvm.org/releases/>`_.
22
23Non-comprehensive list of changes in this release
24=================================================
25
26ELF Improvements
27----------------
28
29* Link speed improved greatly compared with lld 15.0. Notably input section
30  initialization and relocation scanning are now parallel.
31  (`D130810 <https://reviews.llvm.org/D130810>`_)
32  (`D133003 <https://reviews.llvm.org/D133003>`_)
33* ``ELFCOMPRESS_ZSTD`` compressed input sections are now supported.
34  (`D129406 <https://reviews.llvm.org/D129406>`_)
35* ``--compress-debug-sections=zstd`` is now available to compress debug
36  sections with zstd (``ELFCOMPRESS_ZSTD``).
37  (`D133548 <https://reviews.llvm.org/D133548>`_)
38* ``--no-warnings``/``-w`` is now available to suppress warnings.
39  (`D136569 <https://reviews.llvm.org/D136569>`_)
40* ``DT_RISCV_VARIANT_CC`` is now produced if at least one ``R_RISCV_JUMP_SLOT``
41  relocation references a symbol with the ``STO_RISCV_VARIANT_CC`` bit.
42  (`D107951 <https://reviews.llvm.org/D107951>`_)
43* ``DT_STATIC_TLS`` is now set for AArch64/PPC32/PPC64 initial-exec TLS models
44  when producing a shared object.
45* ``--no-undefined-version`` is now the default; symbols named in version
46  scripts that have no matching symbol in the output will be reported. Use
47  ``--undefined-version`` to revert to the old behavior.
48  (`D135402 <https://reviews.llvm.org/D135402>`_)
49* ``-V`` is now an alias for ``-v`` to support ``gcc -fuse-ld=lld -v`` on many targets.
50* ``-r`` no longer defines ``__global_pointer$`` or ``_TLS_MODULE_BASE_``.
51* A corner case of mixed GCC and Clang object files (``STB_WEAK`` and
52  ``STB_GNU_UNIQUE`` in different COMDATs) is now supported.
53  (`D136381 <https://reviews.llvm.org/D136381>`_)
54* The output ``SHT_RISCV_ATTRIBUTES`` section now merges all input components
55  instead of picking the first input component.
56  (`D138550 <https://reviews.llvm.org/D138550>`_)
57* For x86-32, ``-fno-plt`` GD/LD TLS models ``call *___tls_get_addr@GOT(%reg)``
58  are now supported. Previous output might have runtime crash.
59* Armv4(T) thunks are now supported.
60  (`D139888 <https://reviews.llvm.org/D139888>`_)
61  (`D141272 <https://reviews.llvm.org/D141272>`_)
62
63Breaking changes
64----------------
65
66COFF Improvements
67-----------------
68
69* The linker command line entry in ``S_ENVBLOCK`` of the PDB is now stripped
70  from input files, to align with MSVC behavior.
71  (`D137723 <https://reviews.llvm.org/D137723>`_)
72* Switched from SHA1 to BLAKE3 for PDB type hashing / ``-gcodeview-ghash``
73  (`D137101 <https://reviews.llvm.org/D137101>`_)
74* Improvements to the PCH.OBJ files handling. Now LLD behaves the same as MSVC
75  link.exe when merging PCH.OBJ files that don't have the same signature.
76  (`D136762 <https://reviews.llvm.org/D136762>`_)
77* Changed the OrdinalBase for DLLs from 0 to 1, matching the output from
78  both MS link.exe and GNU ld. (`D134140 <https://reviews.llvm.org/D134140>`_)
79
80MinGW Improvements
81------------------
82
83* The lld-specific options ``--guard-cf``, ``--no-guard-cf``,
84  ``--guard-longjmp`` and ``--no-guard-longjmp`` has been added to allow
85  enabling Control Flow Guard and long jump hardening. These options are
86  disabled by default, but enabling ``--guard-cf`` will also enable
87  ``--guard-longjmp`` unless ``--no-guard-longjmp`` is also specified.
88  ``--guard-longjmp`` depends on ``--guard-cf`` and cannot be used by itself.
89  Note that these features require the ``_load_config_used`` symbol to contain
90  the load config directory and be filled with the required symbols.
91  (`D132808 <https://reviews.llvm.org/D132808>`_)
92
93* Pick up libraries named ``<name>.lib`` when linked with ``-l<name>``, even
94  if ``-static`` has been specified. This fixes conformance to what
95  GNU ld does. (`D135651 <https://reviews.llvm.org/D135651>`_)
96
97* Unwinding in Rust code on i386 in MinGW builds has been fixed, by avoiding
98  to leave out the ``rust_eh_personality`` symbol.
99  (`D136879 <https://reviews.llvm.org/D136879>`_)
100
101MachO Improvements
102------------------
103
104WebAssembly Improvements
105------------------------
106
107