Wild 0.10


Il 4 agosto si è tenuta la laurea Wild 0.10 di un linker libero, scritto in Rust e progettato principalmente per una rapida assemblaggio di programmi in Linux. Il linker esegue l'ultima fase dell'assemblaggio: unisce i file oggetto e le librerie in un file eseguibile pronto o in una libreria condivisa. Wild può essere utilizzato come sostituto di GNU ld, LLD e Mold, anche se l'obiettivo finale dichiarato dagli sviluppatori è il linking incrementale - non è ancora implementato.

 

Una delle principali novità è stata il supporto per i parametri --gdb-index e --no-gdb-index. Attivando questa funzionalità, Wild crea nel file di output una sezione .gdb_index con l'indice delle informazioni di debug. Grazie a ciò, GDB può trovare più rapidamente i simboli necessari in programmi di grandi dimensioni, senza dover creare l'indice separatamente dopo l'assemblaggio. L'implementazione supporta la nona versione del formato GDB Index; le operazioni di scansione, unione e scrittura dell'indice sono state paralleli.

 

È stata notevolmente ampliata la gestione degli script del linker. È stato aggiunto il supporto per:

  • sezioni /DISCARD/ per escludere le sezioni di input non necessarie;
  • header personalizzati dei programmi PHDRS;
  • funzioni SIZEOF_HEADERS, DEFINED e SEGMENT_START;
  • la parola chiave AT e la funzione LOADADDR;
  • espressioni condizionali con l'operatore ternario;
  • comandi SORT, SORT_BY_NAME e SORT_BY_ALIGNMENT;
  • il simbolo __bss_start;
  • modelli di riempimento delle sezioni di output;
  • comandi OUTPUT_FORMAT e OUTPUT_ARCH;
  • alcuni contatori relativi dell'indirizzo corrente.

 

La piena compatibilità con GNU ld non è ancora stata raggiunta. Ad esempio, alcune funzionalità del comando MEMORY, le sezioni OVERLAY e alcuni metodi di posizionamento delle sezioni rimangono incompleti. Gli sviluppatori conducono separatamente una lista delle funzionalità necessarie per il linking del kernel Linux.

 

È migliorata la performance nel posizionamento dei risultati dell'assemblaggio su Btrfs e VFAT. Wild ora utilizza automaticamente la modalità --no-mmap-output-file e non mappa il file di output in memoria tramite mmap. In un test condotto dallo sviluppatore sul linking di Zed su Btrfs, il tempo è stato ridotto da circa 2,6–2,8 secondi a 1,5–1,8 secondi. Tuttavia, l'autore della modifica avverte che anche dopo l'ottimizzazione Btrfs in questo scenario rimane significativamente più lento di tmpfs; per Ext4 e XFS, l'uso di mmap, al contrario, si è rivelato più vantaggioso.

Il trasferimento di Wild su altri formati e piattaforme continua. La versione sperimentale per WebAssembly è già in grado di gestire un certo numero di applicazioni, mentre il porting per Mach-O è per file eseguibili semplici. È iniziato il lavoro sulle piattaforme target a 32 bit, il che dovrebbe semplificare in futuro l'uso di Wild nello sviluppo di sistemi integrati. Inoltre, è stata aggiunta la gestione iniziale dei file oggetto PowerPC64 ELFv2 e è continuato lo sviluppo del supporto per Mach-O, inclusi i file oggetto universali e il linking diretto con librerie dinamiche. Questi porting non dovrebbero essere ancora considerati pronti per l'uso quotidiano.

La versione di libreria del linker libwild ora può ricevere file di input e salvare il risultato direttamente in memoria. Questo consente ad altre applicazioni di integrare Wild senza la necessità di creare file intermedi su disco. Inoltre, la libreria non sovrascrive più il pool globale di thread Rayon e il supporto per la compressione Zstandard può essere disabilitato durante la costruzione.

Il rilascio include numerosi correttivi per x86-64, AArch64, RISC-V e LoongArch64. Sono stati risolti errori di gestione di TLS, PLT, LTO, informazioni di debug compresse, grandi allineamenti e spostamenti in oggetti PIE e condivisi. Sono stati corretti potenziali arresti anomali durante l'analisi degli script del linker e errori nella creazione delle sezioni .tbss, .strtab e .eh_frame.

 

Wild supporta Linux su architetture x86-64, AArch64 e RISC-V; il supporto per LoongArch64 e PowerPC64LE è attualmente indicato come iniziale. È possibile installare il linker da archivi preconfezionati, tramite cargo-binstall, Homebrew, Nix o con il comando cargo install —locked wild-linker. Il codice sorgente è distribuito a scelta dell'utente sotto licenze Apache 2.0 o MIT.

 

Fonte: linux.org.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster