Documentation for a newer release is available. View Latest

C

GCC 10.0.1

La suite di compilatori GNU è stata aggiornata alla versione 10.0.1. Consulta la documentazione ufficiale per l’elenco delle modifiche visibili agli utenti. I pacchetti in Fedora 32 sono stati ricompilati utilizzando questa nuova versione del compilatore.

Nuove funzionalità e miglioramenti generali

  • Nuove funzioni integrate:

    • L’operatore di preprocessore `__has_builtin`consente di verificare il supporto alle funzioni integrate (built-in) fornite da GCC e da altri compilatori compatibili.

    • `__builtin_roundeven`per la funzione corrispondente di ISO/IEC TS 18661.

  • Nuove opzioni da riga di comando:

    • -fallocation-dce rimuove le coppie non necessarie di operatori new e delete.

    • -fprofile--fprofile-partial-training-training può ora essere utilizzato per informare il compilatore che i percorsi di codice non coperti dalla fase di addestramento (training run) non devono essere ottimizzati per la dimensione (size).

    • --fprofile-reproducible controlla il livello di riproducibilità del profilo raccolto tramite -fprofile-generate. Ciò rende possibile ricompilare il programma con lo stesso risultato, il che è utile, ad esempio, per i pacchetti di distribuzione.

  • Miglioramenti dell’ottimizzazione inter-procedurale (IPA):

    • Il passaggio di sostituzione scalare interprocedurale per gli aggregati (IPA-SRA) è stato reimplementato per funzionare in fase di collegamento (link-time).

    • -finline-functions è ora abilitato a -O2 ed è stato ricalibrato per un miglior compromesso tra dimensioni del codice e prestazioni in fase di esecuzione. Le euristiche dell’inliner sono state inoltre notevolmente velocizzate per evitare impatti negativi sui tempi di compilazione con -flto -O2.

    • Le euristiche di inlining e il function cloning possono ora utilizzare le informazioni sui range di valori (value-range information) per prevedere l’efficacia delle singole trasformazioni.

    • Durante la link-time optimization, viene utilizzata la C++ One Definition Rule per aumentare la precisione della type-based alias analysis.

  • Miglioramenti dell’ottimizzazione in fase di collegamento (Link-time optimization):

    • È stato aggiunto un nuovo binario, lto-dump. Il programma consente di estrarre diverse informazioni da un file oggetto contenente bytecode LTO (Link Time Optimization).

    • La fase parallela di LTO può rilevare automaticamente un jobserver di make in esecuzione, oppure può ripiegare sul numero di core disponibili.

    • Il bytecode LTO può essere compresso con l’algoritmo zstd. Lo script di configurazione può rilevare automaticamente il supporto a zstd.

    • La maggior parte dei valori --`--param`può ora essere specificata con la granularità della translation unit. Ciò include tutti i parametri che controllano l’inliner e altre ottimizzazioni inter-procedurali. A differenza delle release precedenti, GCC 10 ignorerà i parametri di ottimizzazione specificati in fase di collegamento (link-time) e applicherà invece quelli definiti in fase di compilazione (compile-time), allo stesso modo in cui avviene per i flag di ottimizzazione.

  • Miglioramenti dell’ottimizzazione guidata dal profilo:

    • Profilazione di nuovi linguaggi e miglioramenti specifici per i linguaggi: la manutenzione durante la compilazione e il partizionamento del codice hot/cold sono stati migliorati.

    • Utilizzando -fprofile-values, un binario strumentato può tracciare più valori (fino a 4), ad esempio per le chiamate indirette, e fornire informazioni di profilazione più precise.

Nuovi linguaggi e miglioramenti specifici per lingua

  • La versione 2.6 della specifica OpenACC è ora supportata nei compilatori C, C++ e Fortran. Per ulteriori informazioni, consulta la sezione relativa allo stato dell’implementazione nella pagina wiki di OpenACC e la documentazione della libreria run-time.

  • OpenMP e OpenACC ora supportano l’offloading verso le GPU AMD Radeon (GCN); sono supportate le Fiji di terza generazione (fiji) e le VEGA 10/VEGA 20 di quinta generazione (gfx900 o gfx906).

C family

  • Nuovi attributi.

  • Nuovi avvisi.

  • Miglioramenti agli avvisi esistenti.

