122 lines
4.6 KiB
ReStructuredText
122 lines
4.6 KiB
ReStructuredText
=======================
|
|
lld 8.0.0 Release Notes
|
|
=======================
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
Introduction
|
|
============
|
|
|
|
lld is a high-performance linker that supports ELF (Unix), COFF (Windows),
|
|
Mach-O (macOS), MinGW and WebAssembly. lld is command-line-compatible with
|
|
GNU linkers and Microsoft link.exe and is significantly faster than the
|
|
system default linkers.
|
|
|
|
lld 8.0.0 has lots of feature improvements and bug fixes.
|
|
|
|
Non-comprehensive list of changes in this release
|
|
=================================================
|
|
|
|
ELF Improvements
|
|
----------------
|
|
|
|
* lld now supports RISC-V. (`r339364
|
|
<https://reviews.llvm.org/rL339364>`_)
|
|
|
|
* Default image base address has changed from 65536 to 2 MiB for i386
|
|
and 4 MiB for AArch64 to make lld-generated executables work better
|
|
with automatic superpage promotion. FreeBSD can promote contiguous
|
|
non-superpages to a superpage if they are aligned to the superpage
|
|
size. (`r342746 <https://reviews.llvm.org/rL342746>`_)
|
|
|
|
* lld now attempts to place a ``.note`` segment in the first page of a
|
|
generated file, so that you can find some important information
|
|
(``.note.gnu.build-id`` in particular) in a core file even if a core
|
|
file is truncated by ulimit.
|
|
(`r349524 <https://reviews.llvm.org/rL349524>`_)
|
|
|
|
* lld now reports an error if ``_GLOBAL_OFFSET_TABLE_`` symbol is
|
|
defined by an input object file, as the symbol is supposed to be
|
|
synthesized by the linker.
|
|
(`r347854 <https://reviews.llvm.org/rL347854>`_)
|
|
|
|
* lld/Hexagon can now link Linux kernel and musl libc for Qualcomm
|
|
Hexagon ISA.
|
|
|
|
* Initial MSP430 ISA support has landed.
|
|
|
|
* lld now uses the ``sigrie`` instruction as a trap instruction for
|
|
MIPS targets.
|
|
|
|
* lld now creates a TLS segment for AArch64 with a slightly larger
|
|
alignment requirement, so that the loader makes a few bytes room
|
|
before each TLS segment at runtime. The aim of this change is to
|
|
make room to accomodate nonstandard Android TLS slots while keeping
|
|
the compatibility with the standard AArch64 ABI.
|
|
(`r350681 <https://reviews.llvm.org/rL350681>`_)
|
|
|
|
* The following flags have been added: ``--call-graph-profile``,
|
|
``--no-call-graph-profile``, ``--warn-ifunc-textrel``,
|
|
``-z interpose``, ``-z global``, ``-z nodefaultlib``
|
|
|
|
COFF Improvements
|
|
-----------------
|
|
|
|
* PDB GUID is set to hash of PDB contents instead to a random byte
|
|
sequence for build reproducibility.
|
|
|
|
* ``/pdbsourcepath:`` is now also used to make ``"cwd"``, ``"exe"``, ``"pdb"``
|
|
in the env block of PDB outputs absolute if they are relative, and to make
|
|
paths to obj files referenced in PDB outputs absolute if they are relative.
|
|
Together with the previous item, this makes it possible to generate
|
|
executables and PDBs that are fully deterministic and independent of the
|
|
absolute path to the build directory, so that different machines building
|
|
the same code in different directories can produce exactly the same output.
|
|
|
|
* The following flags have been added: ``/force:multiple``
|
|
|
|
* lld now can link against import libraries produced by GNU tools.
|
|
|
|
* lld can create thunks for ARM and ARM64, to allow linking larger images
|
|
(over 16 MB for ARM and over 128 MB for ARM64)
|
|
|
|
* Several speed and memory usage improvements.
|
|
|
|
* lld now creates debug info for typedefs.
|
|
|
|
* lld can now link obj files produced by ``cl.exe /Z7 /Yc``.
|
|
|
|
* lld now understands ``%_PDB%`` and ``%_EXT%`` in ``/pdbaltpath:``.
|
|
|
|
* Undefined symbols are now printed in demangled form in addition to raw form.
|
|
|
|
MinGW Improvements
|
|
------------------
|
|
|
|
* lld can now automatically import data variables from DLLs without the
|
|
use of the dllimport attribute.
|
|
|
|
* lld can now use existing normal MinGW sysroots with import libraries and
|
|
CRT startup object files for GNU binutils. lld can handle most object
|
|
files produced by GCC, and thus works as a drop-in replacement for
|
|
ld.bfd in such environments. (There are known issues with linking crtend.o
|
|
from GCC in setups with DWARF exceptions though, where object files are
|
|
linked in a different order than with GNU ld, inserting a DWARF exception
|
|
table terminator too early.)
|
|
|
|
* lld now supports COFF embedded directives for linking to nondefault
|
|
libraries, just like for the normal COFF target.
|
|
|
|
* Actually generate a codeview build id signature, even if not creating a PDB.
|
|
Previously, the ``--build-id`` option did not actually generate a build id
|
|
unless ``--pdb`` was specified.
|
|
|
|
WebAssembly Improvements
|
|
------------------------
|
|
|
|
* Add initial support for creating shared libraries (-shared).
|
|
Note: The shared library format is still under active development and may
|
|
undergo significant changes in future versions.
|
|
See: https://github.com/WebAssembly/tool-conventions/blob/master/DynamicLinking.md
|