Dopo sei mesi di sviluppo, è stata rilasciata la libreria di sistema GNU C Library (glibc) 2.36, che segue completamente i requisiti degli standard ISO C11 e POSIX.1-2017. La nuova release include correzioni da 59 sviluppatori.
Tra i miglioramenti implementati in Glibc 2.36 si possono notare:
- È stata aggiunta la supporto per il nuovo formato di rilocazione relativa degli indirizzi DT_RELR, che consente di ridurre la dimensione delle rilocazioni relative negli oggetti condivisi e nei file eseguibili, assemblati in modalità PIE (Position-independent executables). Per utilizzare il campo DT_RELR nei file ELF è necessaria la supporto dell'opzione "-z pack-relative-relocs" nel linker, introdotta nella versione del pacchetto binutils 2.38.
- Per la piattaforma Linux sono state implementate le funzioni pidfd_open, pidfd_getfd e pidfd_send_signal, che offrono accesso alla funzionalità pidfd, aiutando a gestire situazioni di riuso del PID per identificare in modo più preciso i processi che accedono ai file monitorati (il pidfd è legato a un processo specifico e non cambia, mentre il PID può essere assegnato a un altro processo dopo la conclusione del processo attuale associato a quel PID).
- Per la piattaforma Linux è stata aggiunta la funzione process_madvise(), che consente a un processo di eseguire la chiamata di sistema madvise() a nome di un altro processo, identificando il processo target tramite pidfd. Attraverso madvise(), è possibile informare il kernel sulle specifiche modalità di utilizzo della memoria per ottimizzare la gestione della memoria del processo; ad esempio, sulla base delle informazioni fornite, il kernel può avviare il rilascio di ulteriore memoria libera. La chiamata madvise() da parte di un altro processo potrebbe essere necessaria quando le informazioni necessarie per l'ottimizzazione non sono conosciute dal processo corrente, ma sono coordinate da un gestore di processo in background separato, che può autonomamente avviare il recupero della memoria non utilizzata dai processi.
- Per la piattaforma Linux è stata aggiunta la funzione process_mrelease(), che consente di accelerare il rilascio della memoria nei processi che stanno completando la loro esecuzione. Normalmente, il rilascio delle risorse e la conclusione del processo non avvengono istantaneamente e possono essere ritardati per vari motivi, rendendo difficile il funzionamento dei sistemi di risposta rapida alle carenze di memoria nello spazio utente, come oomd (fornito in systemd). Con la chiamata a process_mrelease, tali sistemi possono avviare in modo più prevedibile il ritorno della memoria dai processi terminati forzatamente.
- Nell'implementazione integrata del resolver DNS è stata aggiunta la supporto per l'opzione "no-aaaa", che consente di disabilitare l'invio di richieste DNS per record AAAA (risoluzione dell'indirizzo IPv6 tramite nome host) per semplificare la diagnostica dei problemi, anche durante l'esecuzione di funzioni NSS come getaddrinfo(). L'opzione non influisce sulla gestione dei collegamenti agli indirizzi IPv6 definiti in /etc/hosts e sulle chiamate a getaddrinfo() con il flag AI_PASSIVE.
- Per la piattaforma Linux sono state aggiunte le funzioni fsopen, fsmount, move_mount, fsconfig, fspick, open_tree e mount_setattr, che forniscono accesso al nuovo API del kernel per la gestione del montaggio dei file system tenendo conto degli spazi dei nomi dei punti di montaggio (mount namespaces). Le funzioni proposte consentono di elaborare separatamente le diverse fasi di montaggio (gestire il superblocchi, ottenere informazioni sul file system, montare, attaccare al punto di montaggio), che in precedenza venivano eseguite tramite la funzione generale mount(). Funzioni separate permettono di eseguire scenari di montaggio più complessi e di effettuare operazioni come la riconfigurazione del superblocco, l'attivazione delle opzioni, la modifica del punto di montaggio e il trasferimento in un altro spazio dei nomi. Inoltre, la gestione separata consente di identificare esattamente le cause dei codici di errore e di impostare più fonti per i file system multilivello, come overlayfs.
- In localedef è stata implementata la supporto per l'elaborazione dei file con definizioni di locale forniti in codifica UTF-8 invece di ASCII.
- Aggiunte funzioni per la conversione delle codifiche multibyte mbrtoc8 e c8rtomb, conformi alle specifiche ISO C2X N2653 e C++20 P0482R6.
- Aggiunta la supporto per il tipo char8_t, definito nella bozza dello standard ISO C2X N2653.
- Aggiunte le funzioni arc4random, arc4random_buf e arc4random_uniform, che forniscono un'interfaccia sopra la chiamata di sistema getrandom e l'interfaccia /dev/urandom, restituendo numeri casuali pseudo-casuali di alta qualità.
- Sulla piattaforma Linux è stata implementata la supporto per l'architettura del set di istruzioni LoongArch, utilizzata nei processori Loongson 3 5000 e che implementa un nuovo RISC ISA, simile a MIPS e RISC-V. Al momento, è disponibile solo il supporto per la versione a 64 bit di LoongArch (LA64). Per il funzionamento è necessaria almeno la versione 2.38 di binutils, GCC 12 e il kernel Linux 5.19.
- Il meccanismo prelink è stato dichiarato obsoleto e sarà rimosso nel prossimo rilascio, insieme alle variabili d'ambiente LD_TRACE_PRELINKING e LD_USE_LOAD_BIAS e alle funzionalità del linker correlate.
- Rimosso il codice per il controllo della versione del kernel Linux e per la gestione della variabile d'ambiente LD_ASSUME_KERNEL. La versione minima del kernel supportata durante la compilazione di Glibc è determinata tramite il campo ELF NT_GNU_ABI_TAG.
- Il supporto per la variabile d'ambiente LD_LIBRARY_VERSION è stato interrotto sulla piattaforma Linux.
Fonte: opennet.ru
