bugpoint - 自動テストケース削減ツール¶
概要¶
bugpoint [オプション] [入力 LLVM ll/bc ファイル] [LLVM パス] –args プログラム引数
説明¶
bugpoint は、LLVM ツールとパスにおける問題の原因を絞り込みます。これは、オプティマイザのクラッシュ、オプティマイザによる誤コンパイル、または(静的および JIT コンパイラでの問題を含む)不適切なネイティブコード生成の3種類の障害をデバッグするために使用できます。大規模なテストケースを小さく有用なものに削減することを目的としています。bugpoint の設計と内部動作、および bugpoint の使用に関するアドバイスの詳細については、LLVM ディストリビューションの LLVM bugpoint ツール:設計と使用法 を参照してください。
オプション¶
–additional-so ライブラリ
テストプログラムの実行時に、動的共有オブジェクト ライブラリ をロードします。これは、実行するために非 LLVM ライブラリ(X または curses ライブラリなど)に依存するプログラムをデバッグする場合に役立ちます。
–append-exit-code={true,false}
テストプログラムの終了コードを出力ファイルに追加し、終了コードの変更がテストの失敗とみなされるようにします。デフォルトは false です。
–args プログラム引数
–args の後に指定されたすべての引数を、テストプログラムの実行時に渡します。プログラム引数 のいずれかが「
-
」で始まる場合は、以下を使用する必要があることに注意してください。bugpoint [bugpoint args] --args -- [program args]–args オプションの直後の「
--
」は、bugpoint に対して「-
」で始まるすべてのオプションを、bugpoint 自体のオプションとしてではなく、–args オプションの一部と見なすように指示します。
–tool-args ツール引数
テスト対象の LLVM ツール(llc、lli など)の実行時に、–tool-args の後に指定されたすべての引数を渡します。このオプションは、次の方法で使用する必要があります。
bugpoint [bugpoint args] --tool-args -- [tool args]–tool-args オプションの直後の「
--
」は、bugpoint に対して「-
」で始まるすべてのオプションを、bugpoint 自体のオプションとしてではなく、–tool-args オプションの一部と見なすように指示します。(上記の –args を参照してください。)
–safe-tool-args ツール引数
–safe-tool-args の後に指定されたすべての引数を、「安全な」実行ツールに渡します。
–gcc-tool-args gcc ツール引数
–gcc-tool-args の後に指定されたすべての引数を、gcc の呼び出しに渡します。
–opt-args opt 引数
–opt-args の後に指定されたすべての引数を、opt の呼び出しに渡します。
–disable-{dce,simplifycfg}
指定されたパスを実行して、テストプログラムのクリーンアップとサイズの削減を行いません。デフォルトでは、bugpoint はテストプログラムを削減しようとするときに、内部的にこれらのパスを使用します。これらのパスのいずれかでバグを見つけようとしている場合、bugpoint がクラッシュする可能性があります。
–enable-valgrind
valgrind を使用して、最適化フェーズで障害を検出します。これにより、bugpoint は、メモリの誤った管理によって引き起こされる、それ以外の場合は無症状の問題を見つけることができます。
-find-bugs
ユーザーが bugpoint を強制終了するまで、指定されたパスを継続的にランダム化してテストプログラムで実行し、バグが見つかるようにします。
-help
コマンドラインオプションの概要を出力します。
–input ファイル名
ファイル名 を開き、テストプログラムの標準入力を、実行時にそのファイルからのものになるようにリダイレクトします。
–load プラグイン
動的オブジェクト プラグイン を bugpoint 自体にロードします。このオブジェクトは、新しい最適化パスを登録する必要があります。ロードされると、オブジェクトはさまざまな最適化を有効にするための新しいコマンドラインオプションを追加します。最適化の新しい完全なリストを表示するには、-help オプションと –load オプションを一緒に使用します。例えば
bugpoint --load myNewPass.so -help
–mlimit メガバイト
最適化とコード生成のメモリ使用量の上限を指定します。制限を無効にするには、ゼロに設定します。
–output ファイル名
テストプログラムが標準出力ストリームに出力を生成するたびに、ファイル名(「参照出力」)の内容と一致する必要があります。このオプションを使用しない場合、bugpoint は「安全な」バックエンドでプログラムをコンパイルして実行することにより、参照出力を生成しようとします。
–run-{int,jit,llc,custom}
テストプログラムがコンパイルされるたびに、bugpoint は指定されたコードジェネレータを使用してコードを生成する必要があります。これらのオプションを使用すると、インタープリタ、JIT コンパイラ、静的ネイティブコードコンパイラ、またはカスタムコマンド(–exec-command を参照)をそれぞれ選択できます。
–safe-{llc,custom}
コードジェネレータをデバッグする場合、bugpoint は指定されたコードジェネレータを「安全な」コードジェネレータとして使用する必要があります。これは、参照出力が提供されていない場合に参照出力を生成するために使用される既知の良好なコードジェネレータであり、テストケースから除外されるプログラムの一部をコンパイルするために使用されます。これらのオプションを使用すると、静的ネイティブコードコンパイラ、またはカスタムコマンド(–exec-command を参照)をそれぞれ選択できます。インタープリタと JIT バックエンドは、現在、「安全な」バックエンドとして使用できません。
–exec-command コマンド
このオプションは、–run-custom オプションと –safe-custom オプションでビットコードテストケースを実行するために使用するコマンドを定義します。これは、クロスコンパイルに役立ちます。
–compile-command コマンド
このオプションは、–compile-custom オプションでビットコードテストケースをコンパイルするために使用するコマンドを定義します。ファイルが「興味深い」場合は、コマンドが失敗の終了コードで終了する必要があります。それ以外の場合は、成功の終了コード(つまり、0)で終了する必要があります(これは、「興味深い」入力でクラッシュした場合と同じです)。
これは、リンクまたは実行ステージを実行せずにコンパイラ出力をテストする場合に役立ちます。削減された単体テストを生成するには、テストケースに CHECK ディレクティブを追加し、この形式で実行可能な compile-command スクリプトの名前を渡すことができます。
#!/bin/sh llc "$@" not FileCheck [bugpoint input file].ll < bugpoint-test-program.sこのスクリプトは、FileCheck がパスする限り「失敗」します。したがって、結果は FileCheck をパスする最小のビットコードになります。
–safe-path パス
このオプションは、–safe-{int,jit,llc,custom} オプションで実行するコマンドへのパスを定義します。
–verbose-errors={true,false}
bugpoint のデフォルトの動作は、コンパイルがクラッシュする削減されたテストを見つけたときに「<crash>」を出力することです。このフラグは、クラッシュしているプログラムの出力を stderr に出力します。これは、追跡されているのが同じエラーであり、コンパイラもクラッシュする別のエラーではないことを確認するのに役立ちます。デフォルトは false です。
終了ステータス¶
bugpoint が問題の発見に成功した場合、0 で終了します。それ以外の場合は、エラーが発生した場合、ゼロ以外の値で終了します。