# lld 16.0.6 Release Notes

## Introduction

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

- Link speed improved greatly compared with lld 15.0. Notably input section initialization and relocation scanning are now parallel. (D130810) (D133003)

- `ELFCOMPRESS_ZSTD` compressed input sections are now supported. (D129406)

- `--compress-debug-sections=zstd` is now available to compress debug sections with zstd (`ELFCOMPRESS_ZSTD`). (D133548)

- `--no-warnings`/`-w` is now available to suppress warnings. (D136569)

- `DT_RISCV_VARIANT_CC` is now produced if at least one `R_RISCV_JUMP_SLOT` relocation references a symbol with the `STO_RISCV_VARIANT_CC` bit. (D107951)

- `DT_STATIC_TLS` is now set for AArch64/PPC32/PPC64 initial-exec TLS models when producing a shared object.

- `--no-undefined-version` is now the default; symbols named in version scripts that have no matching symbol in the output will be reported. Use `--undefined-version` to revert to the old behavior. (D135402)

- `-V` is now an alias for `-v` to support `gcc -fuse-ld=lld -v` on many targets.

- `-r` no longer defines `__global_pointer$` or `_TLS_MODULE_BASE_`.

- A corner case of mixed GCC and Clang object files (`STB_WEAK` and `STB_GNU_UNIQUE` in different COMDATs) is now supported. (D136381)

- The output `SHT_RISCV_ATTRIBUTES` section now merges all input components instead of picking the first input component. (D138550)

- For x86-32, `-fno-plt` GD/LD TLS models `call *___tls_get_addr@GOT(%reg)` are now supported. Previous output might have runtime crash.

- Armv4(T) thunks are now supported. (D139888) (D141272)

### Breaking changes

### COFF Improvements

- The linker command line entry in `S_ENVBLOCK` of the PDB is now stripped from input files, to align with MSVC behavior. (D137723)

- Switched from SHA1 to BLAKE3 for PDB type hashing / `-gcodeview-ghash` (D137101)

- Improvements to the PCH.OBJ files handling. Now LLD behaves the same as MSVC link.exe when merging PCH.OBJ files that don’t have the same signature. (D136762)

- Changed the OrdinalBase for DLLs from 0 to 1, matching the output from both MS link.exe and GNU ld. (D134140)

### MinGW Improvements

- The lld-specific options `--guard-cf`, `--no-guard-cf`, `--guard-longjmp` and `--no-guard-longjmp` has been added to allow enabling Control Flow Guard and long jump hardening. These options are disabled by default, but enabling `--guard-cf` will also enable `--guard-longjmp` unless `--no-guard-longjmp` is also specified. `--guard-longjmp` depends on `--guard-cf` and cannot be used by itself. Note that these features require the `_load_config_used` symbol to contain the load config directory and be filled with the required symbols. (D132808)

- Pick up libraries named `<name>.lib` when linked with `-l<name>`, even if `-static` has been specified. This fixes conformance to what GNU ld does. (D135651)

- Unwinding in Rust code on i386 in MinGW builds has been fixed, by avoiding to leave out the `rust_eh_personality` symbol. (D136879)

### MachO Improvements

### WebAssembly Improvements