我正在尝试在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.
}
}
谢谢你的时间!