Hat hónapnyi fejlesztés után a rendszerkönyvtár kiadása (glibc) , amely teljes mértékben megfelel az ISO C11 és a POSIX.1-2008 szabványok követelményeinek. Az új kiadás tartalmazza 58 fejlesztő javításait.
A Glibc 2.31-ben megvalósítottakból kiemelhető:
- Hozzáadva a _ISOC2X_SOURCE makró a jövő ISO szabvány tervezett képességeinek aktiválására . Ezek a lehetőségek szintén aktiválódnak a _GNU_SOURCE makró használatakor, vagy ha a gcc-t a „-std=gnu2x” flaggel fordítják;
- A «math.h» fejlécfájlban meghatározott, kisebb méretű típusra kerekítő függvényekhez a «tgmath.h» fájlban megfelelő típusú makrók javasoltak, ahogyan azt a TS 18661-1:2014 és a TS 18661-3:2015 specifikációk megkövetelik;
- Hozzáadva a pthread_clockjoin_np() függvény, amely figyelembe veszi a határidőt a szál befejezésénél (ha a határidő a befejezés előtt lejár, a függvény hibát ad vissza). Ezzel ellentétben , a pthread_clockjoin_np() lehetővé teszi a határidő számításához használt időmérő típusának meghatározását – CLOCK_MONOTONIC (figyelembe veszi a rendszer alvás közben eltöltött idejét) vagy CLOCK_REALTIME;
- A DNS-kezelo támogatta a trust-ad opciót a /etc/resolv.conf fájlban és a RES_TRUSTAD flaget a _res.options fájlban, amelyek beállításával a DNS-kérelmekben a DNSSEC flag továbbítása történik (hitelesített adatok). Ebben a módban az AD flag, amelyet a szerver beállított, elérhetővé válik az alkalmazások számára, amelyek olyan függvényeket hívnak, mint a res_search(). Alapértelmezés szerint, ha a javasolt opciók nincsenek beállítva, a glibc nem jelzi az AD flaget a kérelmekben és automatikusan törli azt a válaszokban, amely a DNSSEC ellenőrzésének hiányát jelzi;
- A Glibc számára működő rendszerhívás-kötegek építéséhez már nincs szükség a Linux kernel fejlécfájlok telepítésére. Kivételt képez a 64 bites RISC-V architektúra;
- a , amely lehetővé teszi a védelem megkerülését
ASLR a setuid flag miatt és az elérési térkép eloszlásának meghatározását betöltendő könyvtárakban az LD_PREFER_MAP_32BIT_EXEC környezeti változó manipulálásával.
Változások, amelyek megsértik a kompatibilitást:
- A totalorder(), totalordermag() és más hasonló függvények mostantól argumentumként pointer-eket fogadnak el, hogy elkerüljék a figyelmeztetéseket a NaN állapotú értékek átalakításáért A meglévő végrehajtható fájlok, amelyekhez közvetlenül átadják a lebegőpontos argumentumokat, változtatások nélkül továbbra is működnek;
Существующие исполняемые файлы, в которых аргументы с плавающей запятой передаются напрямую, продолжат работать без изменения; - A régóta hirdetett elavult stime függvény mostantól nem elérhető a glibc-hez kötődő bináris fájloknál, és a definiálása eltávolításra került a time.h fájlból. A rendszerek időbeállításához a clock_settime függvényt kell használni. A jövőben tervezik eltávolítani a szintén elavultnak minősített ftime függvényt, valamint a sys/timeb.h fejlécfájlt (a ftime helyett a gettimeofday vagy a clock_gettime használata ajánlott);
- A gettimeofday függvény mostantól nem ad információt az általános rendszeridőzónáról (ez a lehetőség a 4.2-BSD időszakában volt aktuális, és évek óta elavultnak van nyilvánítva). A 'tzp' argumentumban most egy nullpointer-t kell átadni, a jelenlegi időhöz kötődő időzóna-információk megszerzéséhez pedig a localtime() függvényt kell használni. A gettimeofday hívása nullával nem egyenlő 'tzp' argumentumban üres mezők fognak visszatérni az időzóna struktúrában (tz_minuteswest és tz_dsttime). Maga a gettimeofday függvény elavultnak számít a POSIX-ban (a gettimeofday helyett a clock_gettime használata ajánlott), de a glibc-ből való eltávolítása nem várható;
- A settimeofday-ban megszűnt a paraméterek egyidejű átadásának támogatása az idő és az időeltolódás beállításához. A settimeofday hívásakor az egyik argumentumnak (idő vagy eltérés) mostantól kötelezően null értéket kell felvennie, különben a függvényhívás EINVAL hibával végződik. A gettimeofday-hoz hasonlóan a settimeofday függvény is elavultnak számít a POSIX-ban, és a clock_settime vagy adjtime függvénycsalád használata ajánlott helyette;
- Megszűnt a SPARC ISA v7 architektúra támogatása (a v8 támogatása egyelőre megmaradt, de csak azoknál a processzoroknál, amelyek támogatják a CAS utasításokat, mint például a LEON processzorok, de a SuperSPARC processzoroknál nem);
- Ha a "" módú kötés hibát jelez, ahol a linker nem hajt végre keresést a függvény szimbólumai után az első hívásáig, a dlopen mostantól kényszeríti a folyamat végrehajtásának leállítását (korábban a hiba esetén NULL-t adtak vissza);
- Az ABI MIPS hard-float esetén most már végrehajtási verem használatos, hacsak a fordításnál nem állították explicit módon az 4.8+ kernel használatának korlátozását a "--enable-kernel=4.8.0" paraméterrel (4.8 alatti kernel esetén néhány MIPS konfigurációval hibák lépnek fel);
- A rendszerhívásokra vonatkozó kötések, amelyek az idő manipulációjával kapcsolatosak, a time64 rendszerhívás használatára lettek átállítva, ha elérhető (a 32 bites glibc rendszereken először megpróbálja használni az új 64 bites időmanipuláló rendszerhívásokat, ha ezek nem állnak rendelkezésre, akkor visszavált a régi 32 bites hívásokra).
Forrás: opennet.ru
