4794281d64
This is 48aaa9f66120f72b5d7e4a90b32fee40a3386ce9 from the git monorepo.
173 lines
5.9 KiB
ReStructuredText
173 lines
5.9 KiB
ReStructuredText
=======================
|
|
lld 5.0.0 Release Notes
|
|
=======================
|
|
|
|
.. contents::
|
|
:local:
|
|
|
|
Introduction
|
|
============
|
|
|
|
lld is a linker from the LLVM project. It supports ELF (Unix), COFF (Windows)
|
|
and Mach-O (macOS), and it is generally faster than the GNU bfd or 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.
|
|
|
|
All lld releases may be downloaded from the `LLVM releases web site
|
|
<http://llvm.org/releases/>`_.
|
|
|
|
Non-comprehensive list of changes in this release
|
|
=================================================
|
|
|
|
ELF Improvements
|
|
----------------
|
|
|
|
* First and foremost, a lot of compatibility issues and bugs have been fixed.
|
|
Linker script support has significantly improved. As a result, we believe you
|
|
are very likely to be able to link your programs with lld without experiencing
|
|
any problem now.
|
|
|
|
* Error message format has changed in order to improve readability.
|
|
Traditionally, linker's error messages are concise and arguably too terse.
|
|
This is an example of lld 4.0.0's error message (they are actually in one line)::
|
|
|
|
/ssd/clang/bin/ld.lld: error: /ssd/llvm-project/lld/ELF/Writer.cpp:207:
|
|
undefined symbol 'lld::elf::EhFrameSection::addSection()'
|
|
|
|
It is not easy to read because too much information is packed into a single line
|
|
and the embedded text, particularly a symbol name, is sometimes too long.
|
|
In lld 5.0.0, we use more vertical space to print out error messages in a more
|
|
structured manner like this::
|
|
|
|
bin/ld.lld: error: undefined symbol: lld::elf::EhFrameSection::addSection()
|
|
>>> Referenced by Writer.cpp:207 (/ssd/llvm-project/lld/ELF/Writer.cpp:207)
|
|
>>> Writer.cpp.o in archive lib/liblldELF.a
|
|
|
|
As a bonus, the new error message contains source code location of the error
|
|
if it is available from debug info.
|
|
|
|
* ``./configure`` scripts generated by GNU autoconf determines whether a linker
|
|
supports modern GNU-compatible features or not by searching for "GNU" in the
|
|
``--help`` message. To be compatible with the scripts, we decided to add a
|
|
string "(compatible with GNU linkers)" to our ``--help`` message. This is a
|
|
hack, but just like the web browser's User-Agent string (which everyone still
|
|
claim they are "Mozilla/5.0"), we had no choice other than doing this to claim
|
|
that we accept GNU-compatible options.
|
|
|
|
* The ``-Map`` option is added. The option is to make the linker to print out how
|
|
input files are mapped to the output file. Here is an example::
|
|
|
|
Address Size Align Out In Symbol
|
|
00000000016d84d8 00000000008f8f50 8 .eh_frame
|
|
00000000016d84d8 00000000008f8f50 8 <internal>:(.eh_frame)
|
|
0000000001fd2000 00000000034b3bd0 16 .text
|
|
0000000001fd2000 000000000000002a 1 /usr/lib/x86_64-linux-gnu/crt1.o:(.text)
|
|
0000000001fd2000 0000000000000000 0 _start
|
|
0000000001fd202a 0000000000000000 1 /usr/lib/x86_64-linux-gnu/crti.o:(.text)
|
|
0000000001fd2030 00000000000000bd 16 /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o:(.text)
|
|
0000000001fd2030 0000000000000000 0 deregister_tm_clones
|
|
0000000001fd2060 0000000000000000 0 register_tm_clones
|
|
|
|
This format is not the same as GNU linkers as our linker internal data
|
|
structure is different from them but contains the same amount of information
|
|
and should be more readable than their outputs.
|
|
|
|
As with other lld features, the ``-Map`` option is designed with speed in mind.
|
|
The option would generate a hundred megabyte text file if you link a large
|
|
program with it. lld can usually do that in a few seconds, and it is generally
|
|
a few times faster than the GNU gold's ``-Map`` option.
|
|
|
|
* lld's ``--gdb-index`` option used to be slow, but we sped it up so that it is
|
|
at least as fast as the GNU gold.
|
|
|
|
* Some nonstandard relocations, such as R_X86_64_8 or R_X86_64_16, are supported.
|
|
They are not used for 32/64-bit applications, but some 16-bit bootloaders need
|
|
them.
|
|
|
|
* Paddings in executable text sections are now filled with trap instructions
|
|
(such as INT3) instead of being left as null bytes. This change improves
|
|
disassembler outputs because it now prints out trap instructions instead of
|
|
trying to decode 0x00 as an instruction. It also makes debugging of some type
|
|
of program easier because when the control reaches a padding, the program
|
|
immediately raises an error.
|
|
|
|
* The following options are added: ``-M``, ``-Map``,
|
|
``-compress-debug-sections``, ``-emit-relocs``,
|
|
``-error-unresolved-symbols``, ``-exclude-libs``, ``-filter``,
|
|
``-no-dynamic-linker``, ``-no-export-dynamic``, ``-no-fatal-warnings``,
|
|
``-print-map``, ``-warn-unresolved-symbols``, ``-z nocopyreloc``,
|
|
``-z notext``, ``-z rodynamic``
|
|
|
|
|
|
Contributors to lld 5.0
|
|
=======================
|
|
|
|
We had 63 individuals contribute to lld 5.0. Thank you so much!
|
|
|
|
- Adrian McCarthy
|
|
- Alberto Magni
|
|
- Alexander Richardson
|
|
- Andre Vieira
|
|
- Andrew Ng
|
|
- Anton Korobeynikov
|
|
- Bob Haarman
|
|
- David Blaikie
|
|
- Davide Italiano
|
|
- David L. Jones
|
|
- Dmitry Mikulin
|
|
- Ed Maste
|
|
- Ed Schouten
|
|
- Eric Beckmann
|
|
- Eric Fiselier
|
|
- Eugene Leviant
|
|
- Evgeniy Stepanov
|
|
- Galina Kistanova
|
|
- George Rimar
|
|
- Hans Wennborg
|
|
- Igor Kudrin
|
|
- Ismail Donmez
|
|
- Jake Ehrlich
|
|
- James Henderson
|
|
- Joel Jones
|
|
- Jon Chesterfield
|
|
- Kamil Rytarowski
|
|
- Kevin Enderby
|
|
- Konstantin Zhuravlyov
|
|
- Kyungwoo Lee
|
|
- Leslie Zhai
|
|
- Mark Kettenis
|
|
- Martell Malone
|
|
- Martin Storsjo
|
|
- Meador Inge
|
|
- Mehdi Amini
|
|
- Michal Gorny
|
|
- NAKAMURA Takumi
|
|
- Paul Robinson
|
|
- Pavel Labath
|
|
- Petar Jovanovic
|
|
- Peter Collingbourne
|
|
- Peter Smith
|
|
- Petr Hosek
|
|
- Rafael Espindola
|
|
- Reid Kleckner
|
|
- Richard Smith
|
|
- Robert Clarke
|
|
- Rui Ueyama
|
|
- Saleem Abdulrasool
|
|
- Sam Clegg
|
|
- Sean Eveson
|
|
- Sean Silva
|
|
- Shankar Easwaran
|
|
- Shoaib Meenai
|
|
- Simon Atanasyan
|
|
- Simon Dardis
|
|
- Simon Tatham
|
|
- Sylvestre Ledru
|
|
- Tom Stellard
|
|
- Vitaly Buka
|
|
- Yuka Takahashi
|
|
- Zachary Turner
|