Po šesti měsících vývoje vydání systémové knihovny (glibc) , který plně vyhovuje požadavkům norem ISO C11 a POSIX.1-2008. Nová verze obsahuje opravy od 58 vývojářů.
Z implementovaných v Glibc 2.31 můžeme zmínit:
- Byl přidán makro _ISOC2X_SOURCE pro zahrnutí funkcí definovaných v návrhové verzi budoucí normy ISO . Tyto funkce jsou také zahrnuty při použití makra _GNU_SOURCE nebo při sestavení v gcc s přepínačem „-std=gnu2x“;
- Pro funkce definované v hlavičkovém souboru „math.h“, které zaokrouhlují své výsledky na typ menší velikosti, byly v souboru „tgmath.h“ navrhnuty odpovídající makra obecného typu, jak vyžadují specifikace TS 18661-1:2014 a TS 18661-3:2015;
- Byla přidána funkce pthread_clockjoin_np(), která čeká na dokončení vlákna s ohledem na časový limit (pokud vyprší časový limit před dokončením, funkce vrátí chybu). Na rozdíl od , v pthread_clockjoin_np() je povoleno definování typu časovače pro výpočet časového limitu — CLOCK_MONOTONIC (zohledňující čas strávený systémem v režimu spánku) nebo CLOCK_REALTIME;
- Do DNS resolveru byla přidána podpora volby trust-ad v /etc/resolv.conf a příznaku RES_TRUSTAD v _res.options, kterými se při DNS dotazech provádí předávání příznaku DNSSEC (ověřená data). V tomto režimu je nastavovaný příznak AD serverem dostupný aplikacím, které volají funkce jako res_search(). Ve výchozím nastavení, pokud nejsou navrženy uvedené volby, glibc nepředává příznak AD v dotazech a automaticky jej čistí v odpovědích, což naznačuje, že DNSSEC není ověřen;
- Pro sestavení fungujících obalů systémových volání pro Glibc již není nutná instalace hlavičkových souborů jádra Linux. Výjimku tvoří 64bitová architektura RISC-V;
- Odstraněna , která umožňuje obejít ochranu
ASLR v programech s příznakem setuid a určit rozložení adres v načítaných knihovnách manipulací s proměnnou prostředí LD_PREFER_MAP_32BIT_EXEC.
Změny, které narušují kompatibilitu:
- V totalorder(), totalordermag() a podobných funkcích pro jiné typy s plovoucí řádovou čárkou nyní přijímají jako argumenty ukazatele, aby se vyloučila varování o konverzních hodnotách ve stavu , v souladu s doporučeními TS 18661-1, navrženými pro budoucí normu C2X.
Existující spustitelné soubory, ve kterých jsou argumenty s plovoucí řádovou čárkou předávány přímo, budou i nadále fungovat bez změn; - Dávno avizovaná zastaralá funkce stime je nyní pro binární soubory spojené s glibc nedostupná a její definice byla odstraněna z time.h. Pro nastavení systémového času by měla být použita funkce clock_settime. V budoucnu se plánuje odstranit také funkci ftime, která je označena jako zastaralá, a hlavičkový soubor sys/timeb.h (místo ftime by se měla používat funkce gettimeofday nebo clock_gettime);
- Funkce gettimeofday nyní nepředává informace o globálním časovém pásmu (tato možnost byla aktuální v době 4.2-BSD a byla mnoho let označena za zastaralou). V argumentu 'tzp' by se nyní měl předat nulový ukazatel, a pro získání informací o časovém pásmu vázaných na aktuální čas by měla být použita funkce localtime(). Při volání gettimeofday s nenulovým argumentem 'tzp' budou vrácena prázdná pole tz_minuteswest a tz_dsttime ve struktuře timezone. Samotná funkce gettimeofday je považována za zastaralou v POSIX (místo gettimeofday se doporučuje používat clock_gettime), ale její odstranění z glibc není plánováno;
- Ve funkci settimeofday byla zastavena podpora současného předání parametrů pro nastavení času a korekce časového posunu. Při volání settimeofday musí být jeden z argumentů (čas nebo posun) nyní povinně nastaven na hodnotu null, jinak bude volání funkce dokončeno chybou EINVAL. Stejně jako gettimeofday je funkce settimeofday považována za zastaralou v POSIX a místo ní se doporučuje použít funkci clock_settime nebo rodinu funkcí adjtime;
- Podpora architektury SPARC ISA v7 byla ukončena (podpora v8 zatím zachována, ale pouze pro procesory s podporou instrukcí CAS, jako jsou procesory LEON, ale nikoli procesory SuperSPARC).
- V případě chyby při vazbě v režimu „„, kdy linker neprovádí hledání symbolů funkce do prvního zavolání této funkce, nyní funkce dlopen násilně ukončuje provádění procesu (dříve byla při chybě vracena NULL);
- Pro ABI MIPS hard-float je nyní používán spouštěcí zásobník, pokud při sestavení není výslovně stanoveno omezení na použití jádra Linux 4.8+ pomocí parametru „—enable-kernel=4.8.0“ (s jádry do 4.8 docházelo k chybám u některých konfigurací MIPS);
- Obalové vrstvy nad systémovými voláními spojenými s manipulací s časem byly převedeny na použití systémového volání time64, pokud je k dispozici (na 32-bitových systémech se glibc nejprve pokouší použít nová systémová volání manipulující s 64-bitovým typem pro čas, a pokud nejsou dostupná, přechází na stará 32-bitová volání).
Zdroj: opennet.ru
