4. kolovoza objavljeno Wild 0.10 — slobodnog linker-a, napisanog na Rustu i namijenjenog prije svega za brzu izgradnju programa na Linuxu. Linker obavlja završnu fazu izgradnje: spaja objektne datoteke i biblioteke u gotovu izvršnu datoteku ili dijeljenu biblioteku. Wild se može koristiti kao zamjena za GNU ld, LLD i Mold, iako je krajnji cilj koji su postavili programeri — inkrementalno povezivanje — još nije realiziran.
Jedna od glavnih novina je podrška za parametre —gdb-index i —no-gdb-index. Kada je ova mogućnost uključena, Wild stvara u izlaznoj datoteci sekciju .gdb_index s indeksom informacija za debagiranje. Zbog toga GDB može brže pronaći potrebne simbole u velikim programima, ne formirajući indeks odvojeno nakon izgradnje. Implementacija podržava devetu verziju GDB Index formata; operacije skeniranja, spajanja i pisanja indeksa su paralelizirane.
Značajno je proširen rad s linker skriptama. Dodana je podrška za:
- sekcije /DISCARD/ za isključivanje nepotrebnih ulaznih sekcija;
- korištenje korisničkih zaglavlja programa PHDRS;
- funkcije SIZEOF_HEADERS, DEFINED i SEGMENT_START;
- ključnu riječ AT i funkciju LOADADDR;
- uvjetne izraze s ternarnim operatorom;
- naredbe SORT, SORT_BY_NAME i SORT_BY_ALIGNMENT;
- simbol __bss_start;
- predloške za popunjavanje izlaznih sekcija;
- naredbe OUTPUT_FORMAT i OUTPUT_ARCH;
- nekoliko relativnih brojača trenutne adrese.
Puna kompatibilnost s GNU ld još nije postignuta. Na primjer, dio mogućnosti naredbe MEMORY, sekcije OVERLAY i neki načini smještaja sekcija ostaju nedovršeni. Programeri posebno vode tablicu mogućnosti potrebnih za povezivanje Linux jezgre..
Poboljšana je učinkovitost prilikom smještanja rezultata izgradnje na Btrfs i VFAT. Wild sada automatski koristi način —no-mmap-output-file i ne mapira izlaznu datoteku u memoriju putem mmap. U testiranju izgradnje Zed na Btrfs, vrijeme se smanjilo s približno 2,6–2,8 na 1,5–1,8 sekundi. Autor promjene upozorava da čak i nakon optimizacije, Btrfs u ovom scenariju ostaje značajno sporiji od tmpfs; za Ext4 i XFS, korištenje mmap, naprotiv, pokazalo se isplativijim.
Prijenos Wilda na druge formate i platforme se nastavlja. Eksperimentalna verzija za WebAssembly već može povezivati niz programa, dok port za Mach-O podržava osnovne izvršne datoteke. Rad je započet na 32-bitnim ciljnim platformama, što bi u budućnosti trebalo olakšati upotrebu Wilda u razvoju ugrađenih sustava. Također, dodana je početna obrada objektnih datoteka PowerPC64 ELFv2 i nastavljen je razvoj podrške za Mach-O, uključujući univerzalne objektne datoteke i izravno povezivanje s dinamičkim knjižnicama. Ovi portovi se za sada ne smatraju spremnima za svakodnevnu upotrebu.
Knjižnička verzija linker-a libwild sada može primati ulazne datoteke i spremati rezultate izravno u memoriju. To omogućava drugim programima da integriraju Wild bez potrebe za stvaranjem međufajlova na disku. Osim toga, knjižnica više ne redefinira globalni skup niti-a Rayon, a podrška za kompresiju Zstandard može se isključiti tijekom gradnje.
U izdanju je uključeno mnogo ispravaka za x86-64, AArch64, RISC-V i LoongArch64. Ispravljene su greške u obradi TLS-a, PLT-a, LTO-a, kompresiranih informacija o debagiranju, velikih poravnanja i pomaka u PIE i dijeljenim objektima. Ispravljeni su mogući rušenja prilikom analize skripti linkera i greške u formiranju sekcija .tbss, .strtab i .eh_frame.
Wild podržava Linux na arhitekturama x86-64, AArch64 i RISC-V; podrška za LoongArch64 i PowerPC64LE je za sada označena kao početna. Linker se može instalirati iz gotovih arhiva, putem cargo-binstall, Homebrew, Nix ili naredbom cargo install —locked wild-linker. Izvorni kod se distribuira po izboru korisnika pod licencama Apache 2.0 ili MIT.
Izvor: linux.org.ru
