Wild 0.10


Die Veröffentlichung fand am 4. August statt Wild 0.10 — des freien Linkers, der in Rust geschrieben wurde und insbesondere für die schnelle Erstellung von Programmen unter Linux gedacht ist. Der Linker führt die finale Phase des Builds durch: Er kombiniert Objektdateien und Bibliotheken zu einer ausführbaren Datei oder einer Shared Library. Wild kann als Ersatz für GNU ld, LLD und Mold verwendet werden, obwohl das erklärte Endziel der Entwickler — inkrementelles Linking — derzeit noch nicht umgesetzt ist.

 

Eines der Hauptneuheiten ist die Unterstützung der Parameter —gdb-index und —no-gdb-index. Wenn diese Funktion aktiviert ist, erstellt Wild im Ausgabedatei eine Sektion .gdb_index mit einem Index für Debugginformationen. Dadurch kann GDB benötigte Symbole in großen Programmen schneller finden, ohne einen Index separat nach dem Build zu erstellen. Die Implementierung unterstützt die neunte Version des GDB Index Formats; die Scanning-, Zusammenführungs- und Schreiboperationen des Index wurden parallelisiert.

 

Die Arbeit mit den Scripts des Linkers wurde erheblich erweitert. Folgendes wird nun unterstützt:

  • Sektionen /DISCARD/ zum Ausschließen unnötiger Eingangssektionen;
  • Benutzerdefinierte Programmheader PHDRS;
  • Funktionen SIZEOF_HEADERS, DEFINED und SEGMENT_START;
  • Das Schlüsselwort AT und die Funktion LOADADDR;
  • Bedingte Ausdrücke mit dem ternären Operator;
  • Befehle SORT, SORT_BY_NAME und SORT_BY_ALIGNMENT;
  • das Symbol __bss_start;
  • Vorlagen für das Ausfüllen von Ausgabesections;
  • Befehle OUTPUT_FORMAT und OUTPUT_ARCH;
  • mehrere relative Zähler für die aktuelle Adresse.

 

Komplette Kompatibilität mit GNU ld wurde noch nicht erreicht. Einige Möglichkeiten des Befehls MEMORY, die Sektionen OVERLAY und einige Methoden zur Platzierung von Sektionen sind unvollständig. Die Entwickler führen separat eine Übersicht über die Funktionen, die für das Linken des Linux-Kerns erforderlich sind.

 

Die Leistung beim Platzieren von Build-Ergebnissen auf Btrfs und VFAT wurde verbessert. Wild verwendet jetzt automatisch den Modus —no-mmap-output-file und spiegelt die Ausgabedatei nicht über mmap im Speicher. In einem Test des Entwicklers mit dem Linker Zed auf Btrfs reduzierte sich die Zeit von etwa 2,6–2,8 auf 1,5–1,8 Sekunden. Dabei warnt der Autor der Änderung, dass Btrfs in diesem Szenario, selbst nach der Optimierung, deutlich langsamer bleibt als tmpfs; für Ext4 und XFS war die Verwendung von mmap hingegen vorteilhafter.

Der Transfer von Wild auf andere Formate und Plattformen wird fortgesetzt. Die experimentelle Version für WebAssembly kann bereits eine Reihe von Programmen kompilieren, während der Port für Mach-O einfache ausführbare Dateien unterstützt. Es wurde mit der Arbeit an 32-Bit-Zielplattformen begonnen, was die Anwendung von Wild in der Entwicklung eingebetteter Systeme zukünftig vereinfachen sollte. Außerdem wurde mit der ersten Verarbeitung von Objektdateien im PowerPC64 ELFv2-Format begonnen und die Unterstützung für Mach-O weiterentwickelt, einschließlich universeller Objektdateien und direkter Verknüpfung mit dynamischen Bibliotheken. Diese Ports sollten vorerst nicht als bereit für den täglichen Gebrauch betrachtet werden.

Die Bibliotheksversion des Linkers libwild kann jetzt Eingabedateien entgegennehmen und das Ergebnis direkt im Speicher speichern. Dies ermöglicht anderen Programmen, Wild einzubetten, ohne dafür zwingend Zwischenablage-Dateien auf der Festplatte erstellen zu müssen. Zudem überschreibt die Bibliothek den globalen Thread-Pool Rayon nicht mehr, und die Unterstützung für das Zstandard-Kompressionsformat kann während des Builds deaktiviert werden.

Das Release umfasst zahlreiche Fehlerkorrekturen für x86-64, AArch64, RISC-V und LoongArch64. Fehler bei der Verarbeitung von TLS, PLT, LTO, komprimierten Debugging-Informationen, großen Ausrichtungen und Verschiebungen in PIE- und Shared Objects wurden behoben. Mögliche Abstürze beim Parsen von Linkerskripten sowie Fehler bei der Erstellung der Sektionen .tbss, .strtab und .eh_frame wurden korrigiert.

 

Wild unterstützt Linux auf den Architekturen x86-64, AArch64 und RISC-V; die Unterstützung für LoongArch64 und PowerPC64LE ist derzeit noch als anfänglich gekennzeichnet. Der Linker kann aus vorgefertigten Archiven, über cargo-binstall, Homebrew, Nix oder mit dem Befehl cargo install —locked wild-linker installiert werden. Der Quellcode wird nach Wahl des Benutzers unter den Lizenzen Apache 2.0 oder MIT.

 

Quelle: linux.org.ru

60GB SSD 8Gb DDR4