Publikimi i Bibliotekës së Sistemit Glibc 2.36

Pas gjashtë muajsh zhvillimi, është lëshuar biblioteka e sistemit GNU C Library (glibc) 2.36, e cila përputhet plotësisht me kërkesat e standardeve ISO C11 dhe POSIX.1-2017. Publikimi i ri përfshin rregullime nga 59 zhvillues.

Disa nga përmirësimet e zbatuara në Glibc 2.36 përfshijnë:

  • Mbështetje e shtuar për formatin e ri të zhvendosjes së adresës DT_RELR (zhvendosje relative), i cili ju lejon të zvogëloni madhësinë e zhvendosjeve relative në objektet e përbashkëta dhe skedarët e ekzekutueshëm të lidhur në modalitetin PIE (ekzekutues i pavarur nga pozicioni). Përdorimi i fushës DT_RELR në skedarët ELF kërkon mbështetje për opsionin "-z pack-relative-relocs" në lidhës, i prezantuar në lëshimin e binutils 2.38.
  • Për platformën Linux, funksionet pidfd_open, pidfd_getfd dhe pidfd_send_signal janë implementuar, duke siguruar akses në funksionalitetin pidfd që ndihmon në trajtimin e situatave të ripërdorimit të PID për të identifikuar më saktë proceset që aksesojnë skedarët e monitoruar (pidfd lidhet me një proces specifik dhe nuk ndryshon, ndërsa PID mund t'i bashkëngjiten një procesi tjetër pasi të përfundojë procesi aktual i lidhur me atë PID).
  • Për platformën Linux, funksioni process_madvise() është shtuar për të lejuar një proces të lëshojë thirrjen e sistemit madvise() në emër të një procesi tjetër, duke identifikuar procesin e synuar duke përdorur pidfd. Nëpërmjet madvise(), ju mund të informoni kernelin për veçoritë e punës me kujtesën për të optimizuar menaxhimin e kujtesës së procesit; për shembull, bazuar në informacionin e transmetuar, kerneli mund të inicojë lëshimin e memories shtesë të lirë. Një thirrje për madvise() nga një proces tjetër mund të kërkohet në një situatë ku informacioni i nevojshëm për optimizim është i panjohur për procesin aktual, por koordinohet nga një proces i veçantë kontrolli në sfond, i cili mund të inicojë në mënyrë të pavarur heqjen e memories së papërdorur nga proceset.
  • Për platformën Linux, është shtuar funksioni process_mrelease(), i cili ju lejon të shpejtoni lëshimin e memories për një proces që përfundon ekzekutimin e tij. Në rrethana normale, lëshimi i burimeve dhe përfundimi i procesit nuk janë të menjëhershëm dhe mund të vonohen për arsye të ndryshme, duke ndërhyrë në sistemet e përgjigjes së hershme të kujtesës së hapësirës së përdoruesit, si oomd (të ofruara nga systemd). Duke thirrur process_mrelease, sisteme të tilla mund të nxisin në mënyrë më të parashikueshme rikthimin e memories nga proceset e detyruara.
  • Mbështetja për opsionin "no-aaaa" është shtuar në implementimin e integruar të zgjidhësit DNS, i cili ju lejon të çaktivizoni dërgimin e kërkesave DNS për regjistrimet AAAA (përcaktimi i një adrese IPv6 sipas emrit të hostit), përfshirë kur ekzekutoni NSS funksionon si getaddrinfo(), për të thjeshtuar diagnostikimin e problemit. Ky opsion nuk ndikon në përpunimin e lidhjeve të adresave IPv6 të përcaktuara në /etc/hosts dhe thirrjet në getaddrinfo() me flamurin AI_PASSIVE.
  • Për platformën Linux, janë shtuar funksionet fsopen, fsmount, move_mount, fsconfig, fspick, open_tree dhe mount_setattr, duke siguruar akses në një API të ri të kernelit për menaxhimin e montimit të sistemit të skedarëve bazuar në hapësirat e emrave të montimit. Funksionet e propozuara ju lejojnë të përpunoni veçmas faza të ndryshme të montimit (përpunoni një superbllok, merrni informacione për sistemin e skedarëve, montoni, lidhni në një pikë montimi), të cilat më parë kryheshin duke përdorur funksionin e përbashkët mount(). Funksionet e veçanta ofrojnë mundësinë për të kryer skenarë montimi më komplekse dhe për të kryer veçmas operacione të tilla si rikonfigurimi i superbllokut, aktivizimi i opsioneve, ndryshimi i pikës së montimit dhe kalimi në një hapësirë ​​tjetër emri. Për më tepër, përpunimi i veçantë ju lejon të përcaktoni me saktësi arsyet për daljen e kodeve të gabimit dhe të vendosni burime të shumta për sistemet e skedarëve me shumë shtresa, siç janë mbivendosjet.
  • localedef ofron mbështetje për përpunimin e skedarëve të përkufizimit lokal të dhënë në kodimin UTF-8 në vend të ASCII.
  • Funksione të shtuara për konvertimin e kodimeve me shumë bajt mbrtoc8 dhe c8rtomb në specifikimet ISO C2X N2653 dhe C++20 P0482R6.
  • Mbështetje e shtuar për llojin char8_t të përcaktuar në draft standardin ISO C2X N2653.
  • U shtuan funksionet arc4random, arc4random_buf dhe arc4random_uniform që ofrojnë mbështjellës mbi thirrjen e sistemit getrandom dhe ndërfaqen /dev/urandom që kthejnë numra pseudorandom me cilësi të lartë.
  • Kur funksionon në platformën Linux, ai mbështet arkitekturën e grupit të instruksioneve LoongArch të përdorur në procesorët Loongson 3 5000 dhe zbaton RISC ISA të ri, të ngjashëm me MIPS dhe RISC-V. Në formën e tij aktuale, disponohet vetëm mbështetja për versionin 64-bit të LoongArch (LA64). Për të punuar, ju nevojiten të paktën versione të binutils 2.38, GCC 12 dhe Linux kernel 5.19.
  • Mekanizmi i paralidhjes, si dhe variablat e mjedisit të lidhur LD_TRACE_PRELINKING dhe LD_USE_LOAD_BIAS dhe aftësitë lidhëse, janë vjetëruar dhe do të hiqen në një version të ardhshëm.
  • U hoq kodi për kontrollimin e versionit të kernelit Linux dhe trajtimin e ndryshores së mjedisit LD_ASSUME_KERNEL. Versioni minimal i kernelit të mbështetur gjatë ndërtimit të Glibc përcaktohet përmes fushës ELF NT_GNU_ABI_TAG.
  • Variabli i mjedisit LD_LIBRARY_VERSION është ndërprerë në platformën Linux.

Burimi: opennet.ru

Shto një koment