2014-03-06 58 views
0

我正試圖手動構建一個指令列表,其中一個特定變量在LLVM IR中獲取了一個值。在LLVM中跟蹤全局定義

對於函數中的局部變量,我可以通過使用指令迭代器並檢查特定指令的操作數,輕鬆獲得正確的指令集。這種方法似乎不適用於全局變量,因爲沒有與它們關聯的存儲指令。

是否有某種方法可以在不查看元數據字段的情況下跟蹤定義全局變量的位置?如果沒有,有什麼方法可以創建一個虛擬指令,它可以被視爲全局變量初始定義的特殊標記?

回答

0

對於函數中的局部變量,我可以通過使用指令迭代器並檢查特定指令的操作數,輕鬆獲得正確的指令集。

這並不完全準確。只要變量存儲在內存中(分配通過store完成),只要它被提升爲寄存器,您就需要依靠llvm.dbg.value調用來跟蹤分配。

這種方法似乎不適用於全局變量,因爲沒有與它們關聯的存儲指令。

對全局變量的賦值也顯示爲store s - 除了初始賦值。

是否有某種方法可以在不查看元數據字段的情況下跟蹤定義全局變量的位置?

如果通過「where」指代源代碼行,則必須依賴debug-info元數據。

+0

我這樣做之前,變量提升到寄存器。我終於可以通過getNamedValue()方法獲得全局分配的(Value *),並且能夠使用它來跟蹤全局變量的重新定義。可能不是最好的解決方案,但現在似乎完成了這項工作。 – vPraetor