Augusztus 4-én megjelent Wild 0.10 — egy ingyenes linker, amely Rust nyelven készült, és elsősorban a programok gyors összeállítására szolgál Linux alatt. A linker a build utolsó szakaszát végzi: egyesíti az objektumfájlokat és a könyvtárakat a kész végrehajtható fájlhoz vagy megosztott könyvtárhoz. A Wild helyettesítheti a GNU ld, LLD és Mold eszközöket, bár a fejlesztők által kijelölt végső cél az inkrementális linken megvalósítása — jelenleg még nem valósult meg.
Az egyik legfontosabb új funkció a következő paraméterek támogatása lett —gdb-index és —no-gdb-index. Ennek a funkciónak a bekapcsolásával a Wild egy .gdb_index szekciót hoz létre a kimeneti fájlban a hibakeresési információk indexével. Ennek köszönhetően a GDB gyorsabban találhatja meg a szükséges szimbólumokat nagy programokban, anélkül, hogy külön indexet kéne létrehozni a build után. A megvalósítás támogatja a GDB Index kilencedik verzióját; az index olvasási, egyesítési és írási műveleteit párhuzamosították.
Jelentősen kibővült a linker script-ekkel való munka. Fokozották a támogatást:
- a /DISCARD/ szekciók számára, amelyek lehetővé teszik a nem szükséges bemeneti szekciók kizárását;
- felhasználói PHDRS fejlécek számára;
- SIZEOF_HEADERS, DEFINED és SEGMENT_START funkciókra;
- AT kulcsszó és LOADADDR funkció;
- háromágú operátorral ellátott feltételes kifejezésekre;
- SORT, SORT_BY_NAME és SORT_BY_ALIGNMENT parancsokra;
- __bss_start szimbólumra;
- kimeneti szekciók kitöltési mintáira;
- OUTPUT_FORMAT és OUTPUT_ARCH parancsokra;
- több relatív current address számlálóra.
A GNU ld-vel való teljes kompatibilitás továbbra sincs elérve. Például a MEMORY parancs egyes funkciói, az OVERLAY szekciók és néhány szekcióelhelyezési mód befejezetlenek maradtak. A fejlesztők külön nyilvántartanak egy táblázatot azoknak a lehetőségeknek, amelyek szükségesek a Linux kernel linkeléséhez.
Javult a teljesítmény a build eredményeinek Btrfs és VFAT helyezésénél. A Wild most automatikusan használja a —no-mmap-output-file módot, és nem térképezi be a kimeneti fájlt a memóriába mmap-on keresztül. Egy tesztelés során, amelyet a fejlesztő a Btrfs-en végzett, az idő körülbelül 2,6-2,8 másodpercről 1,5-1,8 másodpercre csökkent. A változtatás szerzője azonban figyelmeztet, hogy a Btrfs optimalizálása után is jelentősen lassabb, mint a tmpfs; míg az Ext4 és XFS esetében a mmap használata éppen ellenkezőleg, előnyösebbnek bizonyult.
A Wild további formátumokra és platformokra való portolása folytatódik. A WebAssembly-hez készült kísérleti változat már képes programok összekomponálására, a Mach-O port pedig egyszerű végrehajtható fájlokat generál. Elkezdődött a 32-bites célplatformok fejlesztése, ami a Wild beágyazott rendszerek fejlesztésében való alkalmazását a jövőben megkönnyíti. Emellett a PowerPC64 ELFv2 objektumfájlok kezdeti feldolgozása is hozzá lett adva, és folytatódik a Mach-O támogatás fejlesztése, beleértve az univerzális objektumfájlokat és a dinamikus könyvtárakkal való közvetlen összekonfigurálást. Ezek a portok egyelőre nem tekinthetők mindennapi használatra készen.
A libwild könyvtári változata most már képes közvetlenül a memóriában fogadni a bemeneti fájlokat és elmenteni az eredményt. Ez lehetővé teszi, hogy más programok beágyazzák a Wildot anélkül, hogy kötelező lenne közbenső fájlokat létrehozni a lemezen. Ezenkívül a könyvtár már nem felüldefiniálja a globális Rayon szálálpoolt, és a Zstandard tömörítési támogatás a fordítás során letiltható.
A kiadásba számos javítás került az x86-64, AArch64, RISC-V és LoongArch64 architektúrákhoz. Korrigálták a TLS, PLT, LTO, összenyomott hibakereső információk, nagy kiegyensúlyozás és műveletek kezelésével kapcsolatos hibákat a PIE és megosztott objektumok esetében. Kijavították a leállási hibákat a linker szkriptek elemzésekor, és a .tbss, .strtab és .eh_frame szekciók generálásával kapcsolatos problémákat.
A Wild támogatja a Linuxot x86-64, AArch64 és RISC-V architektúrákon; a LoongArch64 és PowerPC64LE támogatása egyelőre kezdeti szakaszban van. A linker telepíthető előre csomagolt archívumokból, a cargo-binstall, Homebrew, Nix vagy a cargo install —locked wild-linker parancs segítségével. A forráskód felhasználói választás szerint terjeszthető az Apache 2.0 vagy MIT licenc alatt.
Forrás: linux.org.ru
