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.

(BZ#2063255)

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 :

OutilVersion

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 de debuginfod permet à annocheck d'obtenir plus d'informations, mais elle peut également entraîner des ralentissements importants des performances d'annocheck si le serveur debuginfod n'est pas disponible.
  • Les sources d'Annobin peuvent maintenant être compilées en utilisant meson et ninja 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

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 et objdump suivent désormais automatiquement et par défaut tous les liens vers des fichiers debuginfo distincts. Ce comportement peut être désactivé en utilisant l'option --debug-dump=no-follow-links pour readelf ou l'option --dwarf=no-follow-links pour objdump.

(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.

(BZ#2033683)

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.

(BZ#2096191)

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.

(BZ#2085529)

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'option REGEXP pour limiter la production.
  • .gdbinit le chemin de recherche inclut le répertoire de configuration. L'ordre est le suivant :

    1. $XDG_CONFIG_HOME/gdb/gdbinit
    2. $HOME/.config/gdb/gdbinit
    3. $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 et set 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 et set 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 et set 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 et set python dont-write-bytecode: Si off, 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 de gdb.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 et CDNA2
  • 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)

(BZ#2057675)

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.

(BZ#2088774)

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, et RwLock utilisent désormais une implémentation personnalisée basée sur futex 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 trait Termination 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, comme package-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 pour C 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 avec C99 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 et net/netip.
  • L'outil go get ne construit ni n'installe plus de paquets. Il ne gère plus que les dépendances dans go.mod.
  • Si le fichier go.mod du module principal spécifie go 1.17 ou une version supérieure, la commande go mod download utilisée sans arguments supplémentaires ne télécharge que le code source des modules explicitement requis dans le fichier go.mod du module principal. Pour télécharger également le code source des dépendances transitives, utilisez la commande go 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 fichier go.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 fichier go.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)