畢業典禮於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
