Wild 0.10


Le 4 août, la sortie a eu lieu Wild 0.10 — d'un assembleur libre, écrit en Rust et conçu principalement pour la compilation rapide de programmes sous Linux. L'assembleur exécute la phase finale de l'assemblage : il combine les fichiers objets et les bibliothèques en un fichier exécutable prêt à l'emploi ou une bibliothèque partagée. Wild peut être utilisé comme alternative à GNU ld, LLD et Mold, bien que l'objectif final déclaré par les développeurs soit l'assemblage incrémental — pas encore réalisé.

 

L'une des principales nouveautés est le support des paramètres —gdb-index et —no-gdb-index. En activant cette fonctionnalité, Wild crée dans le fichier de sortie une section .gdb_index avec un index d'informations de débogage. Grâce à cela, GDB peut trouver plus rapidement les symboles nécessaires dans de grands programmes, sans avoir à créer l'index séparément après la compilation. La mise en œuvre prend en charge la neuvième version du format GDB Index ; les opérations de numérisation, de fusion et d'écriture de l'index ont été parallélisées.

 

Le travail avec les scripts d'assemblage a été considérablement élargi. Le support a été ajouté pour :

  • les sections /DISCARD/ pour exclure les sections d'entrée non nécessaires ;
  • les en-têtes de programme personnalisés PHDRS ;
  • les fonctions SIZEOF_HEADERS, DEFINED et SEGMENT_START ;
  • le mot-clé AT et la fonction LOADADDR ;
  • les expressions conditionnelles avec l'opérateur ternaire ;
  • les commandes SORT, SORT_BY_NAME et SORT_BY_ALIGNMENT ;
  • le symbole __bss_start ;
  • les modèles de remplissage des sections de sortie ;
  • les commandes OUTPUT_FORMAT et OUTPUT_ARCH ;
  • plusieurs compteurs relatifs pour l'adresse actuelle.

 

La compatibilité complète avec GNU ld n'a pas encore été atteinte. Par exemple, certaines fonctionnalités de la commande MEMORY, les sections OVERLAY et certaines façons de placer des sections restent incomplètes. Les développeurs tiennent séparément un tableau des fonctionnalités nécessaires pour l'assemblage du noyau Linux.

 

Les performances ont été améliorées lors du placement des résultats de compilation sur Btrfs et VFAT. Wild utilise désormais automatiquement le mode —no-mmap-output-file et ne mappe pas le fichier de sortie en mémoire via mmap. Dans un test effectué par le développeur avec l'assemblage Zed sur Btrfs, le temps est passé d'environ 2,6–2,8 à 1,5–1,8 seconde. Cependant, l'auteur du changement avertit que même après optimisation, Btrfs reste de manière significative plus lent que tmpfs dans ce scénario ; pour Ext4 et XFS, l'utilisation de mmap s'est en revanche avérée plus avantageuse.

Le transfert de Wild vers d'autres formats et plateformes se poursuit. Une version expérimentale pour WebAssembly est déjà capable de lier un certain nombre de programmes, tandis que le port pour Mach-O prend en charge les fichiers exécutables les plus simples. Le travail sur les plateformes cibles 32 bits a été lancé, ce qui devrait faciliter à l'avenir l'utilisation de Wild dans le développement de systèmes embarqués. Un traitement initial des fichiers objets PowerPC64 ELFv2 a également été ajouté et le développement du support Mach-O se poursuit, y compris les fichiers objets universels et la liaison directe avec des bibliothèques dynamiques. Ces ports ne doivent pas encore être considérés comme prêts pour un usage quotidien.

La version bibliothèque du lieur libwild peut désormais recevoir des fichiers d'entrée et enregistrer le résultat directement en mémoire. Cela permet à d'autres programmes d'intégrer Wild sans avoir à créer des fichiers intermédiaires sur le disque. De plus, la bibliothèque ne redéfinit plus le pool global de threads Rayon, et le support de la compression Zstandard peut être désactivé lors de la compilation.

La version comprend de nombreuses corrections pour x86-64, AArch64, RISC-V et LoongArch64. Des bugs dans le traitement de TLS, PLT, LTO, des informations de débogage compressées, des grands alignements et des déplacements dans les objets PIE et partagés ont été corrigés. Des plantages potentiels lors de l'analyse des scripts de linkers et des erreurs dans la formation des sections .tbss, .strtab et .eh_frame ont été résolus.

 

Wild prend en charge Linux sur les architectures x86-64, AArch64 et RISC-V ; le support pour LoongArch64 et PowerPC64LE est pour l'instant considéré comme initial. Le lieur peut être installé à partir d'archives prêtes à l'emploi, via cargo-binstall, Homebrew, Nix ou avec la commande cargo install --locked wild-linker. Le code source est disponible selon le choix de l'utilisateur sous les licences Apache 2.0 ou MIT.

 

Source : linux.org.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster