4. srpna byl vydán Wild 0.10 — svobodný linker napsaný v Rustu, určený především pro rychlé sestavení programů na Linuxu. Linker provádí závěrečný krok sestavení: spojuje objektové soubory a knihovny do hotového spustitelného souboru nebo sdílené knihovny. Wild může být použit jako náhrada GNU ld, LLD a Mold, ačkoli uvedeným cílem vývojářů je - inkrementální linkování - zatím není implementováno.
Jedním z hlavních novinek byla podpora parametrů --gdb-index a --no-gdb-index. Při zapnutí této funkce Wild vytváří v výstupním souboru sekci .gdb_index s indexem ladicí informace. Díky tomu může GDB rychleji nalézt potřebné symboly v rozsáhlých programech, aniž by index vytvářel odděleně po sestavení. Implementace podporuje devátou verzi formátu GDB Index; operace skenování, slučování a zapisování indexu byly paralelizovány.
Významně byla rozšířena práce se skripty linkeru. Byla přidána podpora:
- sekcí /DISCARD/ pro vyloučení nežádoucích vstupních sekcí;
- uživatelských hlaviček programů PHDRS;
- funkcí SIZEOF_HEADERS, DEFINED a SEGMENT_START;
- klíčového slova AT a funkce LOADADDR;
- podmínkových výrazů s ternárním operátorem;
- příkazů SORT, SORT_BY_NAME a SORT_BY_ALIGNMENT;
- symbolu __bss_start;
- šablon pro vyplnění výstupních sekcí;
- příkazů OUTPUT_FORMAT a OUTPUT_ARCH;
- několika relativních čítačů aktuální adresy.
Úplná kompatibilita s GNU ld zatím nebyla dosažena. Například část funkcí příkazu MEMORY, sekce OVERLAY a některé způsoby umístění sekcí zůstávají nedokončeny. Vývojáři zvlášť vedou tabulku funkcí potřebných pro sestavení jádra Linuxu.
Byl zlepšen výkon při umisťování výsledků sestavení na Btrfs a VFAT. Wild nyní automaticky používá režim --no-mmap-output-file a nezobrazuje výstupní soubor do paměti přes mmap. V provedeném testu sestavení Zed na Btrfs se čas zkrátil z přibližně 2,6–2,8 na 1,5–1,8 sekundy. Přitom autor změny varuje, že i po optimalizaci Btrfs zůstává v tomto scénáři výrazně pomalejší než tmpfs; na Ext4 a XFS se použití mmap ukázalo naopak jako výhodnější.
Pokračuje přesun Wild na jiné formáty a platformy. Experimentální verze pro WebAssembly již dokáže skládat řadu programů, a port pro Mach-O – nejjednodušší spustitelné soubory. Byla zahájena práce na cílových platformách pro 32 bitů, což v budoucnosti zjednoduší použití Wild při vývoji vestavěných systémů. Také byla přidána základní podpora objektových souborů PowerPC64 ELFv2 a pokračuje vývoj podpory Mach-O, včetně univerzálních objektových souborů a přímého skládání s dynamickými knihovnami. Tyto porty zatím nelze považovat za připravené pro každodenní použití.
Knihovní varianta linkeru libwild nyní může přijímat vstupní soubory a ukládat výstup přímo do paměti. To umožňuje dalším programům integrovat Wild bez nutnosti vytvářet dočasné soubory na disku. Kromě toho knihovna již nepřepisuje globální pool vláken Rayon, a podporu komprese Zstandard lze při sestavování vypnout.
Vydání obsahuje mnoho oprav pro x86-64, AArch64, RISC-V a LoongArch64. Byly odstraněny chyby zpracování TLS, PLT, LTO, komprimovaných ladicích informací, velkých zarovnání a přesunů v PIE- a sdílených objektech. Opraveny byly také možné havárie při analýze skriptů linkeru a chyby při vytváření sekcí .tbss, .strtab a .eh_frame.
Wild podporuje Linux na architekturách x86-64, AArch64 a RISC-V; podpora LoongArch64 a PowerPC64LE je zatím označena jako počáteční. Linker lze nainstalovat z hotových archivů, pomocí cargo-binstall, Homebrew, Nix nebo příkazem cargo install --locked wild-linker. Zdrojový kód je k dispozici pro uživatele pod licencemi Apache 2.0 nebo MIT.
Zdroj: linux.org.ru
