Rilascio della libreria di sistema Glibc 2.36

Dopo sei mesi di sviluppo è stata rilasciata la libreria di sistema GNU C Library (glibc) 2.36, che è pienamente conforme ai requisiti degli standard ISO C11 e POSIX.1-2017. La nuova versione include correzioni di 59 sviluppatori.

Alcuni dei miglioramenti implementati in Glibc 2.36 includono:

  • Aggiunto il supporto per il nuovo formato di rilocazione degli indirizzi DT_RELR (relative relocation), che consente di ridurre la dimensione dei relativi rilocazioni negli oggetti condivisi e nei file eseguibili collegati in modalità PIE (Position-independent executables). L'uso del campo DT_RELR nei file ELF richiede il supporto per l'opzione "-z pack-relative-relocs" nel linker, introdotta nella versione di binutils 2.38.
  • Per la piattaforma Linux, sono implementate le funzioni pidfd_open, pidfd_getfd e pidfd_send_signal, che forniscono l'accesso alla funzionalità pidfd che aiuta a gestire le situazioni di riutilizzo del PID per identificare con maggiore precisione i processi che accedono ai file monitorati (pidfd è associato a un processo specifico e non cambia, mentre il PID può essere collegato a un altro processo dopo che il processo corrente associato a quel PID termina).
  • Per la piattaforma Linux, è stata aggiunta la funzione process_madvise() per consentire a un processo di emettere la chiamata di sistema madvise() per conto di un altro processo, identificando il processo di destinazione utilizzando pidfd. Tramite madvise() è possibile informare il kernel sulle funzionalità di utilizzo della memoria per ottimizzare la gestione della memoria del processo; ad esempio, in base alle informazioni trasmesse, il kernel può avviare il rilascio di memoria libera aggiuntiva. Una chiamata a madvise() da parte di un altro processo potrebbe essere necessaria in una situazione in cui le informazioni necessarie per l'ottimizzazione sono sconosciute al processo corrente, ma sono coordinate da un processo di controllo in background separato, che può avviare in modo indipendente la rimozione della memoria inutilizzata dai processi.
  • Per la piattaforma Linux è stata aggiunta la funzione process_mrelease() che permette di velocizzare il rilascio di memoria per un processo che completa la sua esecuzione. In circostanze normali, il rilascio delle risorse e la conclusione del processo non sono istantanei e possono essere ritardati per vari motivi, interferendo con i sistemi di risposta anticipata della memoria dello spazio utente come oomd (fornito da systemd). Chiamando process_mrelease, tali sistemi possono innescare in modo più prevedibile il recupero della memoria dai processi forzati.
  • Nell'implementazione integrata del risolutore DNS è stato aggiunto il supporto per l'opzione "no-aaaa", che consente di disabilitare l'invio di richieste DNS per record AAAA (determinando un indirizzo IPv6 in base al nome host), anche durante l'esecuzione di NSS funzioni come getaddrinfo(), per semplificare la diagnosi dei problemi. Questa opzione non influisce sull'elaborazione dei collegamenti degli 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, fornendo l'accesso a una nuova API del kernel per la gestione del montaggio del file system in base agli spazi dei nomi di montaggio. Le funzioni proposte consentono di elaborare separatamente le diverse fasi del montaggio (elaborare il superblocco, ottenere informazioni sul file system, montare, allegare al punto di montaggio), che in precedenza venivano eseguite utilizzando la funzione comune mount(). Funzioni separate offrono la possibilità di eseguire scenari di montaggio più complessi ed eseguire separatamente operazioni come la riconfigurazione del superblocco, l'abilitazione delle opzioni, la modifica del punto di montaggio e lo spostamento in un altro spazio dei nomi. Inoltre, l'elaborazione separata consente di determinare con precisione i motivi dell'output dei codici di errore e di impostare più origini per file system multistrato, come gli overlayf.
  • localedef fornisce il supporto per l'elaborazione dei file di definizione locale forniti nella codifica UTF-8 invece che ASCII.
  • Aggiunte funzioni per convertire le codifiche multi-byte mbrtoc8 e c8rtomb nelle specifiche ISO C2X N2653 e C++20 P0482R6.
  • Aggiunto il 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 wrapper sulla chiamata di sistema getrandom e l'interfaccia /dev/urandom che restituisce numeri pseudocasuali di alta qualità.
  • Quando viene eseguito sulla piattaforma Linux, supporta l'architettura del set di istruzioni LoongArch utilizzata nei processori Loongson 3 5000 e implementa il nuovo RISC ISA, simile a MIPS e RISC-V. Nella sua forma attuale, è disponibile solo il supporto per la versione a 64 bit di LoongArch (LA64). Per funzionare sono necessarie almeno le versioni di binutils 2.38, GCC 12 e Linux kernel 5.19.
  • Il meccanismo di prelink, così come le variabili di ambiente LD_TRACE_PRELINKING e LD_USE_LOAD_BIAS associate e le funzionalità del linker, sono stati deprecati e verranno rimossi in una versione futura.
  • Rimosso il codice per controllare la versione del kernel Linux e gestire la 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.
  • La variabile d'ambiente LD_LIBRARY_VERSION è stata interrotta sulla piattaforma Linux.

Fonte: opennet.ru

Aggiungi un commento