Den 4. august blev der udgivet Wild 0.10 — en fritstående linker skrevet i Rust, der primært er designet til hurtig samling af programmer i Linux. Linkeren udfører det sidste trin i samlingen: den sammenfører objektfiler og biblioteker til en færdig eksekverbar fil eller delt bibliotek. Wild kan bruges som erstatning for GNU ld, LLD og Mold, selvom den endelige målsætning udviklerne har angivet — inkrementel linking — er endnu ikke implementeret.
En af de største nyheder er understøttelsen af parametre —gdb-index og —no-gdb-index. Når denne mulighed aktiveres, opretter Wild en sektion .gdb_index i outputfilen med en indeks for debugoplysninger. Dette gør, at GDB kan finde nødvendige symboler hurtigere i store programmer uden at skulle oprette en indeks separat efter samlingen. Implementeringen understøtter version ni af GDB Index-formatet; scanning, sammenlægning og skrivning af indekserne er blevet paralleliseret.
Arbejdet med linker-scripts er blevet markant udvidet. Understøttelsen af:
- sektionen /DISCARD/ for at udelukke unødvendige indgående sektioner;
- brugerspecificerede headers for programmer PHDRS;
- funktionerne SIZEOF_HEADERS, DEFINED og SEGMENT_START;
- nøgleordet AT og funktionen LOADADDR;
- betingede udtryk med den ternære operator;
- kommandoerne SORT, SORT_BY_NAME og SORT_BY_ALIGNMENT;
- symbolet __bss_start;
- skabeloner til udfyldning af output-sektioner;
- kommandoerne OUTPUT_FORMAT og OUTPUT_ARCH;
- flere relative tællere for den aktuelle adresse.
Fuld kompatibilitet med GNU ld er endnu ikke opnået. For eksempel forbliver dele af kommandoens MEMORY, sektionerne OVERLAY og nogle måder at placere sektioner på uafsluttede. Udviklerne fører særskilt en tabel over funktioner, der er nødvendige for at linke Linux-kernen..
Ydelsen ved placering af samlingsresultater på Btrfs og VFAT er forbedret. Wild bruger nu automatisk tilstand —no-mmap-output-file og mapper ikke outputfilen ind i hukommelsen via mmap. I en test udført af udvikleren for linking af Zed på Btrfs blev tiden reduceret fra cirka 2,6–2,8 til 1,5–1,8 sekunder. Det skal bemærkes, at selv efter optimering forbliver Btrfs betydeligt langsommere end tmpfs i dette scenarie; for Ext4 og XFS viste det sig at være fordelagtigt at bruge mmap.
Overførslen af Wild til andre formater og platforme fortsætter. Den eksperimentelle version til WebAssembly kan allerede kompilere en række programmer, og porten til Mach-O understøtter de enkleste eksekverbare filer. Der er påbegyndt arbejde på 32-bit målplatforme, hvilket i fremtiden skal gøre anvendelsen af Wild i udviklingen af indlejrede systemer lettere. Der er desuden tilføjet indledende behandling af objektfiler i PowerPC64 ELFv2, og udviklingen af Mach-O-support fortsætter, herunder universelle objektfiler og direkte kompilering med dynamiske biblioteker. Disse porte skal endnu ikke betragtes som klar til daglig brug.
Den biblioteksbaserede version af linker libwild kan nu modtage inputfiler og gemme resultaterne direkte i hukommelsen. Dette giver andre programmer mulighed for at integrere Wild uden at oprette midlertidige filer på disken. Derudover overskriver biblioteket ikke længere den globale trådpool Rayon, og supporten til Zstandard-kompression kan deaktiveres under opbygningen.
Udgivelsen indeholder en række rettelser til x86-64, AArch64, RISC-V og LoongArch64. Problemer med behandling af TLS, PLT, LTO, komprimeret fejlfinding, store udjævninger og flytninger i PIE- og delte objekter er blevet løst. Mulige nedbrud ved behandling af linker-scripts og fejl i dannelsen af sektioner .tbss, .strtab og .eh_frame er også rettet.
Wild understøtter Linux på arkitekturerne x86-64, AArch64 og RISC-V; understøttelse af LoongArch64 og PowerPC64LE er stadig i begyndelsesfasen. Linkeren kan installeres fra færdige arkiver, via cargo-binstall, Homebrew, Nix eller med kommandoen cargo install —locked wild-linker. Kildekoden distribueres efter brugerens valg under licenserne Apache 2.0 eller MIT.
Kilde: linux.org.ru
