UCC編譯驅動分析

2021-08-04 10:49:07 字數 1002 閱讀 8307

1.  ucc的組成

ucc編譯後,生成乙個c語言編譯器ucl和編譯驅動ucc, ucl執行時將輸入的c原始檔編譯輸出預處理檔案,而ucc則分析輸入引數,根據引數呼叫

具。2.  預備知識

2.1  編譯的流程

通常,當需要編譯c原始檔時,只需要執行gcc/cc即可。實際上,gcc是乙個編譯驅動程式,它會依據編譯引數依次呼叫預處理器cpp, 編譯器cc, 彙編器as, 聯結器ld處理相關檔案,最後輸出可執行檔案或者庫檔案。

2.2  鍊錶list

在程式中,輸入檔案集合,輸出檔案集合以及其他引數使用list來儲存,該結構的定義,

typedef struct list

*list;

3.  ucc概覽

3.1  編譯選項分析

ucc在開始執行時,會對編譯選項進行分析,確定輸入檔案的階段。

-e,  輸出預處理檔案.

-s, 輸出彙編檔案.

-c, 輸出目標檔案

-o, 輸出可執行檔案.

-wl,  鏈結器選項.

-wa, 彙編器選項.

分析得到的資料放置在struct option, 該結構的定義,

struct option

;3.2 編譯過程

3.2.1 ucc的編譯流程

ucc與gcc的編譯流程類似,在編譯c原始檔階段,呼叫ucl執行編譯任務,

執行流程將根據ucc選項,將依次執行預處理,編譯, 彙編,鏈結的階段。

enum ;

for (i = pp_file; i <= option.oftype; ++i)

}        

3.2.3 預處理示例

以預處理作為示例,進一步詳細分析步驟,

可以看到,首先將c原始檔推出輸出的預處理檔案,將字尾改變為.i,合成命令序列,使用gcc做預處理,每次處理乙個檔案。

UCC向量Vector分析

1.vector的意義與定義 vector表示可變長度的物件指標陣列向量,定義如下,typedef struct vector vector data,表示物件指標陣列的首位址.len,表示陣列中指標的數量.size,表示陣列的最大容量.2.vector的操作 vector定義了一系列的操作,獲取陣...

ucc編譯器分析與總結 3 宣告檢查

有了型別系統和符號管理的基礎知識之後,接下來就可以分析宣告檢查部分的 了。源 經過預編譯後生成.i檔案,這時候 主要分為函式語句和宣告語句兩部分,其實函式只不過是一種特殊的宣告語句,比宣告語句多了 裡面的內容。函式語句和非函式語句是分開檢查的 if p kind nk function else 下...

ucc編譯器(x86移植)

之前寫過一篇ucc的文章,也就是這一篇。這篇文章對ucc的流程說了挺多,但是怎麼把ucc移植到新的cpu上面,卻沒有說很多,後來自己又看了一下 發現還是有不少新的收穫。emit.c檔案是真正的後端入口,所有的彙編檔案的整理 組織部分都是這裡完成的。當然這部分只是框架的內容,告訴我們乙個大概,全域性變...