3

LLVMを使い始めたばかりです。私は独自の Hello パスを書きましたが、うまくいきました。

ここで、StackProtector.cpp からスタック プロテクター パスを使用して opt を実行したいのですが、問題が発生しています。ソース コードを見ると、フラグ -stack-protector を使用する必要があるようです。

INITIALIZE_PASS(StackProtector, "stack-protector", "Insert stack protectors", false, false)

しかし、このフラグは opt によって認識されません。

自分の LLVMHello.so ファイルをロードするほど単純ではなく、StackProtector.so ファイルが見つからなかったため、どのファイルを「ロード」すればよいかわかりません。これが問題かもしれないと思います。

編集:

やっとLLVMDevから返事が来ました。実際、私が実行したかったパスは、opt ではなく llc によって実行されます。オプション -stack-protector が見つかりませんでしたが、

llc --help

このオプションは非表示になっているためです。代わりに私がそうするなら

llc --help-hidden

パスがそこにあることが示されているので、実行する必要があります

llc -print-before=stack-protector <input>
4

1 に答える 1

2

まず、パスに追加します:

static RegisterPass<StackProtector> X("StackProtector", "Insert stack protectors", false, false);

次に、端末でターゲット ファイルに対してパスを実行すると、make を実行すると、次のようになります。

//home/YOURNAME/llvm/Release+Asserts/bin/opt -load //home/YOURNAME/llvm/Release+Asserts/lib/StackProtector.so -StackProtector //home/YOURNAME/llvm/tools/clang/woRKSPACE/Test.bc

ここで、Test.bc はターゲット コードです。また、注意してください: Makefile に を追加することを忘れないでくださいLIBRARYNAME = StackProtector

また、パスがまだ登録されていない場合は注意してください (登録されている場合は、segfault エラーが発生します)。

于 2013-01-21T14:28:20.647 に答える