运行 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.JdbcOdbc...