4.14. Compilateurs et outils de développement
Le compilateur GCC mis à jour est désormais disponible pour RHEL 9.1
Le compilateur GCC du système, version 11.2.1, a été mis à jour pour inclure de nombreuses corrections de bogues et améliorations disponibles dans le GCC en amont.
La collection de compilateurs GNU (GCC) fournit des outils pour développer des applications avec les langages de programmation C, C , et Fortran.
Pour plus d'informations sur l'utilisation, voir Développement d'applications C et C dans RHEL 9.
Nouveau jeu d'outils GCC 12
GCC Toolset 12 est un ensemble d'outils de compilation qui fournit des versions récentes d'outils de développement. Il est disponible en tant que flux d'application sous la forme d'une collection de logiciels dans le dépôt AppStream
.
Le compilateur GCC a été mis à jour vers la version 12.1.1, qui apporte de nombreuses corrections de bogues et améliorations disponibles dans la version amont de GCC.
Les outils et versions suivants sont fournis par le Toolset 12 de GCC :
Outil | Version |
---|---|
CCG | 12.1.1 |
GDB | 11.2 |
binutils | 2.35 |
dwz | 0.14 |
annobin | 10.76 |
Pour installer GCC Toolset 12, exécutez la commande suivante en tant que root :
# dnf install gcc-toolset-12
Pour exécuter un outil du GCC Toolset 12 :
$ scl enable gcc-toolset-12 tool
Pour lancer une session shell dans laquelle les versions des outils du Toolset 12 de GCC remplacent les versions système de ces outils :
$ scl enable gcc-toolset-12 bash
Pour plus d'informations, voir GCC Toolset 12.
(BZ#2077465)
GCC Toolset 12 : Annobin rebasé à la version 10.76
Dans GCC Toolset 12, le paquetage Annobin a été mis à jour à la version 10.76.
Les corrections de bogues et les améliorations les plus notables sont les suivantes
-
Une nouvelle option de ligne de commande pour annocheck lui permet d'éviter d'utiliser le service
debuginfod
, s'il n'est pas en mesure de trouver des informations de débogage d'une autre manière. L'utilisation dedebuginfod
permet à annocheck d'obtenir plus d'informations, mais elle peut également entraîner des ralentissements importants des performances d'annocheck si le serveurdebuginfod
n'est pas disponible. -
Les sources d'Annobin peuvent maintenant être compilées en utilisant
meson
etninja
plutôt que configure et make si désiré. - Annocheck supporte désormais les binaires construits par le compilateur Rust 1.18.
En outre, le problème connu suivant a été signalé dans la version GCC Toolset 12 d'Annobin :
Dans certaines circonstances, il est possible qu'une compilation échoue avec un message d'erreur similaire au suivant :
cc1: fatal error: inaccessible plugin file
opt/rh/gcc-toolset-12/root/usr/lib/gcc/architecture-linux-gnu/12/plugin/gcc-annobin.so
expanded from short plugin name gcc-annobin: No such file or directory
Pour contourner le problème, créez un lien symbolique dans le répertoire du plugin de annobin.so
vers gcc-annobin.so
:
# cd /opt/rh/gcc-toolset-12/root/usr/lib/gcc/architecture-linux-gnu/12/plugin
# ln -s annobin.so gcc-annobin.so
Où architecture est remplacé par l'architecture utilisée :
-
aarch64
-
i686
-
ppc64le
-
s390x
-
x86_64
(BZ#2077438)
GCC Toolset 12 : binutils
rebasé à la version 2.38
Dans GCC Toolset 12, le paquet binutils
a été mis à jour à la version 2.38.
Les corrections de bogues et les améliorations les plus notables sont les suivantes
-
Tous les outils du paquet
binutils
prennent désormais en charge les options permettant d'afficher ou d'avertir de la présence de caractères multi-octets. -
Les outils
readelf
etobjdump
suivent désormais automatiquement et par défaut tous les liens vers des fichiersdebuginfo
distincts. Ce comportement peut être désactivé en utilisant l'option--debug-dump=no-follow-links
pourreadelf
ou l'option--dwarf=no-follow-links
pourobjdump
.
(BZ#2077445)
GCC 12 et les versions ultérieures prennent en charge _FORTIFY_SOURCE
niveau 3
Avec cette amélioration, les utilisateurs peuvent construire des applications avec -D_FORTIFY_SOURCE=3
dans la ligne de commande du compilateur lorsqu'ils construisent avec la version 12 ou ultérieure de GCC. _FORTIFY_SOURCE
niveau 3 améliore la couverture de la fortification du code source, améliorant ainsi la sécurité des applications construites avec -D_FORTIFY_SOURCE=3
dans la ligne de commande du compilateur. Cette fonctionnalité est prise en charge dans les versions 12 et ultérieures de GCC et dans tous les Clang de RHEL 9 avec l'intégration __builtin_dynamic_object_size
.
L'option DNS stub resolver supporte désormais l'option no-aaaa
Avec cette amélioration, glibc
reconnaît désormais l'option no-aaaa
stub resolver dans /etc/resolv.conf
et la variable d'environnement RES_OPTIONS
. Lorsque cette option est active, aucune requête AAAA n'est envoyée sur le réseau. Les administrateurs système peuvent désactiver les recherches DNS AAAA à des fins de diagnostic, par exemple pour s'assurer que les recherches superflues sur les réseaux exclusivement IPv4 ne contribuent pas aux problèmes DNS.
Ajout de la prise en charge de la série IBM Z z16
La prise en charge du jeu d'instructions s390
est désormais disponible sur la plate-forme IBM z16
. IBM z16
fournit deux capacités matérielles supplémentaires dans glibc
, à savoir HWCAP_S390_VXRS_PDE2
et HWCAP_S390_NNPA
. Par conséquent, les applications peuvent désormais utiliser ces capacités pour fournir des bibliothèques et des fonctions optimisées.
(BZ#2077838)
Les applications peuvent utiliser les caractéristiques de la séquence redémarrable par l'intermédiaire des nouvelles interfaces glibc
Pour accélérer la fonction sched_getcpu
(en particulier sur aarch64), il est nécessaire d'utiliser la fonction noyau de séquences redémarrables (rseq) par défaut dans glibc
. Pour permettre aux applications d'utiliser en permanence la zone rseq partagée, glibc
fournit maintenant les symboles __rseq_offset
, __rseq_size
et __rseq_flags
qui ont été ajoutés pour la première fois dans la version amont glibc
2.35. Grâce à cette amélioration, les performances de la fonction sched_getcpu
sont accrues et les applications peuvent désormais utiliser les caractéristiques de la séquence redémarrable par l'intermédiaire des nouvelles interfaces glibc
.
GCC Toolset 12 : GDB repassé à la version 11.2
Dans GCC Toolset 12, le paquetage GDB a été mis à jour à la version 11.2.
Les corrections de bogues et les améliorations les plus notables sont les suivantes
-
Nouvelle prise en charge de l'architecture ARM 64 bits Memory Tagging Extension (MTE). Voir les nouvelles commandes avec le préfixe
memory-tag
. --qualified
pour-break-insert
et-dprintf-insert
. Cette option recherche une correspondance exacte avec le lieu de l'événement de l'utilisateur au lieu d'effectuer une recherche dans tous les champs d'application.Par exemple,
break --qualified foo
recherchera un symbole nommé foo dans la portée globale. Sans--qualified
, GDB recherchera un symbole portant ce nom dans toutes les portées.-
--force-condition
: Toute condition fournie est définie même si elle est actuellement invalide. -
-break-condition --force
: De même pour la commande MI. -
-file-list-exec-source-files
accepte l'optionREGEXP
pour limiter la production. .gdbinit
le chemin de recherche inclut le répertoire de configuration. L'ordre est le suivant :-
$XDG_CONFIG_HOME/gdb/gdbinit
-
$HOME/.config/gdb/gdbinit
-
$HOME/.gdbinit
-
-
Support pour
~/.config/gdb/gdbearlyinit
ou~/.gdbearlyinit
. -
-eix
et-eiex
options du fichier d'initialisation précoce.
Interface utilisateur du terminal (TUI) :
- Prise en charge des actions de la souris dans les fenêtres de l'interface utilisateur du terminal (TUI).
- Les combinaisons de touches qui n'agissent pas sur la fenêtre ciblée sont désormais transmises à GDB.
Nouvelles commandes :
-
show print memory-tag-violations
-
set print memory-tag-violations
-
memory-tag show-logical-tag
-
memory-tag with-logical-tag
-
memory-tag show-allocation-tag
-
memory-tag check
-
show startup-quietly
etset startup-quietly
: Une façon de spécifier-q
ou-quiet
dans les scripts GDB. Valable uniquement dans les premiers fichiers d'initialisation. -
show print type hex
etset print type hex
: indique à GDB d'imprimer les tailles ou les décalages des membres de la structure en hexadécimal plutôt qu'en décimal. -
show python ignore-environment
etset python ignore-environment
: Si cette option est activée, l'interpréteur Python de GDB ignore les variables d'environnement Python, un peu comme si vous passiez-E
à l'exécutable Python. Valable uniquement dans les premiers fichiers d'initialisation. -
show python dont-write-bytecode
etset python dont-write-bytecode
: Sioff
, ces commandes empêchent l'interpréteur Python de GDB d'écrire des objets compilés en bytecode pour les modules importés, de la même manière qu'en passant-B
à l'exécutable Python. Valable uniquement dans les premiers fichiers d'initialisation.
Commandes modifiées :
-
break LOCATION if CONDITION
: Si CONDITION est invalide, GDB refuse de placer un point d'arrêt. L'option-force-condition
permet d'annuler ce refus. -
CONDITION -force N COND
: Identique à la commande précédente. -
inferior [ID]
: Lorsque l'ID est omis, cette commande imprime des informations sur l'inférieur actuel. Dans le cas contraire, les informations restent inchangées. -
ptype[/FLAGS] TYPE | EXPRESSION
: Utilisez l'option/x
pour utiliser la notation hexadécimale lors de l'impression des tailles et des décalages des membres de la structure. Utilisez l'option/d
pour faire la même chose mais en utilisant la notation décimale. -
info sources
: La sortie a été restructurée.
API Python :
-
Les objets inférieurs contiennent un attribut
connection_num
en lecture seule. -
Nouvelle méthode
gdb.Frame.level()
. -
Nouvelle méthode
gdb.PendingFrame.level()
. -
gdb.BreakpoiontEvent
émis au lieu degdb.Stop
.
(BZ#2077494)
GDB supporte les instructions Power 10 PLT
GDB prend désormais en charge les instructions PLT Power 10. Grâce à cette mise à jour, les utilisateurs peuvent accéder aux fonctions de la bibliothèque partagée et inspecter les traces de la pile à l'aide de la version 10.2-10 de GDB et des versions ultérieures.
(BZ#1870017)
Le site dyninst
est passé à la version 12.1
Le paquetage dyninst
a été rebasé à la version 12.1. Les corrections de bogues et améliorations notables sont les suivantes :
-
Prise en charge initiale de
glibc-2.35
plusieurs espaces de noms - Corrections de la simultanéité pour l'analyse parallèle de DWARF
-
Meilleure prise en charge des binaires GPU
CUDA
etCDNA2
- Meilleure prise en charge de l'accès aux registres des systèmes IBM POWER (little endian)
- Meilleure prise en charge des binaires PIE
- Correction de l'analyse des blocs catch
-
Correction de l'accès aux registres à virgule flottante 64-bit Arm (
aarch64
)
Un nouveau jeu de fichiers /etc/profile.d/debuginfod.*
Ajout d'un nouveau jeu de fichiers pour l'activation des services de débogage organisationnel. Pour obtenir une activation du client debuginfod
à l'échelle du système, vous devez ajouter l'URL au fichier /etc/debuginfod/FOO.urls
.
Rust Toolset repassé à la version 1.62.1
Rust Toolset a été mis à jour à la version 1.62.1. Les changements notables sont les suivants :
-
La déstructuration de l'affectation permet aux modèles d'affecter des variables existantes dans la partie gauche d'une affectation. Par exemple, une affectation de n-uplets peut échanger des variables :
(a, b) = (b, a);
-
L'assemblage en ligne est désormais pris en charge sur x86 64 bits et ARM 64 bits à l'aide de la macro
core::arch::asm!
. Pour plus de détails, voir le chapitre "Assemblage en ligne" de la référence,/usr/share/doc/rust/html/reference/inline-assembly.html
(en ligne à https://doc.rust-lang.org/reference/inline-assembly.html). -
Les Enums peuvent désormais dériver le trait
Default
avec une variante#[default]
explicitement annotée. -
Mutex
,CondVar
, etRwLock
utilisent désormais une implémentation personnalisée basée surfutex
plutôt que pthreads, avec de nouvelles optimisations rendues possibles par les garanties du langage Rust. -
Rust prend désormais en charge les codes de sortie personnalisés de
main
, y compris les types définis par l'utilisateur qui mettent en œuvre le traitTermination
nouvellement stabilisé. -
Cargo permet de mieux contrôler les caractéristiques des dépendances. Le préfixe
dep:
peut faire référence à une dépendance optionnelle sans l'exposer en tant que fonctionnalité, et un?
n'active une fonctionnalité de dépendance que si cette dépendance est activée ailleurs, commepackage-name?/feature-name
. -
Cargo dispose d'une nouvelle sous-commande
cargo add
pour ajouter des dépendances àCargo.toml
. Pour plus de détails, veuillez consulter la série d'annonces de versions en amont :
(BZ#2075337)
Le jeu d'outils LLVM passe à la version 14.0.6
LLVM Toolset a été rebasé à la version 14.0.6. Les changements notables sont les suivants :
-
Sur 64-bit x86, la prise en charge des instructions
AVX512-FP16
a été ajoutée. - La prise en charge des architectures Armv9-A, Armv9.1-A et Armv9.2-A a été ajoutée.
-
Sur PowerPC, ajout du type
__ibm128
pour représenter le format IBM double-double, également disponible sous la forme__attribute__((mode(IF)))
.
clang
changements :
-
if consteval
pourC 2b
est désormais implémentée. -
Sur 64-bit x86, la prise en charge des instructions
AVX512-FP16
a été ajoutée. -
Fin de la prise en charge d'OpenCL C 3.0 et
C
pour OpenCL 2021 à l'état expérimental. -
La sortie du préprocesseur
-E -P
omet désormais toujours les lignes vides, ce qui correspond au comportement de GCC. Auparavant, jusqu'à 8 lignes blanches consécutives pouvaient apparaître dans la sortie. -
Prise en charge de
-Wdeclaration-after-statement
avecC99
et les normes ultérieures, et pas seulement C89, ce qui correspond au comportement de GCC. Un cas d'utilisation notable est la prise en charge des guides de style qui interdisent de mélanger les déclarations et le code, mais qui veulent passer à des normes C plus récentes.
Pour plus d'informations, voir les notes de mise à jour en amont de LLVM Toolset et Clang.
(BZ#2061041)
Go Toolset passe à la version 1.18.2
Go Toolset est passé à la version 1.18.2.
Les changements les plus notables sont les suivants :
- L'introduction des génériques tout en maintenant la compatibilité avec les versions antérieures de Go.
- Une nouvelle bibliothèque de fuzzing.
-
Nouveaux paquets
debug
/buildinfo
etnet
/netip
. -
L'outil
go get
ne construit ni n'installe plus de paquets. Il ne gère plus que les dépendances dansgo.mod
. -
Si le fichier
go.mod
du module principal spécifiego 1.17
ou une version supérieure, la commandego mod download
utilisée sans arguments supplémentaires ne télécharge que le code source des modules explicitement requis dans le fichiergo.mod
du module principal. Pour télécharger également le code source des dépendances transitives, utilisez la commandego mod download all
. -
La sous-commande
go mod vendor
propose désormais une option-o
pour définir le répertoire de sortie. -
La commande
go mod tidy
conserve désormais des sommes de contrôle supplémentaires dans le fichiergo.sum
pour les modules dont le code source est nécessaire pour vérifier qu'un seul module dans la liste de construction fournit chaque paquet importé. Ce changement n'est pas conditionné par la version de Go dans le fichiergo.mod
du module principal.
(BZ#2075169)
Un nouveau flux de modules : maven:3.8
RHEL 9.1 introduit Maven 3.8
en tant que nouveau flux de modules.
Pour installer le flux du module maven:3.8
, utilisez :
# dnf module install maven:3.8
(BZ#2083112)
la version 7.0 de .NET est disponible
Red Hat Enterprise Linux 9.1 est distribué avec .NET version 7.0. Les améliorations notables sont les suivantes :
-
Support pour IBM Power (
ppc64le
)
Pour plus d'informations, voir les notes de mise à jour pour les paquets RPM .NET 7.0 et les notes de mise à jour pour les conteneurs .NET 7.0.
(BZ#2112027)