mold 1.1是高性能连接器的新版本。它包含一些新的主要功能和各种错误修复。
从这个版本开始,我们不仅分发源代码,还分发Linux的预编译二进制文件。您可以在页面底部下载包含mold可执行文件的tar文件。您可以将tar文件的内容复制到/usr/local,也可以直接指定其完整路径,在不安装的情况下直接使用。
增加了本地LTO(链路时间优化)支持。用于调用ld的模具。bfd或ld。lld,如果遇到GCC IR(中间表示)文件或LLVM IR文件分别将任务委托给支持LTO的链接器。现在,mold直接处理IR文件。此功能是使用链接器插件API实现的,GNU ld和GNU gold也使用该API。请注意,添加LTO支持是为了完整性,而不是速度。mold只比LTO构建的其他链接器稍微快一点,因为不是链接而是代码优化占主导地位。(公元前46995年)
RISC-V(RV64)现在被支持作为主机和目标平台。mold可以连接现实世界中的大型程序,例如mold本身或RISC-V的LLVM Clang(e76f7c0)
支持-emit relocs选项。如果提供了该选项,mold会将重定位节从输入文件复制到输出文件。这个功能被一些链接后二进制优化或分析工具使用,比如Facebook';这是螺栓。(2007年2月26日)
mold获得了--shuffle区段选项。如果给出了该选项,链接器会随机调整输入部分的顺序,然后在虚拟地址空间中固定它们的地址。此功能在某些情况下很有用。首先,它可以用作ASLR(地址空间布局随机化)的一种强大形式。其次,当您对其他一些程序进行基准测试以获得更可靠的基准数字时,可以启用它,因为即使是相同的机器代码,如果它们在虚拟地址空间中的布局不同,其性能也会有所不同。你要确保你得到了好的/坏的基准数据,而不是巧合,通过洗牌输入部分。(7e91897)
添加了--print dependencies和--print dependencies=full选项。它们以CSV格式打印输入文件之间的依赖关系。也就是说,他们打印出关于哪个文件的信息取决于使用哪个符号的文件。我们添加这个特性时考虑了几个用例。首先,您可以使用它来分析为什么某个对象文件被从存档中取出并链接到输出文件。第二,当您想要消除对某个库的所有依赖关系时,使用此功能可以很容易地找到所有依赖关系。请注意,这是一个实验性特征,可能会在模具的特征版本中更改或删除。(a1287c2)
现在,PT_GNU_RELRO段与下一页边界对齐。之前,mold没有';t向上对齐,运行时加载程序向下对齐,因此最后一个部分页面将不受RELRO机制的保护。现在,整个RELRO段保证在运行时是只读的。(0a0f9b3)
这个得到了。如果现在给出-z,plt段现在由RELRO保护。这是可能的,因为写入。得到了。只有在进程启动时解决了所有符号,plt才会在进程启动期间发生。(73159e2)
之前,mold报告了一个错误,如果使用旧的GCC(使用-fgnu unique)创建的对象文件与使用新的GCC或Clang(使用-fno gnu unique)创建的对象文件混合(#324)。现在,mold接受这样的输入文件。(e65c5d2)
霉菌产生。symtab section现在包含section符号和从输入共享对象文件派生的符号。(e4c03c2,1550b5a)
模具生成的可执行文件现在可以在valgrind下运行。之前,valgrind在启动时由于断言失败而中止,因为它没有';I don’我不指望一个可执行文件同时具有这两种功能。bss和。dynbss部分。霉菌产生。dynbss包含复制重新定位的符号。该部分已重命名。copyrel解决valgrind和#39;这是个问题。(0f8bf23)