lld 17.0.6 Release Notes¶
Introduction¶
This document contains the release notes for the lld linker, release 17.0.6. 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¶
When
--threads=is not specified, the number of concurrency is now capped to 16. A large--thread=can harm performance, especially with some system malloc implementations like glibc’s. (D147493)--remap-inputs=and--remap-inputs-file=are added to remap input files. (D148859)--lto=is now available to supportclang -funified-lto(D123805)--lto-CGO[0-3]is now available to controlCodeGenOpt::Levelindependent of the LTO optimization level. (D141970)--check-dynamic-relocations=is now correct 32-bit targets when the addend is larger than 0x80000000. (D149347)--print-memory-usagehas been implemented for memory regions. (D150644)SHF_MERGE,--icf=, and--build-id=fasthave switched to 64-bit xxh3. (D154813)Quoted output section names can now be used in linker scripts. (#60496)
MEMORYcan now be used without aSECTIONScommand. (D145132)REVERSEcan now be used in input section descriptions to reverse the order of input sections. (D145381)Program header assignment can now be used within
OVERLAY. This functionality was accidentally lost in 2020. (D150445)Operators
^and^=can now be used in linker scripts.LoongArch is now supported.
DT_AARCH64_MEMTAG_*dynamic tags are now supported. (D143769)AArch32 port now supports BE-8 and BE-32 modes for big-endian. (D140201) (D140202) (D150870)
R_ARM_THM_ALU_ABS_G*relocations are now supported. (D153407).ARM.exidxsections may start at non-zero output section offset. (D148033)Arm Cortex-M Security Extensions is now implemented. (D139092)
BTI landing pads are now added to PLT entries accessed by range extension thunks or relative vtables. (D148704) (D153264)
AArch64 short range thunk has been implemented to mitigate the performance loss of a long range thunk. (D148701)
R_AVR_8_LO8/R_AVR_8_HI8/R_AVR_8_HLO8/R_AVR_LO8_LDI_GS/R_AVR_HI8_LDI_GShave been implemented. (D147100) (D147364)--no-power10-stubsnow works for PowerPC64.DT_PPC64_OPTis now supported; (D150631)PT_RISCV_ATTRIBUTESis added to include the SHT_RISCV_ATTRIBUTES section. (D152065)R_RISCV_PLT32is added to support C++ relative vtables. (D143115)RISC-V global pointer relaxation has been implemented. Specify
--relax-gpto enable the linker relaxation. (D143673)The symbol value of
foois correctly handled when--wrap=fooand RISC-V linker relaxation are used. (D151768)x86-64 large data sections are now placed away from code sections to alleviate relocation overflow pressure. (D150510)
Breaking changes¶
COFF Improvements¶
lld-link can now find libraries with relative paths that are relative to /libpath. Before it would only be able to find libraries relative to the current directory. I.e.
lld-link /libpath:c:\relative\root relative\path\my.libwhere before we would have to dolld-link /libpath:c:\relative\root\relative\path my.liblld-link learned -print-search-paths that will print all the paths where it will search for libraries.
By default lld-link will now search for libraries in the toolchain directories. Specifically it will search:
<toolchain>/lib,<toolchain>/lib/clang/<version>/liband<toolchain>/lib/clang/<version>/lib/windows.
MinGW Improvements¶
A warning is now printed if the linked module contains runtime pseudo relocations that are too narrow, that can end up producing runtime errors if loaded too far away from the referenced DLL in the address space. (D154777)
MachO Improvements¶
WebAssembly Improvements¶
Fixes¶
Arm exception index tables (.ARM.exidx sections) are now output correctly when they are at a non zero offset within their output section. (D148033)
