一个简单的LLVM传递示例,用于LLVM-7.0.0。当我试图运行时,我会得到这个错误:
clang -i~/clang_llvm2/包括-Xclang -load -Xclang build/骨架/libSkeletonPass.* test/a.cpp
我看到一个叫main的函数!
..。
clang-7:错误:无法执行命令:分段错误(核心转储) clang-7:由于信号(使用-v查看调用) clang版本7.0.0 (标记/释放_700/最终)目标:x86_64-未知-linux-gnu线程模型: posix clang-7:注意:诊断msg:请向https://bugs.llvm.org/提交错误报告,并包含崩溃回溯、预处理源和相关运行脚本。clang-7:错误:无法执行命令:分段错误(核心转储) clang-7:注意:诊断信息:生成预处理源的错误。
LLVM-7.0.0的简单LLVM通行证
#include "llvm/Pass.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
using namespace llvm;
namespace {
struct SkeletonPass : public FunctionPass {
static char ID;
SkeletonPass() : FunctionPass(ID) {}
bool runOnFunction(Function &F) {
errs() << "I saw a function called " << F.getName() << "!\n";
return false;
}
};
}
char SkeletonPass::ID = 0;
// Automatically enable the pass.
// http://adriansampson.net/blog/clangpass.html
static void registerSkeletonPass(const PassManagerBuilder &,
legacy::PassManagerBase &PM) {
PM.add(new SkeletonPass());
}
static RegisterStandardPasses
RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible,
registerSkeletonPass);a.cpp程序是一个简单的hello world程序。正确设置了LLVM_HOME。使用预先构建的llvm文件。
发布于 2019-05-29 14:35:16
并不是只有您有此错误(bug.cgi?id=34573),从LLVM 5开始使用RegisterStandardPasses时,LLVM似乎会在程序结束时崩溃。
根据这个答案:https://github.com/sampsyo/llvm-pass-skeleton/issues/7#issuecomment-401834287,一个解决方案是在链接程序时将-Wl,-znodelete添加到编译器标志中。对我起作用了。
https://stackoverflow.com/questions/52878513
复制相似问题