Glibc 2.36 Systembibliotheksversion

Nach sechs Monaten Entwicklungszeit wurde die Systembibliothek GNU C Library (glibc) 2.36 veröffentlicht, die vollständig den Anforderungen der Standards ISO C11 und POSIX.1-2017 entspricht. Die neue Version enthält Korrekturen von 59 Entwicklern.

Zu den in Glibc 2.36 implementierten Verbesserungen gehören:

  • Unterstützung für das neue Adressverschiebungsformat DT_RELR (Relative Relocation) hinzugefügt, mit dem Sie die Größe relativer Verschiebungen in gemeinsam genutzten Objekten und ausführbaren Dateien reduzieren können, die im PIE-Modus (Positionsunabhängige ausführbare Dateien) verknüpft sind. Die Verwendung des DT_RELR-Felds in ELF-Dateien erfordert Unterstützung für die Option „-z pack-relative-relocs“ im Linker, die in der Veröffentlichung von Binutils 2.38 eingeführt wurde.
  • Für die Linux-Plattform sind die Funktionen pidfd_open, pidfd_getfd und pidfd_send_signal implementiert, die Zugriff auf die pidfd-Funktionalität bieten, die bei der Handhabung von PID-Wiederverwendungssituationen hilft, um Prozesse, die auf überwachte Dateien zugreifen, genauer zu identifizieren (pidfd ist einem bestimmten Prozess zugeordnet und ändert sich nicht, während PID dies kann). an einen anderen Prozess angehängt werden, nachdem der aktuelle Prozess, der dieser PID zugeordnet ist, beendet wird.
  • Für die Linux-Plattform wurde die Funktion „process_madvise()“ hinzugefügt, damit ein Prozess den Systemaufruf „madvise()“ im Namen eines anderen Prozesses ausgeben und den Zielprozess mithilfe von pidfd identifizieren kann. Über madvise() können Sie den Kernel über die Funktionen der Arbeit mit Speicher informieren, um die Prozessspeicherverwaltung zu optimieren; basierend auf den übermittelten Informationen kann der Kernel beispielsweise die Freigabe von zusätzlichem freien Speicher veranlassen. Ein Aufruf von madvise() durch einen anderen Prozess kann in einer Situation erforderlich sein, in der die für die Optimierung benötigten Informationen dem aktuellen Prozess unbekannt sind, aber von einem separaten Hintergrundsteuerungsprozess koordiniert werden, der unabhängig die Entfernung von ungenutztem Speicher aus Prozessen initiieren kann.
  • Für die Linux-Plattform wurde die Funktion „process_mrelease()“ hinzugefügt, mit der Sie die Speicherfreigabe für einen Prozess, der seine Ausführung abschließt, beschleunigen können. Unter normalen Umständen erfolgen die Ressourcenfreigabe und die Prozessbeendigung nicht sofort und können aus verschiedenen Gründen verzögert werden, was zu Störungen bei Frühreaktionssystemen für den Benutzerraumspeicher wie oomd (bereitgestellt von systemd) führen kann. Durch den Aufruf von „process_mrelease“ können solche Systeme die Rückgewinnung von Speicher aus erzwungenen Prozessen vorhersehbarer auslösen.
  • Der integrierten Implementierung des DNS-Resolvers wurde Unterstützung für die Option „no-aaaa“ hinzugefügt, mit der Sie das Senden von DNS-Abfragen für AAAA-Einträge (Ermitteln einer IPv6-Adresse anhand des Hostnamens) deaktivieren können, auch bei der Ausführung von NSS Funktionen wie getaddrinfo(), um die Problemdiagnose zu vereinfachen. Diese Option hat keinen Einfluss auf die Verarbeitung von IPv6-Adressbindungen, die in /etc/hosts definiert sind, und auf Aufrufe von getaddrinfo() mit dem AI_PASSIVE-Flag.
  • Für die Linux-Plattform wurden die Funktionen fsopen, fsmount, move_mount, fsconfig, fspick, open_tree und mount_setattr hinzugefügt, die Zugriff auf eine neue Kernel-API für die Verwaltung des Dateisystem-Mountings basierend auf Mount-Namespaces bieten. Mit den vorgeschlagenen Funktionen können Sie verschiedene Phasen des Mountens (Verarbeiten eines Superblocks, Abrufen von Informationen über das Dateisystem, Mounten, Anhängen an einen Mountpunkt) separat verarbeiten, die zuvor mit der allgemeinen Funktion mount() ausgeführt wurden. Separate Funktionen bieten die Möglichkeit, komplexere Mount-Szenarien durchzuführen und Vorgänge wie die Neukonfiguration des Superblocks, das Aktivieren von Optionen, das Ändern des Mount-Punkts und das Verschieben in einen anderen Namespace separat auszuführen. Darüber hinaus können Sie durch die separate Verarbeitung die Gründe für die Ausgabe von Fehlercodes genau bestimmen und mehrere Quellen für mehrschichtige Dateisysteme wie OverlayFS festlegen.
  • localedef bietet Unterstützung für die Verarbeitung von Gebietsschemadefinitionsdateien, die in UTF-8-Kodierung anstelle von ASCII bereitgestellt werden.
  • Funktionen zum Konvertieren von Multibyte-mbrtoc8- und c8rtomb-Kodierungen in die Spezifikationen ISO C2X N2653 und C++20 P0482R6 hinzugefügt.
  • Unterstützung für den Typ char8_t hinzugefügt, der im Entwurf des ISO C2X N2653-Standards definiert ist.
  • Funktionen arc4random, arc4random_buf und arc4random_uniform hinzugefügt, die Wrapper über den Systemaufruf getrandom und die Schnittstelle /dev/urandom bereitstellen, die hochwertige Pseudozufallszahlen zurückgeben.
  • Bei der Ausführung auf der Linux-Plattform unterstützt es die LoongArch-Befehlssatzarchitektur, die in den Loongson 3 5000-Prozessoren verwendet wird, und implementiert das neue RISC ISA, ähnlich wie MIPS und RISC-V. In der aktuellen Form ist nur Unterstützung für die 64-Bit-Version von LoongArch (LA64) verfügbar. Um zu funktionieren, benötigen Sie mindestens die Versionen binutils 2.38, GCC 12 und Linux Kernel 5.19.
  • Der Prelink-Mechanismus sowie die zugehörigen Umgebungsvariablen LD_TRACE_PRELINKING und LD_USE_LOAD_BIAS und Linkerfunktionen sind veraltet und werden in einer zukünftigen Version entfernt.
  • Code zum Überprüfen der Linux-Kernelversion und zum Umgang mit der Umgebungsvariablen LD_ASSUME_KERNEL entfernt. Die beim Erstellen von Glibc unterstützte Mindestversion des Kernels wird durch das ELF-Feld NT_GNU_ABI_TAG bestimmt.
  • Die Umgebungsvariable LD_LIBRARY_VERSION wurde auf der Linux-Plattform nicht mehr unterstützt.

Source: opennet.ru

Kommentar hinzufügen