第16章 コンパイラーおよび開発ツール
16.1. RHEL 7 以降の toolchain の変更点
以下のシナリオでは、Red Hat Enterprise Linux 7 で説明されているコンポーネントのリリース以降のツールチェインにおける変更を記載します。『Red Hat Enterprise Linux 8.0 リリースノート』も併せて参照してください。
16.1.1. RHEL 8 の GCC における変更点
Red Hat Enterprise Linux 8 では、GCC ツールチェーンは GCC 8.2 リリースシリーズに基づいています。以下は、Red Hat Enterprise Linux 7 からの主な変更点です。
- エイリアス解析、ベクトル化機能の改善、同一コードの折りたたみ、プロシージャー間解析、ストアマージの最適化パスなど、一般的な最適化が多数追加されました。
- Address Sanitizer が改善されました。
- メモリリークを検出するために、Leak Sanitizer が追加されました。
- 未定義の挙動を検出するために、Undefined Behavior Sanitizer が追加されました。
- デバッグ情報が DWARF5 形式で生成できるようになりました。この機能は実験的なものです。
- ソースコードカバレッジ解析ツールの GCOV が、様々な改良とともに拡張されました。
- OpenMP 4.5 仕様のサポートが追加されました。また、OpenMP 4.0 仕様のオフロード機能は、C、C++、および Fortran のコンパイラーで対応されます。
- 特定の、起こりうるプログラムエラーを静的に検出するために、新しい警告と改善された診断が追加されました。
- ソースの場所は、その場所よりも広い範囲を追跡するため、診断する内容が濃くなりました。コンパイラーは、「fix-it」ヒントを提供し、可能なコードの修正を提案します。代替名とタイポの検出を簡単にするために、スペルチェックが追加されました。
セキュリティー
GCC が、生成したコードをさらに強化するツールを提供するように拡張されました。セキュリティーに関する改善点には以下が含まれます。
-
オーバーフローチェックを含む算術計算のための組み込み関数
__builtin_add_overflow
、__builtin_sub_overflow
、および__builtin_mul_overflow
が追加されました。 -
スタッククラッシュに対して追加のコード保護を生成するために、
-fstack-clash-protection
オプションが追加されました。 -
増加したプログラムセキュリティーの制御フロー命令のターゲットアドレスを確認するために、
-fcf-protection
オプションが導入されました。 -
新しい
-Wstringop-truncation
警告オプションは、コピーした文字列を切り捨てるか、目的が変更しないstrncat
、strncpy
、stpncpy
などのバインドされた文字列操作関数への呼び出しを一覧表示します。 -
-Warray-bounds
警告オプションが改善され、範囲外の配列のインデックスおよびポインターのオフセットの検出が改善されるようになりました。 -
memcpy
、realloc
などの生のメモリーアクセス機能により、重要なクラスタイプのオブジェクトで潜在的に危険な操作を警告するために、-Wclass-memaccess
警告オプションが追加されました。
アーキテクチャーおよびプロセッサーのサポート
アーキテクチャーおよびプロセッサーサポートの改善点は次のとおりです。
- Intel AVX-512 アーキテクチャー、その多数のマイクロアーキテクチャー、および Intel Software Guard Extensions (SGX) にアーキテクチャー固有の新しいオプションが複数追加されました。
- コード生成は、現在、64 ビットの ARM アーキテクチャー LSE 拡張、ARMv8.2-A 16 ビット浮動小数点拡張 (FPE)、およびアーキテクチャーのバージョン ARMv8.2-A、ARMv8.3-A、および ARMv8.4-A を対象にできるようになりました。
-
ARM および 64 ビット ARM アーキテクチャーで
-march=native
オプションの処理が修正されました。 - IBM Z アーキテクチャーのプロセッサー z13 および z14 に対応するようになりました。
言語および標準
以下は、言語と標準規格に関連した主な変更点です。
- C 言語でコンパイルする際に使用されるデフォルトの標準規格が、GNU 拡張機能が含まれる C17 に変更になりました。
- C++ 言語でコードをコンパイルする際に使用されるデフォルトの標準規格が、GNU 拡張機能が含まれる C++14 に変更になりました。
- C++ ランタイムライブラリーが、C++11 および C++14 の標準規格に対応するようになりました。
-
C++ コンパイラーは、新しい機能を多数持つ C++14 標準仕様を実装するようになりました。たとえば、変数テンプレート、非静的データメンバーイニシャライザーを持つ統合、拡張した
constexpr
指定子、標準サイズの割り当て解除関数、汎用ラムダ、可変長の配列、桁区切り記号などになります。 - C 言語の標準 C11 のサポートが改善しました。ISO C11 アトミック、一般的な選択、およびスレッドローカルストレージが利用可能になりました。
-
新しい
__auto_type
の GNU C 拡張機能が、C 言語の C++11 のauto
キーワード機能のサブセットを提供します。 -
ISO/IEC TS 18661-3:2015 標準規格が指定する型名
_FloatN
および_FloatNx
が、C フロントエンドで認識されるようになりました。 -
C 言語でコンパイルする際に使用されるデフォルトの標準規格が、GNU 拡張機能が含まれる C17 に変更になりました。これは、
--std=gnu17
オプションを使用するのと同じ効果があります。以前は、デフォルトは、GNU 拡張を持つ C89 です。 - GCC は、C++17 言語標準規格と、C++20 標準規格の一部の機能を使用してコンパイルできるようになりました。
- 空のクラスを引数として渡すと、プラットフォーム ABI で要求される、Intel 64 アーキテクチャーおよび AMD64 アーキテクチャーで領域を使用しません。削除したコピーまたは移動のコンストラクターだけを持つクラスを渡すか返すと、重要なコピーまたは移動のコンストラクターを持つクラスと同じ規則を使用します。
-
C++11 の
alignof
演算子により返される値は、C の_Alignof
演算子と一致し、最小の配置を返すように修正されました。適切な配置を見つけるには、GNU 拡張機能__alignof__
を使用します。 -
Fortran 言語コード用の
libgfortran
ライブラリーのメインバージョンが 5 に変更になりました。 - Ada (GNAT)、GCC Go、および Objective C/C++ 言語に対応しなくなりました。Go コード開発には Go Toolset を使用してください。
関連情報
- 『Red Hat Enterprise Linux 8 リリースノート』も併せて参照してください。
- Using Go Toolset
16.1.2. RHEL 8 の GCC へのセキュリティー強化
本セクションは、Red Hat Enterprise Linux 7.0 のリリース以降に追加されたセキュリティーに関連する GCC の変更の詳細を説明します。
新しい警告
以下のような警告オプションが追加されました。
オプション | 警告が表示された理由 |
---|---|
|
コピーした文字列を切り捨てるか、目的が変更しない |
|
警告は、ユーザー定義のコンストラクターやコピー代入演算子、破損した仮想テーブルポインター、const 修飾型または参照、またはメンバーポインターのデータメンバーを回避する呼び出しを検出します。この警告は、データメンバーへのアクセス制御を回避する呼び出しも検出します。 |
| コードのインデントにより、コードのブロック構造について誤解を与える場所。 |
|
割り当てるメモリーの量が size を超えた場合にメモリー割り当て関数を呼び出します。2 つのパラメーターを乗じることで割り当てが指定される関数や、 |
|
メモリー量を割り当てないようにするメモリー割り当て関数を呼び出します。2 つのパラメーターを乗じることで割り当てが指定される関数や、 |
|
|
|
size 以上のメモリーが必要になると、 |
| 指定のサイズを超えたか、そのバインドが十分に拘束されるか不明な可変長配列 (VLA) の定義。 |
|
形式化された出力関数の |
|
形式化された出力関数の |
|
|
警告の改良
次の GCC の警告が修正されました。
-
-Warray-bounds
オプションが改善され、範囲外の配列インデックスおよびポインターオフセットの複数インスタンスを検出するようになりました。たとえば、フレキシブル配列メンバーと文字列リテラルに、負または過剰なインデックスが検出されます。 -
GCC 7 で導入された
-Wrestrict
オプションは、標準メモリーと、memcpy
、strcpy
などの文字列操作関数への制限引数を介してオブジェクトへのアクセスをオーバーラップする、より多くのインスタンスを検出するように強化されました。 -
-Wnonnull
オプションは、null 以外の引数 (nonnull
属性が付いている) を期待する関数に null ポインターを渡す広範囲なケースセットを検出するように強化されました。
新しい UndefinedBehaviorSanitizer
UndefinedBehaviorSanitizer と呼ばれる未定義の動作を検出する新しいランタイムサニタイザーが追加されました。主な機能は以下のようになります。
オプション | チェック |
---|---|
| ゼロによる浮動小数点除算を検出します。 |
| 浮動小数点型から整数の変換がオーバーフローしていないことを確認します。 |
| 配列境界の計測を有効にして、範囲外のアクセスを検出します。 |
| アラインメントチェックを有効にし、アラインが適切でない様々なオブジェクトを検出します。 |
| オブジェクトサイズのチェックを有効にして、様々な範囲外のアクセスを検出します。 |
| C++ メンバー関数呼び出し、メンバーアクセス、および基本クラスおよび派生クラスへのポインター間の会話のチェックを有効にします。また、参照されるオブジェクトに正しい動的タイプがない場合は検出します。 |
|
配列境界の厳密なチェックを有効にします。これにより、 |
| 汎用ベクトルを持つ算術演算でも、算術オーバーフローが診断されます。 |
|
事前定義されたビルトインの |
|
ポインターのラッピングに簡易ランタイムテストを実行します。 |
AddressSanitizer の新規オプション
以下のオプションが AddressSanitizer に追加されました。
オプション | チェック |
---|---|
| 異なるメモリーオブジェクトを指定するポインターの比較を警告します。 |
| 異なるメモリーオブジェクトを指すポインターの減算を警告します。 |
| その変数が定義されている範囲後に取得され使用されているアドレスの変数をサニタイズします。 |
その他のサニタイザーおよび計測
-
プローブを挿入するために、
-fstack-clash-protection
オプションが追加されました。このプローブは、スタック領域が静的または動的に割り当てられた場合に、スタックオーバーフローが確実に検出され、オペレーティングシステムが提供するスタックガードページを超えることに依存する攻撃ベクトルを軽減する際に挿入されます。 -
制御フロー転送のターゲットアドレス命令 (間接的な関数呼び出し、関数の戻り値、間接ジャンプなど) のターゲットアドレスが有効であることを確認することで、コード計測を実行して、プログラムセキュリティーを高める新しいオプション
-fcf-protection=[full|branch|return|none]
が追加されました。
関連情報
上述のオプションの一部に提供された値の詳細および説明は、man ページの gcc(1) を参照してください。
$ man gcc
16.1.3. RHEL 8 の GCC で互換性に影響を与える変更
std::string
および std::list
における C++ ABI の変更
RHEL 7 (GCC 4.8) と RHEL 8 (GCC 8) との間で変更した libstdc++
ライブラリーの std::string
クラスおよび std::list
クラスの Application Binary Interface (ABI) は、C++11 標準に従います。libstdc++
ライブラリーは、古い ABI および新しい ABI の両方に対応しますが、その他の C++ システムライブラリーには対応しません。そのため、このライブラリーに動的にリンクするアプリケーションを再構築する必要があります。これは、C++98 を含むすべての C++ 標準モードに影響します。RHEL 7 で Red Hat Developer Toolset コンパイラーを使用して構築したアプリケーションにも影響します。このコンパイラーは、古い ABI を維持して、システムライブラリーとの互換性を維持します。
GCC が、Ada、Go、および Objective C/C++ コードを構築しなくなる
GCC コンパイラーから、Ada (GNAT)、GCC Go、および Objective C/C++ の言語でコードを構築する機能が削除されました。
Go コードを構築する場合は、代わりに Go Toolset を使用します。
16.2. コンパイラーツールセット
RHEL 8.0 は、以下のコンパイラーツールセットを、アプリケーションストリームとして提供します。
- LLVM Toolset 9.0.1 は、LLVM コンパイラーインフラストラクチャーフレームワーク、C 言語および C++ 言語用の Clang コンパイラー、LLDB デバッガー、コード解析の関連ツールを提供します。『Using LLVM Toolset』を参照してください。
-
Rust Toolset 1.41 は、Rust プログラミング言語コンパイラー
rustc
、cargo
ビルドツールおよび依存マネージャー、cargo-vendor
プラグイン、および必要なライブラリーを提供します。『Using Rust Toolset』を参照してください。 -
Go Toolset 1.13 は、Go プログラミング言語ツールおよびライブラリーを提供します。Go は、
golang
としても知られています。『Using Go Toolset』を参照してください。
16.3. RHEL 8 における Java 実装および Java ツール
RHEL 8 AppStream リポジトリーには、以下が含まれます。
-
java-11-openjdk
パッケージ。OpenJDK 11 Java Runtime Environment および OpenJDK 11 Java Software Development Kit を提供します。 -
java-1.8.0-openjdk
パッケージ。OpenJDK 8 Java Runtime Environment および OpenJDK 8 Java Software Development Kit を提供します。 -
icedtea-web
パッケージ (Java Web Start の実装を提供)。 -
Java ライブラリーおよびコマンドラインツールを提供する
ant
モジュール。Java アプリケーションのコンパイル、アセンブル、テスト、および実行を行います。ant
がバージョン 1.10 に更新されました。 -
maven
モジュールは、ソフトウェアプロジェクトの管理および解釈を行うツールを提供します。maven
は、以前は、Software Collection から、またはサポート対象外の Optional チャンネルからしか入手できませんでした。 -
scala
モジュール は、Java プラットフォーム用の汎用プログラミング言語を提供します。scala
は、以前は、Software Collection からしか入手できませんでした。
また、java-1.8.0-ibm
パッケージは、Supplementary リポジトリーを介して配布されます。Red Hat は、このリポジトリーのパッケージをサポートしていません。
16.4. GDB で互換性に影響を与える変更
Red Hat Enterprise Linux 8 で提供される GDB のバージョンは、特に GDB の出力が端末から直接読み込まれる場合に、互換性に影響を与える変更が多数含まれています。次のセクションは、この変更の詳細を提供します。
GDB の出力の解析は推奨されません。Python GDB API または GDB Machine Interface (MI) を使用するスクリプトが推奨されます。
GDBserver がシェルで inferior を開始
inferior コマンドライン引数で拡張や変数置換を有効にするために、GDBserver では、GDB と同じように、シェルで inferior を開始するようになりました。
シェルを使用して無効にするには、以下を行います。
-
GDB コマンド
target extended-remote
を使用する場合は、set startup-with-shell off
コマンドでシェルが無効になります。 -
GDB コマンド
target remote
を使用する場合は、GDBserver の--no-startup-with-shell
オプションでシェルが無効になります。
例16.1 リモートの GDB inferior へのシェル拡張例
この例は、GDBserver から /bin/echo /*
コマンドを実行する方法が Red Hat Enterprise Linux versions 7 および 8 でどのように異なるかを示します。
RHEL 7 の場合:
$ gdbserver --multi :1234 $ gdb -batch -ex 'target extended-remote :1234' -ex 'set remote exec-file /bin/echo' -ex 'file /bin/echo' -ex 'run /*' /*
RHEL 8 の場合:
$ gdbserver --multi :1234 $ gdb -batch -ex 'target extended-remote :1234' -ex 'set remote exec-file /bin/echo' -ex 'file /bin/echo' -ex 'run /*' /bin /boot (...) /tmp /usr /var
gcj
サポートが削除される
Java 用の GNU Compiler でコンパイルされた Java プログラムをデバッグへの対応 (gcj
) が削除されました。
シンボルのダンプのメンテナンスコマンドの新しい構文
シンボルのダンプのメンテナンスコマンド構文に、ファイル名の前にオプションが追加されました。これにより、RHEL 7 の GDB で機能するコマンドが、RHEL 8 では機能しなくなりました。
例として、次のコマンドはファイルにシンボルを格納しませんが、エラーメッセージを生成します。
(gdb) maintenance print symbols /tmp/out main.c
シンボルのダンプのメンテナンスコマンドの新しい構文は、以下のようになります。
maint print symbols [-pc address] [--] [filename] maint print symbols [-objfile objfile] [-source source] [--] [filename] maint print psymbols [-objfile objfile] [-pc address] [--] [filename] maint print psymbols [-objfile objfile] [-source source] [--] [filename] maint print msymbols [-objfile objfile] [--] [filename]
スレッド番号がグローバルではなくなる
GDB は、グローバルのスレッド番号設定のみを使用していました。番号設定は、inferior_num.thread_num
の形式 (2.1
など) で、inferior ごとに表示されるように拡張されました。そのため、利便性に関する変数 $_thread
と、Python 属性 InferiorThread.num
のスレッド番号が、inferior の間で一意ではなくなりました。
GDB は、スレッドごとに、グローバルスレッド ID と呼ばれる 2 番目のスレッド ID を格納します。これは、以前のリリースのスレッド番号と同等の、新規のものになります。グローバルスレッド番号にアクセスするには、利便性に関する変数 $_gthread
および Python 属性 InferiorThread.global_num
を使用します。
後方互換性の場合は、Machine Interface (MI) のスレッド ID に、常にグローバル ID が含まれます。
例16.2 GDB スレッド番号変更の例
Red Hat Enterprise Linux 7 の場合:
# debuginfo-install coreutils $ gdb -batch -ex 'file echo' -ex start -ex 'add-inferior' -ex 'inferior 2' -ex 'file echo' -ex start -ex 'info threads' -ex 'pring $_thread' -ex 'inferior 1' -ex 'pring $_thread' (...) Id Target Id Frame * 2 process 203923 "echo" main (argc=1, argv=0x7fffffffdb88) at src/echo.c:109 1 process 203914 "echo" main (argc=1, argv=0x7fffffffdb88) at src/echo.c:109 $1 = 2 (...) $2 = 1
Red Hat Enterprise Linux 8 の場合:
# dnf debuginfo-install coreutils $ gdb -batch -ex 'file echo' -ex start -ex 'add-inferior' -ex 'inferior 2' -ex 'file echo' -ex start -ex 'info threads' -ex 'pring $_thread' -ex 'inferior 1' -ex 'pring $_thread' (...) Id Target Id Frame 1.1 process 4106488 "echo" main (argc=1, argv=0x7fffffffce58) at ../src/echo.c:109 * 2.1 process 4106494 "echo" main (argc=1, argv=0x7fffffffce58) at ../src/echo.c:109 $1 = 1 (...) $2 = 1
値の中身に対するメモリーが制限される
GDB は、以前は、値のコンテンツに割り当てられるメモリー量に制限を課していませんでした。その結果、誤ったプログラムをデバッグすると、GDB が割り当てるメモリー量が多くなりすぎていました。割り当てたメモリーの量を制限できるように、max-value-size
設定が追加されました。この制限のデフォルト値は 64 KiB です。これにより、Red Hat Enterprise Linux 8 の GDB では、表示される値が大きくなりすぎることはありませんが、その値が大きすぎることが報告されます。
たとえば、char s[128*1024];
と定義された値を出力すると、異なる結果が生成されます。
-
Red Hat Enterprise Linux 7 では、
$1 = 'A' <repeats 131072 times>
となります。 -
Red Hat Enterprise Linux 8 では、
value requires 131072 bytes, which is more than max-value-size
(値には 131072 バイトが必要ですが、この値は max-value-size を超えています) と表示されます。
スタブ形式の Sun のバージョンがサポート対象外になる
Sun バージョンの stabs
デバッグファイルフォーマットに対応しなくなりました。RHEL で gcc -gstabs
オプションを使用して GCC が生成した stabs
フォーマットは、GDB でも引き続きサポートされます。
Sysroot 処理変更
set sysroot path
コマンドは、デバッグに必要なファイルを検索する際にシステムルートを指定します。このコマンドに適用したディレクトリー名は、文字列 target:
のプレフィックスになり、GDB が、(ローカルおよびリモートの) ターゲットシステムの共有ライブラリーを読み込みます。以前は利用できた remote:
プレフィックスは、target:
として扱われるようになりました。さらに、デフォルトのシステム root の値は、後方互換性として、空の文字列から target:
に変更になりました。
GDB がリモートのプロセスを開始したり、すでに実行しているプロセス (ローカルおよびリモートの両方) に接続する際に、指定したシステムの root が、主な実行ファイルのファイル名の先頭に追加されます。これは、プロセスがリモートの場合に、デフォルト値 target:
が、GDB がリモートシステムからデバッグ情報を読み込もうとすることを示しています。これが発生しないようにするには、target remote
コマンドの前に set sysroot
コマンドを実行して、ローカルのシンボルファイルが、リモートのファイルが見つかるよりも早く見つかるようにします。
HISTSIZE が GDB コマンドの履歴サイズを制御しなくなる
HISTSIZE
環境変数に使用されている GDB は、コマンド履歴がどのぐらい保存されるかを指定していました。代わりに GDBHISTSIZE
環境変数が使用されるように変更になりました。この変数は、GDB に固有になります。可能な値とその効果は次のとおりです。
- 正の数 - このサイズのコマンド履歴を使用
-
-1
または空の文字列 - コマンド履歴をすべて保持 - 数値以外の値 - 無視
完了制限が追加される
set max-completions
コマンドを使用して、完了時に検討される候補の最大値が制限されるようになりました。現在の制限を表示するには、show max-completions
コマンドを実行します。デフォルト値は 200 です。この制限により、GDB が、生成する完了リストが大きすぎて、応答しなくならないようにします。
たとえば、p <tab><tab>
の入力後の出力は、以下のようになります。
-
RHEL 7 の場合 -
Display all 29863 possibilities? (y or n)
-
RHEL 8 の場合 -
Display all 200 possibilities? (y or n)
HP-UX XDB 互換性モードが削除される
HP-UX XDB 互換性モードの -xdb
オプションが GDB から削除されています。
スレッドのシグナル処理
GDB は、シグナルが実際に送信されるスレッドの代わりに、現在のスレッドへシグナルを配信していました。このバグは修正され、実行を再開する際に GDB が現在のスレッドへ、常にシグナルを渡すようになりました。
また、signal
コマンドは、現在のスレッドに、必要なシグナルを常に正しく配信するようになりました。シグナルに対してプログラムが停止したり、ユーザーがスレッドを切り替えた場合は、GDB により確認が求められます。
ブレークポイントモードが常に挿入され、自動的にマージされる
breakpoint always-inserted
設定が変更しました。auto
値と対応する動作が削除されました。デフォルト値は off
です。off
の場合は、すべてのスレッドが停止するまで、GDB がターゲットからブレークポイントを削除しないようになります。
remotebaud コマンドがサポート対象外に
set remotebaud
コマンドおよび show remotebaud
コマンドがサポートされなくなりました。代わりに set serial baud
コマンドおよび show serial baud
コマンドを使用してください。
16.5. コンパイラーおよび開発ツールにおける互換性に影響を与える変更
librtkaio が削除される
この更新では、librtkaio ライブラリーが削除されました。このライブラリーは、ファイルへの高パフォーマンスのリアルタイム非同期 I/O アクセスを提供していました。これは、Linux の KAIO (kernel Asynchronous I/O) サポートに基づいています。
削除の結果は以下のようになります。
-
librtkaio を読み込む
LD_PRELOAD
メソッドを使用するアプリケーションは、不明なライブラリーに関する警告を表示し、代わりに librt ライブラリーを読み込み、適切に実行します。 -
librtkaio を読み込む
LD_LIBRARY_PATH
メソッドを使用するアプリケーションは、代わりに librt ライブラリーを読み込んで適切に実行し、警告は表示されません。 -
dlopen()
システムコールを使用するアプリケーションでは、代わりに librtkaio が librt ライブラリーを直接読み込みます。
librtkaio のユーザーには以下のオプションがあります。
- 自身のアプリケーションを変更せずに、上記のフォールバックメカニズムを使用。
- librt ライブラリーを使用するようにアプリケーションのコードを変更。互換性のある POSIX 準拠 API が提供されます。
- 互換性のある API を提供する libaio ライブラリーを使用するようにアプリケーションのコードを変更。
特定の条件では、librt と libaio の両方が、同じ機能および性能を提供します。
Red Hat 互換性レベルは、libaio パッケージが 2 になります。librtk と削除された librtkaio の場合は 1 です。
詳細は「Changes/GLIBC223 librtkaio removal」を参照してください。
Sun RPC インターフェースおよび NIS インターフェースが glibc
から削除される
glibc
ライブラリーは、新しいアプリケーションに Sun RPC および NIS のインターフェースを提供しなくなりました。このインターフェースは、レガシーアプリケーションを実行する場合にのみ利用できるようになりました。開発者は、Sun RPC の代わりに libtirpc
ライブラリー、そして NIS の代わりに libnsl2
ライブラリーを使用するようにアプリケーションを変更する必要があります。アプリケーションは、置換ライブラリーの IPv6 サポートを利用します。
32 ビット Xen の nosegneg
ライブラリーが削除される
glibc
i686 パッケージは、以前は代替の glibc
ビルドに含まれており、負のオフセット (nosegneg
) を使用して、スレッド記述子セグメントレジスターの使用を回避していました。この代替ビルドは、ハードウェアの仮想化サポートを使用せず、フル準仮想化のコストを削除するための最適化として、32 ビットバージョンの Xen Project ハイパーバイザーでのみ使用されます。この代替ビルドはこれ以上使用されず、削除されます。
make
の新しい演算子 !=
を使用すると一部の makefile の既存構文で解釈が異なる
BSD makefile との互換性を高める $(shell …)
関数の代わりに、シェル代入演算子 !=
が GNU make
に追加されました。これにより、variable!=value
のように、感嘆符で終わり、その後に代入が続く名前の変数は、新しいシェル割り当てとして解釈されるようになりました。以前の動作に戻すには、variable! =value
のように、感嘆符の後にスペースを追加します。
演算子と関数の詳細と相違点は、GNU の make
マニュアルを参照してください。
MPI デバッグサポート用 valgrind ライブラリーが削除される
valgrind-openmpi
パッケージが提供する Valgrind の libmpiwrap.so
ラッパーライブラリーが削除されました。このライブラリーにより、MPI (Message Passing Interface) を使用して、Valgrind がプログラムをデバッグできるようになりました。このライブラリーは、以前のバージョンの Red Hat Enterprise Linux の Open MPI 実装バージョンに固有です。
libmpiwrap.so
を使用する場合は、MPI 実装およびバージョンに固有のアップストリームソースから独自のバージョンを構築することが推奨されます。LD_PRELOAD
技術を使用して、カスタムビルドのライブラリーを Valgrind に提供します。
開発用ヘッダーおよび静的ライブラリーが valgrind-devel
から削除される
valgrind-devel
サブパッケージは、カスタムの valgrind ツールを開発する開発ファイルを追加するために使用されていました。このファイルには保証された API がないため、この更新によりこのファイルが削除され、静的なリンクが必要となり、サポート対象外となります。valgrind-devel
パッケージには、valgrind が有効なプログラムや、valgrind.h
、callgrind.h
、drd.h
、helgrind.h
、memcheck.h
などのヘッダーファイルに対する開発ファイルが含まれます。このファイルは安定しており、十分にサポートされます。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。