173 lines
7.4 KiB
ReStructuredText
173 lines
7.4 KiB
ReStructuredText
|
===========================
|
||
|
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
|
||
|
----------------
|
||
|
|
||
|
* ``--fat-lto-objects`` option is added to support LLVM FatLTO.
|
||
|
Without ``--fat-lto-objects``, LLD will link LLVM FatLTO objects using the
|
||
|
relocatable object file. (`D146778 <https://reviews.llvm.org/D146778>`_)
|
||
|
* ``-Bsymbolic-non-weak`` is added to directly bind non-weak definitions.
|
||
|
(`D158322 <https://reviews.llvm.org/D158322>`_)
|
||
|
* ``--lto-validate-all-vtables-have-type-infos``, which complements
|
||
|
``--lto-whole-program-visibility``, is added to disable unsafe whole-program
|
||
|
devirtualization. ``--lto-known-safe-vtables=<glob>`` can be used
|
||
|
to mark known-safe vtable symbols.
|
||
|
(`D155659 <https://reviews.llvm.org/D155659>`_)
|
||
|
* ``--save-temps --lto-emit-asm`` now derives ELF/asm file names from bitcode file names.
|
||
|
``ld.lld --save-temps a.o d/b.o -o out`` will create ELF relocatable files
|
||
|
``out.lto.a.o``/``d/out.lto.b.o`` instead of ``out1.lto.o``/``out2.lto.o``.
|
||
|
(`#78835 <https://github.com/llvm/llvm-project/pull/78835>`_)
|
||
|
* ``--no-allow-shlib-undefined`` now reports errors for DSO referencing
|
||
|
non-exported definitions.
|
||
|
(`#70769 <https://github.com/llvm/llvm-project/pull/70769>`_)
|
||
|
* common-page-size can now be larger than the system page-size.
|
||
|
(`#57618 <https://github.com/llvm/llvm-project/issues/57618>`_)
|
||
|
* When call graph profile information is available due to instrumentation or
|
||
|
sample PGO, input sections are now sorted using the new ``cdsort`` algorithm,
|
||
|
better than the previous ``hfsort`` algorithm.
|
||
|
(`D152840 <https://reviews.llvm.org/D152840>`_)
|
||
|
* Symbol assignments like ``a = DEFINED(a) ? a : 0;`` are now handled.
|
||
|
(`#65866 <https://github.com/llvm/llvm-project/pull/65866>`_)
|
||
|
* ``OVERLAY`` now supports optional start address and LMA
|
||
|
(`#77272 <https://github.com/llvm/llvm-project/pull/77272>`_)
|
||
|
* Relocations referencing a symbol defined in ``/DISCARD/`` section now lead to
|
||
|
an error.
|
||
|
(`#69295 <https://github.com/llvm/llvm-project/pull/69295>`_)
|
||
|
* For AArch64 MTE, global variable descriptors have been implemented.
|
||
|
(`D152921 <https://reviews.llvm.org/D152921>`_)
|
||
|
* ``R_AARCH64_GOTPCREL32`` is now supported.
|
||
|
(`#72584 <https://github.com/llvm/llvm-project/pull/72584>`_)
|
||
|
* ``R_LARCH_PCREL20_S2``/``R_LARCH_ADD6``/``R_LARCH_CALL36`` and extreme code
|
||
|
model relocations are now supported.
|
||
|
* ``--emit-relocs`` is now supported for RISC-V linker relaxation.
|
||
|
(`D159082 <https://reviews.llvm.org/D159082>`_)
|
||
|
* Call relaxation respects RVC when mixing +c and -c relocatable files.
|
||
|
(`#73977 <https://github.com/llvm/llvm-project/pull/73977>`_)
|
||
|
* ``R_RISCV_GOT32_PCREL`` is now supported.
|
||
|
(`#72587 <https://github.com/llvm/llvm-project/pull/72587>`_)
|
||
|
* ``R_RISCV_SET_ULEB128``/``R_RISCV_SUB_ULEB128`` relocations are now supported.
|
||
|
(`#72610 <https://github.com/llvm/llvm-project/pull/72610>`_)
|
||
|
(`#77261 <https://github.com/llvm/llvm-project/pull/77261>`_)
|
||
|
* RISC-V TLSDESC is now supported.
|
||
|
(`#79239 <https://github.com/llvm/llvm-project/pull/79239>`_)
|
||
|
|
||
|
Breaking changes
|
||
|
----------------
|
||
|
|
||
|
COFF Improvements
|
||
|
-----------------
|
||
|
|
||
|
* Added support for ``--time-trace`` and associated ``--time-trace-granularity``.
|
||
|
This generates a .json profile trace of the linker execution.
|
||
|
(`#68236 <https://github.com/llvm/llvm-project/pull/68236>`_)
|
||
|
|
||
|
* The ``-dependentloadflag`` option was implemented.
|
||
|
(`#71537 <https://github.com/llvm/llvm-project/pull/71537>`_)
|
||
|
|
||
|
* LLD now prefers library paths specified with ``-libpath:`` over the implicitly
|
||
|
detected toolchain paths.
|
||
|
(`#78039 <https://github.com/llvm/llvm-project/pull/78039>`_)
|
||
|
|
||
|
* Added new options ``-lldemit:llvm`` and ``-lldemit:asm`` for getting
|
||
|
the output of LTO compilation as LLVM bitcode or assembly.
|
||
|
(`#66964 <https://github.com/llvm/llvm-project/pull/66964>`_)
|
||
|
(`#67079 <https://github.com/llvm/llvm-project/pull/67079>`_)
|
||
|
|
||
|
* Added a new option ``-build-id`` for generating a ``.buildid`` section
|
||
|
when not generating a PDB. A new symbol ``__buildid`` is generated by
|
||
|
the linker, allowing code to reference the build ID of the binary.
|
||
|
(`#71433 <https://github.com/llvm/llvm-project/pull/71433>`_)
|
||
|
(`#74652 <https://github.com/llvm/llvm-project/pull/74652>`_)
|
||
|
|
||
|
* A new, LLD specific option, ``-lld-allow-duplicate-weak``, was added
|
||
|
for allowing duplicate weak symbols.
|
||
|
(`#68077 <https://github.com/llvm/llvm-project/pull/68077>`_)
|
||
|
|
||
|
* More correctly handle LTO of files that define ``__imp_`` prefixed dllimport
|
||
|
redirections.
|
||
|
(`#70777 <https://github.com/llvm/llvm-project/pull/70777>`_)
|
||
|
(`#71376 <https://github.com/llvm/llvm-project/pull/71376>`_)
|
||
|
(`#72989 <https://github.com/llvm/llvm-project/pull/72989>`_)
|
||
|
|
||
|
* Linking undefined references to weak symbols with LTO now works.
|
||
|
(`#70430 <https://github.com/llvm/llvm-project/pull/70430>`_)
|
||
|
|
||
|
* Use the ``SOURCE_DATE_EPOCH`` environment variable for the PE header and
|
||
|
debug directory timestamps, if neither the ``/Brepro`` nor ``/timestamp:``
|
||
|
options have been specified. This makes the linker output reproducible by
|
||
|
setting this environment variable.
|
||
|
(`#81326 <https://github.com/llvm/llvm-project/pull/81326>`_)
|
||
|
|
||
|
* Lots of incremental work towards supporting linking ARM64EC binaries.
|
||
|
|
||
|
MinGW Improvements
|
||
|
------------------
|
||
|
|
||
|
* Added support for many LTO and ThinLTO options (most LTO options supported
|
||
|
by the ELF driver, that are implemented by the COFF backend as well,
|
||
|
should be supported now).
|
||
|
(`D158412 <https://reviews.llvm.org/D158412>`_)
|
||
|
(`D158887 <https://reviews.llvm.org/D158887>`_)
|
||
|
(`#77387 <https://github.com/llvm/llvm-project/pull/77387>`_)
|
||
|
(`#81475 <https://github.com/llvm/llvm-project/pull/81475>`_)
|
||
|
|
||
|
* LLD no longer tries to autodetect and use library paths from MSVC/WinSDK
|
||
|
installations when run in MinGW mode; that mode of operation shouldn't
|
||
|
ever be needed in MinGW mode, and could be a source of unexpected
|
||
|
behaviours.
|
||
|
(`D144084 <https://reviews.llvm.org/D144084>`_)
|
||
|
|
||
|
* The ``--icf=safe`` option now works as expected; it was previously a no-op.
|
||
|
(`#70037 <https://github.com/llvm/llvm-project/pull/70037>`_)
|
||
|
|
||
|
* The strip flags ``-S`` and ``-s`` now can be used to strip out DWARF debug
|
||
|
info and symbol tables while emitting a PDB debug info file.
|
||
|
(`#75181 <https://github.com/llvm/llvm-project/pull/75181>`_)
|
||
|
|
||
|
* The option ``--dll`` is handled as an alias for the ``--shared`` option.
|
||
|
(`#68575 <https://github.com/llvm/llvm-project/pull/68575>`_)
|
||
|
|
||
|
* The option ``--sort-common`` is ignored now.
|
||
|
(`#66336 <https://github.com/llvm/llvm-project/pull/66336>`_)
|
||
|
|
||
|
MachO Improvements
|
||
|
------------------
|
||
|
|
||
|
WebAssembly Improvements
|
||
|
------------------------
|
||
|
|
||
|
* Indexes are no longer required on archive files. Instead symbol information
|
||
|
is read from object files within the archive. This matches the behaviour of
|
||
|
the ELF linker.
|
||
|
|
||
|
SystemZ
|
||
|
-------
|
||
|
|
||
|
* Add target support for SystemZ (s390x).
|
||
|
|
||
|
Fixes
|
||
|
#####
|