| ======================= |
| 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. |