1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
|
===========================
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 <https://releases.llvm.org/download.html>`_.
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 <https://llvm.org/releases/>`_.
Non-comprehensive list of changes in this release
=================================================
ELF Improvements
----------------
* ``--export-dynamic-symbol-list`` has been added.
(`D107317 <https://reviews.llvm.org/D107317>`_)
* ``--why-extract`` has been added to query why archive members/lazy object files are extracted.
(`D109572 <https://reviews.llvm.org/D109572>`_)
* If ``-Map`` is specified, ``--cref`` will be printed to the specified file.
(`D114663 <https://reviews.llvm.org/D114663>`_)
* ``-z bti-report`` and ``-z cet-report`` are now supported.
(`D113901 <https://reviews.llvm.org/D113901>`_)
* ``--lto-pgo-warn-mismatch`` has been added.
(`D104431 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D117284>`_)
The archive index may be `entirely ignored <https://reviews.llvm.org/D119074>`_
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 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D111717>`_)
* An empty output section moved by an ``INSERT`` comment now gets appropriate
flags.
(`D118529 <https://reviews.llvm.org/D118529>`_)
* Negation in a memory region attribute is now correctly handled.
(`D113771 <https://reviews.llvm.org/D113771>`_)
* ``--compress-debug-sections=zlib`` is now run in parallel. ``{clang,gcc} -gz`` link
actions are significantly faster.
(`D117853 <https://reviews.llvm.org/D117853>`_)
* "relocation out of range" diagnostics and a few uncommon diagnostics
now report an object file location beside a source file location.
(`D112518 <https://reviews.llvm.org/D117853>`_)
* 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 <https://reviews.llvm.org/D112063>`_)
(`D117614 <https://reviews.llvm.org/D117614>`_)
* The x86-32 port now supports TLSDESC (``-mtls-dialect=gnu2``).
(`D112582 <https://reviews.llvm.org/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 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D114416>`_)
* For x86-64, ``--no-relax`` now suppresses ``R_X86_64_GOTPCRELX`` and
``R_X86_64_REX_GOTPCRELX`` GOT optimization
(`D113615 <https://reviews.llvm.org/D113615>`_)
* ``R_X86_64_PLTOFF64`` is now supported.
(`D112386 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D110014>`_)
* ``--lto-pseudo-probe-for-profiling`` has been removed. In LTO, the compiler
enables this feature automatically.
(`D110209 <https://reviews.llvm.org/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 <https://github.com/llvm/llvm-project/issues/53660>`_)
COFF Improvements
-----------------
* Correctly handle a signed immediate offset in ARM64 adr/adrp relocations.
(`D114347 <https://reviews.llvm.org/D114347>`_)
* Omit section and label symbols from the symbol table.
(`D113866 <https://reviews.llvm.org/D113866>`_)
MinGW Improvements
------------------
* ``--heap`` is now handled.
(`D118405 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D114842>`_)
* The "cannot export hidden symbol" error has been downgraded to a warning.
(`D107011 <https://reviews.llvm.org/D107011>`_)
* Common bitcode symbols are now supported.
(`D107027 <https://reviews.llvm.org/D107027>`_)
* Weak references in bitcode are now supported.
(`D115949 <https://reviews.llvm.org/D115949>`_)
* Thunk insertion now works more reliably.
(`D108897 <https://reviews.llvm.org/D108897>`_,
`D108924 <https://reviews.llvm.org/D108924>`_,
`D109079 <https://reviews.llvm.org/D109079>`_,
`D116705 <https://reviews.llvm.org/D116705>`_)
* ``-ObjC`` now loads archive members before the symbol resolution phase.
(`D108781 <https://reviews.llvm.org/D108781>`_)
* ``-oso_prefix`` is now supported.
(`D112291 <https://reviews.llvm.org/D112291>`_)
* Properly encode binaries with zero exported symbols. Tools like
``codesign_allocate`` no longer choke on those binaries.
(`D112589 <https://reviews.llvm.org/D112589>`_)
* We no longer treat architecture mismatches as a fatal error. Use
``-arch_errors_fatal`` if that behavior is still desired.
(`D113082 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D113073>`_,
`D113063 <https://reviews.llvm.org/D113063>`_,
`D113153 <https://reviews.llvm.org/D113153>`_,
`D113235 <https://reviews.llvm.org/D113235>`_)
* Several memory-reduction optimizations were done to reduce LLD's RSS
footprint.
(`D113813 <https://reviews.llvm.org/D113813>`_,
`D113818 <https://reviews.llvm.org/D113818>`_)
* Symbol patterns from ``-[un]exported_symbols_list`` are now processed in
parallel. (`D113820 <https://reviews.llvm.org/D113820>`_)
* ``.weak_def_can_be_hidden`` symbols can now be exported.
(`D113167 <https://reviews.llvm.org/D113167>`_)
* ``-S`` -- to omit debug info -- is now handled.
(`D112594 <https://reviews.llvm.org/D112594>`_)
* ``-v`` now writes to stderr instead of stdout.
(`D113020 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D111852>`_)
* We no longer generate bogus addresses when ``__TEXT,__gcc_except_tab`` is
renamed. (`D113582 <https://reviews.llvm.org/D113582>`_)
* Unreferenced weak dylib symbols no longer trigger fetches from an archive.
(`D115092 <https://reviews.llvm.org/D115092>`_)
* ``$ld$hide`` symbols are now supported.
(`D115775 <https://reviews.llvm.org/D115775>`_)
* Symbols imported via ``-weak_framework`` are now properly marked as weak refs.
(`D114397 <https://reviews.llvm.org/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 <https://reviews.llvm.org/D113534>`_)
* Passing both ``--icf=all`` and ``-no_deduplicate`` no longer results in a
warning. (`D110672 <https://reviews.llvm.org/D110672>`_)
* ICF now deduplicates functions with (identical) unwind info too.
(`D109946 <https://reviews.llvm.org/D109946>`_)
* We now support ordering sections based on call graph profile data.
(`D112164 <https://reviews.llvm.org/D112164>`_)
* Map file output now proceeds in parallel with output of the binary.
(`D117069 <https://reviews.llvm.org/D117069>`_)
* The map file now contains dead-stripped symbols too.
(`D114737 <https://reviews.llvm.org/D114737>`_)
* Multiple TLV sections with different alignments are now handled properly.
(`D116263 <https://reviews.llvm.org/D116263>`_)
* ``--start-lib`` and ``--end-lib`` are now supported.
(`D116913 <https://reviews.llvm.org/D116913>`_)
* ``-noall_load`` is now supported.
(`D117629 <https://reviews.llvm.org/D117629>`_)
* ``-add_empty_section`` is now supported.
(`D117749 <https://reviews.llvm.org/D117749>`_)
WebAssembly Improvements
------------------------
|