Nach sechs Monaten Entwicklungszeit Release der Systembibliothek (glibc) , die vollständig den Anforderungen der Standards ISO C11 und POSIX.1-2008 entspricht. In die neue Version wurden Korrekturen von 58 Entwicklern aufgenommen.
Zu den in Glibc 2.31 umgesetzten gehören:
- Der Makro _ISOC2X_SOURCE wurde hinzugefügt, um die Funktionen zu aktivieren, die im Entwurf des zukünftigen ISO-Standards definiert sind . Diese Funktionen werden auch aktiviert, wenn der Makro _GNU_SOURCE verwendet wird oder beim Kompilieren mit gcc mit dem Flag „-std=gnu2x“;
- Für bestimmte Funktionen, die im Header „math.h“ definiert sind und ihre Ergebnisse auf einen kleineren Datentyp runden, werden im Datei „tgmath.h“ entsprechende Makros für generische Typen angeboten, wie es die Spezifikationen TS 18661-1:2014 und TS 18661-3:2015 erfordern;
- Die Funktion pthread_clockjoin_np() wurde hinzugefügt, die das Warten auf den Abschluss eines Threads unter Berücksichtigung eines Zeitlimits ermöglicht (tritt das Zeitlimit vor dem Abschluss ein, gibt die Funktion einen Fehler zurück). Im Gegensatz zu , erlaubt pthread_clockjoin_np() die Festlegung des Timer-Typs zur Berechnung des Zeitlimits — CLOCK_MONOTONIC (bezieht die vom System verbrachte Zeit im Schlafmodus ein) oder CLOCK_REALTIME;
- Im DNS-Resolver wurde Unterstützung für die Option trust-ad in /etc/resolv.conf und das Flag RES_TRUSTAD in _res.options hinzugefügt, wodurch in DNS-Anfragen das DNSSEC-Flag (authentifizierte Daten) übertragen wird. In diesem Modus wird das vom Server festgelegte AD-Flag für Anwendungen verfügbar, die Funktionen wie res_search() aufrufen. Standardmäßig gibt glibc das AD-Flag in Anfragen nicht an, wenn die angegebenen Optionen nicht gesetzt sind, und entfernt es in Antworten automatisch, was auf fehlende DNSSEC-Überprüfung hinweist;
- Um funktionierende Wrapper für Systemaufrufe für Glibc zu erstellen, ist jetzt keine Installation der Header-Dateien des Linux-Kernels erforderlich. Dies gilt nicht für die 64-Bit-Architektur RISC-V;
- Beseitigt , die einen Schutz umgehen kann
ASLR in Programmen mit dem Flag setuid und die Layouts von Adressen in geladenen Bibliotheken durch Manipulation der Umgebungsvariable LD_PREFER_MAP_32BIT_EXEC bestimmen kann.
Änderungen, die die Kompatibilität beeinträchtigen:
- In totalorder(), totalordermag() und ähnlichen Funktionen für andere Typen mit Fließkomma wird jetzt erwartet, dass Zeiger übergeben werden, um Warnungen über die Umwandlung von Werten in den Zustand , gemäß den Empfehlungen TS 18661-1, die für den zukünftigen Standard C2X vorgeschlagen wurden.
Vorhandene ausführbare Dateien, in denen Gleitkomma-Argumente direkt übergeben werden, werden weiterhin unverändert funktionieren; - Die seit langem als veraltet deklarierte Funktion stime ist nun für mit glibc gebundene Binärdateien nicht mehr verfügbar, und ihre Definition wurde aus time.h entfernt. Zur Einstellung der Systemzeit sollte die Funktion clock_settime verwendet werden. Zukünftig wird auch die als veraltet gekennzeichnete Funktion ftime sowie die Header-Datei sys/timeb.h entfernt (anstatt ftime sollten gettimeofday oder clock_gettime verwendet werden);
- Die Funktion gettimeofday überträgt nun keine Informationen über die allgemeine Zeitzone mehr (diese Möglichkeit war zu Zeiten von 4.2-BSD relevant und seit vielen Jahren als veraltet markiert). Im Argument 'tzp' sollte nun ein Nullzeiger übergeben werden, und um Informationen über die Zeitzone in Bezug auf die aktuelle Zeit zu erhalten, sollte die Funktion localtime() verwendet werden. Bei einem Aufruf von gettimeofday mit einem nicht-null Argument 'tzp' werden die Felder tz_minuteswest und tz_dsttime in der Struktur timezone leer zurückgegeben. Die Funktion gettimeofday wird in POSIX als veraltet angesehen (anstatt gettimeofday sollte clock_gettime verwendet werden), aber eine Entfernung aus glibc ist nicht geplant;
- In settimeofday wurde die Unterstützung für die gleichzeitige Übertragung von Parametern zur Einstellung der Zeit und der Korrektur des Zeitversatzes eingestellt. Bei einem Aufruf von settimeofday muss einer der Argumente (Zeit oder Offset) jetzt unbedingt auf null gesetzt werden, andernfalls wird der Funktionsaufruf mit dem Fehler EINVAL abgeschlossen. Wie gettimeofday wird die Funktion settimeofday in POSIX als veraltet angesehen und an ihrer Stelle wird empfohlen, die Funktion clock_settime oder die Familie der Funktionen adjtime zu verwenden;
- Die Unterstützung der Architektur SPARC ISA v7 wurde eingestellt (die Unterstützung von v8 bleibt vorerst erhalten, jedoch nur für Prozessoren mit Unterstützung für CAS-Befehle, wie die LEON-Prozessoren, nicht jedoch für die SuperSPARC-Prozessoren).
- Im Falle eines Bindungsfehlers im Modus ««, bei dem der Linker die Funktionssymbole bis zum ersten Aufruf dieser Funktion nicht sucht, sorgt die Funktion dlopen jetzt dafür, dass der Prozess zwangsweise beendet wird (früher gab es bei einem Fehler NULL zurück);
- Für ABI MIPS hard-float wird nun ein ausführbarer Stack verwendet, es sei denn, während des Builds wurde ausdrücklich eine Einschränkung für die Verwendung des Kernels Linux 4.8+ über die Option «—enable-kernel=4.8.0» angegeben (bei Kernen bis 4.8 treten bei bestimmten MIPS-Konfigurationen Fehler auf);
- Die Umgebungen über die Systemaufrufe zur Zeitmanipulation wurden auf die Verwendung des Systemaufrufs time64 umgestellt, sofern dieser verfügbar ist (auf 32-Bit-Systemen versucht glibc zunächst, neue Systemaufrufe zu verwenden, die den 64-Bit-Typ für die Zeit manipulieren, und falls diese nicht vorhanden sind, wird auf die alten 32-Bit-Aufrufe zurückgegriffen).
Quelle: opennet.ru
