This document contains the release notes for the lld linker, release 6.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.
A lot of bugs and compatibility issues have been identified and fixed as a
result of people using lld 5.0 as a standard system linker. In particular,
linker script and version script support has significantly improved that
it should be able to handle almost all scripts.
A mitigation for Spectre v2 has been implemented. If you pass -zretpolineplt, lld uses RET instruction instead of JMP instruction in PLT.
The option is available for x86 and x86-64.
Identical Code Folding (ICF) now de-duplicates .eh_frame entries, so lld now
generates slightly smaller outputs than before when you pass --icf=all.
Analysis for --as-needed is now done after garbage collection. If garbage
collector eliminates all sections that use some library, that library is
eliminated from DT_NEEDED tags. Previously, the analysis ran before garbage
collection.
Size of code segment is now always rounded up to page size to make sure that
unused bytes at end of code segment is filled with trap instructions (such
as INT3) instead of zeros.
lld is now able to generate Android-style compact dynamic relocation table.
You can turn on the feature by passing --pack-dyn-relocs=android.
Debug information is used in more cases when reporting errors.
--gdb-index gets faster than before.
String merging is now multi-threaded, which makes -O2 faster.
--hash-style=both is now default instead of --hash-style=sysv to
match the behavior of recent versions of GNU linkers.
ARM PLT entries automatically use short or long variants.
lld can now identify and patch a code sequence that triggers AArch64 errata 843419.
Add --fix-cortex-a53-843419 to enable the feature.
lld can now generate thunks for out of range branches.
MIPS port now generates all output dynamic relocations using Elf_Rel format only.
Added handling of the R_MIPS_26 relocation in case of N32/N64 ABIs and
generating proper PLT entries.
The following options have been added: --icf=none-zmuldefs--plugin-opt--no-eh-frame-hdr--no-gdb-index--orphan-handling={place,discard,warn,error}--pack-dyn-relocs={none,android}--no-omagic--no-print-gc-sections--ignore-function-address-equality-zretpolineplt--print-icf-sections--no-pie
A GNU ld style frontend for the COFF linker has been added for MinGW.
In MinGW environments, the linker is invoked with GNU ld style parameters;
which lld previously only supported when used as an ELF linker. When
a PE/COFF target is chosen, those parameters are rewritten into the
lld-link style parameters and the COFF linker is invoked instead.
Initial support for the ARM64 architecture has been added.
New --version flag.
Significantly improved support for writing PDB Files.
New --rsp-quoting flag, like clang-cl.
/manifestuac:no no longer incorrectly disables /manifestdependency:.
Only write .manifest files if /manifest is passed.