4.14. コンパイラーおよび開発ツール


更新された GCC コンパイラーが RHEL 9.1 で利用可能になりました

システム GCC コンパイラーバージョン 11.2.1 が更新され、アップストリームの GCC で利用可能なバグ修正および機能拡張が数多く追加されました。

GNU コンパイラーコレクション (GCC) には、C、C++、および Fortran のプログラミング言語でアプリケーションを開発するためのツールが含まれます。

使用方法は、RHEL 9 での C および C++ アプリケーションの開発 を参照してください。

(BZ#2063255)

新しい GCC Toolset 12

GCC Toolset 12 は最新バージョンの開発ツールを提供するコンパイラーツールセットです。このツールセットは、AppStream リポジトリーにおいて、Software Collection の形式で、Application Stream として利用できます。

GCC コンパイラーがバージョン 12.1.1 に更新され、アップストリームの GCC で利用可能なバグ修正および機能拡張が数多く追加されました。

以下のツールおよびバージョンは、GCC Toolset 12 で利用できます。

ツールバージョン

GCC

12.1.1

GDB

11.2

binutils

2.35

dwz

0.14

annobin

10.76

GCC Toolset 12 をインストールするには、root で以下のコマンドを実行します。

# dnf install gcc-toolset-12

GCC Toolset 12 のツールを実行するには、以下のコマンドを実行します。

$ scl enable gcc-toolset-12 tool

GCC Toolset バージョン 12 のツールバージョンが、このようなツールのシステムバージョンをオーバーライドするシェルセッションを実行するには、次のコマンドを実行します。

$ scl enable gcc-toolset-12 bash

詳細は、GCC ツールセット 12 を参照してください。

(BZ#2077465)

GCC Toolset 12: Annobin がバージョン 10.76 にリベースされました。

GCC Toolset 12 では、Annobin パッケージがバージョン 10.76 に更新されました。

主なバグ修正と機能拡張は、以下のとおりです。

  • annocheck の新しいコマンドラインオプションは、別の方法でデバッグ情報を見つけることができない場合、debuginfod サービスの使用を避けるように指示します。debuginfod を使用すると annocheck で多くの情報が提供されますが、debuginfod サーバーが使用できない場合、annocheck のパフォーマンスが大幅に低下する可能性もあります。
  • Annobin ソースは、必要に応じて設定および作成するのではなく、meson および ninja を使用してビルドできるようになりました。
  • Annocheck は、Rust 1.18 コンパイラーによってビルドされたバイナリーをサポートするようになりました。

さらに、GCC Toolset 12 バージョンの Annobin で次の既知の問題が報告されています。

状況によっては、次のようなエラーメッセージでコンパイルが失敗する可能性があります。

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

この問題を回避するには、プラグインディレクトリーに annobin.so から 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 は、使用しているアーキテクチャーに置き換えます。

  • aarch64
  • i686
  • ppc64le
  • s390x
  • x86_64

(BZ#2077438)

GCC Toolset 12: binutils がバージョン 2.38 にリベースされました

GCC Toolset 12 では、binutils パッケージがバージョン 2.38 に更新されました。

主なバグ修正と機能拡張は、以下のとおりです。

  • binutils パッケージのすべてのツールで、マルチバイト文字の存在を表示または警告するオプションがサポートされるようになりました。
  • readelf および objdump ツールは、デフォルトで debuginfo ファイルへのリンクを自動的にたどるようになりました。この動作は、readelf--debug-dump=no-follow-links オプションまたは objdump--dwarf=no-follow-links オプションを使用して無効にすることができます。

(BZ#2077445)

GCC 12 以降は _FORTIFY_SOURCE レベル 3 をサポートします

この機能拡張により、ユーザーは、GCC バージョン 12 以降でビルドする場合に、コンパイラーコマンドラインで -D_FORTIFY_SOURCE=3 を使用してアプリケーションをビルドできます。_FORTIFY_SOURCE レベル 3 では、ソースコード強化の範囲が改善されるため、コンパイラーコマンドラインで -D_FORTIFY_SOURCE=3 を指定してビルドされたアプリケーションのセキュリティーが向上します。これは、GCC バージョン 12 以降、および __builtin_dynamic_object_size ビルトインを使用する RHEL 9 のすべての Clang でサポートされています。

(BZ#2033683)

DNS スタブリゾルバーオプションが no-aaaa オプションをサポートするようになりました

今回の機能拡張により、glibc/etc/resolv.confno-aaaa スタブリゾルバーオプションと RES_OPTIONS 環境変数を認識するようになりました。このオプションが有効な場合、AAAA クエリーはネットワーク経由で送信されません。システム管理者は、診断目的で AAAA DNS ルックアップを無効にすることができます。たとえば、IPv4 のみのネットワークでの余分なルックアップが DNS の問題に影響しないように除外できます。

(BZ#2096191)

IBM Z シリーズ z16 のサポートを追加

IBM z16 プラットフォームで s390 命令セットがサポートされるようになりました。IBM z16 は、glibcHWCAP_S390_VXRS_PDE2HWCAP_S390_NNPA という 2 つの追加のハードウェア機能を提供します。その結果、アプリケーションはこれらの機能を使用して、最適化されたライブラリーと機能を提供できるようになりました。

(BZ#2077838)

アプリケーションは、新しい glibc インターフェイスを介して再起動可能なシーケンス機能を使用できます

sched_getcpu 関数 (特に aarch64 で) を高速化するには、glibc でデフォルトで再起動可能なシーケンス (rseq) カーネル機能を使用する必要があります。アプリケーションが共有 rseq 領域を継続的に使用できるようにするために、glibc は、glibc 2.35 アップストリームバージョンで最初に追加された __rseq_offset__rseq_size、および __rseq_flags シンボルを提供するようになりました。この機能強化により、sched_getcpu 関数のパフォーマンスが向上し、アプリケーションは新しい glibc インターフェイスを介して再起動可能なシーケンス機能を使用できるようになりました。

(BZ#2085529)

GCC Toolset 12: GDB がバージョン 11.2 にリベースされました。

GCC Toolset 12 では、GDB パッケージがバージョン 11.2 に更新されました。

主なバグ修正と機能拡張は、以下のとおりです。

  • 64 ビット ARM アーキテクチャーメモリータグ付け拡張 (MTE) の新しいサポート。memory-tag プレフィックスが付いた新しいコマンドを参照してください。
  • -break-insert および -dprintf-insert--qualified オプション。このオプションは、全スコープで検索するのではなく、ユーザーのイベントの場所と完全に一致するものを探します。

    たとえば、break --qualified foo は、グローバルスコープで foo という名前のシンボルを探します。--qualified を指定しないと、GDB はすべてのスコープでその名前のシンボルを検索します。

  • --force-condition: 現在無効になっていても、指定された条件が定義されます。
  • -break-condition --force: MI コマンドと同様。
  • -file-list-exec-source-files は、出力を制限するオプションの REGEXP を受け入れます。
  • .gdbinit 検索パスには config ディレクトリーが含まれます。順序は次のとおりです。

    1. $XDG_CONFIG_HOME/gdb/gdbinit
    2. $HOME/.config/gdb/gdbinit
    3. $HOME/.gdbinit
  • ~/.config/gdb/gdbearlyinit または ~/.gdbearlyinit のサポート。
  • -eix および -eiex 早期初期化ファイルオプション。

ターミナルユーザーインターフェイス (TUI):

  • ターミナルユーザーインターフェイス (TUI) ウィンドウ内でのマウス操作がサポートされます。
  • フォーカスされたウィンドウで機能しないキーの組み合わせが GDB に渡されるようになりました。

新しいコマンド:

  • 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 および set startup-quietly: GDB スクリプトで -q または -quiet を指定する方法。早期初期化ファイルでのみ有効です。
  • show print type hex および set print type hex: ストラクチャーメンバーのサイズまたはオフセットを 10 進法ではなく 16 進法で出力するように GDB に指示します。
  • show python ignore-environment および set python ignore-environment: 有効にすると、GDB の Python インタープリターは、Python 実行可能ファイルに -E を渡すのと同じように、Python 環境変数を無視します。早期初期化ファイルでのみ有効です。
  • show python dont-write-bytecode および set python dont-write-bytecode: off の場合、これらのコマンドは、Python 実行可能ファイルに -B を渡すのと同様に、GDB の Python インタープリターがインポートされたモジュールのバイトコードコンパイル済みオブジェクトを書き込むことを抑制します。早期初期化ファイルでのみ有効です。

変更したコマンド:

  • break LOCATION if CONDITION: CONDITION が無効な場合、GDB はブレークポイントの設定を拒否します。-force-condition オプションはこれをオーバーライドします。
  • CONDITION -force N COND: 前のコマンドと同じ。
  • inferior [ID]: ID が省略されている場合、このコマンドは現在の下位に関する情報を出力します。それ以外の点は変更ありません。
  • ptype[/FLAGS] TYPE | EXPRESSION: /x フラグを使用して、struct メンバーのサイズとオフセットを出力するときに 16 進法での表記を使用します。/d フラグを使用して同じことを行いますが、10 進法を使用します。
  • info sources: 出力が再構築されました。

Python API:

  • 下位オブジェクトには、読み取り専用の connection_num 属性が含まれています。
  • 新しい gdb.Frame.level() メソッド。
  • 新しい gdb.PendingFrame.level() メソッド。
  • gdb.Stop の代わりに gdb.BreakpoiontEvent が出力されます。

(BZ#2077494)

GDB は Power 10 PLT 命令をサポートします

GDB は、Power 10 PLT 命令をサポートするようになりました。今回の更新により、ユーザーは共有ライブラリー関数にステップインし、GDB バージョン 10.2-10 以降を使用してスタックバックトレースを検査できるようになりました。

(BZ#1870017)

dyninst パッケージ化がバージョン 12.1 にリベースされました

dyninst パッケージがバージョン 12.1 にリベースされました。主なバグ修正と機能拡張は、以下のとおりです。

  • glibc-2.35 の複数名前空間に対する初期サポート
  • DWARF 並列解析の並列処理性を修正
  • CUDA および CDNA2 GPU バイナリーのサポートを改善
  • IBM POWER Systems (リトルエンディアン) レジスターアクセスのサポートを改善
  • PIE バイナリーのサポートを改善
  • キャッチブロックの解析を修正
  • 64 ビット Arm (aarch64) 浮動小数点レジスターへのアクセスを修正

(BZ#2057675)

新しいファイルセット /etc/profile.d/debuginfod.*

組織の debuginfod サービスをアクティベートするための新しい fileset を追加しました。システム全体の debuginfod クライアントアクティベーションを取得するには、URL を /etc/debuginfod/FOO.urls ファイルに追加する必要があります。

(BZ#2088774)

Rust Toolset がバージョン 1.62.1 にリベースされました

Rust Toolset が、バージョン 1.62.1 に更新されました。主な変更点は、以下のとおりです。

  • 分割代入では、代入の左側にある既存の変数にパターンを代入できます。たとえば、タプル代入は変数にスワップできます: (a、b) = (b、a);
  • core::arch::asm マクロを使用して、インラインアセンブリが 64 ビット x86 および 64 ビット ARM でサポートされるようになりました。詳細は、リファレンスの "インラインアセンブリ" の章 /usr/share/doc/rust/html/reference/inline-assembly.html (オンライン: https://doc.rust-lang.org/reference/inline-assembly.html) を参照してください。
  • 列挙は、明示的にアノテーションが付けられた #[default] バリアントを使用して Default トレイトを派生できるようになりました。
  • MutexCondVar、および RwLock は、pthreads ではなくカスタム futex ベースの実装を使用するようになり、Rust 言語保証によって新たな最適化が可能になりました。
  • Rust は、新しく安定化された Termination トレイトを実装するユーザー定義型を含む、main からのカスタム終了コードをサポートするようになりました。
  • Cargo は、依存関係機能のより詳細な制御をサポートしています。dep: プレフィックスは、それを機能として公開することなく、オプションの依存関係を参照できます。また、? は、package-name?/feature-name のように、その依存関係が他の場所で有効になっている場合にのみ依存関係の機能を有効にします。
  • Cargo には、依存関係を Cargo.toml に追加するための新しい cargo add サブコマンドがあります。
  • 詳細は、一連のアップストリームリリース発表を参照してください。

(BZ#2075337)

LLVM Toolset がバージョン 14.0.6 にリベース

LLVM Toolset はバージョン 14.0.6 にリベースされました。主な変更点は、以下のとおりです。

  • 64 ビット x86 では、AVX512-FP16 命令のサポートが追加されました。
  • Armv9-A、Armv9.1-A、および Armv9.2-A アーキテクチャーのサポートが追加されました。
  • PowerPC では、IBM double-double 形式を表す __ibm128 型が追加されました。これは __attribute__((mode (IF))) としても使用できます。

clang の変更:

  • C++2bif consteval が実装されました。
  • 64 ビット x86 では、AVX512-FP16 命令のサポートが追加されました。
  • 実験段階の OpenCL C 3.0 および OpenCL 2021 の C++ サポートが完了しました。
  • -E -P プリプロセッサーの出力は、必ず空白行を省略します。これは、GCC の動作に一致します。以前は、最大 8 つの連続する空白行が出力に表示される可能性がありました。
  • C89 だけでなく、C99 以降の標準で -Wdeclaration-after-statement をサポートします。これは、GCC の動作に一致します。注目すべきユースケースは、宣言とコードの混在を禁止するスタイルガイドのサポートですが、さらに新しい C 標準に移行したいと考えています。

詳細は、LLVM Toolset および Clang アップストリームのリリースノートを参照してください。

(BZ#2061041)

Go Toolset がバージョン 1.18.2 にリベース

Go Toolset はバージョン 1.18.2 にリベースされました。

主な変更点は、以下のとおりです。

  • 以前のバージョンの Go との下位互換性を維持しながら generics を導入。
  • 新しいファジングライブラリー。
  • 新しい debug/buildinfo および net/netip パッケージ。
  • go get ツールがパッケージをビルドまたはインストールしなくなりました。現在は、go.mod の依存関係のみを処理します。
  • メインモジュールの go.mod ファイルで go 1.17 以降が指定されている場合、追加の引数なしで go mod download コマンドを使用すると、メインモジュールの go.mod ファイルで明示的に必要なモジュールのソースコードのみがダウンロードされます。推移的な依存関係のソースコードもダウンロードするには、go mod download all コマンドを使用します。
  • go mod vendor サブコマンドが、出力ディレクトリーを設定する -o オプションをサポートするようになりました。
  • go mod tidy コマンドが、インポートされた各パッケージを提供しているビルドリスト内のモジュールが 1 つだけであることを確認するためにソースコードが必要なモジュールの追加のチェックサムを go.sum ファイルに保持するようになりました。この変更は、メインモジュールの go.mod ファイルの Go バージョンに左右されません。

(BZ#2075169)

新しいモジュールストリーム: maven:3.8

RHEL 9.1 では、新しいモジュールストリームとして Maven 3.8 が導入されています。

maven:3.8 モジュールストリームをインストールするには、次を使用します。

# dnf module install maven:3.8

(BZ#2083112)

.NET バージョン 7.0 が利用可能

Red Hat Enterprise Linux 9.1 は、.NET バージョン 7.0 と共に配布されます。以下は、主な改善点です。

  • IBM Power のサポート (ppc64le)

詳細は、.NET 7.0 RPM パッケージリリースノート および .NET 7.0 コンテナーリリースノート を参照してください。

(BZ#2112027)

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.