LLVM,获取内部结构的偏移量

时间:2017-12-23 05:18:14

标签: c++ llvm

我想在LLVM中使用每个struct元素的细粒度偏移量。例如:

struct A{
    int a;
    int b;
};
struct B{
    int c;
    struct A sa;
};
struct B s;

对于struct B,我想枚举其中的每个元素,即:offset(s.c)= 0,offset(s.sa.a)= 4,offset(s.sa.b)= 8。如何在我的传递中获取此信息(可以使用哪种API?)而不是dump()?

2 个答案:

答案 0 :(得分:6)

使用Module::getDataLayout获取DataLayout对象,该对象可以StructLayout作为DataLayout::getStructLayout的回报。 StructLayout具有getElementOffset()方法,可以满足您的需求。

答案 1 :(得分:1)

这是您使用offsetof

的地方
int main() {
    cout << offsetof(A, a) << ' ' << offsetof(A, b);
}