lld 12.0.0 Release Notes¶
Introduction¶
This document contains the release notes for the lld linker, release 12.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.
Non-comprehensive list of changes in this release¶
ELF Improvements¶
--dependency-file
has been added. (Similar tocc -M -MF
.) (D82437)--error-handling-script
has been added to allow for user-defined handlers upon missing libraries. (D87758)--exclude-libs
can now localize defined version symbols and bitcode referenced libcall symbols. (D94280)--gdb-index
now works with DWARF v5 and--icf={safe,all}
. (D85579) (D89751)--gdb-index --emit-relocs
can now be used together. (D94354)--icf={safe,all}
conservatively no longer fold text sections with LSDA. Previously ICF on-fexceptions
code could be unsafe. (D84610)--icf={safe,all}
can now fold two sections with relocations referencing aliased symbols. (D88830)--lto-pseudo-probe-for-profiling
has been added. (D95056)--no-lto-whole-program-visibility
has been added. (D92060)--oformat-binary
has been fixed to respect LMA. (D85086)--reproduce
includes--lto-sample-profile
,--just-symbols
,--call-graph-ordering-file
,--retain-symbols-file
files.-r --gc-sections
is now supported. (D84131)A
-u
specified symbol will no longer change the binding toSTB_WEAK
. (D88945)--wrap
support has been improved. + Iffoo
is not referenced, there is no longer an undefined symbol__wrap_foo
. + If__real_foo
is not referenced, there is no longer an undefined symbolfoo
.SHF_LINK_ORDER
sections can now have zerosh_link
values.SHF_LINK_ORDER
and non-SHF_LINK_ORDER
sections can now be mixed within an input section description. (D84001)LOG2CEIL
is now supported in linker scripts. (D84054)DEFINED
has been fixed to check whether the symbol is defined. (D83758)An input section description may now have multiple
SORT_*
. The matched sections are ordered by radix sort with the keys being(SORT*, --sort-section, input order)
. (D91127)Users can now provide a GNU style linker script to convert
.ctors
into.init_array
. (D91187)An empty output section can now be discarded even if it is assigned to a program header. (D92301)
Non-
SHF_ALLOC
sections now have larger file offsets thanSHF_ALLOC
sections. (D85867)Some symbol versioning improvements. + Defined
foo@@v1
now resolve undefinedfoo@v1
(D92259) + Undefinedfoo@v1
now gets an error (D92260)The AArch64 port now has support for
STO_AARCH64_VARIANT_PCS
andDT_AARCH64_VARIANT_PCS
. (D93045)The AArch64 port now has support for
R_AARCH64_LD64_GOTPAGE_LO15
.The PowerPC64 port now detects missing R_PPC64_TLSGD/R_PPC64_TLSLD and disables TLS relaxation. This allows linking with object files produced by very old IBM XL compilers. (D92959)
Many PowerPC PC-relative relocations are now supported.
R_PPC_ADDR24
andR_PPC64_ADDR16_HIGH
are now supported.powerpcle is now supported. Tested with FreeBSD loader and freestanding. (D93917)
RISC-V: the first
SHT_RISCV_ATTRIBUTES
section is now retained. (D86309)LTO pipeline now defaults to the new PM if the CMake variable
ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER
is on. (D92885)
COFF Improvements¶
Error out clearly if creating a DLL with too many exported symbols. (D86701)
MinGW Improvements¶
Enabled dynamicbase by default. (D86654)
Tolerate mismatches between COMDAT section sizes with different amount of padding (produced by binutils) by inspecting the aux section definition. (D86659)
Support setting the subsystem version via the subsystem argument. (D88804)
Handle the
--demangle
and--no-demangle
options. (D93950)
Mach-O Improvements¶
We’ve gotten the new implementation of LLD for Mach-O to the point where it is able to link large x86_64 programs, and we’d love to get some alpha testing on it. The new Darwin back-end can be invoked as follows:
To reach this point, we implemented numerous features, and it’s easier to list the major features we haven’t yet completed:
LTO support
Stack unwinding for exceptions
Support for arm64, arm, and i386 architectures
If you stumble upon an issue and it doesn’t fall into one of these categories, please file a bug report!