2011-08-22 72 views
3

我試圖理解LLVM程序的高層結構。 我在書中讀到「程序是由模塊組成的,每個模塊都對應於translation unit」。有人可以更詳細地解釋我以上內容以及模塊和翻譯單元(如果有)之間的不同之處。 我也有興趣知道當翻譯單元啓動並完成調試信息編碼時哪部分代碼被調用?LLVM翻譯單元

回答

1

翻譯單位是語言標準術語。例如,這是從C(c99 iso草案)

5.1概念模型; 5.1.1翻譯環境; 5.1.1.1程序結構

一個C程序不需要全部同時翻譯。該程序的文本以本國際標準中稱爲源文件(或預處理文件)的單位保存爲 。一個 源文件以及所有通過預處理 指令#include包含的標題和源文件被稱爲預處理轉換單元。在預處理之後,預處理翻譯單元被稱爲翻譯單元

於是,翻譯單元是預處理後的單源文件(file.c)(所有#include d *.h文件實例化,所有宏被擴展,所有的意見會被跳過,文件準備符號化)。

翻譯單元是一個編譯單元,因爲它在連接步驟之前不依賴任何外部資源。所有標題都在TU內。

術語模塊未在語言標準中定義,但它在更深的翻譯階段指的是translation unit

LLVM把它描述爲:http://llvm.org/docs/ProgrammersManual.html

模塊類代表存在於LLVM方案的頂層結構。 LLVM模塊實際上是原始程序的翻譯單元或由鏈接程序合併的多個翻譯單元的組合。

Module類跟蹤函數列表,GlobalVariables列表和SymbolTable。此外,它還包含一些有用的成員函數,可以使常用操作變得簡單。

關於你的問題,這部分:

我也有興趣知道哪部分代碼被稱爲翻譯單元開始時並完成調試信息的編碼?

這取決於如何使用LLVM。 LLVM本身是一個庫,可以以各種方式使用。

對於clang/LLVM(C/C++編譯器構建在libclang和LLVM上)預處理階段後創建的翻譯單元。它將被解析成AST,然後解析成LLVM程序集並保存在Module中。

對於教程示例,這裏是一個創建模塊http://llvm.org/releases/2.6/docs/tutorial/JITTutorial1.html

+2

來給你的答案多一點細節:「翻譯單位」是從* C *語言標準,在其他編譯語言也使用的一個術語。術語「模塊」在LLVM中用於大致相同的概念。 –