Hat hónappal a fejlesztés után megjelent a GNU C Library (glibc) 2.36 verziója, amely teljes mértékben megfelel az ISO C11 és POSIX.1-2017 szabványok követelményeinek. Az új kiadás 59 fejlesztő javításait tartalmazza.
A Glibc 2.36-ban megvalósított fejlesztések közül kiemelendő:
- Új relatív címkeformátum támogatása került hozzáadásra a DT_RELR (relatív áthelyezés) révén, amely csökkenti a relatív áthelyezések méretét osztott fájlokban és végrehajtható állományokban, amelyeket PIE (pozíciófüggetlen végrehajthatók) módban állítottak össze. A DT_RELR mező használatához az ELF fájlokban a binutils 2.38 kiadásban megjelent „-z pack-relative-relocs” opció funkcionalitása szükséges a linkelőben.
- Linux platformra megvalósításra került a pidfd_open, pidfd_getfd és pidfd_send_signal funkciók, amelyek hozzáférést biztosítanak a pidfd funkcióhoz, amely segít kezelni a PID újrafelhasználásával kapcsolatos helyzeteket a folyamatok pontosabb azonosítása érdekében, amikor nyomon követett fájlokhoz férnek hozzá (a pidfd egy adott folyamathoz kapcsolódik, és nem változik, míg a PID egy másik folyamathoz is kapcsolódhat a jelenlegi folyamat befejezését követően, amely hozzárendelve volt ehhez a PID-hez).
- Linux platformra hozzáadva a process_madvise() funkció, amely lehetővé teszi egy folyamat számára, hogy egy másik folyamat nevében madvise() rendszerhívást végezzen, a célfolyamatot pidfd segítségével azonosítva. A madvise() lehetőséget biztosít arra, hogy a kernel értesüljön a memóriahasználati szokásokról a memória kezelésének optimalizálása érdekében, például a megadott információk alapján a kernel kezdeményezheti az extra szabad memória felszabadítását. A madvise() másik folyamat általi hívására abban az esetben lehet szükség, amikor az optimalizáláshoz szükséges információk ismeretlenek a folyamat számára, és egy külön háttérkezelő folyamat koordinálja, amely önállóan kezdeményezheti a nem használt memória visszavonását a folyamatoktól.
- A Linux platformhoz hozzáadva a process_mrelease() funkcionalitás, amely felgyorsítja a memória felszabadítását a végrehajtást befejező folyamatok esetében. Normál körülmények között az erőforrások felszabadítása és a folyamatok befejezése nem azonnali, és különböző okok miatt késlekedhet, ami zavarhatja a felhasználói térben működő, korai memóriahiányos reakciós rendszerek működését, mint például az oomd (amely a systemd részét képezi). A process_mrelease hívásával az ilyen rendszerek kiszámíthatóbban kezdeményezhetik a memória visszaadását a kényszerített befejezés alatt álló folyamatoktól.
- A beépített DNS-lezáró implementációjához hozzáadva a „no-aaaa” opció támogatása, amely lehetővé teszi a DNS-keresések kéréseinek letiltását az AAAA rekordok (IPv6 címek hoszt név alapján történő meghatározása) esetében, ezzel megkönnyítve a problémák diagnosztizálását. Ez vonatkozik az NSS-funkciókra is, például a getaddrinfo() hívásra. Az opció nem befolyásolja az IPv6 címekhez tartozó kötéseket, amelyek az /etc/hosts fájlban vannak, valamint a getaddrinfo() AI_PASSIVE zászlóval való hívásait.
- A Linux platformhoz hozzáadva az fsopen, fsmount, move_mount, fsconfig, fspick, open_tree és mount_setattr funkciók, amelyek hozzáférést biztosítanak egy új kernel API-hoz a fájlrendszerek csatolásának kezelésére a csatolási névrendszerek (mount namespaces) figyelembevételével. Az általam javasolt funkciók lehetővé teszik a csatolás különböző szakaszainak szétválasztott kezelését (szuperblokk feldolgozása, fájlrendszer információk megszerzése, csatlakozás, csatolás a csatolási pontra), amelyek korábban a mount() általános funkció segítségével valósultak meg. A különálló funkciók lehetőséget biztosítanak bonyolultabb csatolási forgatókönyvek végrehajtására, és lehetővé teszik olyan műveletek külön elvégzését is, mint a szuperblokk újrakonfigurálása, opciók aktiválása, csatolási pont módosítása és áttelepítés más névrendszerbe. Ezen kívül a különálló feldolgozás pontosan meghatározhatja a hiba kódok kibocsátásának okait, és több forrást adhat meg a több rétegű fájlrendszerek (például overlayfs) számára.
- A localedef megvalósította a nyelvi definíciós fájlok kezelésének támogatását, amelyek UTF-8 kódolásban érkeznek az ASCII helyett.
- Új funkciók kerültek hozzáadásra a több bájt kódolások mbrtoc8 és c8rtomb átalakításához, amelyek megfelelnek az ISO C2X N2653 és C++20 P0482R6 specifikációknak.
- Hozzáadva a char8_t típus támogatása, amelyet az ISO C2X N2653 szabvány tervezete határoz meg.
- Megjelentek az arc4random, arc4random_buf és arc4random_uniform funkciók, amelyek a getrandom rendszerhívás és a /dev/urandom interfész köré épülnek, és magas minőségű álkiválasztott számokat adnak vissza.
- Linux platformon megvalósult a LoongArch utasításkészlet architektúrájának támogatása, amely a Loongson 3 5000 processzorokban található, és egy új RISC ISA-t valósít meg, amely hasonlít a MIPS-re és RISC-V-re. Jelenleg csak a 64-bites LoongArch (LA64) támogatása érhető el. Legalább 2.38-as verziójú binutils, 12-es GCC és 5.19-es Linux kernel szükséges a működéshez.
- A prelink mechanizmus elavultnak nyilvánítva, és a következő kiadásban eltávolításra kerül, valamint a kapcsolódó LD_TRACE_PRELINKING és LD_USE_LOAD_BIAS környezeti változók és a linker funkciók.
- Eltávolításra került a Linux kernel verzióellenőrzéséért és az LD_ASSUME_KERNEL környezeti változó kezeléséért felelős kód. A Glibc fordításakor a minimálisan támogatott kernel verzió az ELF NT_GNU_ABI_TAG mező alapján van meghatározva.
- A Linux platformon megszűnt a LD_LIBRARY_VERSION környezeti változó támogatása.
Forrás: opennet.ru
