4.11. コンパイラーおよび開発ツール
新しい GCC Toolset 12
GCC Toolset 12 は最新バージョンの開発ツールを提供するコンパイラーツールセットです。このツールセットは、AppStream リポジトリーにおいて、Software Collection の形式で、Application Streams として利用できます。
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 で以下のコマンドを実行します。
yum install gcc-toolset-12
# yum install gcc-toolset-12
GCC Toolset 12 のツールを実行するには、以下のコマンドを実行します。
scl enable gcc-toolset-12 tool
$ scl enable gcc-toolset-12 tool
GCC Toolset バージョン 12 のツールバージョンが、このようなツールのシステムバージョンをオーバーライドするシェルセッションを実行するには、次のコマンドを実行します。
scl enable gcc-toolset-12 bash
$ scl enable gcc-toolset-12 bash
詳細は、GCC ツールセット を参照してください。
(BZ#2077276)
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
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
# 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#2077447)
GCC Toolset 12: binutils がバージョン 2.38 にリベースされました
GCC Toolset 12 では、elfutils パッケージがバージョン 2.38 に更新されました。
主なバグ修正と機能拡張は、以下のとおりです。
-
binutilsパッケージのすべてのツールで、マルチバイト文字の存在を表示または警告するオプションがサポートされるようになりました。 -
readelfおよびobjdumpツールは、デフォルトでdebuginfoファイルへのリンクを自動的にたどるようになりました。この動作は、readelfの--debug-dump=no-follow-linksオプションまたはobjdumpの--dwarf=no-follow-linksオプションを使用して無効にすることができます。
(BZ#2077448)
GCC 12 以降は _FORTIFY_SOURCE レベル 3 をサポートします
この機能拡張により、ユーザーは、GCC バージョン 12 以降でビルドする場合に、コンパイラーコマンドラインで -D_FORTIFY_SOURCE=3 を使用してアプリケーションをビルドできます。_FORTIFY_SOURCE レベル 3 では、ソースコード強化の範囲が改善されるため、コンパイラーコマンドラインで -D_FORTIFY_SOURCE=3 を指定してビルドされたアプリケーションのセキュリティーが向上します。これは、GCC バージョン 12 以降および Clang バージョン 9.0 以降でサポートされており、__builtin_dynamic_object_size ビルトインが含まれています。
(BZ#2033684)
DNS スタブリゾルバーオプションが no-aaaa オプションをサポートするようになりました
今回の機能拡張により、glibc は /etc/resolv.conf の no-aaaa スタブリゾルバーオプションと RES_OPTIONS 環境変数を認識するようになりました。このオプションが有効な場合、AAAA クエリーはネットワーク経由で送信されません。システム管理者は、診断目的で AAAA DNS ルックアップを無効にすることができます。たとえば、IPv4 のみのネットワークでの余分なルックアップが DNS の問題に影響しないように除外できます。
glibc で IBM Z シリーズ z16 のサポートを追加
glibc の IBM z16 プラットフォームで s390 命令セットがサポートされるようになりました。IBM z16 は、HWCAP_S390_VXRS_PDE2 と HWCAP_S390_NNPA という 2 つの追加のハードウェア機能を提供します。その結果、アプリケーションはこれらの機能を使用して、最適化されたライブラリーと機能を提供できるようになりました。
(BZ#2077835)
新しい make-latest パッケージ
今回の機能拡張により、make ユーティリティーの最新バージョンを含む make-latest パッケージが導入されました。以前は、GCC Toolset を通じて最新の make バージョンを提供していました。これで、make-latest パッケージを個別にインストールし、scl enable make43/bin/bash で最新バージョンを実行できます (make43 バージョンが最新の場合)。
(BZ#2083419)
GCC Toolset 12: GDB がバージョン 11.2 にリベースされました。
GCC Toolset 12 では、GDB パッケージがバージョン 11.2 に更新されました。
主なバグ修正と機能拡張は、以下のとおりです。
-
Aarch64 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 ディレクトリーが含まれます。順序は次のとおりです。-
$XDG_CONFIG_HOME/gdb/gdbinit -
$HOME/.config/gdb/gdbinit -
$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#2077492)
libpfm が AMD Zen 2 および Zen 3 プロセッサーをサポートするようになりました
この機能強化により、ユーザーは libpfm を使用して AMD Zen 2 および Zen 3 パフォーマンス監視ハードウェアにアクセスできるようになりました。
papi が AMD Zen 2 および Zen 3 プロセッサーをサポートするようになりました
この機能強化により、ユーザーは papi を使用して AMD Zen 2 および Zen 3 パフォーマンス監視ハードウェアにアクセスできるようになりました。
ARM プロセッサーのハードウェア識別の改善
この機能強化により、papi_avail ユーティリティーは、さまざまな ARM ベンダーのベンダー文字列とコード情報を正しく報告するようになりました。このユーティリティーを使用すると、PAPI_get_hardware_info() 関数を使用して、aarch64 アーキテクチャーで、ARM 以外のメーカーが製造したプロセッサーを識別できます。その結果、開発者は必要なアーキテクチャーに合わせてコードを調整できます。
(BZ#2037427)
富士通 A64FX イベントマッピングの更新
PAPI ライブラリーは、Fujitsu A64FX プロセッサー用に更新されました。ユーザーは、プログラムのパフォーマンスを分析するために使用できる papi_avail の出力で追加のプリセットを使用できるようになりました。
これらには、IDL イベントプリセットが含まれます。
PAPI_BRU_IDL- ブランチユニットのアイドル
PAPI_FXU_IDL- 整数ユニットのアイドル
PAPI_FPU_IDL- 浮動小数点ユニットのアイドル
PAPI_LSU_IDL- ロードストアユニットアイドル
(BZ#2037417)
dyninst パッケージ化がバージョン 12.1 にリベースされました
dyninst パッケージがバージョン 12.1 にリベースされました。主なバグ修正と機能拡張は、以下のとおりです。
-
glibc-2.35の複数名前空間に対する初期サポート - DWARF 並列解析の並列処理性を修正
-
CUDAおよびCDNA2GPU バイナリーのサポートを改善 - IBM POWER Systems (リトルエンディアン) レジスターアクセスのサポートを改善
- PIE バイナリーのサポートを改善
- キャッチブロックの解析を修正
-
64 ビット Arm (
aarch64) 浮動小数点レジスターへのアクセスを修正
systemtap パッケージがバージョン 4.7 にリベース
systemtap パッケージがバージョン 4.7 にリベースされました。主なバグ修正と機能拡張は、以下のとおりです。
-
xMOK キーを使用してモジュールに手動で署名するための新しい
--sign-moduleオプション。SecureBoot で使用します。 -
アノテーション付きソースコードのシステム全体のプロファイルを作成するための新しい
stap-profile-annotateツール。 - 関数のエントリーとリターンをプローブするための新しい一般的な Python タップセット。
-
ユーザー空間にある可能性がある文字列のカーネル空間プローブの
$ foo $の拡張処理。 - 非キャプチャグループの正規表現言語の拡張。
- 最近追加されたいくつかのカーネルシステムコールのタップセットサポートの追加。
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トレイトを派生できるようになりました。 -
Mutex、CondVar、およびRwLockは、pthreads ではなくカスタムfutexベースの実装を使用するようになり、Rust 言語保証によって新たな最適化が可能になりました。 -
Rust は、新しく安定化された
Terminationトレイトを実装するユーザー定義型を含む、mainからのカスタム終了コードをサポートするようになりました。 -
Cargo は、依存関係機能のより詳細な制御をサポートしています。
dep:プレフィックスは、それを機能として公開することなく、オプションの依存関係を参照できます。また、?は、package-name?/feature-nameのように、その依存関係が他の場所で有効になっている場合にのみ依存関係の機能を有効にします。 -
Cargo には、依存関係を
Cargo.tomlに追加するための新しいcargo addサブコマンドがあります。 詳細については、一連のアップストリームリリース発表を参照してください。
(BZ#2075344)
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++2bのif 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#2061042)
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#2075162)
LLVM ゴールドプラグイン が IBM Z アーキテクチャーで利用可能になりました
この機能拡張により、ユーザーは IBM Z (s390x) アーキテクチャーで clang および ld.bfd を使用して LTO ビルドを作成できます。s390x アーキテクチャーは、ld.bfd および LTO とのリンクをサポートするようになりました。
(BZ#2088315)
新しいモジュールストリーム: maven:3.8。
RHEL 8.7 では、新しいモジュールストリームとして Maven 3.8 が導入されています。
maven:3.8 モジュールストリームをインストールするには、次を使用します。
yum module install maven:3.8
# yum module install maven:3.8
maven:3.6 ストリームからアップグレードする場合は、後続のストリームへの切り替え を参照してください。
(BZ#2083114, BZ#2064785, BZ#2088473)
.NET バージョン 7.0 が利用可能
Red Hat Enterprise Linux 8.7 には .NET バージョン 7.0 が同梱されています。以下は、主な改善点です。
-
IBM Power のサポート (
ppc64le)
詳細は、.NET 7.0 RPM パッケージリリースノート および .NET 7.0 コンテナーリリースノート を参照してください。
(BZ#2112096)