狂野的0.10


毕业典礼于8月4日举行。 狂野的0.10 — 一个用 Rust 编写的免费链接器,主要用于快速构建程序。 Linux链接器执行构建的最后阶段:将目标文件和库合并成最终的可执行文件或共享库。Wild 可以替代 GNU ld、LLD 和 Mold,尽管开发者的最终目标是增量链接。 尚未实施.

 

其中一项主要创新是支持参数 --gdb-index 和 --no-gdb-index启用此功能后,Wild 会在输出文件中创建一个 .gdb_index 段,其中包含调试信息的索引。这使得 GDB 能够更快地在大型程序中查找必要的符号,而无需在构建后单独生成索引。该实现支持 GDB 索引格式的第 9 版;扫描、合并和写入索引的操作已并行化。

 

Composer脚本功能已得到显著扩展,新增了对以下功能的支持:

  • /DISCARD/ 部分用于排除不必要的输入部分;
  • PHDRS 自定义程序标题;
  • 函数 SIZEOF_HEADERS、DEFINED 和 SEGMENT_START;
  • AT 关键字和 LOADADDR 函数;
  • 带有三元运算符的条件表达式;
  • SORT、SORT_BY_NAME 和 SORT_BY_ALIGNMENT 命令;
  • 符号 __bss_start;
  • 用于填写输出部分的模板;
  • OUTPUT_FORMAT 和 OUTPUT_ARCH 命令;
  • 当前地址的几个相对计数器。

 

目前尚未完全兼容 GNU ld。例如,MEMORY 命令的某些特性、OVERLAY 分区以及一些分区放置方法仍未完成。开发人员正在单独进行这些工作。 内核链接所需功能表 Linux.

 

在 Btrfs 和 VFAT 文件系统上存储构建结果时,性能得到了提升。Wild 现在会自动使用 `--no-mmap-output-file` 模式,不会将输出文件映射到内存中。在开发者进行的 Btrfs 文件系统上 Zed 链接测试中,耗时从大约 2,6-2,8 秒缩短至 1,5-1,8 秒。然而,此次更改的作者提醒,即使经过优化,在这种情况下,Btrfs 的速度仍然明显慢于 tmpfs;而对于 Ext4 和 XFS 文件系统,使用 mmap 则更具优势。

Wild 正在持续移植到其他格式和平台。WebAssembly 的实验版本已经可以链接一系列程序,而 Mach-O 版本则可以链接基本的可执行文件。32 位目标平台的开发工作已经启动,这将进一步简化 Wild 在嵌入式系统开发中的使用。此外,Wild 还新增了对 PowerPC64 ELFv2 目标文件的初步处理功能,并且对 Mach-O 的支持也在不断完善,包括通用目标文件和与动态库的直接链接。这些移植版本目前尚不具备日常使用的条件。

libwild 链接器现在可以接受输入文件并将输出直接存储在内存中。这使得其他程序无需在磁盘上创建中间文件即可嵌入 Wild 库。此外,该库不再覆盖全局 Rayon 线程池,并且可以在构建时禁用对 Zstandard 压缩的支持。

此版本修复了 x86-64、AArch64、RISC-V 和 LoongArch64 架构的诸多问题。这些修复包括处理 TLS、PLT、LTO、压缩调试信息、大型比对以及 PIE 和共享对象中的重定位时出现的错误。此外,还修复了链接器脚本解析过程中可能发生的崩溃以及生成 .tbss、.strtab 和 .eh_frame 段时出现的错误。

 

野生支持 Linux 该链接器支持 x86-64、AArch64 和 RISC-V 架构;目前对 LoongArch64 和 PowerPC64LE 的支持尚处于初始阶段。用户可以通过预编译的归档文件、cargo-binstall、Homebrew、Nix 或使用 `cargo install --locked wild-linker` 命令安装该链接器。源代码的分发由用户自行决定。 Apache 2.0 或 MIT 许可证.

 

来源: linux.org.ru

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster