Wild 0.10


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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster