102 lines
3.7 KiB
ReStructuredText
102 lines
3.7 KiB
ReStructuredText
=======================
|
|
LLD 4.0.0 Release Notes
|
|
=======================
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
Introduction
|
|
============
|
|
|
|
LLD is a linker which supports ELF (Unix), COFF (Windows) and Mach-O
|
|
(macOS). It is generally faster than the GNU BFD/gold linkers or the
|
|
MSVC linker.
|
|
|
|
LLD is designed to be a drop-in replacement for the system linkers, so
|
|
that users don't need to change their build systems other than swapping
|
|
the linker command.
|
|
|
|
This document contains the release notes for LLD 4.0.0.
|
|
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 <http://llvm.org/releases/>`_.
|
|
|
|
|
|
What's New in LLD 4.0?
|
|
======================
|
|
|
|
ELF Improvements
|
|
----------------
|
|
|
|
LLD provides much better compatibility with the GNU linker than before.
|
|
Now it is able to link the entire FreeBSD base system including the kernel
|
|
out of the box. We are working closely with the FreeBSD project to
|
|
make it usable as the system linker in a future release of the operating
|
|
system.
|
|
|
|
Multi-threading performance has been improved, and multi-threading
|
|
is now enabled by default. Combined with other optimizations, LLD 4.0
|
|
is about 1.5 times faster than LLD 3.9 when linking large programs
|
|
in our test environment.
|
|
|
|
Other notable changes are listed below:
|
|
|
|
* Error messages contain more information than before. If debug info
|
|
is available, the linker prints out not only the object file name
|
|
but the source location of unresolved symbols.
|
|
|
|
* Error messages are printed in red just like Clang by default. You
|
|
can disable it by passing ``-no-color-diagnostics``.
|
|
|
|
* LLD's version string is now embedded in a .comment section in the
|
|
result output file. You can dump it with this command: ``objdump -j -s
|
|
.comment <file>``.
|
|
|
|
* The ``-Map`` option is supported. With that, you can print out section
|
|
and symbol information to a specified file. This feature is useful
|
|
for analyzing link results.
|
|
|
|
* The file format for the ``-reproduce`` option has changed from cpio to
|
|
tar.
|
|
|
|
* When creating a copy relocation for a symbol, LLD now scans the
|
|
DSO's header to see if the symbol is in a read-only segment. If so,
|
|
space for the copy relocation is reserved in .bss.rel.ro instead of
|
|
.bss. This fixes a security issue that read-only data in a DSO
|
|
becomes writable if it is copied by a copy relocation. This issue
|
|
was disclosed originally on the
|
|
`binutils mailing list <https://sourceware.org/ml/libc-alpha/2016-12/msg00914.html>`_.
|
|
|
|
* Compressed input sections are supported.
|
|
|
|
* ``--oformat binary``, ``--section-start``, ``-Tbss``, ``-Tdata``,
|
|
``-Ttext``, ``-b binary``, ``-build-id=uuid``, ``-no-rosegment``,
|
|
``-nopie``, ``-nostdlib``, ``-omagic``, ``-retain-symbols-file``,
|
|
``-sort-section``, ``-z max-page-size`` and ``-z wxneeded`` are
|
|
supported.
|
|
|
|
* A lot of linker script directives have been added.
|
|
|
|
* Default image base address for x86-64 has changed from 0x10000 to
|
|
0x200000 to make it huge-page friendly.
|
|
|
|
* ARM port now supports GNU ifunc, the ARM C++ exceptions ABI, TLS
|
|
relocations and static linking. Problems with ``dlopen()`` on systems
|
|
using eglibc fixed.
|
|
|
|
* MIPS port now supports input files in new R6 revision of MIPS ABIs
|
|
or N32 ABI. Generated file now contains .MIPS.abiflags section and
|
|
complete set of ELF headers flags.
|
|
|
|
* Relocations produced by the ``-mxgot`` compiler flag is supported
|
|
for MIPS. Now it is possible to generate "large" GOT that exceeds the 64K
|
|
limit.
|
|
|
|
COFF Improvements
|
|
-----------------
|
|
|
|
* Performance on Windows has been improved by parallelizing parts of the
|
|
linker and optimizing file system operations. As a result of these
|
|
improvements, LLD 4.0 has been measured to be about 2.5 times faster
|
|
than LLD 3.9 when linking a large Chromium DLL.
|