第33章 コンパイラーおよびツール
FCoE 経由で SAN から起動する場合の複数のバグ
Fibre Channel over Ethernet (FCoE)を使用したストレージエリアネットワーク(SAN)からの起動の現在の実装により、複数のバグが発生していました。Red Hat は、Red Hat Enterprise Linux 7 の今後のリリースを、これらのバグの修正を予定しています。影響を受けるバグおよび回避策の一覧については、Red Hat サポート担当者にお問い合わせください。
Valgrind は、以前のバージョンの Open MPI に対して構築されたプログラムを実行できません。
Red Hat Enterprise Linux 7.2 は、バージョン 1.10 の Open MPI アプリケーションバイナリーインターフェイス(ABI)のみをサポートしています。これは、以前に同梱されていた 1.6 バージョンの Open MPI ABI と互換性がありません。そのため、以前のバージョンの Open MPI に対して構築されたプログラムは、Red Hat Enterprise Linux 7.2 に含まれる Valgrind で実行できません。この問題を回避するには、Open MPI バージョン 1.6 にリンクされたプログラムには、Red Hat Developer Toolset バージョンの Valgrind を使用します。
GCC により生成された合成関数により SystemTap が混乱する
GCC の最適化により、他の関数のインラインコピー用に合成関数を生成できます。SystemTap プローブは合成関数と実関数のエントリーポイントの両方に配置できるため、このような合成関数は、SystemTap や GDB などのファーストクラス関数や混乱ツールのようになります。これにより、1 つの基礎となる関数呼び出しごとに複数の SystemTap プローブがヒットする可能性があります。
この問題を回避するには、SystemTap スクリプトは、インライン化された部分的な関数に関連する再帰の検出やプローブの抑制など、カウンターメッセンジャーを導入する必要がある場合があります。たとえば、以下のスクリプトなどです。
probe kernel.function("can_nice").call { }
以下のように、上記の問題を回避しようとする可能性があります。
global in_can_nice% probe kernel.function ("can_nice").call { in_can_nice[tid ()] ++; if (in_can_nice[tid ()] > 1){ next } /* real probe handler here */ } probe kernel.function ("can_nice").return { in_can_nice[tid ()] --; }
このスクリプトは、考えられるシナリオをすべて考慮するわけではないことに注意してください。たとえば、不明な kprobes や kretprobes や genuine が意図した再帰などの場合は予想通りに機能しませんでした。
ABRT がバックトレースを収集する際に生成される SELinux AVC
/etc/abrt/plugins/CCpp.conf
設定ファイルの CreateCoreBacktrace
オプションを使用して、クラッシュしたプロセスからバックトレースを収集できる新しい ABRT 機能が有効になっている場合は、プロセスのスタックで関数一覧を取得するために、SELinux AVC メッセージが生成されます。
GDB は、ウォッチポイントをヒットとして報告した後でもアクティブな状態を維持します。
64 ビット ARM アーキテクチャーでは、GDB が、ヒットとして報告した後でも、ウォッチポイントを誤ってアクティブにすることがあります。これにより、ウォッチポイントが 2 回目に到達し、ハードウェアの表示がウォッチポイントとして認識されなくなり、代わりに一般的な SIGTRAP シグナルとして出力されます。この問題を回避して、過剰な SIGTRAP レポートを停止するには、いくつかの方法があります。
* ウォッチポイントに達した後に SIGTRAP が表示されると continue を入力します。
*
~/.gdbinit
設定ファイルに以下の行を追加して、SIGTRAP シグナルを無視するように GDB に指示します。
SIGTRAP nostop noprint を処理します。
* 同等のハードウェアではなく、ソフトウェアウォッチポイントを使用してください。ソフトウェアウォッチポイントではデバッグの速度が大幅に遅く、watch コマンドのみが利用できることに注意してください( rwatch または awatchではありません)。
~/.gdbinit
設定ファイルに以下の行を追加します。
set can-use-hw-watchpoints 0
grubaa64.efi を使用して起動に失敗する
pxeboot または PXE 設定ファイルの問題により、7.2 grubaa64.efi ブートローダーを使用して Red Hat Enterprise Linux 7.2 をインストールするか、オペレーティングシステムの起動に大きな遅延が発生します。回避策として、Red Hat Enterprise Linux 7.2 のインストール時に、7.2 grubaa64.efi ファイルの代わりに 7.1 grubaa64.efi ファイルを使用してください。
GCC の MPX 機能には、Red Hat Developer Toolset バージョンの libmpx ライブラリーが必要です。
libmpxwrappers ライブラリーは、libmpx ライブラリーの gcc-libraries バージョンにありません。そのため、GCC では Memory Protection Extensions (MPX)機能が正しく機能しなくなり、アプリケーションが正しくリンクされない可能性があります。この問題を回避するには、Red Hat Developer Toolset 4.0 バージョンの libmpx ライブラリーを使用します。