Red Hat Training

A Red Hat training course is available for RHEL 8

4.10. Compilatori e strumenti di sviluppo (traduzione automatica)

Boost aggiornato alla versione 1.66

La libreria Boost C+++ è stata aggiornata alla versione upstream 1.66. La versione di Boost inclusa in Red Hat Enterprise Linux 7 è 1.53. Per i dettagli, vedere i changelogs a monte: https://www.boost.org/users/history/

Questo aggiornamento introduce le seguenti modifiche che rompono la compatibilità con le versioni precedenti:

  • La bs_set_hook()funzione, la splay_set_hook()funzione dai contenitori splay e i parametri bool splay = trueextra nella splaytree_algorithms()funzione nella libreria Intrusive sono stati rimossi.
  • I commenti o la concatenazione di stringhe nei file JSON non sono più supportati dall'analizzatore nella libreria Property Tree.
  • Alcune distribuzioni e funzioni speciali della libreria Math sono state sistemate per comportarsi come documentato e aumentare un overflow_errorvalore massimo finito invece di restituire il valore massimo.
  • Alcune intestazioni della libreria Math sono state spostate nella directory libs/math/include_private.
  • Il comportamento delle funzioni basic_regex<>::mark_count()e basic_regex<>::subexpression(n)delle funzioni della libreria Regex è stato modificato per adattarlo alla loro documentazione.
  • L'uso di modelli variabili nella libreria Variant può interrompere le funzioni di metaprogrammazione.
  • L'boost::python::numericAPI è stata rimossa. Gli utenti possono utilizzare boost::python::numpyinvece.
  • Le operazioni aritmetiche su puntatori a tipi di non oggetti non sono più disponibili nella biblioteca atomica.

