使用opt运行LLVM传递

时间:2013-01-21 13:27:19

标签: llvm

我刚刚开始使用LLVM。我写了自己的Hello传递,工作正常。

现在我想从StackProtector.cpp运行带有堆栈保护程序的选项,但是我遇到了麻烦。当我查看源代码时,看起来我应该使用标志-stack-protector:

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

但是,opt无法识别此标志。

我不确定哪个文件要“加载”,因为它不像加载我自己的LLVMHello.so文件那么简单,我找不到StackProtector.so文件;我相信这可能是问题所在。

编辑:

我终于得到了LLVMDev的回答。实际上,我想要运行的传球是由公司执行,而不是选择。但是,我找不到选项-stack-protector,用

llc --help

因为此选项已隐藏。如果我做了

llc --help-hidden

显示通行证在那里,我只需要运行

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

1 个答案:

答案 0 :(得分: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

另外,请注意,如果传入尚未注册(如果是,则会出现段错误)