Dopo sei mesi di sviluppo rilascio della libreria di sistema (glibc) , che soddisfa completamente i requisiti degli standard ISO C11 e POSIX.1-2008. La nuova versione include correzioni da 58 sviluppatori.
Tra le implementazioni in Glibc 2.31 si possono notare:
- È stato aggiunto il macro _ISOC2X_SOURCE per abilitare le funzionalità definite nella bozza del futuro standard ISO . Queste funzionalità sono abilitate anche utilizzando il macro _GNU_SOURCE o compilando in gcc con il flag «-std=gnu2x»;
- Per le funzioni definite nell'intestazione «math.h» che arrotondano i loro risultati a un tipo di dimensione inferiore, nel file «tgmath.h» sono stati proposti macro di tipo generico, come richiesto dalle specifiche TS 18661-1:2014 e TS 18661-3:2015;
- È stata aggiunta la funzione pthread_clockjoin_np(), che attende il completamento di un thread tenendo conto del timeout (se il timeout si verifica prima del completamento, la funzione restituirà un errore). A differenza di , in pthread_clockjoin_np() è consentita la definizione del tipo di timer per calcolare il timeout — CLOCK_MONOTONIC (che considera il tempo in cui il sistema è stato in stato di sospensione) o CLOCK_REALTIME;
- Nel risolutore DNS è stata aggiunta il supporto per l'opzione trust-ad in /etc/resolv.conf e per il flag RES_TRUSTAD in _res.options, che, se impostati, consentono di inviare il flag DNSSEC nelle richieste DNS (dati autenticati). In questa modalità, il flag AD impostato dal server diventa accessibile alle applicazioni che invocano funzioni come res_search(). Per impostazione predefinita, se le opzioni proposte non sono attive, glibc non invia il flag AD nelle richieste e lo cancella automaticamente nelle risposte, il che indica l'assenza di verifica DNSSEC;
- Per compilare i wrapper funzionanti per le chiamate di sistema per Glibc non è più necessaria l'installazione dei file di intestazione del kernel Linux. L'eccezione è l'architettura a 64 bit RISC-V;
- Risolto , che consente di bypassare la protezione
ASLR in programmi con flag setuid e di determinare la disposizione degli indirizzi nelle librerie caricate manipolando la variabile di ambiente LD_PREFER_MAP_32BIT_EXEC.
Modifiche che interrompono la compatibilità:
- Nelle funzioni totalorder(), totalordermag() e simili per altri tipi a virgola mobile ora accettano puntatori come argomento per escludere avvisi sulla conversione di valori nello stato , in conformità con le raccomandazioni TS 18661-1, proposte per il futuro standard C2X.
I file eseguibili esistenti, in cui gli argomenti a virgola mobile vengono passati direttamente, continueranno a funzionare senza modifiche; - La funzione obsoleta stime, precedentemente annunciata, non è più disponibile per i file binari collegati a glibc, e la sua definizione è stata rimossa da time.h. Per impostare l'ora di sistema, è necessario utilizzare la funzione clock_settime. In futuro, è previsto di rimuovere anche la funzione ftime, contrassegnata come obsoleta, così come il file header sys/timeb.h (si consiglia di utilizzare gettimeofday o clock_gettime al posto di ftime);
- La funzione gettimeofday ora non fornisce informazioni sul fuso orario di sistema (questa funzionalità era rilevante ai tempi del 4.2-BSD ed è stata dichiarata obsoleta da molti anni). Nel parametro ‘tzp’ ora deve essere passato un puntatore nullo, mentre per ottenere informazioni sul fuso orario in relazione all'ora corrente, si deve utilizzare la funzione localtime(). Quando si chiama gettimeofday con un argomento ‘tzp’ non nullo, i campi tz_minuteswest e tz_dsttime della struttura timezone saranno restituiti vuoti. La funzione gettimeofday è considerata obsoleta in POSIX (si raccomanda di usare clock_gettime al suo posto), ma non è prevista la sua rimozione da glibc;
- Nella settimeofday è stata interrotta la supporto per la trasmissione simultanea di parametri per impostare l'orario e la correzione dell'offset di tempo. Quando si chiama settimeofday, uno degli argomenti (tempo o offset) deve ora essere necessariamente impostato su null, altrimenti la chiamata alla funzione terminerà con l'errore EINVAL. Come gettimeofday, anche la funzione settimeofday è considerata obsoleta in POSIX e si raccomanda di utilizzare la funzione clock_settime o la famiglia di funzioni adjtime;
- È stata interrotta la supporto per l'architettura SPARC ISA v7 (la supporto per v8 è ancora mantenuta, ma solo per i processori che supportano le istruzioni CAS, come i processori LEON, ma non i processori SuperSPARC).
- In caso di fallimento del collegamento in modalità ““, in cui il linker non cerca i simboli della funzione fino al primo chiamata di quella funzione, la funzione dlopen ora termina forzatamente il processo (in precedenza, in caso di errore, veniva restituito NULL);
- Per l'ABI MIPS hard-float, ora viene utilizzato lo stack eseguibile, se durante la compilazione non è stato specificamente impostato un limite sull'uso del kernel Linux 4.8+ tramite il parametro “—enable-kernel=4.8.0” (con i kernel fino a 4.8 si verificano errori per alcune configurazioni MIPS);
- Le interfacce sui richiami di sistema relative alla manipolazione del tempo sono state tradotte per utilizzare il richiamo di sistema time64, se disponibile (su sistemi a 32 bit, glibc prova prima ad utilizzare i nuovi richiami di sistema che manipolano il tipo di dato a 64 bit per il tempo, e se non ci riesce, torna ai vecchi richiami a 32 bit).
Fonte: opennet.ru
