4.9. コンパイラーおよび開発ツール
glibc
の Intel® Xeon® v5 ベースのハードウェアでの文字列およびメモリールーチンのパフォーマンスが向上
以前は、文字列およびメモリールーチン用に glibc
によって使用されるデフォルトのキャッシュ量により、Intel® Xeon® v5 ベースのシステムで、パフォーマンスが予想よりも低下していました。今回の更新では、パフォーマンスを向上させるために使用するキャッシュの量が調整されました。
GCC はレジスター引数の保持をサポートするようになる
今回の更新により、引数レジスターの内容をスタックに保存し、適切な Call Frame Information (CFI) を生成して、アンワインダーがパフォーマンスに悪影響を与えることなく CFI を特定できるようになりました。
Bugzilla:2168205[1]
新しい 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 として次のコマンドを実行します。
# yum install gcc-toolset-13
GCC Toolset 13 からツールを実行するには、以下を使用します。
$ scl enable gcc-toolset-13 tool
GCC Toolset 13 のツールバージョンがこれらのツールのシステムバージョンをオーバーライドするシェルセッションを実行するには、以下を使用します。
$ scl enable gcc-toolset-13 bash
詳細は、https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/developing_c_and_cpp_applications_in_rhel_8/additional-toolsets-for-development_developing-applications#gcc-toolset-13_assembly_additional-toolsets-for-development[GCC Toolset 13] および GCC Toolset の使用 を参照してください。
Bugzilla:2171898[1]、Bugzilla:2171928、Bugzilla:2188490
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[]
の添字演算子の多次元サポートを追加しました。
新しい警告:
-
-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:2172091[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 layout
tui focus
tui refresh
tui window height
これらは、それぞれ古いlayout
、focus
、refresh
、winheight
TUI コマンドの新しい名前です。古い名前は、これらの新しいコマンドのエイリアスとしてまだ存在しています。tui window width
winwidth
ウィンドウが水平モードでレイアウトされている場合、新しい
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 backtrace
maint set internal-warning backtrace [on|off]
maint show internal-warning backtrace
GDB は、内部エラーまたは内部警告が発生したときに、自身のバックトレースを出力できるようになりました。これは、内部エラーの場合はデフォルトで有効化され、内部警告の場合はデフォルトで無効化されています。
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-notifications
CLI に対して通知の出力を抑制するかどうかを制御します。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-inferior
clone-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 packet
CLI コマンドと同等です。これを使用して、指定したパケットをリモートターゲットに送信できます。 -
新しい
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:2172095[1]
GCC Toolset 13: binutils
がバージョン 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:2171924[1]
GCC Toolset 13: annobin
がバージョン 12.20 にリベース
GCC Toolset 13 は、annobin
パッケージのバージョン 12.20 を提供します。主な機能拡張は、次のとおりです。
-
annobin
ノートを別のデバッグ情報ファイルに移動するためのサポートが追加されました。これにより、実行可能バイナリーのサイズが縮小されます。 - 新しい小さなメモ形式のサポートが追加されたことで、個別の debuginfo ファイルのサイズが縮小され、これらのファイルの作成にかかった時間が短縮されました。
Bugzilla:2171921[1]
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
環境変数は、デフォルトでは設定されません。-
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_merge
cachegrind
ユーティリティーのソースコードが書き直されたため、ユーティリティーのコマンドラインオプションの処理がより柔軟になりました。たとえば、--show-percs
と--no-show-percs
オプションのほか、既存の--show-percs=yes
と--show-percs=no
オプションもサポートされるようになりました。 -
cg_annotate
cachegrind
ユーティリティーは、差分 (--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_ZSTD
ELF 圧縮タイプをサポートするようになりました。 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 4
- ARM Neoverse N1
- ARM Neoverse N2
- ARM Neoverse V1
- ARM Neoverse V2
- 第 4 世代 Intel® Xeon® スケーラブルプロセッサー
- IBM z16
Bugzilla:2185653, Bugzilla:2111987, Bugzilla:2111966, Bugzilla:2111973, Bugzilla:2109907, Bugzilla:2111981, Bugzilla:2047725
papi
は、新しいプロセッサーマイクロアーキテクチャーをサポートする
この機能拡張により、次のプロセッサーマイクロアーキテクチャー上の papi
イベントプリセットを使用して、パフォーマンス監視ハードウェアにアクセスできるようになります。
- ARM Neoverse N1
- ARM Neoverse N2
- ARM Neoverse V1
- ARM Neoverse V2
Bugzilla:2111982[1]、Bugzilla:2111988
papi
は、64 ビット ARM の高速パフォーマンスイベントカウント読み取り操作をサポートするようになる
以前の 64 ビット ARM プロセッサーでは、すべてのパフォーマンスイベントカウンターの読み取り操作で、リソースを大量に消費するシステムコールを使用する必要がありました。papi
は、64 ビット ARM 用に更新され、パフォーマンスカウンターで自身を監視するプロセスが、パフォーマンスイベントカウンターのより高速なユーザー空間読み取りを使用できるようになりました。/proc/sys/kernel/perf_user_access
パラメーターを 1 に設定すると、papi
が 2 つのカウンターを読み取るための平均クロックサイクル数が 724 サイクルから 29 サイクルに減少します。
Bugzilla:2161146[1]
LLVM Toolset がバージョン 16.0.6 にリベース
LLVM Toolset がバージョン 16.0.6 に更新されました。
主な機能拡張は、次のとおりです。
- 最適化の改善
- 新しい CPU 拡張のサポート
- 新しい C++ バージョンへのサポートの改善
後方互換性のない注目すべき変更は次のとおりです。
-
Clang のデフォルトの C++ 標準は、
gnu++14
ではなくgnu++17
になりました。 -
-Wimplicit-function-declaration
、-Wimplicit-int
、および-Wincomplicit-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-unwind
ABI 文字列
詳細は、一連のアップストリームリリース発表を参照してください。
Rust profiler_builtins
ランタイムコンポーネントが利用可能になる
この機能拡張により、Rust profile_builtins
ランタイムコンポーネントが利用できるようになりました。このランタイムコンポーネントは、次のコンパイラーオプションを有効にします。
-C instrument-coverage
- カバレッジプロファイリングを有効にします。
-C profile-generate
- プロファイルガイド付きの最適化を有効にします。
Bugzilla:2213875[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:2185260[1]
grafana
がバージョン 9.2.10 にリベース
grafana
パッケージがバージョン 9.2.10 に更新されました。主な変更点は、以下のとおりです。
- 時系列パネルがデフォルトの視覚化オプションになり、グラフパネルに置き換わりました。
- Grafana が新しい Prometheus および Loki クエリービルダーを提供します。
- Grafana に、複数の UI/UX およびパフォーマンスの改善が追加されました。
- ライセンスが Apache 2.0 から GNU Affero General Public License (AGPL) に変更されました。
- heatmap パネルは Grafana 全体で使用されるようになりました。
- Geomaps は距離と面積の両方を測定できるようになりました。
- Alertmanager は、Prometheus Alertmanager バージョン 0.24 に基づくようになりました。
-
Grafana Alerting ルールは、実行エラーまたはタイムアウト時にデフォルトで
Error
状態を返すようになりました。 - 式を公開ダッシュボードで使用できるようになりました。
- 結合変換で内部結合がサポートされるようになりました。
- パブリックダッシュボードで Grafana ダッシュボードを共有できるようになりました。
- 新しい Prometheus ストリーミングパーサーが、オプトイン機能として利用できるようになりました。
詳細は、アップストリームのリリースノートを参照してください。
grafana-pcp
がバージョン 5.1.1 にリベースされました。
Performance Co-Pilot Grafana プラグインを提供する grafana-pcp
パッケージがバージョン 5.1.1 に更新されました。主な変更点は、以下のとおりです。
- クエリーエディター: レートの変換と時間使用率の変換を無効にするボタンを追加しました。
Redis データソース:
-
非推奨の
label_values(metric, label)
関数を削除しました。 - 多くの系列を持つメトリクスのネットワークエラーを修正しました (Performance Co-Pilot バージョン 6 以降が必要)。
-
非推奨の
-
pmproxy
API タイムアウトを 1 分に設定します。
.NET 8.0 が利用可能になる
Red Hat Enterprise Linux 8.9 には .NET バージョン 8.0 が同梱されています。以下は、主な改善点です。
- C#12 および F#8 言語バージョンのサポートが追加されました。
- .NET ソフトウェア開発キットを直接使用してコンテナーイメージをビルドするためのサポートが追加されました。
- ガベージコレクター (GC)、Just-In-Time (JIT) コンパイラー、およびベースライブラリーのパフォーマンスが多くの点で向上しました。
Jira:RHELPLAN-164398[1]