=========================== 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 ---------------- * ``--export-dynamic-symbol-list`` has been added. (`D107317 `_) * ``--why-extract`` has been added to query why archive members/lazy object files are extracted. (`D109572 `_) * If ``-Map`` is specified, ``--cref`` will be printed to the specified file. (`D114663 `_) * ``-z bti-report`` and ``-z cet-report`` are now supported. (`D113901 `_) * ``--lto-pgo-warn-mismatch`` has been added. (`D104431 `_) * Archives without an index (symbol table) are now supported and work with ``--warn-backrefs``. One may build such an archive with ``llvm-ar rcS [--thin]`` to save space. (`D117284 `_) The archive index may be `entirely ignored `_ in a future release. * No longer deduplicate local symbol names at the default optimization level of ``-O1``. This results in a larger ``.strtab`` (usually less than 1%) but a faster link time. Use optimization level ``-O2`` to restore the deduplication. The ``-O2`` deduplication may be dropped in the future to help parallel ``.symtab`` write. * In relocatable output, relocations to discarded symbols now use tombstone values. (`D116946 `_) * Orphan section placement now picks a more suitable segment. Previously the algorithm might pick a readonly segment for a writable orphan section and make the segment writable. (`D111717 `_) * An empty output section moved by an ``INSERT`` comment now gets appropriate flags. (`D118529 `_) * Negation in a memory region attribute is now correctly handled. (`D113771 `_) * ``--compress-debug-sections=zlib`` is now run in parallel. ``{clang,gcc} -gz`` link actions are significantly faster. (`D117853 `_) * "relocation out of range" diagnostics and a few uncommon diagnostics now report an object file location beside a source file location. (`D112518 `_) * The write of ``.rela.dyn`` and ``SHF_MERGE|SHF_STRINGS`` sections (e.g. ``.debug_str``) is now run in parallel. Architecture specific changes: * The AArch64 port now supports adrp+ldr and adrp+add optimizations. ``--no-relax`` can suppress the optimization. (`D112063 `_) (`D117614 `_) * The x86-32 port now supports TLSDESC (``-mtls-dialect=gnu2``). (`D112582 `_) * The x86-64 port now handles non-RAX/non-adjacent ``R_X86_64_GOTPC32_TLSDESC`` and ``R_X86_64_TLSDESC_CALL`` (``-mtls-dialect=gnu2``). (`D114416 `_) * The x86-32 and x86-64 ports now support mixed TLSDESC and TLS GD, i.e. mixing objects compiled with and without ``-mtls-dialect=gnu2`` referencing the same TLS variable is now supported. (`D114416 `_) * For x86-64, ``--no-relax`` now suppresses ``R_X86_64_GOTPCRELX`` and ``R_X86_64_REX_GOTPCRELX`` GOT optimization (`D113615 `_) * ``R_X86_64_PLTOFF64`` is now supported. (`D112386 `_) * ``R_AARCH64_NONE``, ``R_PPC_NONE``, and ``R_PPC64_NONE`` in input REL relocation sections are now supported. Breaking changes ---------------- * ``e_entry`` no longer falls back to the address of ``.text`` if the entry symbol does not exist. Instead, a value of 0 will be written. (`D110014 `_) * ``--lto-pseudo-probe-for-profiling`` has been removed. In LTO, the compiler enables this feature automatically. (`D110209 `_) * Use of ``--[no-]define-common``, ``-d``, ``-dc``, and ``-dp`` will now get a warning. They will be removed or ignored in 15.0.0. (`llvm-project#53660 `_) COFF Improvements ----------------- * Correctly handle a signed immediate offset in ARM64 adr/adrp relocations. (`D114347 `_) * Omit section and label symbols from the symbol table. (`D113866 `_) MinGW Improvements ------------------ * ``--heap`` is now handled. (`D118405 `_) Mach-O Improvements ------------------- * The ``ld64.lld.darwinnew`` symlink has been removed. Use ``ld64.lld`` to invoke the Mach-O backend from now on. Moreover, the symlink ``ld64.lld.darwinold`` -- and the old Mach-O LLD code that it pointed to -- have been removed. (`D114842 `_) * The "cannot export hidden symbol" error has been downgraded to a warning. (`D107011 `_) * Common bitcode symbols are now supported. (`D107027 `_) * Weak references in bitcode are now supported. (`D115949 `_) * Thunk insertion now works more reliably. (`D108897 `_, `D108924 `_, `D109079 `_, `D116705 `_) * ``-ObjC`` now loads archive members before the symbol resolution phase. (`D108781 `_) * ``-oso_prefix`` is now supported. (`D112291 `_) * Properly encode binaries with zero exported symbols. Tools like ``codesign_allocate`` no longer choke on those binaries. (`D112589 `_) * We no longer treat architecture mismatches as a fatal error. Use ``-arch_errors_fatal`` if that behavior is still desired. (`D113082 `_) * Several performance improvements were done to speed LLD up on projects with a lot of framework flags and library lookups. Large Swift-based projects will benefit significantly. (`D113073 `_, `D113063 `_, `D113153 `_, `D113235 `_) * Several memory-reduction optimizations were done to reduce LLD's RSS footprint. (`D113813 `_, `D113818 `_) * Symbol patterns from ``-[un]exported_symbols_list`` are now processed in parallel. (`D113820 `_) * ``.weak_def_can_be_hidden`` symbols can now be exported. (`D113167 `_) * ``-S`` -- to omit debug info -- is now handled. (`D112594 `_) * ``-v`` now writes to stderr instead of stdout. (`D113020 `_) * Private externs with GOT relocations are now marked as LOCAL in the indirect symbol table. This allows ``strip -x`` to remove more symbols. (`D111852 `_) * We no longer generate bogus addresses when ``__TEXT,__gcc_except_tab`` is renamed. (`D113582 `_) * Unreferenced weak dylib symbols no longer trigger fetches from an archive. (`D115092 `_) * ``$ld$hide`` symbols are now supported. (`D115775 `_) * Symbols imported via ``-weak_framework`` are now properly marked as weak refs. (`D114397 `_) * ``--warn-dylib-install-name`` and ``--no-warn-dylib-install-name`` were added to toggle LLD-specific warnings around the use of ``-install_name``. (`D113534 `_) * Passing both ``--icf=all`` and ``-no_deduplicate`` no longer results in a warning. (`D110672 `_) * ICF now deduplicates functions with (identical) unwind info too. (`D109946 `_) * We now support ordering sections based on call graph profile data. (`D112164 `_) * Map file output now proceeds in parallel with output of the binary. (`D117069 `_) * The map file now contains dead-stripped symbols too. (`D114737 `_) * Multiple TLV sections with different alignments are now handled properly. (`D116263 `_) * ``--start-lib`` and ``--end-lib`` are now supported. (`D116913 `_) * ``-noall_load`` is now supported. (`D117629 `_) * ``-add_empty_section`` is now supported. (`D117749 `_) WebAssembly Improvements ------------------------