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
GCC Toolset 12 のツールを実行するには、以下のコマンドを実行します。
$ scl enable gcc-toolset-12 tool
GCC Toolset バージョン 12 のツールバージョンが、このようなツールのシステムバージョンをオーバーライドするシェルセッションを実行するには、次のコマンドを実行します。
$ 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
この問題を回避するには、プラグインディレクトリーに 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
およびCDNA2
GPU バイナリーのサポートを改善 - 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
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)