0
llvmに対してと書いてあります。を書きました。LLVM:CallGraphWrapperPassが必要な場合、Clangは実行されません
using namespace llvm;
namespace {
struct SkeletonPass : public FunctionPass {
static char ID;
SkeletonPass() : FunctionPass(ID) {}
void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired<CallGraphWrapperPass>();
AU.setPreservesAll();
}
virtual bool runOnFunction(Function &F) {
errs() << "Function: " << F.getName() << "!\n";
CallGraph &CG = getAnalysis<CallGraphWrapperPass>().getCallGraph();
return false;
}
};
}
char SkeletonPass::ID = 0;
static RegisterPass<SkeletonPass> X("skeleton", "text");
私は
opt -load ./libSkeletonPass.so -skeleton test.bc > /dev/null
でこのコードを実行すると、私は正しい出力を取得します。
static void registerSkeletonPass(const PassManagerBuilder &,
legacy::PassManagerBase &PM) {
PM.add(new SkeletonPass());
}
static RegisterStandardPasses
RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible,
registerSkeletonPass);
:この偉大なblogによると、次のコマンド
clang -Xclang -load -Xclang ./libSkeletonPass.so test.c
も限り、私たちはとの最後の行を置き換えるよう、動作するはず
(test.bcを無視することができます) 問題はclangがクラッシュし、このエラーが返されます。
...
clang-3.8: error: unable to execute command: Segmentation fault (core dumped)
clang-3.8: error: clang frontend command failed due to signal (use -v to see invocation)
...
すべてがなければCallGraphWrapperPass参照clangはのパスを正確に実行します。
私はllvmを初めて使ったので、逃したことはありますか?
システム:Linuxの4.4.0(64)
打ち鳴らすバージョン:3.8.1