如何替换全局数组的初始化内容

时间:2017-03-06 12:51:13

标签: llvm llvm-ir

在LLVM IR中,我有一个类型为[4 x i32]的全局数组:

@data = local_unnamed_addr global [4 x i32] [i32 17, i32 31, i32 55, i32 7], align 4

使用模块传递,我想在原始示例{17, 31, 55, 7}中修改此数组的初始值设定项。

我能够检测全局数据。 globalData包含对GlobalVariable的引用。然后我确定它是否已初始化并且是否为数组类型。

if(globalData.hasInitializer()) {
  auto arrayType = globalData.getInitializer()->getType();
  if(arrayType->isArrayTy()) {
    SmallVector<Constant *, 4> arrayContent(4); // How to get the dimension?
    // How to get each Constant from the orginal initializer?
    Constant* initializer = ConstantArray::get((ArrayType*) arrayType, arrayContent);
    globalData.setInitializer(initializer);
  }
}

但是,我错过了如何获取数组的维度,原始的整数初始值设定项以及如何正确设置新的初始值设定项。

现在,执行显示的代码不会更新初始化程序数组。

0 个答案:

没有答案