lld 20.1.0-rc3 Release Notes

Introduction

This document contains the release notes for the lld linker, release 20.1.0-rc3. 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

  • -z nosectionheader has been implemented to omit the section header table. The operation is similar to llvm-objcopy --strip-sections. (#101286)

  • --randomize-section-padding=<seed> is introduced to insert random padding between input sections and at the start of each segment. This can be used to control measurement bias in A/B experiments. (#117653)

  • The reproduce tarball created with --reproduce= now excludes directories specified in the --dependency-file argument (used by Ninja). This resolves an error where non-existent directories could cause issues when invoking ld.lld @response.txt.

  • --symbol-ordering-file= and call graph profile can now be used together.

  • When --call-graph-ordering-file= is specified, .llvm.call-graph-profile sections in relocatable files are no longer used.

  • --lto-basic-block-sections=labels is deprecated in favor of --lto-basic-block-address-map. (#110697)

  • In non-relocatable links, a .note.GNU-stack section with the SHF_EXECINSTR flag is now rejected unless -z execstack is specified. (#124068)

  • In relocatable links, the sh_entsize member of a SHF_MERGE section with relocations is now respected in the output.

  • Quoted names can now be used in output section phdr, memory region names, OVERLAY, the LHS of --defsym, and INSERT AFTER.

  • Section CLASS linker script syntax binds input sections to named classes, which are referenced later one or more times. This provides access to the automatic spilling mechanism of –enable-non-contiguous-regions without globally changing the semantics of section matching. It also independently increases the expressive power of linker scripts. (#95323)

  • INCLUDE cycle detection has been fixed. A linker script can now be included twice.

  • The archivename: syntax when matching input sections is now supported. (#119293)

  • To support Arm v6-M, short thunks using B.w are no longer generated. (#118111)

  • For AArch64, BTI-aware long branch thunks can now be created to a destination function without a BTI instruction. (#108989) (#116402)

  • Relocations related to GOT and TLSDESC for the AArch64 Pointer Authentication ABI are now supported.

  • Supported relocation types for x86-64 target: * R_X86_64_CODE_4_GOTPCRELX (#109783) (#116737) * R_X86_64_CODE_4_GOTTPOFF (#116634) * R_X86_64_CODE_4_GOTPC32_TLSDESC (#116909) * R_X86_64_CODE_6_GOTTPOFF (#117675)

  • Supported relocation types for LoongArch target: R_LARCH_TLS_{LD,GD,DESC}_PCREL20_S2. (#100105)

Breaking changes

  • Removed support for the (deprecated) R_RISCV_RVC_LUI relocation. This was a binutils-internal relocation used during relaxation, and was not emitted by compilers/assemblers.

COFF Improvements

  • /includeglob has been implemented to match the behavior of --undefined-glob available for ELF.

  • /lldsavetemps allows saving select intermediate LTO compilation results (e.g. resolution, preopt, promote, internalize, import, opt, precodegen, prelink, combinedindex).

  • /machine:arm64ec support completed, enabling the linking of ARM64EC images.

  • COFF weak anti-dependency alias symbols are now supported.

MinGW Improvements

  • --undefined-glob is now supported by translating into the /includeglob flag.

MachO Improvements

WebAssembly Improvements

Fixes