mold 2.36.0 is a new release of the high-speed linker. It includes the following new features and bug fixes.
New Features
- The
--package-metadata=<string>
option has been added to embed a given string into the.note.package
section. This option is designed for build scripts that generate binary packages, such as.rpm
or.deb
, to include package metadata in each executable. It simplifies the process of identifying the corresponding package for a given executable or core file. (7ddc8f4) - [ARM][PowerPC] We've improved the algorithm for creating range extension thunks to reduce memory usage and improve speed. For example, linking clang-19 for ARM64 is now ~7% faster than before. (9fc0ace)
- [RISC-V][LoongArch] We've improved the algorithm for code-shrinking linker relaxation to reduce memory usage and improve speed. For example, linking clang-19 for RISC-V is now ~4% faster than before. (3234d88)
Bug Fixes and Compatibility Improvements
- mold created a bad relocation for an IFUNC if the linker's output file type was a shared library and the symbol was exported. This bug could cause a segmentation fault of a linked program. The problem has now been fixed. (a297859)
- [RISC-V] mold could produce incorrect code as a result of code-shrinking relaxation for the
R_RISCV_HI20
relocation. That type of relocation was used rarely because it is not PC-relative. That being said, if your program used the relocation, and the relocation targets were at a low address (from 0x1f800 to 0x20000), your program would crash at runtime due to the linker's bug. The issue has now been resolved. (eec3f6b) - [RISC-V][LoongArch] When the linker removed instructions from a function as a result of code-shrinking relaxation, the function symbol's size in the output file should be updated to reflect the result of relaxation, even though doing it is mostly cosmetic. mold did not do that. Now, mold sets correct sizes to output function symbols. (e6345d5)
- [LoongArch] Binaries linked with mold now work on 64 KiB page systems. Previously, only up to 16 KiB pages were supported. (2d7b6b2)
- [s390x] The s390x processor-specific ABI requires the linker to reserve the first three slots of the
.got
section for the runtime. mold, however, reserved only two slots and used the third for itself. Even though we did not observe issues in the wild, it was a violation of the psABI. The problem has now been fixed. (dfce2fc)
Besides these changes, we've started distributing a binary package for LoongArch with this release on the release page.
Acknowledgements
mold is an open-source project, and we accept donations via [GitHub Sponsors](https://github.com/sponsors/rui314) and [OpenCollective](https://opencollective.com/mold-linker). We thank everyone who sponsors our project. In particular, we would like to acknowledge the following organizations and people who have sponsored $32/month or more during this release cycle:# 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: