Wild 0.10


Op 4 augustus vond de release plaats Wild 0.10 — van een vrije linker, geschreven in Rust en bedoeld voor snelle compilatie van programma's in Linux. De linker voert de laatste fase van de compilatie uit: het combineert objectbestanden en bibliotheken in een uitvoerbaar bestand of gedeelde bibliotheek. Wild kan dienen als vervanging voor GNU ld, LLD en Mold, hoewel de door de ontwikkelaars geclaimde uiteindelijke doelstelling — incrementeel linken — nog niet is gerealiseerd.

 

Een van de belangrijkste nieuwigheden is de ondersteuning voor de parameters —gdb-index en —no-gdb-index. Wanneer deze functie is ingeschakeld, maakt Wild een .gdb_index-sectie aan in het uitvoerbestand met een index voor debug-informatie. Hierdoor kan GDB sneller de benodigde symbolen vinden in grote programma's, zonder een index apart na de compilatie te vormen. De implementatie ondersteunt de negende versie van het GDB Index-formaat; de scan-, samenvoeg- en schrijfoperaties van de index zijn parallel uitgevoerd.

 

De mogelijkheden voor het werken met linker-scripts zijn aanzienlijk uitgebreid. Ondersteuning is toegevoegd voor:

  • de sectie /DISCARD/ om onnodige invoersecties uit te sluiten;
  • gebruikersheaders van programma's PHDRS;
  • functies SIZEOF_HEADERS, DEFINED en SEGMENT_START;
  • het trefwoord AT en de functie LOADADDR;
  • voorwaardelijke expressies met de ternaire operator;
  • de commando's SORT, SORT_BY_NAME en SORT_BY_ALIGNMENT;
  • het symbool __bss_start;
  • invulpatronen voor uitvoersecties;
  • de commando's OUTPUT_FORMAT en OUTPUT_ARCH;
  • en verschillende relatieve tellers van het huidige adres.

 

Volledige compatibiliteit met GNU ld is nog niet bereikt. Bijvoorbeeld, een deel van de mogelijkheden van de opdracht MEMORY, de secties OVERLAY en enkele manieren van het plaatsen van secties blijven onafgemaakt. De ontwikkelaars houden apart een lijst bij van de functies die nodig zijn voor het linken van de Linux-kernel.

 

De prestaties bij het plaatsen van de compilatie-resultaten op Btrfs en VFAT zijn verbeterd. Wild gebruikt nu automatisch de modus —no-mmap-output-file en brengt het uitvoerbestand niet in het geheugen via mmap. In een test geval van de ontwikkelaar voor het linken van Zed op Btrfs is de tijd verminderd van ongeveer 2,6–2,8 naar 1,5–1,8 seconden. De auteur van de wijziging waarschuwt echter dat zelfs na optimalisatie Btrfs in dit scenario aanzienlijk trager blijft dan tmpfs; voor Ext4 en XFS bleek het gebruik van mmap daarentegen voordeliger.

De migratie van Wild naar andere formaten en platforms gaat door. De experimentele versie voor WebAssembly kan al een aantal programma's samenvoegen, terwijl de poort voor Mach-O de eenvoudigste uitvoerbare bestanden aan kan. Er is gewerkt aan 32-bits doelsystemen, wat in de toekomst het gebruik van Wild in de ontwikkeling van embedded systemen moet vereenvoudigen. Ook is er een initiële verwerking van objectbestanden PowerPC64 ELFv2 toegevoegd en is de ondersteuning voor Mach-O verder ontwikkeld, inclusief universele objectbestanden en directe koppeling met dynamische bibliotheken. Deze poorten kunnen voorlopig niet als gebruiksklaar worden beschouwd.

De bibliotheekversie van de linker libwild kan nu invoerbestanden ontvangen en de resultaten direct in het geheugen opslaan. Dit maakt het mogelijk voor andere programma's om Wild in te voegen zonder dat er tussenbestanden op schijf moeten worden aangemaakt. Bovendien overschrijft de bibliotheek niet langer de globale threadpool van Rayon, en kan de ondersteuning voor Zstandard-compressie tijdens de build worden uitgeschakeld.

De release bevat tal van bugfixes voor x86-64, AArch64, RISC-V en LoongArch64. Fouten bij de verwerking van TLS, PLT, LTO, gecomprimeerde debug-informatie, grote uitlijningen en verplaatsingen in PIE- en gedeelde objecten zijn verholpen. Ook zijn mogelijke crashes tijdens het parseren van linker scripts en fouten bij het aanmaken van de secties .tbss, .strtab en .eh_frame gecorrigeerd.

 

Wild ondersteunt Linux op de architecturen x86-64, AArch64 en RISC-V; de ondersteuning voor LoongArch64 en PowerPC64LE wordt momenteel als experimenteel aangeduid. De linker kan worden geïnstalleerd vanuit kant-en-klare archieven, via cargo-binstall, Homebrew, Nix, of met de opdracht cargo install --locked wild-linker. De broncode is beschikbaar voor de gebruiker onder de licenties Apache 2.0 of MIT.

 

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster