2011-02-07 42 views
1

說我有下面的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* })。

任何想法?

回答

1

LLVM IR不保留源語言的許多功能。你可以像

struct Foo { 
    char *a; 
}; 

struct Bar { 
    char *a; 
}; 

只有一種類型通過代碼檢查,這將在所有發出的,因爲類型LLVM是結構等效。如果你想保留源代碼構造的任意信息,你必須發出/使用調試信息。

+1

謝謝,安東。我很好奇是否有辦法在不發出調試信息的情況下做到這一點(即在生產,優化,剝離代碼中)。 – smokris 2011-02-07 18:40:57

相關問題