4.13. コンパイラーおよび開発ツール
IBM Z での最適化されたルーチンの使用に影響を与える新しい glibc オプション
IBM Z アーキテクチャーでは、glibc ライブラリーは、hwcaps や stfle ビットなどのハードウェア機能に基づいて関数実装を選択します。この更新により、glibc.cpu.hwcaps 調整パラメーターを設定することで、ライブラリーによる選択を指示できるようになりました。
Bugzilla:2169978[1]
glibc の Intel® Xeon® v5 ベースのハードウェアでの文字列およびメモリールーチンのパフォーマンスが向上
以前は、文字列およびメモリールーチン用に glibc によって使用されるデフォルトのキャッシュ量により、Intel® Xeon® v5 ベースのシステムで、パフォーマンスが予想よりも低下していました。今回の更新では、パフォーマンスを向上させるために使用するキャッシュの量が調整されました。
システム GCC コンパイラーがバージョン 11.4.1 に更新される
GNU コンパイラーコレクション (GCC) には、C、C++、および Fortran のプログラミング言語でアプリケーションを開発するためのツールが含まれます。
システム GCC コンパイラーがバージョン 11.4.1 に更新されました。これには、アップストリーム GCC で利用可能な多数のバグ修正と機能拡張が含まれています。
使用方法は、RHEL 9 での C および C++ アプリケーションの開発 を参照してください。
GCC はレジスター引数の保持をサポートするようになる
今回の更新により、引数レジスターの内容をスタックに保存し、適切な Call Frame Information (CFI) を生成して、アンワインダーがパフォーマンスに悪影響を与えることなく CFI を特定できるようになりました。
Bugzilla:2168204[1]
64 ビット Intel アーキテクチャー上の GCC の新しい -mdaz-ftz オプション
64 ビット Intel アーキテクチャー上の GNU Compiler Collection (GCC) のシステムバージョンは、MXCSR Control と Status Register で flush-to-zero (FTZ) および denormals-are-zero (DAZ) フラグを有効にする -mdaz-ftz オプションをサポートするようになりました。
新しい GCC Toolset 13
GCC Toolset 13 は、最新バージョンの開発ツールを提供するコンパイラーツールセットです。これは、AppStream リポジトリー内の Software Collection の形式で Application Stream として利用できます。
GCC コンパイラーがバージョン 13.1.1 に更新され、アップストリームの GCC で利用できる多くのバグ修正と機能拡張が提供されています。
次のツールとバージョンが GCC Toolset 13 によって提供されます。
| ツール | バージョン |
|---|---|
| GCC | 13.1.1 |
| GDB | 12.1 |
| binutils | 2.40 |
| dwz | 0.14 |
| annobin | 12.20 |
GCC Toolset 13 をインストールするには、root として次のコマンドを実行します。
dnf install gcc-toolset-13
# dnf install gcc-toolset-13
GCC Toolset 13 からツールを実行するには、以下を使用します。
scl enable gcc-toolset-13 tool
$ scl enable gcc-toolset-13 tool
GCC Toolset 13 のツールバージョンがこれらのツールのシステムバージョンをオーバーライドするシェルセッションを実行するには、以下を使用します。
scl enable gcc-toolset-13 bash
$ scl enable gcc-toolset-13 bash
詳細は、GCC Toolset 13 および GCC Toolset の使用 を参照してください。
Bugzilla:2171919[1]、Bugzilla:2171930
GCC Toolset 13: GCC がバージョン 13.1.1 にリベース
GCC Toolset 13 では、GNU Compiler Collection (GCC) がバージョン 13.1.1 に更新されました。主な変更点は、以下のとおりです。
一般的な改善
OpenMP:
- OpenMP 5.0: Fortran は、いくつかの非長方形ループネストをサポートするようになりました。このようなサポートは、GCC 11 で C/C++ に追加されました。
- 多くの OpenMP 5.1 機能が追加されました。
- OpenMP 5.2 機能の初期サポートが追加されました。
-
新しいデバッグ情報圧縮オプション値
-gz=zstdが利用できるようになりました。 -
-Ofast、-ffast-math、および-funsafe-math-optimizationsオプションでは、-sharedオプションを使用して共有オブジェクトを生成するときに、浮動小数点環境を変更するためのスタートアップコードが追加されなくなりました。 -
GCC は、静的分析ツール (GCC の
-fanalyzerなど) の結果をキャプチャーするのに適した JSON ベース形式の、Static Analysis Results Interchange Format (SARIF) を使用して、診断を出力できるようになりました。SARIF を使用して、他の GCC 警告やエラーを機械可読形式でキャプチャーすることもできます。 - リンクタイム最適化の改善が実装されました。
新しい言語と言語固有の改善
C ファミリー:
-
新しい
-Wxor-used-as-powオプションは、ユーザーが指数を意図した可能性がある排他的論理和 (^) 演算子の使用を警告します。 ファイル記述子である
int引数を文書化するために、3 つの新しい関数属性が追加されました。-
attribute((fd_arg(N))) -
attribute((fd_arg_read(N))) -
attribute((fd_arg_write(N)))
これらの属性は、ファイル記述子の誤用を検出するために
-fanalyzerによっても使用されます。-
-
新しいステートメント属性、
attribute((assume(EXPR)));が、C++23 移植性の前提のために追加されました。この属性は、C または以前の C++ でもサポートされています。 -
GCC は、配列の要素にアクセスする目的で、構造体の最後の配列を柔軟な配列メンバーとして扱うタイミングを制御できるようになりました。デフォルトでは、集合体の最後の配列はすべて柔軟な配列メンバーとして扱われます。新しいコマンドラインオプション
-fstrict-flex-arraysを使用して、どの配列メンバーを柔軟な配列として扱うかを制御します。
C:
いくつかの C23 機能が実装されました。
-
nullptr定数が導入されました。 - 基礎となる型を指定するために列挙が強化されました。
- 可変個引数パラメーターリストの要件が緩和されました。
-
オブジェクト定義の型推論を有効にする
auto機能が導入されました。 -
オブジェクト定義に
constexpr指定子が導入されました。 - 複合リテラル用のストレージクラス指定子が導入されました。
-
typeofオブジェクト (以前はエクステンションとしてサポート) とtypeof_unqualオブジェクトが導入されました。 -
新しいキーワード
alignas、alignof、bool、false、static_assert、thread_local、およびtrueを追加しました。 -
関数が呼び出し元に実行を返さないことを指定する
[[noreturn]]属性を追加しました。 - 空のイニシャライザー括弧のサポートが追加されました。
-
STDC_VERSION_*_Hヘッダーバージョンマクロのサポートが追加されました。 -
ATOMIC_VAR_INITマクロを削除しました。 -
<stddef.h>ヘッダーにunreachableマクロを追加しました。 - トライグラフを削除しました。
- プロトタイプ化されていない関数を削除しました。
-
%wNおよび%wfN形式の長さ修飾子の-Wformatオプションを使用したprintfおよびscanf形式のチェックを追加しました。 - Unicode Standard Annex (UAX) 31 の識別子構文のサポートが追加されました。
-
C23 で採用されている既存の機能は、C23 要件に従うように調整されており、
-std=c2x -Wpedanticオプションを使用して診断されることはありません。
-
-
新しい
-Wenum-int-mismatchオプションは、列挙型と整数型の間の不一致を警告します。
C++:
-fexcess-precisionオプションを使用して、excess precision サポートを実装しました。これは、-std=c++17などの厳密な標準モードではデフォルトで有効化されています。デフォルトは-fexcess-precision=standardになります。-std=gnu++20などの GNU 標準モードでは、デフォルトは-fexcess-precision=fastとなり、以前の動作が復元されます。-fexcess-precisionオプションは、次のアーキテクチャーに影響します。-
x87 演算を使用する Intel 32 および 64 ビット、場合によっては Motorola 68000 では、
floatとdouble式がlong double精度で評価されます。 -
64 ビット IBM Z システムでは、
float式がdouble精度で評価されます。 -
std::float16_tまたはstd::bfloat16_t型をサポートするいくつかのアーキテクチャーでは、これらの型はfloat精度で評価されます。
-
x87 演算を使用する Intel 32 および 64 ビット、場合によっては Motorola 68000 では、
以下を含む C++23 の実験的サポートが改善されました。
- 複合ステートメントの末尾にラベルのサポートが追加されました。
- 一時オブジェクトへの参照バインディングを検出するための型特性を追加しました。
- 揮発性複合操作のサポートが再導入されました。
-
#warningディレクティブのサポートが追加されました。 - 区切られたエスケープシーケンスのサポートが追加されました。
- 名前付きユニバーサル文字エスケープのサポートが追加されました。
-
char8_tタイプの互換性と移植性に関する修正を追加しました。 -
静的
operator()関数オブジェクトを追加しました。 - 暗黙的なムーブを簡略化しました。
- 式内の等価性の書き換えは、以前より互換性を破壊しにくくなりました。
- エンコード不可能なワイド文字リテラルとワイド複数文字リテラルを削除しました。
-
constexpr関数の制限をいくつか緩和しました。 - 拡張浮動小数点型と標準名。
- 移植可能な前提条件を実装しました。
- 移植可能なソースファイルのエンコード標準として UTF-8 のサポートを追加しました。
-
静的
operator[]subscripts のサポートを追加しました。
新しい警告:
-
-Wself-moveは、std::moveを使用して値がそれ自体に移動されると警告します。 -
-Wdangling-referenceは、有効期間が終了した一時オブジェクトに参照がバインドされている場合に警告します。 -
-Wpessimizing-moveおよび-Wredundant-move警告は、より多くのコンテキストで警告するように拡張されました。
-
-
新しい
-nostdlib++オプションを使用すると、C++ 標準ライブラリーで暗黙的にリンクせずに、g++とのリンクが可能になります。
libstdc++ ランタイムライブラリーの変更
以下を含む C++20 の実験的サポートが改善されました。
-
<format>ヘッダーとstd::format関数を追加しました。 -
<chrono>ヘッダーに、std::chrono::utc_clockクロック、その他のクロック、タイムゾーン、およびstd::format関数のサポートが追加されました。
-
以下を含む C++23 の実験的サポートが改善されました。
-
<ranges>ヘッダーへの追加:views::zip、views::zip_transform、views::adjacent、views::adjacent_transform、views::pairwise、views::slide、views::chunk、views::chunk_by、views::repeat、views::chunk_by、views::cartesian_product、views::as_rvalue、views::enumerate、views::as_const -
<algorithm>ヘッダーへの追加:ranges::contains、ranges::contains_subrange、ranges::iota、ranges::find_last、ranges::find_last_if、ranges::find_last_if_not、ranges::fold_left、ranges::fold_left_first、ranges::fold_right、ranges::fold_right_last、ranges::fold_left_with_iter、ranges::fold_left_first_with_iter -
std::expectedクラステンプレートのモナド操作のサポート。 -
constexpr修飾子をstd::bitset、std::to_chars、およびstd::from_chars関数に追加しました。 - 拡張浮動小数点型のライブラリーサポートを追加しました。
-
-
Library Fundamentals Technical Specification (TS) のバージョン 3 から
<experimental/scope>ヘッダーのサポートが追加されました。 -
Concurrency TS のバージョン 2 から
<experimental/synchronized_value>ヘッダーのサポートが追加されました。 フリースタンディング環境で以前は利用できなかった多くの機能のサポートが追加されました。以下に例を示します。
-
std::tupleクラステンプレートをフリースタンディング環境でのコンパイルに使用できるようになりました。 -
libstdc++ライブラリーは、std::arrayやstd::string_viewなどのコンポーネントをフリースタンディング環境のサブセットに追加します。 -
libstdc++ライブラリーは-ffreestandingコンパイラーオプションを尊重するようになったため、libstdc++ライブラリーのフリースタンディング環境でのインストールを別途ビルドする必要がなくなりました。-ffreestandingを指定してコンパイルすると、libstdc++ライブラリーが完全なホスト型実装としてビルドされた場合でも、フリースタンディング環境のサブセットで利用可能な機能が制限されます。
-
新しいターゲットとターゲット固有の改善
64 ビット ARM アーキテクチャー
-
-march=オプションのarmv9.1-a、armv9.2-a、およびarmv9.3-a引数のサポートが追加されました。
32 ビットおよび 64 ビットの AMD および Intel アーキテクチャー:
-
C と C++ の両方の場合、
__bf16型は、Streaming SIMD Extensions 2 以降が有効になっているシステムでサポートされます。 -
実際の
__bf16型がAVX512BF16命令組み込みに使用されるようになりました。以前は、short の typedef である__bfloat16が使用されていました。GCC 12 を GCC 13 にアップグレードするときに、AVX512BF16関連のソースコードを調整してください。 次の Intel 命令をサポートするための新しい Instruction Set Architecture (ISA) エクステンションが追加されました。
-
AVX-IFMAの命令組み込みは、-mavxifmaコンパイラースイッチを通じて使用できます。 -
AVX-VNNI-INT8の命令組み込みは、-mavxvnniint8コンパイラースイッチを通じて使用できます。 -
AVX-NE-CONVERTの命令組み込みは、-mavxneconvertコンパイラースイッチを通じて使用できます。 -
CMPccXADDの命令組み込みは、-mcmpccxaddコンパイラースイッチを通じて使用できます。 -
AMX-FP16の命令組み込みは、-mamx-fp16コンパイラースイッチを通じて使用できます。 -
PREFETCHIの命令組み込みは、-mprefetchiコンパイラースイッチを通じて使用できます。 -
RAO-INTの命令組み込みは、-mraointコンパイラースイッチを通じて使用できます。 -
AMX-COMPLEXの命令組み込みは、-mamx-complexコンパイラースイッチを通じて使用できます。
-
-
GCC は、
-march=znver4コンパイラースイッチを通じて、znver4コアに基づく AMD CPU をサポートするようになりました。このスイッチにより、GCC は自動ベクトル化時に 512 ビットベクトルの使用を考慮します。
静的アナライザーの改善
静的アナライザーは 20 件の新しい警告を取得しました。
-
-Wanalyzer-allocation-size -
-Wanalyzer-deref-before-check -
-Wanalyzer-exposure-through-uninit-copy -
-Wanalyzer-imprecise-fp-arithmetic -
-Wanalyzer-infinite-recursion -
-Wanalyzer-jump-through-null -
-Wanalyzer-out-of-bounds -
-Wanalyzer-putenv-of-auto-var -
-Wanalyzer-tainted-assertion ファイル記述子の誤用に関する 7 つの新しい警告:
-
-Wanalyzer-fd-access-mode-mismatch -
-Wanalyzer-fd-double-close -
-Wanalyzer-fd-leak -
-Wanalyzer-fd-phase-mismatch(例: ソケットでlistenを呼び出す前のソケットでのacceptの呼び出し) -
-Wanalyzer-fd-type-mismatch(例: データグラムソケットでのストリームソケット操作の使用) -
-Wanalyzer-fd-use-after-close -Wanalyzer-fd-use-without-check-
また、
open、close、creat、dup、dup2、dup3、pipe、pipe2、read、およびwrite関数の動作の特殊ケーシングの処理も実装されました。
-
また、
-
<stdarg.h>ヘッダーの誤用に関する 4 つの新しい警告:-
-Wanalyzer-va-list-leakは、va_startマクロまたはva_copyマクロの後にva_endマクロがないことを警告します。 -
-Wanalyzer-va-list-use-after-va-endは、va_endマクロが呼び出されたva_listオブジェクトタイプで使用されているva_argまたはva_copyマクロを警告します。 -
-Wanalyzer-va-arg-type-mismatchタイプは、プロシージャー間の実行パスでのva_argマクロの使用状況を、実際に可変個引数呼び出しに渡されたパラメーターの型と照合してチェックします。 -
-Wanalyzer-va-list-exhaustedは、プロシージャー間実行パス内のva_listオブジェクトタイプでva_argマクロが何度も使用されている場合に警告します。
-
-
- その他多数の改善。
後方互換性のない変更
C++ の場合、std::cout、std::cin などのグローバル iostream オブジェクトの構築は、<iostream> ヘッダーを含むすべてのソースファイルではなく、標準ライブラリー内で行われるようになりました。この変更により、C++ プログラムの起動パフォーマンスが向上しますが、ランタイムに正しいバージョンの libstdc++.so が使用されない場合、GCC 13.1 でコンパイルされたコードがクラッシュすることになります。ランタイムに正しい libstdc++.so を使用する方法の詳細は、ドキュメント を参照してください。将来の GCC リリースではこの問題が軽減され、互換性のない以前の libstdc++.so ではプログラムをまったく実行できなくなります。
Bugzilla:2172093[1]
GCC Toolset 13: annobin がバージョン 12.20 にリベース
GCC Toolset 13 は、annobin パッケージのバージョン 12.20 を提供します。主な機能拡張は、次のとおりです。
-
annobinノートを別のデバッグ情報ファイルに移動するためのサポートが追加されました。これにより、実行可能バイナリーのサイズが縮小されます。 - 新しい小さな note フォーマットのサポートが追加されたことで、個別の debuginfo ファイルのサイズが縮小され、これらのファイルの作成にかかった時間が短縮されました。
Bugzilla:2171923[1]
GCC Toolset 13: GDB がバージョン 12.1 にリベース
GCC Toolset 13 は、GDB バージョン 12.1 を提供します。
主なバグ修正と機能拡張は、以下のとおりです。
-
GDB では、デフォルトでソースコードと逆アセンブラーのスタイルが設定されるようになりました。スタイリングが GDB の自動化またはスクリプト作成を妨げる場合は、
maint set gnu-source-highlight enabled offおよびmaint set style disassembler enabled offコマンドを使用してスタイル設定を無効にできます。 -
GDB は、内部エラーが発生するたびにバックトレースを表示するようになりました。これがスクリプトまたは自動化に影響する場合は、
maint set backtrace-on-fatal-signal offコマンドを使用して、この機能を無効にすることができます。
C/C++ の改善:
- GDB は、C++ テンプレートに関係する関数または型を関数のオーバーロードと同様に扱うようになりました。パラメーターリストを省略して、複数のテンプレートタイプで構成される型や関数などのテンプレート関数のファミリーにブレークポイントを設定できます。タブ 補完にも同様の改善が加えられました。
ターミナルユーザーインターフェイス (TUI):
tui layouttui focustui refreshtui window height
これらは、古いlayout、focus、refresh、およびwinheightTUI コマンドの新しい名前です。古い名前は、これらの新しいコマンドのエイリアスとしてまだ存在しています。tui window widthwinwidthウィンドウが水平モードでレイアウトされている場合、新しい
tui window widthコマンドまたはwinwidthエイリアスを使用して、TUI ウィンドウの幅を調整します。info winこのコマンドの出力には、TUI ウィンドウの幅に関する情報が含まれるようになりました。
Machine Interface (MI) の変更:
- MI インタープリターのデフォルトバージョンが 4 (-i=mi4) になりました。
-
フラグのない
-add-inferiorコマンドは、現在の下位コマンドの接続を継承するようになりました。これにより、バージョン 10 より前の GDB の動作が復元されます。 -
-add-inferiorコマンドは、接続なしで新しい下位コマンドを起動させる--no-connectionフラグを受け入れるようになりました。 ブレークポイント出力の
scriptフィールド (MI 3 以前では構文的に不正確) は、MI 4 ではリストになりました。これは次のコマンドとイベントに影響します。-
-break-insert -
-break-info -
=breakpoint-created =breakpoint-modified以前の MI バージョンでの新しい動作を有効にするには、
-fix-breakpoint-script-outputコマンドを使用します。
-
新しいコマンド:
maint set internal-error backtrace [on|off]maint show internal-error backtracemaint set internal-warning backtrace [on|off]maint show internal-warning backtraceGDB は、内部エラーまたは内部警告が発生したときに、自身のバックトレースを出力できるようになりました。これは、内部エラーの場合はデフォルトで有効化され、内部警告の場合はデフォルトで無効化されています。
exit既存の
quitコマンドに加えて、新しいexitコマンドを使用して GDB を終了できます。maint set gnu-source-highlight enabled [on|off]maint show gnu-source-highlight enabled
ソースコードにスタイリングを追加するために、GNU Source Highlight ライブラリーを有効または無効化します。無効にすると、ライブラリーは利用可能であっても使用されません。GNU Source Highlight ライブラリーが使用されない場合は、代わりに Python Pygments ライブラリーが使用されます。set suppress-cli-notifications [on|off]show suppress-cli-notificationsCLI に対して通知の出力を抑制するかどうかを制御します。CLI 通知は、選択したコンテキスト (現在の下位、スレッド、フレームなど) を変更したとき、またはデバッグ中のプログラムが停止したときに (ブレークポイントに到達した、ソースステッピングの完了、または割り込みなどにより) 発生します。
set style disassembler enabled [on|off]show style disassembler enabled有効化すると、GDB が Python サポートでコンパイルされており、Python Pygments パッケージが利用可能な場合、コマンドは逆アセンブラー出力にスタイリングを適用します。
変更したコマンド:
set logging [on|off]非推奨となり、
set logging enabled [on|off]コマンドに置き換えられました。print/xなどの基数変更形式を使用した浮動小数点値の出力が、値の基礎となるバイトを必要な基数で表示するように変更されました。clone-inferiorclone-inferiorコマンドにより、TTY、CMD、およびARGsの設定が、元の下位設定から新しい設定にコピーされるようになりました。set environmentコマンドまたはunset environmentコマンドを使用して加えられた環境変数へのすべての変更も、新しい下位環境変数にコピーされます。
Python API:
-
新しい
gdb.add_history()関数は、gdb.Valueオブジェクトを取り、それが表す値を GDB の履歴リストに追加します。この関数は、履歴リスト内の新しい項目のインデックスである整数を返します。 -
新しい
gdb.history_count()関数は、GDB の値履歴内の値の数を返します。 -
新しい
gdb.events.gdb_exitingイベントは、GDB 終了コードの値を含む読み取り専用属性exit_codeを持つgdb.GdbExitingEventオブジェクトを使用して呼び出されます。このイベントは、GDB が終了する前の、GDB が内部状態のクリーンアップを開始する前にトリガーされます。 -
新しい
gdb.architecture_names()関数は、考えられるすべてのArchitecture.name()値を含むリストを返します。各エントリーは文字列です。 -
新しい
gdb.Architecture.integer_type()関数は、サイズと符号付きかどうかを指定して整数型を返します。 -
新しい
gdb.TargetConnectionオブジェクトタイプは、(info connectionコマンドで表示される) 接続を表します。サブクラスgdb.RemoteTargetConnectionは、remote接続およびextended-remote接続を表します。 -
gdb.Inferior型には、gdb.TargetConnectionオブジェクトのインスタンスであるconnectionプロパティーがあり、この下位型によって使用される接続になります。下層に接続がない場合、これはNoneにすることができます。 -
新しい
gdb.events.connection_removedイベントレジストリーは、接続が GDB から削除されるとgdb.ConnectionEventイベントを発行します。このイベントには、connectionプロパティー、つまり削除される接続のgdb.TargetConnectionオブジェクトがあります。 -
新しい
gdb.connections()関数は、現在アクティブなすべての接続のリストを返します。 -
新しい
gdb.RemoteTargetConnection.send_packet(PACKET)メソッドは、既存のmaint packetCLI コマンドと同等です。これを使用して、指定したパケットをリモートターゲットに送信できます。 -
新しい
gdb.host_charset()関数は、現在のホスト文字セットの名前を文字列として返します。 -
新しい
gdb.set_parameter(NAME、VALUE)関数は、GDB パラメーターNAMEをVALUEに設定します。 -
新しい
gdb.with_parameter (NAME、VALUE)関数は、GDB パラメーターNAMEを一時的にVALUEに設定してから、コンテキストが終了するとリセットするコンテキストマネージャーを返します。 -
gdb.Value.format_stringメソッドは、ブール値であるstyling引数を取るようになりました。trueの場合、返される文字列には、スタイリングを適用するためのエスケープシーケンスを含めることができます。スタイリングは、GDB でスタイリングがオンになっている場合にのみ存在します (help set stylingを参照してください)。falseの場合 (スタイル引数が指定されていない場合のデフォルト)、返される文字列にはスタイリングは適用されません。 -
新しい読み取り専用属性
gdb.InferiorThread.detailsは、追加のターゲット固有のスレッド状態情報を含む文字列か、そのような追加情報がない場合はNoneになります。 -
新しい読み取り専用属性
gdb.Type.is_scalarは、スカラー型の場合はTrue、その他すべての型の場合はFalseです。 -
新しい読み取り専用属性
gdb.Type.is_signedは、Type.is_scalarがTrueの場合にのみ読み取られる必要があり、符号付き型の場合はTrue、その他すべての型の場合はFalseになります。非スカラー型に対してこの属性を読み取ろうとすると、ValueErrorが発生します。 - Python で実装された GDB および MI コマンドを追加できるようになりました。
詳細は、アップストリームのリリースノートを参照してください。
Bugzilla:2172096[1]
GCC Toolset 13: bintuils がバージョン 2.40 にリベース
GCC Toolset 13 は、binutils パッケージバージョン 2.40 を提供します。主な機能拡張は、次のとおりです。
リンカー:
-
リンカーの新しい
-w(--no-warnings) コマンドラインオプションは、警告メッセージやエラーメッセージの生成を抑制します。これは、動作しないことがわかっているバイナリーを作成する必要がある場合に役立ちます。 ELF リンカーは、次の場合に警告メッセージを生成するようになりました。
- スタックが実行可能な場合。
-
Read、Write、eXecuteの 3 つのパーミッションセットをすべて備えたメモリー常駐セグメントを作成する場合。 eXecuteパーミッションセットを使用してスレッドローカルデータセグメントを作成する場合。--no-warn-exec-stackまたは--no-warn-rwx-segmentsオプションを使用すると、これらの警告を無効にできます。
- リンカーは、作成するバイナリーに任意の JSON 形式のメタデータを挿入できるようになりました。
その他のツール:
-
Portable Executable (PE) 形式ファイルのファイルヘッダーとセクションヘッダーのフィールドを表示する、
objdumpツールの新しい--privateオプション。 -
ELF ファイルから ELF セクションヘッダーを削除するための、
objcopyユーティリティーおよびstripユーティリティー用の新しい--strip-section-headersコマンドラインオプション。 -
objdumpユーティリティーの新しい--show-all-symbolsコマンドラインオプションは、アドレスに一致する最初のシンボルのみを表示するデフォルト機能とは対照的に、逆アセンブル時に指定されたアドレスに一致するすべてのシンボルを表示します。 -
nmユーティリティーに新しい-W(--no-weak) オプションを追加し、弱いシンボルを無視します。 objdumpユーティリティーは、一部のアーキテクチャーの逆アセンブラー出力の構文強調表示をサポートするようになりました。--disassembler-color=MODEコマンドラインオプションを使用します。MODE は、次のいずれかになります。-
off -
color- このオプションは、すべてのターミナルエミュレーターでサポートされています。 -
extended-color- このオプションは、すべてのターミナルエミュレーターでサポートされていない 8 ビットカラーを使用します。
-
Bugzilla:2171926[1]
libabigail がバージョン 2.3 にリベース
libabigail パッケージがバージョン 2.3 に更新されました。以下は、主な改善点です。
- BTF debuginfo 形式がサポートされるようになりました。
- Ada 範囲タイプのサポートが改善されました。
-
抑制仕様の新しい
[allow_type]ディレクティブがサポートされるようになりました。 -
[supress_type]抑制仕様にさまざまな新しいプロパティーを追加しました。 - ABIXML ファイル形式がバージョン 2.2 に更新されました。
- ライブラリーの SONAME は、独自の ABI 変更を反映するために変更されました。
libabigail パッケージは、CodeReady Linux Builder (CRB) リポジトリーで入手できます。CodeReady Linux Builder リポジトリーに含まれるパッケージは、サポート対象外であることに注意してください。
debugedit の find-debuginfo スクリプトが、-q (--quiet) フラグをサポートするようになる
この更新により、debugedit ユーティリティーで find-debuginfo スクリプトの -q (--quiet) フラグを使用して、スクリプトからのエラー以外の出力をサイレンスにすることができます。
Valgrind がバージョン 3.21.0 にリベース
Valgrind がバージョン 3.21.0 に更新されました。主な機能拡張は、次のとおりです。
-
--vgdb-stop-at=event1,event2,…オプションの新しいabexit値は、ゼロ以外の終了コードなどでプログラムが異常終了したときにgdbserverユーティリティーに通知します。 新しい
--enable-debuginfod=[yes|no]オプションは、DEBUGINFOD_URLS環境変数にリストされているdebuginfodサーバーを使用して、Valgrind で実行されているプログラムに不足している DWARF debuginfo 情報を取得するように Valgrind に指示します。このオプションのデフォルト値はyesです。注記DEBUGINFOD_URLS環境変数は、デフォルトでは設定されません。- Valgrind は GDB Python コマンドを提供するようになりました。これらの GDB フロントエンドコマンドにより、GDB コマンドラインインターフェイスでの統合が強化されます。この利点としては、GDB のオートコンプリートや、正規表現に一致するコマンドまたはコマンドヘルプを検索するコマンド固有のヘルプなどが挙げられます。関連する監視コマンドについては、GDB は引数を評価して監視コマンドの使用を簡素化します。
-
vgdbユーティリティーは、--multiオプションを指定して呼び出された場合に、拡張リモートプロトコルをサポートするようになりました。このモードでは GDBrunコマンドがサポートされているため、1 つのターミナルから GDB と Valgrind を実行できます。 -
--realloc-zero-bytes-frees=[yes|no]オプションを使用すると、malloc()呼び出しをインターセプトするツールのサイズ 0 のrealloc()関数の動作を変更できます。 -
memcheckツールは、サイズ 0 のrealloc()関数の使用のチェックを実行するようになりました。この機能を無効にするには、新しい--show-realloc-size-zero=[yes|no]スイッチを使用します。 -
helgrindツールの新しい--history-backtrace-size=valueオプションを使用して、以前のアクセスのスタックトレースに記録するエントリーの数を設定できます。 -
--cache-sim=[yes|no]cachegrindオプションはデフォルトでnoになり、その結果、デフォルトでは命令キャッシュ読み取りイベントのみが収集されるようになりました。 -
cg_annotate、cg_diff、およびcg_mergecachegrindユーティリティーのソースコードが書き直されたため、ユーティリティーのコマンドラインオプションの処理がより柔軟になりました。たとえば、--show-percsと--no-show-percsオプション、および既存の--show-percs=yesと--show-percs=noオプションがサポートされるようになりました。 -
cg_annotatecachegrindユーティリティーは、差分 (--diff、--mod-filename、および--mod-funcnameオプションを使用) とマージ (複数のデータファイルを渡すことによる) をサポートするようになりました。さらに、cg_annotateは、ファイルおよび関数レベルでより多くの情報を提供するようになりました。 -
DHATツールに対する新しいユーザー要求により、メモリーブロックのアクセスカウントヒストグラムの 1024 バイト制限をオーバーライドできるようになります。
次の新しいアーキテクチャー固有の命令セットがサポートされるようになりました。
64 ット ARM:
- v8.2 スカラーおよびベクトルの Floating-point Absolute Difference (FABD)、Floating-point Absolute Compare Greater than or Equal (FACGE)、Floating-point Absolute Compare Greater Than (FACGT)、および Floating-point Add (FADD) 命令。
- v8.2 Floating-point (FP) 比較命令と条件付き比較命令。
- v8.2 Floating-point (FP) 比較命令のゼロバリアント。
64 ビット IBM Z:
-
miscellaneous-instruction-extensions facility 3およびvector-enhancements facility 2のサポート。これにより、-march=arch13または-march=z15オプションを使用してコンパイルされたプログラムを Valgrind で実行できるようになります。
-
IBM Power:
- ISA 3.1 のサポートが完了しました。
- ISA 3.0 は、deliver a random number (darn) 命令をサポートするようになりました。
- ISA 3.0 は、System Call Vectored (scv) 命令をサポートするようになりました。
- ISA 3.0 は、コピー、貼り付け、および cpabort 命令をサポートするようになりました。
systemtap がバージョン 4.9 にリベース
systemtap パッケージがバージョン 4.9 にアップグレードされました。主な変更点は、以下のとおりです。
-
新しい Language-Server-Protocol (LSP) バックエンドにより、LSP 対応エディターでの
systemtapスクリプトのインタラクティブなドラフト作成が容易になります。 - Python/Jupyter インタラクティブノートブックフロントエンドへのアクセス。
- DWARF 5 ビットフィールドの処理が改善されました。
elfutils がバージョン 0.189 にリベース
elfutils パッケージがバージョン 0.189 に更新されました。主な改善点とバグ修正は次のとおりです。
libelf-
elf_compressツールは、ELFCOMPRESS_ZSTDELF 圧縮タイプをサポートするようになりました。 libdwfl-
dwfl_module_return_value_location関数は、DW_TAG_unspecified_typeタイプのタグを指す DWARF Information Entries (DIEs) に対して 0 (戻り値のタイプなし) を返すようになりました。 eu-elfcompress-
-tおよび--type=オプションは、zstd引数を介して Zstandard (zstd) 圧縮形式をサポートするようになりました。
libpfm がバージョン 4.13 にリベース
libpfm パッケージがバージョン 4.13 に更新されました。この更新により、libpfm は、次のプロセッサーマイクロアーキテクチャーのパフォーマンス監視ハードウェアネイティブイベントにアクセスできるようになります。
- AMD Zen 2
- AMD Zen 3
- AMD Zen 4
- ARM Neoverse N1
- ARM Neoverse N2
- ARM Neoverse V1
- ARM Neoverse V2
- IBM z16
- 第 4 世代 Intel® Xeon® スケーラブルプロセッサー
Bugzilla:2185652、Bugzilla:2047720、Bugzilla:2111940、Bugzilla:2111924、Bugzilla:2111930、Bugzilla:2111933、Bugzilla:2111957、Bugzilla:2111946
papi は、新しいプロセッサーマイクロアーキテクチャーをサポートする
この機能拡張により、次のプロセッサーマイクロアーキテクチャー上の papi イベントプリセットを使用して、パフォーマンス監視ハードウェアにアクセスできるようになります。
- AMD Zen 2
- AMD Zen 3
- ARM Neoverse N1
- ARM Neoverse N2
- ARM Neoverse V1
- ARM Neoverse V2
Bugzilla:2111923[1]、Bugzilla:2111947、Bugzilla:2111942
papi は、64 ビット ARM プロセッサーの高速パフォーマンスイベントカウント読み取り操作をサポートするようになる
以前の 64 ビット ARM プロセッサーでは、すべてのパフォーマンスイベントカウンターの読み取り操作で、リソースを大量に消費するシステムコールを使用する必要がありました。papi は、64 ビット ARM 用に更新され、パフォーマンスカウンターで自身を監視するプロセスが、パフォーマンスイベントカウンターのより高速なユーザー空間読み取りを使用できるようになりました。/proc/sys/kernel/perf_user_access パラメーターを 1 に設定すると、papi が 2 つのカウンターを読み取るための平均クロックサイクル数が 724 サイクルから 29 サイクルに減少します。
Bugzilla:2186927[1]
LLVM Toolset がバージョン 16.0.6 にリベース
LLVM Toolset がバージョン 16.0.6 に更新されました。
主な機能拡張は、次のとおりです。
- 最適化の改善
- 新しい CPU 拡張のサポート
- 新しい C++ バージョンへのサポートの改善
後方互換性のない注目すべき変更は次のとおりです。
-
Clang のデフォルトの C++ 標準は、
gnu++14ではなくgnu++17になりました。 -
-Wimplicit-function-declaration、-Wimplicit-int、および-Wincompatible-function-pointer-typesオプションは、C コードのデフォルトでエラーになるようになりました。これは、configure スクリプトの動作に影響を与える可能性があります。
デフォルトでは、Clang 16 は、GCC Toolset 13 によって提供される libstdc++ ライブラリーバージョン 13 と binutils 2.40 を使用します。
詳細は、LLVM リリースノート および Clang リリースノート を参照してください。
Rust Toolset がバージョン 1.71.1 にリベース
Rust Toolset がバージョン 1.71.1 に更新されました。主な変更点は、以下のとおりです。
- パフォーマンスを向上させるための multiple producer, single consumer (mpsc) チャネルの新しい実装
-
crates.ioレジストリーをより効率的に使用するための新しい Cargosparseインデックスプロトコル -
ワンタイム値の初期化のための新しい
OnceCellおよびOnceLockタイプ -
Foreign Function Interface (FFI) 境界にまたがる強制アンワインドの使用を可能にする新しい
C-unwindABI 文字列
詳細は、一連のアップストリームリリース発表を参照してください。
Rust profiler_builtins ランタイムコンポーネントが利用可能になる
この機能拡張により、Rust profile_builtins ランタイムコンポーネントが利用できるようになりました。このランタイムコンポーネントは、次のコンパイラーオプションを有効にします。
-C instrument-coverage- カバレッジプロファイリングを有効にします。
-C profile-generate- プロファイルガイド付きの最適化を有効にします。
Bugzilla:2227082[1]
Go Toolset がバージョン 1.20.10 にリベース
Go Toolset がバージョン 1.20.10 に更新されました。
主な機能拡張は、次のとおりです。
-
内部表現に依存せずにスライスと文字列を処理するための新しい関数が
unsafeパッケージに追加されました。 - 比較可能な型は、比較可能な制約を満たすことができるようになりました。
-
新しい
crypto/ecdhパッケージ。 -
go buildおよびgo testコマンドは、-iフラグを受け入れなくなりました。 -
go generateおよびgo testコマンドは、-skip patternオプションを受け入れるようになりました。 -
go build、go install、およびその他のビルド関連コマンドは、-pgoフラグと-coverフラグをサポートするようになりました。 -
goコマンドは、C ツールチェーンのないシステムではデフォルトでcgoを無効にするようになりました。 -
go version -mコマンドは、より多くの Go バイナリータイプの読み取りをサポートするようになりました。 -
goコマンドは、C ツールチェーンのないシステムではデフォルトでcgoを無効にするようになりました。 - コードカバレッジプロファイルを単体テストからのみ収集するのではなく、アプリケーションと統合テストから収集するためのサポートが追加されました。
Bugzilla:2185259[1]
pcp がバージョン 6.0.5 にリベース
pcp パッケージがバージョン 6.0.5 に更新されました。主な変更点は、以下のとおりです。
コレクターツールの機能
pmdaproc-- 最新のカーネルで cgroup ごとの IRQ PSI メトリクスのサポートが追加されました。
-
新しい
proc.smaps.pss_dirtyメトリックが追加されました。
-
pmdasmart: NVME ディスク情報と電源状態メトリクスが追加されました。 pmdalinux:- 最新のカーネルでシステム全体の IRQ PSI メトリクスのサポートが追加されました。
- NUMA 外部メモリー断片化メトリックが追加されました。
- 新しいネットワーキング (TCP、ICMP) メトリクスが追加されました。
-
pmdaoverhead: プロセスのグループのオーバーヘッドを測定する新しい PMDA -
pmdahacluster: Pacemaker 2.1.5crm_mon出力の変更を処理するために更新されました。
監視ツールの機能
pmieconf:- Webhook アクションのサポートが追加されました (Event Driven Ansible)。
-
ファイル記述子の制限をチェックする新しい
pmieルールが追加されました。
-
pcp2json: HTTP POST を送信するオプションを備えた拡張pcp2json -
pcp-atop:cgroup、NUMA メモリー、および NUMA CPU サポートが追加されました。 -
pcp-htop: 新しいオープンファイル記述子 Meter のサポートが追加されました。 -
pcp-ps: 複数のアーカイブサンプルを表示する機能が追加されました。
PCP の pmie ユーティリティーが Webhook イベントの生成をサポートするようになる
Performance Co-Pilot (PCP) の Performance Metrics Inference Engine (pmie) ユーティリティーは、Webhook イベントの生成をサポートするようになりました。この更新により、設定された pmie ルールは、Event-Driven Ansible (EDA) によって使用可能な形式でイベントを生成します。その結果、EDA は PCP ルールに対応できます。
この機能を有効にするには、すべてのローカル pmie ルールを、特定のエンドポイント (URL) で Webhook に送信するように設定します。
pmieconf modify global webhook_endpoint https://localhost:443/<endpoint> pmieconf modify global webhook_action yes
# pmieconf modify global webhook_endpoint https://localhost:443/<endpoint>
# pmieconf modify global webhook_action yes
grafana がバージョン 9.2.10 にリベース
grafana パッケージがバージョン 9.2.10 に更新されました。主な変更点は、以下のとおりです。
- heatmap パネルは Grafana 全体で使用されるようになりました。
- Geomaps は距離と面積の両方を測定できるようになりました。
- Alertmanager は、Prometheus Alertmanager バージョン 0.24 に基づくようになりました。
-
Grafana Alerting ルールは、実行エラーまたはタイムアウト時にデフォルトで
Error状態を返すようになりました。 - 式を公開ダッシュボードで使用できるようになりました。
- 結合変換で内部結合がサポートされるようになりました。
- パブリックダッシュボードで Grafana ダッシュボードを共有できるようになりました。
- 新しい Prometheus ストリーミングパーサーが、オプトイン機能として利用できるようになりました。
詳細は、アップストリームのリリースノートを参照してください。
Grafana は弱い暗号を有効化しなくなる
この更新により、Grafana は安全な通信の暗号化に弱いと考えられる暗号を有効化しなくなりました。影響を受ける暗号は次のとおりです。
-
AES128-GCM-SHA256 -
AES128-SHA -
AECDHE-RSA-AES128-SHA -
AES256-GCM-SHA384 -
AES256-SHA -
ECDHE-RSA-AES256-SHA
Bugzilla:2190025[1]
.NET 8.0 が利用可能になる
Red Hat Enterprise Linux 9.3 には .NET バージョン 8.0 が同梱されています。以下は、主な改善点です。
- C#12 および F#8 言語バージョンのサポートが追加されました。
- .NET ソフトウェア開発キットを直接使用してコンテナーイメージをビルドするためのサポートが追加されました。
- ガベージコレクター (GC)、Just-In-Time (JIT) コンパイラー、およびベースライブラリーのパフォーマンスが多くの点で向上しました。
Jira:RHELPLAN-164399[1]