aboutsummaryrefslogtreecommitdiff
path: root/docs/ReleaseNotes.rst
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-07-29 21:30:27 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-07-29 21:30:27 +0000
commit9e3ca9b3ba1e0fdf794978cb8c8ae386aad936ad (patch)
tree520d351b4ea72ceaff73c29410c126db55bdabef /docs/ReleaseNotes.rst
parentda06c7cfa0388de29a4024d8d386e48f2fb13ed6 (diff)
downloadsrc-9e3ca9b3ba1e0fdf794978cb8c8ae386aad936ad.tar.gz
src-9e3ca9b3ba1e0fdf794978cb8c8ae386aad936ad.zip
Vendor import of lld release_50 branch r309439:vendor/lld/lld-release_50-r310316vendor/lld/lld-release_50-r309439
Notes
Notes: svn path=/vendor/lld/dist/; revision=321698 svn path=/vendor/lld/lld-release_50-r310316/; revision=322266; tag=vendor/lld/lld-release_50-r310316
Diffstat (limited to 'docs/ReleaseNotes.rst')
-rw-r--r--docs/ReleaseNotes.rst163
1 files changed, 154 insertions, 9 deletions
diff --git a/docs/ReleaseNotes.rst b/docs/ReleaseNotes.rst
index 0d75311e4bce..fa6536ff46a8 100644
--- a/docs/ReleaseNotes.rst
+++ b/docs/ReleaseNotes.rst
@@ -1,5 +1,5 @@
=======================
-LLD 5.0.0 Release Notes
+lld 5.0.0 Release Notes
=======================
.. contents::
@@ -13,10 +13,16 @@ LLD 5.0.0 Release Notes
Introduction
============
-This document contains the release notes for the LLD linker, release 5.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/>`_.
+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
=================================================
@@ -24,14 +30,153 @@ Non-comprehensive list of changes in this release
ELF Improvements
----------------
-* Item 1.
+* 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'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, 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``
+
COFF Improvements
-----------------
* Item 1.
-MachO Improvements
-------------------
+Contributors to lld 5.0
+=======================
-* Item 1.
+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