Dopo sei mesi di sviluppo rilascio della libreria di sistema (glibc) , che soddisfa pienamente i requisiti degli standard ISO C11 e POSIX.1-2008. La nuova versione include correzioni da 58 sviluppatori.
Nella Glibc 2.31 sono state implementate si possono evidenziare:
- Aggiunto il macro _ISOC2X_SOURCE per attivare le funzionalità definite nella bozza del futuro standard ISO . Queste funzionalità sono attivate anche utilizzando il macro _GNU_SOURCE o compilando in gcc con il flag «-std=gnu2x»;
- Per le funzioni definite nel file di intestazione «math.h», che arrotondano i loro risultati a un tipo di dimensione minore, il file «tgmath.h» offre i corrispondenti 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 la terminazione di un thread con un timeout (se il timeout scade prima della terminazione, la funzione restituirà un errore). A differenza di , in pthread_clockjoin_np() è consentita la definizione del tipo di timer per il calcolo del timeout — CLOCK_MONOTONIC (che tiene conto del tempo trascorso dal sistema in stato di sospensione) o CLOCK_REALTIME;
- Nel risolutore DNS è stata aggiunta la supporto all'opzione trust-ad in /etc/resolv.conf e al flag RES_TRUSTAD in _res.options, che, se impostati, consentono la trasmissione del flag DNSSEC nelle richieste DNS. (dati autenticati). In questa modalità, il flag AD impostato dal server diventa accessibile alle applicazioni che chiamano funzioni simili a res_search(). Per impostazione predefinita, se le opzioni suggerite non sono attivate, glibc non include il flag AD nelle richieste e lo cancella automaticamente nelle risposte, a indicare l'assenza di verifica DNSSEC.
- Per costruire i wrapper delle chiamate di sistema funzionanti per Glibc ora non è necessaria l'installazione dei file header del kernel Linux. L'eccezione è l'architettura RISC-V a 64 bit.
- Eliminato , che consente di aggirare la protezione
ASLR nei programmi con il flag setuid e determinare la disposizione degli indirizzi nelle librerie caricate attraverso la manipolazione della variabile d'ambiente LD_PREFER_MAP_32BIT_EXEC.
Cambiamenti incompatibili:
- In totalorder(), totalordermag() e funzioni simili per altri tipi a virgola mobile, ora accettano come argomento puntatori per escludere avvertimenti sulla conversione dei valori in stato , in conformità con le raccomandazioni TS 18661-1, proposte per il futuro standard C2X.
I file eseguibili esistenti, nei quali gli argomenti in virgola mobile sono passati direttamente, continueranno a funzionare senza modifiche; - La funzione obsoleta stime, annunciata da tempo, 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, si deve utilizzare la funzione clock_settime. È previsto in futuro di rimuovere anche la funzione ftime, considerata obsoleta, insieme al file di intestazione sys/timeb.h (si raccomanda di usare gettimeofday o clock_gettime al posto di ftime);
- La funzione gettimeofday ora non restituisce più informazioni sul fuso orario di sistema (questa funzionalità era rilevante ai tempi del 4.2-BSD ed è stata dichiarata obsoleta per molti anni). Nel parametro ‘tzp’ ora è necessario passare un puntatore nullo, mentre per ottenere informazioni sul fuso orario in relazione all'ora corrente si deve utilizzare la funzione localtime(). Se si chiama gettimeofday con un argomento ‘tzp’ non nullo, i campi tz_minuteswest e tz_dsttime nella struttura timezone saranno restituiti vuoti. La funzione gettimeofday stessa è considerata obsoleta in POSIX (si raccomanda di usare clock_gettime al posto di gettimeofday), ma non è prevista la sua rimozione da glibc.
- Nella settimeofday è stata interrotta la supporto per il passaggio simultaneo di parametri per impostare l'ora e la correzione del tempo. Quando si chiama settimeofday, uno degli argomenti (tempo o offset) deve ora necessariamente essere impostato a null, altrimenti la chiamata della funzione terminerà con un 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.
- Support for SPARC ISA v7 architecture has been discontinued (support for v8 is still retained, but only for processors that support CAS instructions, such as LEON processors, but not SuperSPARC processors).
- In case of a binding failure in "", where the linker does not perform symbol resolution for a function until the first call to that function, the dlopen function now forcefully terminates the process (previously, it returned NULL on failure);
- For the MIPS ABI hard-float, an executable stack is now used unless a limit to use Linux kernel 4.8+ is explicitly specified during compilation with the parameter "—enable-kernel=4.8.0" (kernels up to 4.8 exhibit failures for certain MIPS configurations);
- Wrappers over system calls related to time manipulation have been switched to using the time64 system call when available (on 32-bit glibc systems, it first attempts to use new system calls manipulating the 64-bit type for time, and if they are not present, falls back to the old 32-bit calls).
Fonte: opennet.ru
