如何重新初始化llvm :: GlobalVariable

时间:2016-03-17 20:12:01

标签: c++ c++11 llvm llvm-ir

我正在尝试在llvm IR中创建一个函数,它将所有 llvm :: GlobalVariable 重新分配给它们的初始值。

我尝试通过首先迭代 llvm :: Module 的所有 llvm :: GlobalVariable 然后为每个 llvm :: GlobalVariable来解决这个问题,它有一个初始值并且不是常量,要在我的新函数中添加 llvm :: StoreInst ,它将执行赋值。

我的问题是 llvm :: GlobalVariable :: getInitializer()返回 * llvm :: Constant 这是一个基类,我不确定如何获取访问初始化值,尤其是对于自定义结构和类。我应该使用某种向下转型还是有更清洁的解决方案?

这是我的代码到目前为止编译好但在运行时崩溃:(断言`getOperand(1) - > getType() - > isPointerTy()&&“Ptr必须有指针类型! “'失败。

Module::GlobalListType* glist = &M.getGlobalList();

for(auto it=glist->begin(); it!=glist->end(); ++it){

  if(it->hasInitializer() && !it->isConstant()){
    Constant* con = it->getInitializer();
    StoreInst(it, con, RET);//RET is a pointer to an existing instruction.
  }

}

谢谢你的时间!

0 个答案:

没有答案