C

  • Diverse nuove funzionalità della prossima revisione C2x dello standard ISO C sono ora supportate tramite i flag -std=c2x e -std=gnu2x. Alcune di queste sono disponibili come estensioni anche quando si compila per versioni più datate del linguaggio. Oltre alle novità elencate, alcune funzioni precedentemente supportate come estensioni e ora integrate ufficialmente nello standard C sono abilitate per impostazione predefinita in modalità C2x e non vengono segnalate con -std=c2x -Wpedantic.

  • Il compilatore GCC (GNU Compiler Collection) ora utilizza l’opzione -fno-common come impostazione predefinita. Questo cambiamento influisce sul modo in cui vengono gestite le variabili globali nel linguaggio C, migliorando le prestazioni ma rendendo il linker più rigoroso.

C++

  • Several C++20 features have been implemented.

  • Sono stati risolti divers`C++ Defect`Report.

  • Nuovi avvisi.

  • "G++ è ora in grado di rilevare la modifica di oggetti costanti durante la valutazione di constexpr (un comportamento non definito)."

  • "G++ non emette più falsi avvisi (bogus warnings) di tipo -Wsign-conversion in presenza di cast espliciti."

  • Il restringimento (narrowing) viene ora rilevato in più contesti (ad esempio, nei valori dei case).

  • Il consumo di memoria del compilatore è stato ridotto nella valutazione di constexpr.

  • L’identificatore`noexcept-specifier`è ora correttamente trattato come un contesto di classe completa (complete-class context) come stabilito da [class.mem].

  • L’attributo deprecated può ora essere utilizzato anche sui namespace.

Libreria runtime (libstdc++)

  • Supporto sperimentale migliorato per C++2a, tra cui.

  • Supporto per RDSEED in std::random_device.

  • Jakarta Authentication 3.0: il pacchetto Java è cambiato da javax.security.auth.message a jakarta.security.auth.message.

La versione 2.31 della libreria GNU C (glibc).

Fedora 32 fornisce la versione 2.31 della GNU C Library (glibc). Tra le modifiche principali si segnalano:

Nuove funzionalità

  • La GNU C Library ora supporta una macro di test delle funzionalità _ISOC2X_SOURCE per abilitare le caratteristiche della bozza dello standard ISO C2X. Solo alcune funzionalità di questa bozza sono supportate dalla GNU C Library e, poiché lo standard è in fase di sviluppo attivo, l’insieme di caratteristiche abilitate da questa macro è soggetto a modifiche. Le funzionalità di C2X vengono abilitate anche tramite _GNU_SOURCE o compilando con gcc -std=gnu2x.

  • Le funzioni di <math.h> che arrotondano i risultati a un tipo più ristretto dispongono ora delle corrispondenti macro di tipo generico in <tgmath.h>, come definito in TS 18661-1:2014 e TS 18661-3:2015, così come modificati dalla risoluzione della Clarification Request 13 per TS 18661-3.

  • È stata aggiunta la funzione pthread_clockjoin_np, che consente di attendere la terminazione di un thread (join) utilizzando un clock specifico. Supporta l’attesa basata su CLOCK_MONOTONIC e CLOCK_REALTIME. Questa funzione è un’estensione GNU.

  • È stata aggiunta una nuova localizzazione: mnw_MM (lingua Mon parlata in Myanmar).

  • Lo stub resolver DNS invierà opzionalmente il bit AD (authenticated data) nelle query se l’opzione trust-ad è configurata tramite la direttiva options in /etc/resolv.conf (o se RES_TRUSTAD è impostato in _res.options). In questa modalità, il bit AD, così come fornito dal name server, è disponibile per le applicazioni che richiamano res_search e le funzioni correlate. Nella modalità predefinita, il bit AD non è impostato nelle query e viene automaticamente rimosso dalle risposte, indicando la mancanza di una validazione DNSSEC. (Pertanto, i name server e il percorso di rete verso di essi vengono trattati come non attendibili).