(BZ#1494495)

Supporto Unicode 11.0.0.0.0

La libreria Red Hat Enterprise Linux core C, glibc, è stata aggiornata per supportare la versione standard Unicode 11.0.0.0. Di conseguenza, tutte le API a caratteri larghi e a più byte, comprese la traslitterazione e la conversione tra set di caratteri, forniscono informazioni accurate e corrette conformi a questo standard.

(BZ#1512004)

Il boostpacchetto è ora indipendente da Python

Con questo aggiornamento, l'installazione del boostpacchetto non installa più la Boost.Pythonlibreria come dipendenza. Per poterlo utilizzareBoost.Python, è necessario installare esplicitamente i pacchetti boost-python3o boost-python3-develi pacchetti.

(BZ#1616244)

Un nuovo compat-libgfortran-48pacchetto disponibile

Per la compatibilità con le applicazioni Red Hat Enterprise Linux 6 e 7 che utilizzano la libreria Fortran, è ora disponibile un nuovo pacchetto di compat-libgfortran-48compatibilità che fornisce la libgfortran.so.3libreria.

(BZ#1607227)

Supporto Retpoline in GCC

Questo aggiornamento aggiunge il supporto per i retpolines a GCC. Una retpoline è un costrutto software usato dal kernel per ridurre l'overhead degli attacchi Spectre Variant 2 descritti in CVE-2017-57-5715.

(BZ#1535774)

Supporto avanzato per l'architettura ARM a 64 bit nei componenti della toolchain

I componenti della toolchain GCCebinutils, ora forniscono un supporto esteso per l'architettura ARM a 64 bit. Per esempio:

  • GCC e binutilsora supportano Scalable Vector Extension (SVE).
  • Il supporto per il tipo di FP16dati, fornito da ARM v8.2, è stato aggiunto a GCC. Il tipo di FP16dati migliora le prestazioni di alcuni algoritmi.
  • Gli strumenti da binutilsora supportano la definizione dell'architettura ARM v8.3, inclusa l'autenticazione del puntatore. La funzione Pointer Authentication impedisce al codice dannoso di corrompere la normale esecuzione di un programma o del kernel creando i propri puntatori di funzione. Come risultato, solo gli indirizzi fidati sono usati quando si ramifica in luoghi diversi del codice, il che migliora la sicurezza.

(BZ#1504980, BZ#1550501, BZ#1504995, BZ#1504993, BZ#1504994)

Ottimizzazioni per glibci sistemi IBM POWER

Questo aggiornamento fornisce glibcuna nuova versione ottimizzata sia per le architetture IBM POWER 8 che IBM POWER 9. Come risultato, i sistemi IBM POWER 8 e IBM POWER 9 ora passano automaticamente alla variante appropriata e ottimizzata glibcdurante l'esecuzione.

(BZ#1376834)

GNU C Library aggiornato alla versione 2.28

Red Hat Enterprise Linux 8 include la versione 2.28 della GNU C Library (glibc). Notevoli miglioramenti includono:

  • Caratteristiche di tempra di sicurezza:

    • I file binari sicuri contrassegnati con la AT_SECUREbandiera ignorano la variabile d'LD_LIBRARY_PATHambiente.
    • I backtrace non vengono più stampati per verificare i guasti della pila per accelerare lo spegnimento ed evitare di eseguire più codice in un ambiente compromesso.
  • Miglioramenti delle prestazioni:

    • Le prestazioni della malloc()funzione sono state migliorate con una cache locale del thread.
    • Aggiunta della variabile d'GLIBC_TUNABLESambiente per modificare le caratteristiche di performance della libreria.
    • L'implementazione di semafori di fili è stata migliorata e sono state aggiunte nuove funzioni scalabilipthread_rwlock_xxx().
    • Le prestazioni della biblioteca di matematica sono state migliorate.
  • È stato aggiunto il supporto per Unicode 11.0.0.0.0.
  • È stato aggiunto il supporto migliorato per i numeri in virgola mobile a 128 bit come definito dagli standard ISO/IEC/IEEE 60559:2011, IEEE 754-2008 e ISO/IEC TS 18661-3:2015.
  • Miglioramenti al risolutore di stub resolver del Domain Name Service (DNS) relativi al file di /etc/resolv.confconfigurazione:

    • La configurazione viene ricaricata automaticamente quando il file viene modificato.
    • È stato aggiunto il supporto per un numero arbitrario di domini di ricerca.
    • È stata aggiunta la corretta selezione casuale per l'rotateopzione.
  • Sono state aggiunte nuove funzionalità per lo sviluppo, tra cui:

    • Funzioni di wrapper Linux per le chiamate al kernel preadv2e pwritev2al kernel
    • Nuove funzioni tra cui reallocarray()e explicit_bzero()
    • Nuove bandiere per la posix_spawnattr_setflags()funzione come ad esempio POSIX_SPAWN_SETSID

(BZ#1512010, BZ#1504125, BZ#506398)

CMake disponibile in RHEL

Il sistema di compilazione CMake versione 3.11 è disponibile in Red Hat Enterprise Linux 8 come cmakepacchetto.

(BZ#1590139, BZ#1502802)

make versione 4.2.1

Red Hat Enterprise Linux 8 è distribuito con lo strumento di makecompilazione versione 4.2.1. Notevoli cambiamenti includono:

  • Quando una ricetta fallisce, vengono mostrati il nome del makefile e il numero di riga della ricetta.
  • L'--traceopzione è stata aggiunta per consentire la tracciabilità degli obiettivi. Quando si usa questa opzione, ogni ricetta viene stampata prima dell'invocazione, anche se sarebbe soppressa, insieme al nome del file e al numero di riga in cui si trova la ricetta, e anche con i prerequisiti che ne causano l'invocazione.
  • Mescolare regole esplicite e implicite non comporta makepiù la cessazione dell'esecuzione. Invece, viene stampato un avviso. Si noti che questa sintassi è deprecata e potrebbe essere completamente rimossa in futuro.
  • E' stata aggiunta la $(file …​)funzione per scrivere testo in un file. Quando viene chiamato senza un argomento di testo, apre e chiude immediatamente il file.
  • Una nuova opzione, --output-synco -O, fa sì che un output di più lavori sia raggruppato per lavoro e consente un più facile debug delle costruzioni parallele.
  • L'--debugopzione ora accetta anche il flag (nessunon) per disabilitare tutte le impostazioni di debug attualmente abilitate.
  • L'operatore di assegnazione delle !=shell è stato aggiunto come alternativa alla $(shell …​)funzione per aumentare la compatibilità con i makefile BSD. Per maggiori dettagli e differenze tra l'operatore e la funzione, vedere il manuale GNU make manual.

Si noti che, di conseguenza, le variabili con un nome che termina con un punto esclamativo e immediatamente seguito da un'assegnazione, come ad esempio variable!=value, sono ora interpretate come la nuova sintassi. Per ripristinare il comportamento precedente, aggiungere uno spazio dopo il punto esclamativo, ad esempio variable! =value.

+

  • È stato aggiunto l'operatore di ::=assegnazione definito dallo standard POSIX.
  • Quando la .POSIXvariabile è specificata, makeosserva i requisiti standard POSIX per la gestione del backslash e della nuova linea. In questa modalità, qualsiasi spazio d'uscita prima del backslash viene preservato, e ogni backslash seguito da una nuova linea e da caratteri di spazio bianco viene convertito in un singolo carattere di spazio.
  • Il comportamento delle variabili MAKEFLAGSe MFLAGSdelle variabili è ora definito con maggiore precisione.
  • Una nuova variabile, GNUMAKEFLAGS, viene analizzata per le makelanterne in modo identico a MAKEFLAGS. Di conseguenza, i flag makespecifici per GNU possono essere memorizzati all'esterno MAKEFLAGSe la portabilità dei makefile è aumentata.
  • È stata aggiunta una nuova variabile, MAKE_HOSTcontenente l'architettura host.
  • Le nuove variabili, MAKE_TERMOUTe MAKE_TERMERR, indicano se makesta scrivendo l'uscita standard e l'errore ad un terminale.
  • L'impostazione delle opzioni -re -Rdella MAKEFLAGSvariabile all'interno di un makefile ora funziona correttamente e rimuove tutte le regole e le variabili incorporate, rispettivamente.
  • L'.RECIPEPREFIXimpostazione è ora ricordata per ogni ricetta. Inoltre, le variabili espanse in quella ricetta utilizzano anche l'impostazione del prefisso della ricetta.
  • L'.RECIPEPREFIXimpostazione e tutte le variabili specifiche del target sono visualizzate nell'output dell'-popzione come in un makefile, invece che come commenti.

(BZ#1641015)

I programmi Go costruiti con Go Toolset sono conformi a FIPS

La libreria crittografica disponibile in Go Toolset è stata modificata per utilizzare la libreria OpenSSL versione 1.1.0 se il sistema host è configurato in modalità FIPS. Di conseguenza, i programmi costruiti con questa versione di Go Toolset sono conformi a FIPS.

Per fare in modo che i programmi Go utilizzino solo le routine crittografiche standard non certificate, utilizzare l'-tags no_opensslopzione del gocompilatore in fase di compilazione.

(BZ#1512570)

SystemTap versione 4.0

Red Hat Enterprise Linux 8 è distribuito con lo strumento di strumentazione SystemTap versione 4.0. Notevoli miglioramenti includono:

  • Il backend esteso del Berkeley Packet Filter (eBPF) è stato migliorato, in particolare per quanto riguarda le stringhe e le funzioni. Per utilizzare questo backend, avviare SystemTap con l'--runtime=bpfopzione.
  • È stato aggiunto un nuovo servizio di rete di esportazione da utilizzare con il sistema di monitoraggio Prometheus.
  • L'implementazione dell'ispezione delle chiamate di sistema è stata migliorata per utilizzare i tracepoint del kernel, se necessario.

(BZ#1641032)

Miglioramenti nella binutilsversione 2.30

Red Hat Enterprise Linux 8 include la versione 2.30 del binutilspacchetto. Notevoli miglioramenti includono:

  • È stato migliorato il supporto per le nuove estensioni dell'architettura s390x.

Assemblatore:

  • Sono stati aggiunti il supporto per il formato di file WebAssembly e la conversione di WebAssembly nel formato di file wasm32 ELF.
  • È stato aggiunto il supporto per l'architettura ARMv8-R e i processori Cortex-R52, Cortex-M23 e Cortex-M33.
  • È stato aggiunto il supporto per l'architettura RISC-V.

Linkers:

  • Il linker ora inserisce di default codice e dati di sola lettura in segmenti separati. Come risultato, i file eseguibili creati sono più grandi e più sicuri da eseguire, perché il caricatore dinamico può disabilitare l'esecuzione di qualsiasi pagina di memoria contenente dati in sola lettura.
  • È stato aggiunto il supporto per le note di proprietà GNU che forniscono suggerimenti al caricatore dinamico sul file binario.
  • In precedenza, il linker ha generato codice eseguibile non valido per la tecnologia Intel Indirect Branch Tracking (IBT). Di conseguenza, i file eseguibili generati non potevano partire. Questo bug è stato corretto.
  • In precedenza, il goldlinker ha unito le note sulla proprietà in modo improprio. Di conseguenza, le caratteristiche hardware errate potrebbero essere abilitate nel codice generato e il codice potrebbe terminare inaspettatamente. Questo bug è stato corretto.
  • In precedenza, il goldlinker creava sezioni di note con byte di riempimento alla fine per ottenere l'allineamento secondo l'architettura. Poiché il caricatore dinamico non si aspettava l'imbottitura, ha ceduto terminare inaspettatamente il programma che stava caricando. Questo bug è stato corretto.

Altri strumenti:

  • Gli strumenti readelfe objdumphanno ora opzioni per seguire i link in file di informazioni di debug separati e visualizzare le informazioni anche in essi.
  • La nuova --inlinesopzione estende l'opzione esistente --line-numbersdello objdumpstrumento per visualizzare le informazioni di nesting per le funzioni in linea.
  • Lo nmstrumento ha acquisito una nuova opzione --with-version-stringsper visualizzare le informazioni sulla versione di un simbolo dopo il suo nome, se presente.

(BZ#1641004, BZ#1637072, BZ#1501420, BZ#1504114, BZ#1614908, BZ#1614920)

Performace co-pilota versione 4.1.3

Red Hat Enterprise Linux 8 è distribuito con Performance co-pilot (pcp) versione 4.1.3. Notevoli miglioramenti includono:

  • Lo pcp-dstatstrumento ora include l'analisi storica e l'output in formato CSV (Comma-separated Values).
  • Le utilità di log possono utilizzare etichette metriche e record di testo di aiuto.
  • Lo pmdaperfeventstrumento ora riporta i numeri di CPU corretti ai livelli più bassi di Simultaneous Multi Threading (SMT).
  • Lo pmdapostgresqlstrumento supporta ora Postgres serie 10.x.
  • Lo pmdaredisstrumento ora supporta Redis serie 5.x.
  • Lo pmdabccstrumento è stato migliorato con il filtraggio dinamico del processo e le chiamate di sistema per processo, ucalls e ustat.
  • Lo pmdammvstrumento ora esporta le etichette metriche e la versione in formato è aumentata a 3.
  • L'pmdagfs2utensile supporta metriche aggiuntive di glock e glock holder.
  • Sono state apportate diverse correzioni alla politica SELinux.

(BZ#1641034)

Chiavi di protezione della memoria

Questo aggiornamento consente di abilitare funzioni hardware che consentono di cambiare il flag di protezione per ogni pagina di thread. Sono stati aggiunti i nuovi involucri di chiamata di glibcsistema per le pkey_mprotect()funzioni pkey_alloc(), pkey_free(), e , e . Inoltre, sono state aggiunte le funzioni pkey_set()e pkey_get()le funzioni per consentire l'accesso ai flag di protezione per thread.

(BZ#1304448)

elfutils aggiornato alla versione 0.174

In Red Hat Enterprise Linux 8, il pacchetto elfutils è disponibile nella versione 0.174. Notevoli cambiamenti includono:

  • In precedenza, lo eu-readelfstrumento poteva mostrare una variabile con un valore negativo come se avesse un grande valore non firmato, o mostrare un grande valore non firmato come valore negativo. Questo è stato corretto e eu-readelfora cerca le dimensioni e la segnatura dei tipi di valori costanti per visualizzarli correttamente.
  • Alla libreria libdw è stata aggiunta una nuova funzione dwarf_next_lines()per la lettura .debug_linedi dati privi di CU. Questa funzione può essere utilizzata in alternativa alle funzioni dwarf_getsrclines()edwarf_getsrcfiles().
  • In precedenza, i file con più di 65280 sezioni potevano causare errori nelle librerie libelf e libdw e in tutti gli strumenti che li utilizzavano. Questo bug è stato corretto. Come risultato, le shstrndxintestazioni dei file ELF vengono gestite correttamente.shnum

(BZ#1641007)

Valgrind aggiornato alla versione 3.14

Red Hat Enterprise Linux 8 è distribuito con lo strumento di analisi del codice eseguibile Valgrind versione 3.14. Notevoli cambiamenti includono:

  • È stata aggiunta una nuova --keep-debuginfoopzione per consentire la conservazione delle informazioni di debug per il codice scaricato. Come risultato, le tracce di pila salvate possono includere informazioni su file e linee per il codice che non è più presente in memoria.
  • Sono state aggiunte soppressioni basate sul nome del file di origine e sul numero di riga.
  • Lo Helgrindstrumento è stato esteso con un'opzione --delta-stacktraceper specificare il calcolo delle tracce complete dello stack storico. In particolare, l'utilizzo di questa opzione insieme --history-level=fullpossono migliorare le Helgrindprestazioni fino al 25%.
  • È stato ridotto il tasso di falsi positivi nello Memcheckstrumento per l'ottimizzazione del codice sulle architetture Intel e AMD a 64 bit e sull'architettura ARM a 64 bit. Si noti che è possibile utilizzare il --expensive-definedness-checksper controllare la gestione dei controlli di definizione e migliorare il tasso a scapito delle prestazioni.
  • Valgrind può ora riconoscere più istruzioni della variante little-endian di IBM Power Systems.
  • Valgrind è ora in grado di elaborare parzialmente istruzioni intere e vettoriali di stringa del processore IBM Z architecture z13.

Per maggiori informazioni sulle nuove opzioni e sulle limitazioni conosciute, vedere la pagina del valgrind(1)manuale.

(BZ#1641029, BZ#1501419)

GDB versione 8.2

Red Hat Enterprise Linux 8 è distribuito con la versione 8.2 del debugger di GDB:

  • Il protocollo IPv6 è supportato per il debug remoto con GDB e gdbserver.
  • Il debug senza informazioni di debug è stato migliorato.
  • Il completamento dei simboli nell'interfaccia utente di GDB è stato migliorato per offrire migliori suggerimenti utilizzando costruzioni sintattiche come i tag ABI o gli spazi dei nomi.
  • I comandi possono ora essere eseguiti in background.
  • Il debug dei programmi creati nel linguaggio di programmazione Rust è ora possibile.
  • Il debug dei linguaggi C e C+++ è stato migliorato con il supporto dell'analizzatore _Alignofe alignofdegli operatori, riferimenti al valore rue C+++ e array automatici a lunghezza variabile C99.
  • Gli script di estensione GDB possono ora utilizzare il linguaggio di scripting Guile.
  • L'interfaccia del linguaggio di scripting Python per le estensioni è stata migliorata con nuove funzioni API, decoratori di cornici, filtri e svolgitori. Inoltre, gli script nella .debug_gdb_scriptssezione della configurazione di GDB vengono caricati automaticamente.
  • GDB ora usa Python versione 3 per eseguire i suoi script, incluse stampanti, decoratori di cornici, filtri e svolgitori.
  • Le architetture ARM e ARM a 64 bit sono state migliorate con la registrazione e la riproduzione dell'esecuzione dei processi, comprese le istruzioni per le chiamate di sistema e Thumb 32-bit.
  • È stato aggiunto il supporto per il registro MPX Intel e la violazione legata, il registro PKU ed è stato aggiunto il processore Intel Trace.
  • Le funzionalità di registrazione e riproduzione sono state estese per includere le rdrandrdseedistruzioni sui sistemi basati su Intel.
  • La funzionalità di GDB sull'architettura IBM Z è stata estesa con il supporto di tracepoint e fast tracepoints, registri vettoriali e ABI, e la chiamata di Catchsistema. Inoltre, GDB supporta ora istruzioni più recenti dell'architettura.
  • GDB può ora utilizzare le sonde statiche di spazio utente SystemTap (SDT) sull'architettura ARM a 64 bit.

(BZ#1641022, BZ#1497096, BZ#1505346, BZ#1592332)

La localizzazione per RHEL è distribuita in più pacchetti

In RHEL 8, le località e le traduzioni non sono più fornite dal singolo glibc-commonpacchetto. Invece, ogni locale e lingua è disponibile in un glibc-langpack-CODEpacchetto. Inoltre, non tutti i locali sono installati di default, ma solo quelli selezionati nel programma di installazione. Gli utenti devono installare tutti gli altri pacchetti locali di cui hanno bisogno separatamente.

Per ulteriori informazioni sull'uso degli zaini, vedere Installing and using langpacks.

(BZ#1512009)

strace aggiornato alla versione 4.24

Red Hat Enterprise Linux 8 è distribuito con lo stracestrumento versione 4.24. Notevoli cambiamenti includono:

  • Le funzioni di manomissione delle chiamate di sistema sono state aggiunte con l'-e inject=opzione. Ciò include l'iniezione di errori, valori di ritorno, ritardi e segnali.
  • La qualificazione delle chiamate di sistema è stata migliorata:

    • È stata aggiunta un'-e trace=/regexopzione per filtrare le chiamate di sistema con espressioni regolari.
    • Prependendo un punto interrogativo a una qualifica di chiamata di sistema nell'-e trace=opzione permette di stracecontinuare, anche se la qualifica non corrisponde a nessuna chiamata di sistema.
    • Nell'-e traceopzione è stata aggiunta la designazione della personalità alle qualifiche per le chiamate di sistema.
  • È stata aggiunta la decodifica del motivo di kvm vcpuuscita. Per farlo, utilizzare l'-e kvm=vcpuopzione.
  • La libdwlibreria è ora usata per lo svolgimento in pila quando si usa l'-kopzione. Inoltre, è possibile demangling dei simboli, quando la libibertylibreria è installata sul sistema.
  • In precedenza, l'-ropzione ha fatto stracesì che l'-topzione fosse ignorata. La questione è stata risolta e le due opzioni sono ora indipendenti.
  • È stata aggiunta l'opzione [option]`-A per aprire i file di output in modalità append.
  • È stata aggiunta l'-Xopzione per configurare xlatla formattazione dell'output.
  • È stata migliorata la decodifica degli indirizzi delle prese con l'-yyopzione. Inoltre, è stata aggiunta la stampa del numero del dispositivo a blocchi e caratteri in -yymodalità.

Inoltre, è stata aggiunta, migliorata o aggiornata la decodifica dei seguenti elementi:

  • netlink protocolli, messaggi e attributi
  • arch_prctl, , bpf, getsockopt, , , io_pgetevent, kern_features, keyctlprctl, pkey_alloc, , pkey_free, , pkey_mprotect, ptrace, , rseq, setsockopt, socket, , , statxe altre chiamate di sistema
  • Molti comandi per la chiamata di ioctlsistema
  • Costanti di vario tipo
  • Tracciamento dei percorsi per execveat, inotify_add_watch, , , inotify_init, , select, , , , , , symlink, symlinkatchiamate di sistema e chiamate di mmapsistema con argomenti indiretti
  • Chiamate di sistema specifiche per le architetture ARM __ARM_NR_*
  • Elenchi di codici di segnale

(BZ#1641014)