aboutsummaryrefslogtreecommitdiffstats
path: root/docs/ReleaseNotes.rst
blob: ce61cc0d4d74f03106e7ed6b57ae7c034965c03d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
=======================
lld 9.0.0 Release Notes
=======================

.. contents::
    :local:

Introduction
============

This document contains the release notes for the lld linker, release 9.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 <https://llvm.org/releases/>`_.

Non-comprehensive list of changes in this release
=================================================

ELF Improvements
----------------

* ld.lld now has typo suggestions for flags:
  ``$ ld.lld --call-shared`` now prints
  ``unknown argument '--call-shared', did you mean '--call_shared'``.

* lld now supports replacing ``JAL`` with ``JALX`` instructions in case
  of MIPS - microMIPS cross-mode jumps.

* lld now creates LA25 thunks for MIPS R6 code.

* Put MIPS-specific .reginfo, .MIPS.options, and .MIPS.abiflags sections
  into corresponding PT_MIPS_REGINFO, PT_MIPS_OPTIONS, and PT_MIPS_ABIFLAGS
  segments.

COFF Improvements
-----------------

* Like the ELF driver, lld-link now has typo suggestions for flags.

* lld-link now correctly reports duplicate symbol errors for obj files
  that were compiled with /Gy.

* lld-link now correctly reports duplicate symbol errors when several res
  input files define resources with the same type, name, and language.
  This can be demoted to a warning using ``/force:multipleres``.

* lld-link now rejects more than one resource obj input files, matching
  link.exe. Previously, lld-link would silently ignore all but one.
  If you hit this: Don't pass resource obj files to the linker, instead pass
  res files to the linker directly. Don't put res files in static libraries,
  pass them on the command line.

* Having more than two ``/natvis:`` now works correctly; it used to not
  work for larger binaries before.

* Undefined symbols are now printed only in demangled form. Pass
  ``/demangle:no`` to see raw symbol names instead.

* The following flags have been added: ``/functionpadmin``, ``/swaprun:``,
  ``/threads:no``

* Several speed and memory usage improvements.

* Range extension thunks are now created for ARM64, if needed

* lld-link now supports resource object files created by GNU windres and
  MS cvtres, not only llvm-cvtres

* The generated thunks for delayimports now share the majority of code
  among thunks, significantly reducing the overhead of using delayimport

MinGW Improvements
------------------

* lld now correctly links crtend.o as the last object file, handling
  terminators for the sections such as .eh_frame properly, fixing
  DWARF exception handling with libgcc and gcc's crtend.o.

* lld now also handles DWARF unwind info generated by GCC, when linking
  with libgcc

* Many more GNU ld options are now supported, which e.g. allows the lld
  MinGW frontend to be called by GCC

* PDB output can be requested without manually specifying the PDB file
  name, with the new option ``-pdb=`` with an empty value to the option.
  (The old existing syntax ``-pdb <filename>`` was more cumbersome to use
  with an empty parameter value.)