mold 2.3.0
mold 2.3.0 is a new release of the high-speed linker.
New features
-
[x86-64] mold 2.3.0 has introduced an experimental flag,
-z rewrite-endbr, which rewrites superfluousendbr64instructions asnop.endbr64is a relatively recent x86 instruction used to mark locations where an indirect jump instruction can transfer control. With control-flow integrity enabled (meaningendbr64is effective), an indirect jump can only target anendbr64or it will trigger a runtime exception. This mechanism significantly hinders certain control hijacking attacks, such as ROP or JOP, since attackers cannot jump to just any location.When given the
-fcf-protectionflag, GCC conservatively places anendbr64at the beginning of every global function. This is because the function's address might be taken as a pointer by other translation units. However, in most cases, function addresses are not actually taken. This conservative approach results in an overabundance of unnecessaryendbr64instructions, leading to not only code bloating but also a potential decrease in security as there are more locations for an attacker to exploit.The new linker option,
-z rewrite-endbr, aims to alleviate this issue. The linker can carry out a whole-program analysis on the input files to identify functions whose addresses are never taken. If-z rewrite-endbris specified, mold will conduct this analysis and replace the initialendbr64with anopfor functions whose addresses aren't taken.mold also emits an
endbr64in a PLT entry only when the address of the PLT entry is taken. (17f0d85)
Bug fixes and compatibility improvements
- mold now produces a more compact
.gdb_indexsection when using the--gdb-indexflag. Additionally, mold now generates a correct.gdb_indexsection for object files created by Clang. (a396fa4) - mold is now capable of handling input sections larger than 4 GiB. (0ce32d3)
- [PPC] mold can now generate executables for POWER10 processors. Previously, executables produced by mold would crash immediately on startup on POWER10. (0f71471)
- [ARM64] When a function with a non-standard calling convention is exported, it's mandatory for the linker to turn on the
STO_AARCH64_VARIANT_PCSflag to notify the dynamic linker. mold now appropriately sets this flag. (2e3b56e) - [RISC-V] mold now supports new GP-relative relocations. (ac3ee91)
Acknowledgements
mold is an open-source project, and we accept donations via GitHub Sponsors and OpenCollective. We thank everyone who sponsors our project. In particular, we'd like to acknowledge the following organizations and people who have sponsored $32/mo or more during this release cycle:
Signal Slot Inc.
Mercury
G-Research-OSS
Jinkyu Yi
Emerge Tools
Cybozu, Inc.
jfmontanaro
Steven Noonan
Brett Slatkin
Dougall Johnson
Santiago Pastorino
CubeSoft, Inc.
Rahul Butani
Kyle Lacy
daquexian
Josh Triplett
Kiril Mihaylov