21CTO 导读:在Mold 3.0 版本中,这款快速链接器从 C++ 切换到了 Rust。然后它的下一个目标已经确定:Mold 将成为 Linux 发行版中的标准链接器。
Mold 是一款高速链接器,可替代 GNU Gold/LD 和 LLVM LLD 等链接器。它需要Rust 1.95环境,放弃了 Intel 的 oneTBB。据评测Mold 相对于 LLVM lld 的平均速度提升了 4.9 倍。
在 3.x 系列版本中,由 Mold 和 lld 创建者 Rui Ueyama 领导的开发团队希望彻底消除与 GNU ld 的兼容性差距,尤其是在链接器脚本支持方面。他们也希望为 Mold 未来成为 Linux 发行版的标准链接器铺平道路。
Mold最近一直在进行从 C++ 到 Rust 的重写,并雄心勃勃地希望最终成为 Linux 系统的默认标准链接器。
而今天,这款基于 Rust 的高性能链接器 Mold 3.0 正式发布了。
Mold3.0 称可直接替代之前的稳定版本 Mold 2.42.1,尽管现在使用的是 Rust 编程语言而非 C++。
Mold 3.x 的主要目标是解决与 GNU LD 之间剩余的兼容性问题:
“mold 3.0.0 是高速链接器的新主要版本。
正如我们在 2.42.1 版本说明中宣布的那样,我们已将 mold 从 C++ 重写为 Rust,这是 Rust 版本的第一个版本。
2.42.1 是 C++ 版本的最后一个版本。mold 3.x 的目标是弥合与 GNU ld 的剩余兼容性差距,尤其是在链接器脚本支持方面,并为 mold 被 Linux 发行版采用为默认链接器铺平道路。”
在 Mold 3.0 Rust 重写过程中,新版本修复了许多 bug。主要包括如下:
针对损坏的输入文件,增加了内存访问边界检查
将构建系统从 CMake 迁移到 Cargo
需要 Rust 1.95 或更高版本以及 C 编译器才能从源代码构建
移除对并行处理库 oneTBB 的依赖
修复了在静态链接的可执行文件中使用版本脚本时发生的崩溃问题
修复了将输出文件指定为输入文件时发生的崩溃和输出损坏问题
修复了“--gc-sections”会移除“--init”和“--fini”指定的函数的问题
修复了部分链接“-r”中异常处理、符号和重定位的多个问题
修复了生成无法重现输出的多个问题
改进了对 AArch64、ARM、RISC-V、LoongArch、PowerPC 、SPARC64 等架构的重定位处理
其完整的修复列表和 Mold 3.0 的其他详细信息请参见发布公告。
为什么要用 Rust 重写一个已经可以正常工作的链接器?
主要原因就是安全性。链接器会读取它自己没有创建的目标文件,然后对这些文件执行大量底层内存操作。
在 C++ 中,一个受损的输入文件就可能导致代码读取本不该访问的内存。而这正是内存漏洞演变为安全漏洞的典型例子。Rust 会自动检查这些读取操作,这使得 Mold 在处理损坏的输入文件时更加安全。
接下来的版本:默认链接器脚本
Mold 3.x 系列的目标异常明确。该项目的既定目标是“弥合与 GNU ld 之间剩余的兼容性差距,尤其是在链接脚本支持方面”。它还希望“为 Mold 被 Linux 发行版采用为默认链接器铺平道路”。
链接器脚本是一些小文件,它们告诉链接器将代码精确地放置在内存中的哪个位置。操作系统内核、引导加载程序和小型设备的固件都依赖于它们。Mold 之前无法链接这些程序。在它能够做到这一点之前,发行版无法将其设置为系统默认链接器。
这对开发者意味着什么
可将 3.0 版本视为直接替换,然后进行验证。如果你已经在使用 Mold,则构建标志无需更改。首先,将一个实际项目分别链接到 2.42.1 和 3.0 版本。然后在切换 CI 服务器之前运行完整的测试套件。
如果想自行构建 mold,请检查你的编译器。这需要 Rust 1.95 或更高版本,因此某些长期支持发行版打包的旧版本 Rust 可能无法构建它。打包者会失去 oneTBB 依赖,但会采用 Cargo 构建。
自行测量链接时间。表格中的速度提升数据来自 Mold 的代码库,测量时间是在重写之前。请在切换代码前后,分别对你自己的代码进行完整构建和小规模增量构建的计时。
Mold支持的架构包括 x86-64、i386 和 ARM 32/64 位。感兴趣的开发者可从其官方网站GitHub获取mold 3.0.0。
GitHub:https://github.com/rui314/mold/releases#release-v3.0.0
作者:聆听音乐的鱼
本篇文章为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 微信公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。
请扫描二维码,使用微信支付哦。