8.9. コンパイラーおよび開発ツール
guru モードを使用した systemtap スクリプトがより速くコンパイルされるようになりました。
systemtap の guru モードの liveness 分析では、dyninst ライブラリーを使用してバイナリーを解析します。新しいカーネルは、CONFIG_RETPOLINE=y を使用して軽減コードを有効にし、従来の RET 命令をサンクへのジャンプで置き換えます。その結果、サンクへのジャンプによって導入された制御フローグラフの追加のエッジを liveness 分析ですべて検査する必要があるため、バイナリー解析にはるかに長い時間がかかりました。
今回の更新により、カーネルコードがサンクを使用している場合、systemtap が liveness 分析を無効にします。その結果、guru モードを使用する systemtap スクリプトのコンパイルがより速くなります。
eu-addr2line -C が他の引数を正しく認識するようになる
以前は、elfutils の eu-addr2line コマンドで -C 引数を使用すると、次の 1 文字の引数が消えていました。その結果、eu-addr2line -Ci コマンドは eu-addr2line -C と同じように動作し、eu-addr2line -iC は期待どおりに動作しました。このバグは修正され、eu-addr2line -Ci は 両方の引数を認識するようになりました。
eu-addr2line -i は、GCC リンクタイム最適化でコンパイルされたコードを正しく処理するようになる
以前は、elfutils に含まれる libdw ライブラリーの dwarf_getscopes 関数は、GCC リンクタイム最適化でコンパイルされた関数の抽象オリジン定義を見つけることができませんでした。したがって、eu-addr2line コマンドで -i 引数を使用すると、eu-addr2line は gcc -flto でコンパイルされたコードのインライン関数を表示できませんでした。今回の更新により、libdw dwarf_getscopes 関数はインライン化スコープの正しいコンパイル単位を検索し、eu-addr2line -i は 期待どおりに動作するようになりました。