【问题标题】:ConstantStruct or ConstantArray read memory contentConstantStruct 或 ConstantArray 读取内存内容
【发布时间】:2016-03-24 09:42:01
【问题描述】:

我正在编写一些 llvm (3.7) 通行证,我需要一些关于常量类的信息。 在我正在解析的 llvm-IR 中,有“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);

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

任何提示将不胜感激。

【问题讨论】:

  • 对否决票的任何评论将不胜感激......我不认为这是一个微不足道的问题......

标签: c++ clang llvm llvm-ir


【解决方案1】:

我刚刚明白这是不可能的,因为初始化器操作数中可能存在 ConstExpr。

但是,我设法通过对 valueId 的大开关获得了一个不错的递归实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多