Po šestih mesecih razvoja izdaja sistemske biblioteke (glibc) , ki v celoti ustreza zahtevam standardov ISO C11 in POSIX.1-2008. Nova različica vključuje popravke 58 razvijalcev.
Izpeljanih v Glibc 2.31 lahko izpostavimo:
- Dodana je makro _ISOC2X_SOURCE za vključitev zmožnosti, določenih v osnutku prihodnjega standarda ISO . Te zmožnosti se vključijo tudi pri uporabi makra _GNU_SOURCE ali pri prevajanju v gcc s zastavico «-std=gnu2x»;
- Za funkcije, določene v glavi «math.h», ki zaokrožijo svoje rezultate na manjši tip, so v datoteki «tgmath.h» predlagani ustrezni makri splošnega tipa, kot zahtevajo specifikacije TS 18661-1:2014 in TS 18661-3:2015;
- Dodana je funkcija pthread_clockjoin_np(), ki čaka na zaključek niti ob upoštevanju časovne omejitve (če časovna omejitev poteče pred koncem, funkcija vrne napako). V nasprotju z , v pthread_clockjoin_np() je dovoljeno določiti vrsto časovnika za izračun časovne omejitve — CLOCK_MONOTONIC (upošteva čas, preživet v mirovanju sistema) ali CLOCK_REALTIME;
- V DNS-rezolver je dodana podpora za možnost trust-ad v /etc/resolv.conf in zastavico RES_TRUSTAD v _res.options, s katerima se v DNS-poizvedbah izvaja prenos DNSSEC-zastavice (overjeni podatki). V tem načinu ustrezna zastavica AD, ki jo nastavi strežnik, postane dostopna aplikacijam, ki kličejo funkcije, podobne res_search(). Privzeto, če predlagane možnosti niso nastavljene, glibc v poizvedbah ne navaja zastavice AD in jo samodejno izbriše v odgovorih, kar pomeni, da DNSSEC ni bil preverjen;
- Za gradnjo delujočih ovojnic sistemskih klicev za Glibc zdaj ni potrebno namestiti glavni datotek. Iznimka je 64-bitna arhitektura RISC-V;
- Odpravljena , ki omogoča obhod zaščite
ASLR v programih s zastavico setuid in določitev razporeditve naslovov v naloženih knjižnicah preko manipulacije z okoljsko spremenljivko LD_PREFER_MAP_32BIT_EXEC.
Spremembe, ki kršijo združljivost:
- V totalorder(), totalordermag() in podobne funkcije za druge plavajoče tipe zdaj sprejemajo kot argument kazalce, da se preprečijo opozorila o preoblikovanju vrednosti v stanju , v skladu s smernicami TS 18661-1, predlaganimi za prihodnji standard C2X.
Obstoječi izvršni fajlovi, u kojima se argumenti sa pokretnom tačkom prenose direktno, nastaviće da rade bez promena; - Davno objavljena zastarela funkcija stime sada nije dostupna za binarne fajlove povezane sa glibc, a njena definicija je uklonjena iz time.h. Za postavljanje sistemskog vremena trebalo bi koristiti funkciju clock_settime. U budućnosti se planira uklanjanje i oznake kao zastarele funkcije ftime, kao i header fajla sys/timeb.h (umesto ftime treba koristiti gettimeofday ili clock_gettime);
- Funkcija gettimeofday od sada ne prenosi informacije o opštem sistemskom vremenskom pojasu (ova mogućnost je bila relevantna u vreme 4.2-BSD i već dugi niz godina je označena kao zastarela). Argument ‘tzp’ sada treba postaviti na null pokazivač, a za dobijanje informacija o vremenskom pojasu u vezi sa trenutnim vremenom koristiti funkciju localtime(). Kada se poziva gettimeofday sa nenultiranim argumentom ‘tzp’, biće vraćena prazna polja tz_minuteswest i tz_dsttime u strukturi timezone. Sama funkcija gettimeofday se smatra zastarjelom u POSIX (preporučuje se korišćenje clock_gettime umesto gettimeofday), ali njeno uklanjanje iz glibc nije planirano;
- U settimeofday je prestala podrška za simultano prenošenje parametara za postavljanje vremena i ispravku vremenske razlike. Kada se poziva settimeofday, jedan od argumenata (vreme ili pomeraj) sada mora biti postavljen na null, inače će poziv funkcije završiti greškom EINVAL. Kao i gettimeofday, funkcija settimeofday se smatra zastarjelom u POSIX i preporučuje se korišćenje funkcije clock_settime ili porodice funkcija adjtime;
- Prekid podrške za arhitekturu SPARC ISA v7 (podrška za v8 ostaje, ali samo za procesore koji podržavaju CAS instrukcije, kao što su LEON procesori, ali ne i SuperSPARC procesori).
- U slučaju greške pri vezivanju u režimu ““, u kojem linker ne traži simbole funkcije do prvog poziva te funkcije, funkcija dlopen sada primorava prekid rada procesa (ranije je pri grešci vraćan NULL);
- Za ABI MIPS hard-float sada se koristi izvršni stek, osim ako tokom kompilacije nije eksplicitno postavljeno ograničenje na korišćenje jezgra Linuxa 4.8+ kroz parametar “—enable-kernel=4.8.0” (sa jezgrima do 4.8 dolazi do grešaka za neke MIPS konfiguracije);
- Obvestila o sistemskih klicih, povezanih z manipulacijo časa, so bila prenesena na uporabo sistemskega klica time64, kadar je na voljo (na 32-bitnih sistemih glibc najprej poskuša uporabiti nove sistemske klice, ki manipulirajo z 64-bitnim tipom za čas, in če ti niso na voljo, se vrne na stare 32-bitne klice).
Izvor: opennet.ru
