如何在使用Clang编译为LLVM IR时保留struct成员标识符?
问题描述:
说我有下面的C结构的定义:如何在使用Clang编译为LLVM IR时保留struct成员标识符?
struct stringStructure
{
char *stringVariable;
};
针对上述情况,锵产生以下LLVM IR:
%struct.stringStructure = type { i8* }
...,其包括在我的定义以外的所有变量标识符stringVariable
。
我想找到某种方法将标识符导出到生成的LLVM IR中,以便我可以通过我的应用程序(使用LLVM C++ API)中的名称来引用它。
我试着加入annotate
属性,如下所示:
char *stringVariable __attribute__((annotate("stringVariable")));
...但注释似乎并没有使它通过(该结构还只是定义为type { i8* }
)。
任何想法?
答
LLVM IR不保留源语言的许多功能。你可以像
struct Foo {
char *a;
};
struct Bar {
char *a;
};
只有一种类型通过代码检查,这将在所有发出的,因为类型LLVM是结构等效。如果你想保留源代码构造的任意信息,你必须发出/使用调试信息。
谢谢,安东。我很好奇是否有办法在不发出调试信息的情况下做到这一点(即在生产,优化,剥离代码中)。 – smokris 2011-02-07 18:40:57