3

我刚刚开始使用 LLVM。我写了自己的 Hello pass,效果很好。

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

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

但是这个标志不被 opt 识别。

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

编辑:

我终于得到了 LLVMDev 的答复。实际上,我想运行的 pass 是由 llc 执行的,而不是 opt。但是,我找不到选项-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);

其次,在终端中,当您对目标文件运行 pass 时,运行 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.

另外,请注意传入是否尚未注册(如果是,您将收到段错误错误)

于 2013-01-21T14:28:20.647 回答