Wild 0.10


2

Am 4. August fand der Abschluss statt Wild 0.10 — eines freien Linkers, geschrieben in Rust und hauptsächlich für die schnelle Erstellung von Programmen unter Linux gedacht. Der Linker führt den letzten Schritt des Builds aus: 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 — die inkrementelle Linkung — derzeit noch nicht umgesetzt ist.

Eine der Hauptneuheiten ist die Unterstützung der Parameter —gdb-index und —no-gdb-index. Wenn diese Funktion aktiviert ist, erstellt Wild im Ausgabedatei einen Abschnitt .gdb_index mit einem Index für Debugging-Informationen. Dadurch kann GDB schneller die benötigten Symbole in großen Programmen finden, ohne den Index separat nach dem Build zu erstellen. Die Implementierung unterstützt die neunte Version des GDB-Indexformats; die Operationen zum Scannen, Zusammenführen und Schreiben des Index wurden parallelisiert.

Die Arbeit mit Linker-Skripten wurde erheblich erweitert. Es wurde Unterstützung hinzugefügt für:

  • den Abschnitt /DISCARD/ zum Ausschließen unerwünschter Eingabeseiten;
  • benutzerdefinierte Programm-Header PHDRS;
  • die Funktionen SIZEOF_HEADERS, DEFINED und SEGMENT_START;
  • das Schlüsselwort AT und die Funktion LOADADDR;
  • Bedingte Ausdrücke mit dem ternären Operator;
  • die Befehle SORT, SORT_BY_NAME und SORT_BY_ALIGNMENT;
  • das Symbol __bss_start;
  • Muster für das Auffüllen von Ausgabeseiten;
  • die Befehle OUTPUT_FORMAT und OUTPUT_ARCH;
  • mehrere relative Zähler für die aktuelle Adresse.

Eine vollständige Kompatibilität mit GNU ld wurde bisher nicht erreicht. Beispielsweise sind Teile der Funktionen des Befehls MEMORY, Abschnitte OVERLAY und einige Anordnungen von Abschnitten unvollständig. Die Entwickler führen separat eine Tabelle der Funktionen, die für das Linken des Linux-Kernels erforderlich sind.

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

Die Übertragung von Wild auf andere Formate und Plattformen wird fortgesetzt. Die experimentelle Version für WebAssembly kann bereits eine Reihe von Programmen verknüpfen, und der Port für Mach-O ermöglicht einfachste ausführbare Dateien. Die Arbeiten an 32-Bit-Zielplattformen haben begonnen, was die Anwendung von Wild in der Entwicklung eingebetteter Systeme in Zukunft erleichtern sollte. Außerdem wurde die erste Verarbeitung von Objektdateien im PowerPC64 ELFv2-Format hinzugefügt und die Unterstützung für Mach-O erweitert, 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 nun Eingabedateien direkt im Speicher erhalten und das Ergebnis speichern. Dies ermöglicht es anderen Programmen, Wild einzubetten, ohne dass dabei zwingend Zwischenablage-Dateien auf der Festplatte erstellt werden müssen. Darüber hinaus überschreibt die Bibliothek nicht mehr den globalen Thread-Pool von Rayon, und die Unterstützung für Zstandard-Kompression kann während des Builds deaktiviert werden.

Die Veröffentlichung beinhaltete zahlreiche Verbesserungen 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 Linker-Skripten sowie Fehler bei der Erstellung der Abschnitte .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 wird vorläufig als initial eingeordnet. 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 dem Nutzer unter den Lizenzen Apache 2.0 oder MIT bereitgestellt..

Quelle: linux.org.ru

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster