我刚刚开始使用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>
答案 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
。
另外,请注意,如果传入尚未注册(如果是,则会出现段错误)