2012-10-26 75 views
4

我通過教程去編寫使用LLVM http://llvm.org/releases/3.1/docs/tutorial/ 玩具編譯器,但沒有太多關於符號表處理。 有一個命令llvm-nm來顯示將位代碼文件作爲輸入的符號表。它僅返回函數名稱。 LLVM編譯器如何處理沒有符號表的局部變量和循環變量?如果不是這樣,符號表是如何在如何在基於LLVM的編譯器中完成符號表處理?

+0

你所說的「符號表」是什麼意思? –

+0

符號表或標識符表是一個數據結構,它存儲有關程序中每個符號的信息。它存儲類型,範圍等細節。散列表通常用於實現符號表 – ViG

+0

您認爲它與LLVM IR有關嗎?您在那裏唯一的「符號」是導出的條目(即全局變量和函數)。 –

回答

4

處理其IR的LLVM內存中表示不使用符號表。指令包含指向其操作數(及其用戶)的直接內存鏈接,因此,如果您有指令並想要訪問其操作數,只需按照鏈接操作即可,無需在任何符號表中執行查找。

沒有與LLVM上下文,模塊,功能和基本塊,它允許您訪問包含的元素相關的一些名單,但他們大多隻是列出,不表關聯與任何一個名字。

當然,如果你想解析一個文本文件IR(LL),你可能會需要一個符號表(或類似的東西)這樣做,創建上述鏈接;但是看到LLVM已經包含這樣的解析器(並且解析器確實使用某種方式將「名稱」與值關聯 - 請參閱BitcodeReader的實現),沒有什麼理由這麼做。

至於用於產生IR LLVM前端 - 這是取決於你。我想說,如果你想解析一個C語言,使用符號表將會非常有用。

相關問題