=========================== lld |release| Release Notes =========================== .. contents:: :local: .. only:: PreRelease .. warning:: These are in-progress notes for the upcoming LLVM |release| release. Release notes for previous releases can be found on `the Download Page `_. Introduction ============ This document contains the release notes for the lld linker, release |release|. 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 `_. Non-comprehensive list of changes in this release ================================================= ELF Improvements ---------------- * Link speed improved greatly compared with lld 15.0. Notably input section initialization and relocation scanning are now parallel. (`D130810 `_) (`D133003 `_) * ``ELFCOMPRESS_ZSTD`` compressed input sections are now supported. (`D129406 `_) * ``--compress-debug-sections=zstd`` is now available to compress debug sections with zstd (``ELFCOMPRESS_ZSTD``). (`D133548 `_) * ``--no-warnings``/``-w`` is now available to suppress warnings. (`D136569 `_) * ``DT_RISCV_VARIANT_CC`` is now produced if at least one ``R_RISCV_JUMP_SLOT`` relocation references a symbol with the ``STO_RISCV_VARIANT_CC`` bit. (`D107951 `_) * ``DT_STATIC_TLS`` is now set for AArch64/PPC32/PPC64 initial-exec TLS models when producing a shared object. * ``--no-undefined-version`` is now the default; symbols named in version scripts that have no matching symbol in the output will be reported. Use ``--undefined-version`` to revert to the old behavior. (`D135402 `_) * ``-V`` is now an alias for ``-v`` to support ``gcc -fuse-ld=lld -v`` on many targets. * ``-r`` no longer defines ``__global_pointer$`` or ``_TLS_MODULE_BASE_``. * A corner case of mixed GCC and Clang object files (``STB_WEAK`` and ``STB_GNU_UNIQUE`` in different COMDATs) is now supported. (`D136381 `_) * The output ``SHT_RISCV_ATTRIBUTES`` section now merges all input components instead of picking the first input component. (`D138550 `_) * For x86-32, ``-fno-plt`` GD/LD TLS models ``call *___tls_get_addr@GOT(%reg)`` are now supported. Previous output might have runtime crash. * Armv4(T) thunks are now supported. (`D139888 `_) (`D141272 `_) Breaking changes ---------------- COFF Improvements ----------------- * The linker command line entry in ``S_ENVBLOCK`` of the PDB is now stripped from input files, to align with MSVC behavior. (`D137723 `_) * Switched from SHA1 to BLAKE3 for PDB type hashing / ``-gcodeview-ghash`` (`D137101 `_) * Improvements to the PCH.OBJ files handling. Now LLD behaves the same as MSVC link.exe when merging PCH.OBJ files that don't have the same signature. (`D136762 `_) * Changed the OrdinalBase for DLLs from 0 to 1, matching the output from both MS link.exe and GNU ld. (`D134140 `_) MinGW Improvements ------------------ * The lld-specific options ``--guard-cf``, ``--no-guard-cf``, ``--guard-longjmp`` and ``--no-guard-longjmp`` has been added to allow enabling Control Flow Guard and long jump hardening. These options are disabled by default, but enabling ``--guard-cf`` will also enable ``--guard-longjmp`` unless ``--no-guard-longjmp`` is also specified. ``--guard-longjmp`` depends on ``--guard-cf`` and cannot be used by itself. Note that these features require the ``_load_config_used`` symbol to contain the load config directory and be filled with the required symbols. (`D132808 `_) * Pick up libraries named ``.lib`` when linked with ``-l``, even if ``-static`` has been specified. This fixes conformance to what GNU ld does. (`D135651 `_) * Unwinding in Rust code on i386 in MinGW builds has been fixed, by avoiding to leave out the ``rust_eh_personality`` symbol. (`D136879 `_) MachO Improvements ------------------ WebAssembly Improvements ------------------------