mold 2.4.0
mold 2.4.0 is a new release of the high-speed linker.
New features
- mold gained the
--spare-program-headers=<number>
option, which adds a specified number of spare entries at the end of the program header. The option aims to make post-processing tools to add program header entries very easily. Note that sorting program header entries after adding new ones may be necessary to meet the constraints of the ELF file format. For details, see the elf(5) man page. (eb6c213) - mold's
-z rewrite-endbr
option rewrites superflousendbr64
instructions withnop
as a countermeasure against control-flow highjacking attacks. Previously, this worked exclusively with object files compiled with-ffunction-sections
, requiring each function to be compiled into a separate section. Starting from this release,-z rewrite-endbr
works on object files compiled without it. In other words, mold is now capable of rewritingendbr64
instructions even if the instruction is not at the beginning of a section. (3cb8a52)
Bug fixes and compatibility improvements
- Previously, mold couldn't handle object files containing multiple
.eh_frame
sections. The.eh_frame
is a section containing data for exception handling. Usually, an object file contains only one.eh_frame
which describes how to handle exceptions for all text sections in the same file. However, on rare conditions, it seemsld -r
creates an object file containing multiple.eh_frame
sections. mold is now able to handle such object files. (f4c5a8a) mold -run <command>
is an easy way to run the given command with a virtual environment in which theld
command is replaced withmold
. The feature is implemented usingLD_PRELOAD
to hookfork(2)
-family functions. Before this release, some invocations ofld
were not intercepted correctly because we missed theposix_spawnp(2)
function. Now, the function is intercepted just like otherfork(2)
-family functions. (3fd1cec)- mold used to produce a non-working executable on a rare occasion when all thread-local variables lacked an initial value and the read-only data required alignment equal to or greater than the page size. This bug has been resolved. (de7d37e)
- Previously, mold might assign a different symbol version to a symbol compared to GNU ld if it matches both a wildcard pattern and an exact pattern in a version script. Our behavior is now compatible with that of GNU ld. (0fdbace)
- [x86-64, i686] Recent versions of LLVM emit a machine code sequence for TLSDESC thread-local variables that differs from GCC's, and mold previously mis-optimized this sequence, leading to crashes in the linked programs. In other words, if you are using LLVM/Clang and compile object files with
-mtls-dialect=gnu2
, mold might mis-optimize the output file. Now, the bug has been fixed. (000ce0e)
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: