Den 4:e augusti slĂ€pptes Wild 0.10 â en fri lĂ€nkare, skriven i Rust och avsedd frĂ€mst för snabb byggnation av program i Linux. LĂ€nkaren utför det sista steget i byggprocessen: den kombinerar objektfiler och bibliotek till en fĂ€rdig körbar fil eller delat bibliotek. Wild kan anvĂ€ndas som en ersĂ€ttning för GNU ld, LLD och Mold, Ă€ven om utvecklarnas uttalade slutmĂ„l â inkrementell lĂ€nkning â Ă€nnu inte har realiserats.
Â
En av de största nyheterna Ă€r stödet för parametrarna âgdb-index och âno-gdb-index. NĂ€r denna funktion aktiveras skapar Wild en sektion .gdb_index i utdatafilen med en index av felsökningsinformation. Tack vare detta kan GDB snabbare hitta nödvĂ€ndiga symboler i stora program, utan att behöva skapa index separat efter byggandet. Implementeringen stöder den nionde versionen av GDB Index-formatet; scanning, sammanslagning och skrivning av index har parallelliserats.
Â
Arbetet med lÀnkarskript har utvidgats avsevÀrt. Stöd har lagts till för:
- sektioner /DISCARD/ för att utesluta onödiga indata-sektioner;
- anvÀndardefinierade programhuvuden PHDRS;
- funktionerna SIZEOF_HEADERS, DEFINED och SEGMENT_START;
- nyckelordet AT och funktionen LOADADDR;
- villkorsuttryck med terneroperator;
- kommandona SORT, SORT_BY_NAME och SORT_BY_ALIGNMENT;
- symbolen __bss_start;
- mönster för att fylla utgÄende sektioner;
- kommandona OUTPUT_FORMAT och OUTPUT_ARCH;
- flera relativa rÀknare för nuvarande adress.
Â
Full kompatibilitet med GNU ld har Ànnu inte uppnÄtts. Till exempel, en del av funktionerna i kommandot MEMORY, sektionerna OVERLAY och vissa sÀtt att placera sektioner förblir ofullstÀndiga. Utvecklarna hÄller separat en tabell över funktionerna som behövs för lÀnkning av Linux-kÀrnan.
Â
Prestanda har förbĂ€ttrats vid placering av byggresultat pĂ„ Btrfs och VFAT. Wild anvĂ€nder nu automatiskt lĂ€get âno-mmap-output-file och visar inte utdatafilen i minnet via mmap. I ett test som utfördes av utvecklaren av lĂ€nkaren Zed pĂ„ Btrfs minskade tiden frĂ„n cirka 2,6â2,8 till 1,5â1,8 sekunder. Samtidigt varnar författaren av Ă€ndringen för att Ă€ven efter optimering Ă€r Btrfs i detta scenario betydligt lĂ„ngsammare Ă€n tmpfs; för Ext4 och XFS visade sig anvĂ€ndningen av mmap dĂ€remot vara fördelaktigare.
Ăverföringen av Wild till andra format och plattformar fortsĂ€tter. Den experimentella versionen för WebAssembly kan nu sammanstĂ€lla ett urval av program, och porten för Mach-O fungerar för enklare exekverbara filer. Arbetet med 32-bitars mĂ„lplattformar har pĂ„börjats, vilket i framtiden bör underlĂ€tta anvĂ€ndningen av Wild i utvecklingen av inbĂ€ddade system. Dessutom har grundlĂ€ggande behandling av objektfiler för PowerPC64 ELFv2 lagts till och utvecklingen av stöd för Mach-O fortsĂ€tter, inklusive universella objektfiler och direkt lĂ€nkning med dynamiska bibliotek. Dessa portar bör fortfarande inte betraktas som fĂ€rdiga för dagligt bruk.
Biblioteksvarianten av lÀnkaren libwild kan nu ta emot indatafiler och spara resultatet direkt i minnet. Detta gör det möjligt för andra program att integrera Wild utan att skapa mellanliggande filer pÄ disken. Dessutom överskrider inte biblioteken lÀngre den globala trÄdpoolen Rayon, och stödet för Zstandard-komprimering kan stÀngas av vid kompilering.
I releasen ingÄr mÄnga korrigeringar för x86-64, AArch64, RISC-V och LoongArch64. Fel i hanteringen av TLS, PLT, LTO, komprimerad debuginformation, stora justeringar och omplaceringar i PIE- och delade objekt har ÄtgÀrdats. Möjliga krascher vid analys av lÀnkarskript och fel vid bildandet av sektionerna .tbss, .strtab och .eh_frame har ocksÄ rÀttats till.
Â
Wild stöder Linux pÄ arkitekturerna x86-64, AArch64 och RISC-V; stöd för LoongArch64 och PowerPC64LE Àr Ànnu bara i ett tidigt skede. LÀnkaren kan installeras frÄn fÀrdiga arkiv, via cargo-binstall, Homebrew, Nix eller med kommandot cargo install --locked wild-linker. KÀllkoden distribueras enligt anvÀndarens val under licenserna Apache 2.0 eller MIT.
Â
KĂ€lla: linux.org.ru
