C-Library: glibc 2.34 überführt bewährte Funktionalitäten in die Hauptbibliothek

Die bislang in libpthread, libdl, libutil und libanl implementierten Fertigkeiten hat das glibc-Team direkt in die C-Library integriert.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 4 Min.
Von
  • Silke Hahn
Inhaltsverzeichnis

Das Team hinter der GNU C Library (glibc) hat ihr halbjährlich erscheinendes Release pünktlich herausgebracht: Version 2.34 ist verfügbar. Nach der kürzlich erfolgten Liberalisierung der Copyright-Policy für glibc-Kontributoren erfolgt damit ein technisches Update. Wichtigste Neuerung ist eine Vereinfachung und Vereinheitlichung zahlreicher Funktionen, die bislang auf verschiedene Unterbibliotheken verstreut waren.

Laut Ankündigung in der Mailingliste Libc Alpha geht es dabei um die Libraries libpthread, libdl, libutil und libanl: Die bislang von ihnen bereitgestellten Features sind ab sofort Bestandteil der Hauptbibliothek libc. Für neue Projekte entfällt somit das Verlinken von -lpthread, -ldl, -lutil und -lanl. Um die Abwärtskompatibilität zu gewährleisten, hat das C-Library-Team eine Reihe statischer Archive eingerichtet, mit denen die Linker-Optionen älterer Anwendungen weiterhin funktionieren sollen. Laut Mailinglisteneintrag ermöglichen die statischen Archive libpthread.a, libdl.a, libutil.a und libanl.a den Anwendungen, die auf glibc 2.33 oder eine frühere Version zugreifen, geteilte Objekte weiterhin zu laden.

Bei der Integration der genannten Libraries in die C-Library können Applikationen, die lediglich schwache Referenzierungen verwenden, fallweise offenbar unerwartete Codepfade aus früheren glibc-Versionen beschreiten. Das liegt laut Mitteilung des Entwicklungsteams daran, dass beim Integrieren zusätzliche Symbole als Default verfügbar sind. Ein Beispiel sei das Preloading von libpthread.so.0, wobei es unter Umständen zu Anwendungsfehlern kommt. Ein Nachhärten der Referenzen sollte das Problem lösen, sofern es überhaupt auftritt.

Der dynamische Linker implementiert neuerdings die Option --list-diagnostics, mit der Entwicklerinnen und Entwickler einen Speicherauszug mit Informationen zum IFUNC-Resolver erstellen sowie eine Auswahl aus dem Unterverzeichnis glibc-hwcaps ausdrucken können. Zudem lassen sich dynamisch dimensionierte Register-Sets für Architektur-Features wie ARM SVE verwenden: Sobald _DYNAMIC_STACK_SIZE_SOURCE beziehungsweise _GNU_SOURCE definiert sind, wird PTHREAD_STACK_MIN inkonsistent und automatisch umdefiniert zu sysconf(_SC_THREAD_STACK_MIN). Eine neue glibc-Einstellung unter Linux erlaubt es zudem, die Größe des Thread Stack Cache zu konfigurieren: Laut Ankündigung ist das mit glibc.pthread.stack_cache_size möglich.

Neu hinzugekommen ist die ISO-C2x-Funktion timespec_getres, die mit der nächsten Version des C-Standards (voraussichtlich C23 im übernächsten Jahr) kompatibel sein soll. Erwähnenswert ist zudem die Unterstützung für time_t-Konfigurationen in 64-bit. Obwohl die Standardkonfiguration nach wie vor 32-bit sind, könnte sich das in künftigen Versionen ändern. Das Präprozessor-Makro [_TIME_BITS/code] lässt sich auf 64 setzen, zugleich muss man auch [code]LFS (_FILE_OFFSET_BITS=64) aktivieren. Diese Funktion steht nur für Linux zur Verfügung und erfordert einen Kernel ab der Version 5.1.

Ebenfalls für Linux ist die Funktion close_range hinzugekommen, die das Schließen einer Reihe von File Descriptors auf neueren Kernels (ab Version 5.9) erlaubt. _Fork beerbt den bisherigen [code][async-signal-safe/code] Fork, der mit der aktuellen Version entfällt, und einige neue Linker-Diagnostik-Features sind mit an Bord: So erlauben HWCAPS und ähnliche Funktionen laut glibc-Team das Optimieren von Library-Versionen zum Bereitstellen auf Linux-Systemen.

Alle weiteren der zahlreichen Neuerungen sowie eine Liste der Bugfixes, veralteten und entfernten Features lassen sich dem Eintrag zu GNU C Library 2.34 in der Mailingliste Libc Alpha entnehmen. Die GNU C Library soll wie bisher mit den kommenden Aktualisierungen der Linux-Distributionen Verbreitung finden. Wer darauf nicht warten möchte, kann sich bereits an einer der öffentlichen Downloadquellen bedienen und die Pakete ab sofort herunterladen.

(sih)