xref: /freebsd/contrib/llvm-project/lld/docs/ReleaseNotes.rst (revision 4653454ee84be649e62ad930a5724c1f443c5e6a)
1========================
2lld 11.0.0 Release Notes
3========================
4
5.. contents::
6    :local:
7
8.. warning::
9   These are in-progress notes for the upcoming LLVM 11.0.0 release.
10   Release notes for previous releases can be found on
11   `the Download Page <https://releases.llvm.org/download.html>`_.
12
13Introduction
14============
15
16This document contains the release notes for the lld linker, release 11.0.0.
17Here we describe the status of lld, including major improvements
18from the previous release. All lld releases may be downloaded
19from the `LLVM releases web site <https://llvm.org/releases/>`_.
20
21Non-comprehensive list of changes in this release
22=================================================
23
24ELF Improvements
25----------------
26
27* ``--lto-emit-asm`` is added to emit assembly output for debugging purposes.
28  (`D77231 <https://reviews.llvm.org/D77231>`_)
29* ``--lto-whole-program-visibility`` is added to specify that classes have hidden LTO visibility in LTO and ThinLTO links of source files compiled with ``-fwhole-program-vtables``. See `LTOVisibility <https://clang.llvm.org/docs/LTOVisibility.html>`_ for details.
30  (`D71913 <https://reviews.llvm.org/D71913>`_)
31* ``--print-archive-stats=`` is added to print the number of members and the number of fetched members for each archive.
32  The feature is similar to GNU gold's ``--print-symbol-counts=``.
33  (`D78983 <https://reviews.llvm.org/D78983>`_)
34* ``--shuffle-sections=`` is added to introduce randomization in the output to help reduce measurement bias and detect static initialization order fiasco.
35  (`D74791 <https://reviews.llvm.org/D74791>`_)
36  (`D74887 <https://reviews.llvm.org/D74887>`_)
37* ``--time-trace`` is added. It records a time trace file that can be viewed in
38  chrome://tracing. The file can be specified with ``--time-trace-file``.
39  Trace granularity can be specified with ``--time-trace-granularity``.
40  (`D71060 <https://reviews.llvm.org/D71060>`_)
41* ``--thinlto-single-module`` is added to compile a subset of modules in ThinLTO for debugging purposes.
42  (`D80406 <https://reviews.llvm.org/D80406>`_)
43* ``--unique`` is added to create separate output sections for orphan sections.
44  (`D75536 <https://reviews.llvm.org/D75536>`_)
45* ``--warn-backrefs`` has been improved to emulate GNU ld's archive semantics.
46  If a link passes with warnings from ``--warn-backrefs``, it almost assuredly
47  means that the link will fail with GNU ld, or the symbol will get different
48  resolutions in GNU ld and LLD. ``--warn-backrefs-exclude=`` is added to
49  exclude known issues.
50  (`D77522 <https://reviews.llvm.org/D77522>`_)
51  (`D77630 <https://reviews.llvm.org/D77630>`_)
52  (`D77512 <https://reviews.llvm.org/D77512>`_)
53* ``--no-relax`` is accepted but ignored. The Linux kernel's RISC-V port uses this option.
54  (`D81359 <https://reviews.llvm.org/D81359>`_)
55* ``--rosegment`` (default) is added to complement ``--no-rosegment``.
56  GNU gold from 2.35 onwards support both options.
57* ``--threads=N`` is added. The default uses all threads.
58  (`D76885 <https://reviews.llvm.org/D76885>`_)
59* ``--wrap`` has better compatibility with GNU ld.
60* ``-z dead-reloc-in-nonalloc=<section_glob>=<value>`` is added to resolve an absolute relocation
61  referencing a discarded symbol.
62  (`D83264 <https://reviews.llvm.org/D83264>`_)
63* Changed tombstone values to (``.debug_ranges``/``.debug_loc``) 1 and (other ``.debug_*``) 0.
64  A tombstone value is the computed value of a relocation referencing a discarded symbol (``--gc-sections``, ICF or ``/DISCARD/``).
65  (`D84825 <https://reviews.llvm.org/D84825>`_)
66  In the future many .debug_* may switch to 0xffffffff/0xffffffffffffffff as the tombstone value.
67* ``-z keep-text-section-prefix`` moves ``.text.unknown.*`` input sections to ``.text.unknown``.
68* ``-z rel`` and ``-z rela`` are added to select the REL/RELA format for dynamic relocations.
69  The default is target specific and typically matches the form used in relocatable objects.
70* ``-z start-stop-visibility={default,protected,internal,hidden}`` is added.
71  GNU ld/gold from 2.35 onwards support this option.
72  (`D55682 <https://reviews.llvm.org/D55682>`_)
73* When ``-r`` or ``--emit-relocs`` is specified, the GNU ld compatible
74  ``--discard-all`` and ``--discard-locals`` semantics are implemented.
75  (`D77807 <https://reviews.llvm.org/D77807>`_)
76* ``--emit-relocs --strip-debug`` can now be used together.
77  (`D74375 <https://reviews.llvm.org/D74375>`_)
78* ``--gdb-index`` supports DWARF v5.
79  (`D79061 <https://reviews.llvm.org/D79061>`_)
80  (`D85579 <https://reviews.llvm.org/D85579>`_)
81* ``-r`` allows SHT_X86_64_UNWIND to be merged into SHT_PROGBITS.
82  This allows clang/GCC produced object files to be mixed together.
83  (`D85785 <https://reviews.llvm.org/D85785>`_)
84* Better linker script support related to output section alignments and LMA regions.
85  (`D74286 <https://reviews.llvm.org/D75724>`_)
86  (`D74297 <https://reviews.llvm.org/D75724>`_)
87  (`D75724 <https://reviews.llvm.org/D75724>`_)
88  (`D81986 <https://reviews.llvm.org/D81986>`_)
89* In a input section description, the filename can be specified in double quotes.
90  ``archive:file`` syntax is added.
91  (`D72517 <https://reviews.llvm.org/D72517>`_)
92  (`D75100 <https://reviews.llvm.org/D75100>`_)
93* Linker script specified empty ``(.init|.preinit|.fini)_array`` are allowed with RELRO.
94  (`D76915 <https://reviews.llvm.org/D76915>`_)
95* ``INSERT AFTER`` and ``INSERT BEFORE`` work for orphan sections now.
96  (`D74375 <https://reviews.llvm.org/D74375>`_)
97* ``INPUT_SECTION_FLAGS`` is supported in linker scripts.
98  (`D72745 <https://reviews.llvm.org/D72745>`_)
99* ``DF_1_PIE`` is set for position-independent executables.
100  (`D80872 <https://reviews.llvm.org/D80872>`_)
101* For a symbol assignment ``alias = aliasee;``, ``alias`` inherits the ``aliasee``'s symbol type.
102  (`D86263 <https://reviews.llvm.org/D86263>`_)
103* ``SHT_GNU_verneed`` in shared objects are parsed, and versioned undefined symbols in shared objects are respected.
104  (`D80059 <https://reviews.llvm.org/D80059>`_)
105* SHF_LINK_ORDER and non-SHF_LINK_ORDER sections can be mixed along as the SHF_LINK_ORDER components are contiguous.
106  (`D77007 <https://reviews.llvm.org/D77007>`_)
107* An out-of-range relocation diagnostic mentions the referenced symbol now.
108  (`D73518 <https://reviews.llvm.org/D73518>`_)
109* AArch64: ``R_AARCH64_PLT32`` is supported.
110  (`D81184 <https://reviews.llvm.org/D81184>`_)
111* ARM: SBREL type relocations are supported.
112  (`D74375 <https://reviews.llvm.org/D74375>`_)
113* ARM: ``R_ARM_ALU_PC_G0``, ``R_ARM_LDR_PC_G0``, ``R_ARM_THUMB_PC8`` and ``R_ARM_THUMB__PC12`` are supported.
114  (`D75349 <https://reviews.llvm.org/D75349>`_)
115  (`D77200 <https://reviews.llvm.org/D77200>`_)
116* ARM: various improvements to .ARM.exidx: ``/DISCARD/`` support for a subset, out-of-range handling, support for non monotonic section order.
117  (`PR44824 <https://llvm.org/PR44824>`_)
118* AVR: many relocation types are supported.
119  (`D78741 <https://reviews.llvm.org/D78741>`_)
120* Hexagon: General Dynamic and some other relocation types are supported.
121* PPC: Canonical PLT and range extension thunks with addends are supported.
122  (`D73399 <https://reviews.llvm.org/D73399>`_)
123  (`D73424 <https://reviews.llvm.org/D73424>`_)
124  (`D75394 <https://reviews.llvm.org/D75394>`_)
125* PPC and PPC64: copy relocations.
126  (`D73255 <https://reviews.llvm.org/D73255>`_)
127* PPC64: ``_savegpr[01]_{14..31}`` and ``_restgpr[01]_{14..31}`` can be synthesized.
128  (`D79977 <https://reviews.llvm.org/D79977>`_)
129* PPC64: ``R_PPC64_GOT_PCREL34`` and ``R_PPC64_REL24_NOTOC`` are supported. r2 save stub is supported.
130  (`D81948 <https://reviews.llvm.org/D81948>`_)
131  (`D82950 <https://reviews.llvm.org/D82950>`_)
132  (`D82816 <https://reviews.llvm.org/D82816>`_)
133* RISC-V: ``R_RISCV_IRELATIVE`` is supported.
134  (`D74022 <https://reviews.llvm.org/D74022>`_)
135* RISC-V: ``R_RISCV_ALIGN`` is errored because GNU ld style linker relaxation is not supported.
136  (`D71820 <https://reviews.llvm.org/D71820>`_)
137* SPARCv9: more relocation types are supported.
138  (`D77672 <https://reviews.llvm.org/D77672>`_)
139
140Breaking changes
141----------------
142
143* One-dash form of some long option (``--thinlto-*``, ``--lto-*``, ``--shuffle-sections=``)
144  are no longer supported.
145  (`D79371 <https://reviews.llvm.org/D79371>`_)
146* ``--export-dynamic-symbol`` no longer implies ``-u``.
147  The new behavior matches GNU ld from binutils 2.35 onwards.
148  (`D80487 <https://reviews.llvm.org/D80487>`_)
149* ARM: the default max page size was increased from 4096 to 65536.
150  This increases compatibility with systems where a non standard page
151  size was configured. This also is inline with GNU ld defaults.
152  (`D77330 <https://reviews.llvm.org/D77330>`_)
153* ARM: for non-STT_FUNC symbols, Thumb interworking thunks are not added and BL/BLX are not substituted.
154  (`D73474 <https://reviews.llvm.org/D73474>`_)
155  (`D73542 <https://reviews.llvm.org/D73542>`_)
156* AArch64: ``--force-bti`` is renamed to ``-z force-bti`. ``--pac-plt`` is renamed to ``-z pac-plt``.
157  This change is compatibile with GNU ld.
158* A readonly ``PT_LOAD`` is created in the presence of a ``SECTIONS`` command.
159  The new behavior is consistent with the longstanding behavior in the absence of a SECTIONS command.
160* Orphan section names like ``.rodata.foo`` and ``.text.foo`` are not grouped into ``.rodata`` and ``.text`` in the presence of a ``SECTIONS`` command.
161  The new behavior matches GNU ld.
162  (`D75225 <https://reviews.llvm.org/D75225>`_)
163* ``--no-threads`` is removed. Use ``--threads=1`` instead. ``--threads`` (no-op) is removed.
164
165COFF Improvements
166-----------------
167
168* Fixed exporting symbols whose names contain a period (``.``), which was
169  a regression in lld 7.
170
171MinGW Improvements
172------------------
173
174* Implemented new options for disabling auto import and runtime pseudo
175  relocations (``--disable-auto-import`` and
176  ``--disable-runtime-pseudo-reloc``), the ``--no-seh`` flag and options
177  for selecting file and section alignment (``--file-alignment`` and
178  ``--section-alignment``).
179
180MachO Improvements
181------------------
182
183* Item 1.
184
185WebAssembly Improvements
186------------------------
187
188