ConstantStruct或ConstantArray读取内存内容

时间:2016-03-24 09:42:01

标签: c++ clang llvm llvm-ir

我正在写一些llvm(3.7)传递,我需要一些关于Constant类的信息。 在llvm-IR I解析中,有" ConstantStruct"或" ConstantArray"用作全局变量的初始化程序的实例。例如:

%struct.S = type { i32, i32, i32, i32 }

@s = global [2 x %struct.S] [%struct.S { i32 6, i32 8, i32 -8, i32 -5 }, %struct.S { i32 0, i32 2, i32 -1, i32 2 }], align 4

如果我能够读取常量的内存,而不必递归遍历所有元素(也可以是ConstantStructs或数组),我的工作会容易得多。

例如,我需要一个函数

llvm::ConstantStruct* initializer = globalVar->getInitializer();
void* memoryContent;
int sizeInBytes = initializer->getMemoryContent(&memoryContent);

到目前为止,我必须逐个阅读元素,这是一个痛苦(并且容易出错)的过程。

任何提示都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

我只是理解由于初始化操作数中可能存在ConstExpr而无法实现。

然而,我设法通过valueId上的大开关获得了很好的递归实现。