Pe 4 august a avut loc lansarea Wild 0.10 — a unui linker liber, scris în Rust și destinat în principal pentru construirea rapidă a programelor pe Linux. Linker-ul efectuează etapa finală a construcției: combină fișierele obiect și bibliotecile într-un fișier executabil pregătit sau într-o bibliotecă partajată. Wild poate fi folosit ca o alternativă la GNU ld, LLD și Mold, deși scopul final declarat de dezvoltatori — linkarea incrementală — nu este încă implementat.
Unul dintre cele mai importante noutăți este suportul pentru opțiunile —gdb-index și —no-gdb-index. Activarea acestei funcționalități permite lui Wild să creeze în fișierul de ieșire o secțiune .gdb_index cu un index al informațiilor de depanare. Datorită acestui lucru, GDB poate găsi mai rapid simbolurile necesare în programele mari, fără a crea separat indexul după construcție. Implementarea suportă a noua versiune a formatului GDB Index; operațiile de scanare, combinare și scriere a indexului au fost paralele.
A fost extins semnificativ suportul pentru scripturile linker-ului. A fost adăugat suport pentru:
- secțiunile /DISCARD/ pentru excluderea secțiunilor de intrare nefolositoare;
- anteturile personalizate ale programelor PHDRS;
- funcțiile SIZEOF_HEADERS, DEFINED și SEGMENT_START;
- cuvântul cheie AT și funcția LOADADDR;
- expresiile condiționale cu operatorul ternar;
- comenzile SORT, SORT_BY_NAME și SORT_BY_ALIGNMENT;
- simbolul __bss_start;
- modelele de umplere a secțiunilor de ieșire;
- comenzile OUTPUT_FORMAT și OUTPUT_ARCH;
- mai multe contoare relative ale adresei curente.
Compatibilitatea deplină cu GNU ld nu a fost încă atinsă. De exemplu, o parte din funcționalitățile comenzii MEMORY, secțiunile OVERLAY și anumiți moduri de amplasare a secțiunilor rămân nefinalizate. Dezvoltatorii mențin separat un tabel al capacităților necesare pentru linkarea nucleului Linux.
Performanța la plasarea rezultatelor construcției pe Btrfs și VFAT a fost îmbunătățită. Wild acum folosește automat modul —no-mmap-output-file și nu mapează fișierul de ieșire în memorie prin mmap. Într-un test realizat de dezvoltator, timpul de linkare a lui Zed pe Btrfs a fost redus de la aproximativ 2,6–2,8 la 1,5–1,8 secunde. Cu toate acestea, autorul modificării avertizează că, chiar și după optimizarea Btrfs, în acest scenariu rămâne semnificativ mai lent decât tmpfs; pentru Ext4 și XFS, utilizarea mmap, dimpotrivă, s-a dovedit a fi mai avantajoasă.
Transferul Wild către alte formate și platforme continuă. Versiunea experimentală pentru WebAssembly poate deja să compună o serie de programe, iar portul pentru Mach-O este capabil să gestioneze cele mai simple fișiere executabile. S-a început lucrul la platformele țintă pe 32 de biți, ceea ce va simplifica ulterior utilizarea Wild în dezvoltarea sistemelor încorporate. De asemenea, s-a adăugat procesarea inițială a fișierelor obiect PowerPC64 ELFv2 și a fost continuat dezvoltarea suportului Mach-O, inclusiv fișierele obiect universale și compunerea directă cu bibliotecile dinamice. Aceste porturi nu trebuie considerate încă gata pentru utilizare cotidiană.
Versiunea de bibliotecă a linkerului libwild poate acum să primească fișiere de intrare și să salveze rezultatul direct în memorie. Aceasta permite altor programe să integreze Wild fără a crea fișiere intermediare pe disc. În plus, biblioteca nu mai suprascrie pool-ul global de thread-uri Rayon, iar suportul pentru compresia Zstandard poate fi dezactivat în timpul compilării.
Versiunea a inclus numeroase corecții pentru x86-64, AArch64, RISC-V și LoongArch64. S-au remediat erorile de procesare TLS, PLT, LTO, informații de depanare comprimate, aliniamente mari și mutări în obiecte PIE și partajate. S-au corectat posibilele închideri necontrolate la analiza scripturilor linker-ului și erorile în formarea secțiunilor .tbss, .strtab și .eh_frame.
Wild suportă Linux pe arhitecturile x86-64, AArch64 și RISC-V; suportul pentru LoongArch64 și PowerPC64LE este marcat momentan ca fiind inițial. Linkerul poate fi instalat din arhive gata făcute, prin cargo-binstall, Homebrew, Nix sau prin comanda cargo install —locked wild-linker. Codul sursă este disponibil la alegerea utilizatorului sub licențele Apache 2.0 sau MIT.
Sursa: linux.org.ru
