微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运行 llvm 模块时出现分段错误

如何解决运行 llvm 模块时出现分段错误

我正在构建一个提升器,将 armv7m 汇编指令提升到 LLVM IR。

我从程序集构建了一个控制流图,并为程序集中的每个函数、基本块和指令创建了等效的 LLVM 对象。全部在一个模块中。我的下一步是使用通行证管理器运行该模块。下面举个简单的例子。 我正在尝试制作然后运行一个简单的 llvm 模块。

C++代码如下:

using namespace llvm;     

Module* makeLLVMModule() {
    llvm::LLVMContext context;
    
    // Module Construction
    Module* modu = new Module("test",context);
    
    FunctionType* type = FunctionType::get(Type::getInt64Ty(context),{},false);
    FunctionCallee mul_add = modu->getorInsertFunction("mul_add",type,type);
    Function* m_add = modu->getFunction("mul_add");
    m_add->setCallingConv(CallingConv::C);
    
    Function::arg_iterator args = m_add->arg_begin();
    Value* x = args++;
    x->setName("x");
    Value* y = args++;
    y->setName("y");
    Value* z = args++;
    z->setName("z");
    
    BasicBlock* block = BasicBlock::Create(context,"entry",m_add);
    IRBuilder<> builder(block);
    Value* tmp = builder.CreateBinop(Instruction::Mul,x,y,"tmp");
    Value* tmp2 = builder.CreateBinop(Instruction::Add,tmp,z,"tmp2");
    Value* ret = builder.CreateRet(tmp2);
    return modu;
}

int main()
{
    PassManager <llvm::Module>PM;
    llvm::ModuleAnalysisManager AM;
    llvm::Module* modu = makeLLVMModule();
    verifyModule(*modu);
    llvm::ModulePass* print_pass = createPrintModulePass(outs());
    PM.run(*modu,AM);
}

我正在使用命令:

$ c++ -g example.cpp `llvm-config --cxxflags --ldflags --libs core` -o example
$ ./example

我得到的输出是:

Segmentation fault (core dumped)

有什么关于我可能做错的提示吗?..这个例子看起来很简单。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?