lld 14.0.6 Release Notes — lld 14.0.6 documentation

# lld 14.0.6 Release Notes

## Introduction

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

- `--export-dynamic-symbol-list` has been added. (D107317)

- `--why-extract` has been added to query why archive members/lazy object files are extracted. (D109572)

- If `-Map` is specified, `--cref` will be printed to the specified file. (D114663)

- `-z bti-report` and `-z cet-report` are now supported. (D113901)

- `--lto-pgo-warn-mismatch` has been added. (D104431)

- Archives without an index (symbol table) are now supported and work with `--warn-backrefs`. One may build such an archive with `llvm-ar rcS [--thin]` to save space. (D117284) The archive index may be entirely ignored in a future release.

- No longer deduplicate local symbol names at the default optimization level of `-O1`. This results in a larger `.strtab` (usually less than 1%) but a faster link time. Use optimization level `-O2` to restore the deduplication. The `-O2` deduplication may be dropped in the future to help parallel `.symtab` write.

- In relocatable output, relocations to discarded symbols now use tombstone values. (D116946)

- Orphan section placement now picks a more suitable segment. Previously the algorithm might pick a readonly segment for a writable orphan section and make the segment writable. (D111717)

- An empty output section moved by an `INSERT` comment now gets appropriate flags. (D118529)

- Negation in a memory region attribute is now correctly handled. (D113771)

- `--compress-debug-sections=zlib` is now run in parallel. `{clang,gcc} -gz` link actions are significantly faster. (D117853)

- “relocation out of range” diagnostics and a few uncommon diagnostics now report an object file location beside a source file location. (D112518)

- The write of `.rela.dyn` and `SHF_MERGE|SHF_STRINGS` sections (e.g. `.debug_str`) is now run in parallel.

Architecture specific changes:

- The AArch64 port now supports adrp+ldr and adrp+add optimizations. `--no-relax` can suppress the optimization. (D112063) (D117614)

- The x86-32 port now supports TLSDESC (`-mtls-dialect=gnu2`). (D112582)

- The x86-64 port now handles non-RAX/non-adjacent `R_X86_64_GOTPC32_TLSDESC` and `R_X86_64_TLSDESC_CALL` (`-mtls-dialect=gnu2`). (D114416)

- The x86-32 and x86-64 ports now support mixed TLSDESC and TLS GD, i.e. mixing objects compiled with and without `-mtls-dialect=gnu2` referencing the same TLS variable is now supported. (D114416)

- For x86-64, `--no-relax` now suppresses `R_X86_64_GOTPCRELX` and `R_X86_64_REX_GOTPCRELX` GOT optimization (D113615)

- `R_X86_64_PLTOFF64` is now supported. (D112386)

- `R_AARCH64_NONE`, `R_PPC_NONE`, and `R_PPC64_NONE` in input REL relocation sections are now supported.

### Breaking changes

- `e_entry` no longer falls back to the address of `.text` if the entry symbol does not exist. Instead, a value of 0 will be written. (D110014)

- `--lto-pseudo-probe-for-profiling` has been removed. In LTO, the compiler enables this feature automatically. (D110209)

- Use of `--[no-]define-common`, `-d`, `-dc`, and `-dp` will now get a warning. They will be removed or ignored in 15.0.0. (llvm-project#53660)

### COFF Improvements

- Correctly handle a signed immediate offset in ARM64 adr/adrp relocations. (D114347)

- Omit section and label symbols from the symbol table. (D113866)

### MinGW Improvements

- `--heap` is now handled. (D118405)

### Mach-O Improvements

- The `ld64.lld.darwinnew` symlink has been removed. Use `ld64.lld` to invoke the Mach-O backend from now on. Moreover, the symlink `ld64.lld.darwinold` – and the old Mach-O LLD code that it pointed to – have been removed. (D114842)

- The “cannot export hidden symbol” error has been downgraded to a warning. (D107011)

- Common bitcode symbols are now supported. (D107027)

- Weak references in bitcode are now supported. (D115949)

- Thunk insertion now works more reliably. (D108897, D108924, D109079, D116705)

- `-ObjC` now loads archive members before the symbol resolution phase. (D108781)

- `-oso_prefix` is now supported. (D112291)

- Properly encode binaries with zero exported symbols. Tools like `codesign_allocate` no longer choke on those binaries. (D112589)

- We no longer treat architecture mismatches as a fatal error. Use `-arch_errors_fatal` if that behavior is still desired. (D113082)

- Several performance improvements were done to speed LLD up on projects with a lot of framework flags and library lookups. Large Swift-based projects will benefit significantly. (D113073, D113063, D113153, D113235)

- Several memory-reduction optimizations were done to reduce LLD’s RSS footprint. (D113813, D113818)

- Symbol patterns from `-[un]exported_symbols_list` are now processed in parallel. (D113820)

- `.weak_def_can_be_hidden` symbols can now be exported. (D113167)

- `-S` – to omit debug info – is now handled. (D112594)

- `-v` now writes to stderr instead of stdout. (D113020)

- Private externs with GOT relocations are now marked as LOCAL in the indirect symbol table. This allows `strip -x` to remove more symbols. (D111852)

- We no longer generate bogus addresses when `__TEXT,__gcc_except_tab` is renamed. (D113582)

- Unreferenced weak dylib symbols no longer trigger fetches from an archive. (D115092)

- `$ld$hide` symbols are now supported. (D115775)

- Symbols imported via `-weak_framework` are now properly marked as weak refs. (D114397)

- `--warn-dylib-install-name` and `--no-warn-dylib-install-name` were added to toggle LLD-specific warnings around the use of `-install_name`. (D113534)

- Passing both `--icf=all` and `-no_deduplicate` no longer results in a warning. (D110672)

- ICF now deduplicates functions with (identical) unwind info too. (D109946)

- We now support ordering sections based on call graph profile data. (D112164)

- Map file output now proceeds in parallel with output of the binary. (D117069)

- The map file now contains dead-stripped symbols too. (D114737)

- Multiple TLV sections with different alignments are now handled properly. (D116263)

- `--start-lib` and `--end-lib` are now supported. (D116913)

- `-noall_load` is now supported. (D117629)

- `-add_empty_section` is now supported. (D117749)

### WebAssembly Improvements