我想從GENERIC表示中獲取它所聲明的字段的名稱。我有一個BIT_FIELD_REF樹,它的DECL_NAME爲零。例如,如何獲取BIT_FIELD_REF引用的位域的名稱?
struct {
int a;
unsigned b:1;
} s;
...
if (s.b)
...
對於S.B我會得到一個BIT_FIELD_REF並沒有明顯的方式來獲得「B」,這是該領域的原始名稱。怎麼做?
我想從GENERIC表示中獲取它所聲明的字段的名稱。我有一個BIT_FIELD_REF樹,它的DECL_NAME爲零。例如,如何獲取BIT_FIELD_REF引用的位域的名稱?
struct {
int a;
unsigned b:1;
} s;
...
if (s.b)
...
對於S.B我會得到一個BIT_FIELD_REF並沒有明顯的方式來獲得「B」,這是該領域的原始名稱。怎麼做?
嘗試從GDB嘗試call debug_c_tree (tree_var)
或call debug_tree (tree_var)
,看看是否知道這個名字。如果是這樣,則反向設計漂亮的打印機。
我到底做了什麼:調查tree-dump.c
中的內容我最終了解到,他們所知的位域的名稱來自struct的DIE,並且很難追蹤。
然後我決定從BIT_FIELD_REF
參數0(參考結構)類型獲取名稱,它是RECORD_TYPE
,它存儲所有字段的大小和偏移量。
問題是要明白,BIT_FIELD_REF
不引用位本身:它使用像BIT_FIELD_REF & INTEGER_CST
,其中常數像掩碼行爲。在瞭解了這些之後,我很快計算了偏移量並從類型中獲得了名稱。
感謝您的建議,但它不知道名稱。 任何其他方式來做到這一點? – 2012-02-24 12:27:38
對不起,如果可以知道,我希望漂亮的打印機打印它。它會在以後的轉儲文件中重新出現嗎?樹-SSA通行證可能?我想是這樣,他們需要從某個地方得到它。 – ams 2012-02-24 12:33:04
問題是,他們確實知道並打印了__some__位字段的轉儲名稱(並非全部,以及我最初感興趣的特定情況最初沒有輸出它的名稱) 我想我會嘗試確定它在哪裏得到名稱當它發生時,但我不確定它打印出來的位置。 – 2012-02-28 15:03:13