Funzionalità deprecate e rimosse

  • Le funzioni totalorder e totalordermag, insieme alle funzioni corrispondenti per altri tipi a virgola mobile, ora accettano puntatori come argomenti. Questa modifica serve a evitare che i NaN segnalanti (signaling NaNs) vengano convertiti in NaN silenziosi (quiet NaNs) durante il passaggio dei parametri.

  • La funzione obsoleta stime non è più disponibile per i binari di nuova compilazione e la sua dichiarazione è stata rimossa da <time.h>. I programmi che impostano l’ora del sistema devono ora utilizzare clock_settime.

  • We plan to remove the obsolete function ftime, and the header <sys/timeb.h>, in a future version of glibc. In this release, the header still exists but calling ftime will cause a compiler warning. All programs should use gettimeofday or clock_gettime instead.

  • La funzione gettimeofday non riporta più informazioni sul fuso orario a livello di sistema. Questa funzionalità, risalente all’era 4.2-BSD, è considerata obsoleta da molti anni poiché non è in grado di gestire la complessità dei fusi orari mondiali; tuttavia, finora è stata supportata al meglio delle possibilità. Le modifiche necessarie per supportare time_t a 64 bit sulle architetture a 32 bit hanno reso questo supporto non più praticabile.

  • La funzione settimeofday può ancora essere utilizzata per impostare un fuso orario a livello di sistema quando il sistema operativo lo supporta. Questo perché il kernel Linux ha riutilizzato l’API, su alcune architetture, per descrivere uno scostamento (offset) simile a un fuso orario tra l’orologio software mantenuto dal kernel e l’orologio "RTC" (Real-Time Clock) che mantiene l’ora quando il sistema è spento.

  • L’ISA SPARC v7 non è più supportata. La versione v8 è ancora supportata, ma solo se l’istruzione opzionale CAS (Compare-And-Swap) è implementata (ad esempio, i processori LEON sono ancora supportati, mentre i processori SuperSPARC non lo sono più).

  • Se si verifica un errore di binding pigro (lazy binding) durante dlopen, nello specifico durante l’esecuzione di un costruttore ELF, il processo viene ora terminato. In precedenza, il caricatore dinamico restituiva NULL da dlopen, con l’errore di binding catturato in un messaggio dlerror. In generale, questo comportamento è considerato non sicuro poiché non è possibile ripristinare lo stack in una chiamata di funzione arbitraria.

  • Per le ABI MIPS hard-float, la GNU C Library sarà configurata per richiedere uno stack eseguibile, a meno che non venga esplicitamente configurata in fase di compilazione per richiedere una versione minima del kernel 4.8 o successiva. Questo perché l’esecuzione di rami a virgola mobile (floating-point branches) su uno stack non eseguibile con kernel Linux precedenti alla versione 4.8 può causare crash delle applicazioni in alcune configurazioni MIPS. Sebbene attualmente PT_GNU_STACK non sia ampiamente utilizzato su MIPS, si prevede che le future versioni di GCC abiliteranno lo stack non eseguibile tramite PT_GNU_STACK per impostazione predefinita, il che probabilmente innescherebbe crash sui kernel più datati.

  • I wrapper delle chiamate di sistema per la gestione del tempo ora utilizzano le nuove chiamate di sistema time64, laddove disponibili. Sui target a 32 bit, questi wrapper tentano prima di invocare le nuove chiamate di sistema e ripiegano (fallback) sulle vecchie chiamate a 32 bit se le prime non sono presenti.Questo comportamento potrebbe causare problemi in ambienti che non gestiscono correttamente le chiamate di sistema non supportate restituendo --ENOSYS. Le sandbox Seccomp, in particolare, sono interessate da questo problema.

Cambiamenti relativi alla sicurezza

  • CVE-2019-19126: ld.so non ignorava correttamente la variabile`LD_PREFER_MAP_32BIT_EXEC` variabile di ambiente durante l’esecuzione del programma dopo una transizione di sicurezza, consentendo ad aggressori locali di limitare i possibili indirizzi di mappatura per le librerie caricate e, di conseguenza, di aggirare l’ASLR per un programma setuid. Segnalato da Marcin Kościelnicki.

Per informazioni dettagliate su glibc-2.31, consultare il documento NEWS a monte; si noti che potrebbe essere necessario scorrere verso il basso per trovare la versione 2.31, poiché il documento viene costantemente aggiornato.

mpfr 4.0.2

Fedora 32 include la versione 4.0.2 della libreria GNU MPFR. Le modifiche degne di nota includono:

  • mpfr ora supporta le cache condivise per le applicazioni multi-threaded, riducendo così l’utilizzo della memoria.

  • Miglioramento del caching: è garantito un aumento minimo del 10% della precisione per evitare un numero eccessivo di ricalcoli, riducendo così l’utilizzo della CPU.

  • Viene utilizzato un pool d`mpz_t`a bassa precisione per ridurre il numero di allocazioni di memoria, diminuendo di conseguenza l’utilizzo della CPU.

  • Diverse funzioni sono ora più veloci; ad esempio: mpfr_add, mpfr_sub, mpfr_mul, mpfr_div, mpfr_sqrt, mpfr_set_d e mpfr_get_d.

  • La funzione `mpfr_div_ui`poteva produrre risultati arrotondati in modo errato in mpfr 3; il bug è stato risolto in mpfr 4.

For more information, visit the upstream release notes for version 4.0.0, 4.0.1, and 4.0.2.