blob: 5344fc4d2dadea192c04a51068109aba4b8eee7b [file] [log] [blame]
======================
LLD 3.9 Release Notes
======================
.. contents::
:local:
Introduction
============
This document contains the release notes for the LLD linker, release 3.9.
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 ELF Support?
==========================
LLD 3.9 is a major milestone for us. It is the first release that can
link real-world large userland programs, including LLVM/Clang/LLD
themselves. In fact, for example, it can now be used to produce most
userland programs distributed as part of FreeBSD.
Many contributors have joined to the project to develop new features,
port it to new architectures and fix issues since the last release.
Link-Time Optimization
----------------------
Initial support for LTO has been added. It is compatible with
`the LLVM gold plugin <http://llvm.org/docs/GoldPlugin.html>`_ in terms of
command line flags and input file format so that LLD is usable as a
drop-in replacement for GNU gold. LTO is implemented as a native
feature unlike the GNU gold's plugin mechanism.
Identical Code Folding
----------------------
LLD 3.9 can now merge identical code sections to produce smaller
output files. It is expected to be used with ``-ffunction-sections``.
Symbol Versioning
-----------------
LLD 3.9 is able to link against versioned symbols as well as produce
versioned symbols. Both the original Sun's symbol versioning scheme
and the GNU extension are supported.
New Targets
-----------
LLD has expanded support for new targets, including ARM/Thumb, the x32
ABI and MIPS N64 ABI, in addition to the existing support for x86,
x86-64, MIPS, PowerPC and PPC64.
TLS Relocation Optimizations
----------------------------
The ELF ABI specification of the thread-local variable define a few
peephole optimizations linkers can do by rewriting instructions at the
link-time to reduce run-time overhead to access TLS variables. That
feature has been implemented.
New Linker Flags
----------------
Many command line options have been added in this release, including:
- Symbol resolution and output options: ``-Bsymbolic-functions``,
``-export-dynamic-symbol``, ``-image-base``, ``-pie``, ``-end-lib``,
``-start-lib``, ``-build-id={md5,sha1,none,0x<hexstring>}``.
- Symbol versioning option: ``-dynamic-list``.
- LTO options: ``-lto-O``, ``-lto-aa-pipeline``, ``-lto-jobs``,
``-lto-newpm-passes``, ``-plugin``, ``-plugin-eq``, ``-plugin-opt``,
``-plugin-opt-eq``, ``-disable-verify``, ``-mllvm``.
- Driver optionss: ``-help``, ``-version``, ``-unresolved-symbols``.
- Debug options: ``-demangle``, ``-reproduce``, ``-save-temps``,
``-strip-debug``, ``-trace``, ``-trace-symbol``,
``-warn-execstack``.
- Exception handling option: ``-eh-frame-hdr``.
- Identical Code Folding option: ``-icf``.
Changes to the MIPS Target
--------------------------
* Added support for MIPS N64 ABI.
* Added support for TLS relocations for both O32 and N64 MIPS ABIs.
Building LLVM Toolchain with LLD
--------------------------------
A new CMake variable, ``LLVM_ENABLE_LLD``, has been added to use LLD
to build the LLVM toolchain. If the varaible is true, ``-fuse-ld=lld``
option will be added to linker flags so that ``ld.lld`` is used
instead of default ``ld``. Because ``-fuse-ld=lld`` is a new compiler
driver option, you need Clang 3.8 or newer to use the feature.