求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

深入分析GCC檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋

來自 孔夫子網 的圖片

深入分析GCC》,王亞剛 著,出版社: 機械工業出版社。

機械工業出版社成立於1950年,是建國後國家設立的第一家科技出版社,前身為科學技術出版社,1952年更名為機械工業出版社[1]。機械工業出版社(以下簡稱機工社)由機械工業信息研究院作為主辦單位,目前隸屬於國務院國資委[2]

內容簡介

本書結合GCC4.4.0源代碼,圍繞GCC編譯過程,詳細介紹了GCC的設計框架和實現過程,包括從源代碼到AST、從AST到GIMPLE、從GIMPLE到RTL,以及從RTL到終的目標機器代碼的詳細過程,涉及各個階段中間表示的詳細分析、生成過程,使讀者在了解編譯原理的基礎上進一步掌握其實現的總體流程和實現細節,讓更多的讀者對編譯技術不再只是停留在理論層面,而是學會如何實現一個編譯系統實例。

目錄

前言

  • 1章 GCC概述 1

1.1 GCC的產生與發展 1

1.2 GCC的特點 2

1.3 GCC代碼分析 3

  • 2章 GCC源代碼分析工具 4

2.1 vim+ctags代碼閱讀工具 4

2.2 GNU gdb調試工具 6

2.3 GNU binutils工具 8

2.4 shell工具及graphviz繪圖工具 11

2.5 GCC調試選項 13

第3章 GCC總體結構 16

3.1 GCC的目錄結構 16

3.2 GCC的邏輯結構 18

3.3 GCC源代碼編譯 20

3.3.1 配置 21

3.3.2 編譯 23

3.3.3 安裝 25

第4章 從源代碼到AST/GENERIC 26

4.1 抽象語法樹 26

4.2 樹節點的聲明 28

4.3 樹節點結構 33

4.3.1 struct tree_base 35

4.3.2 struct tree_common 36

4.3.3 常量節點 38

4.3.4 標識符節點 42

4.3.5 聲明節點 44

4.3.6 struct tree_decl_minimal 46

4.3.7 struct tree_decl_common 46

4.3.8 struct tree_field_decl 49

4.3.9 struct tree_decl_with_rtl 55

4.3.10 struct tree_label_decl 55

4.3.11 struct tree_result_decl 56

4.3.12 struct tree_const_decl 57

4.3.13 struct tree_parm_decl 57

4.3.14 struct tree_decl_with_vis 59

4.3.15 struct tree_var_decl 59

4.3.16 struct tree_decl_non_common 62

4.3.17 struct tree_function_decl 62

4.3.18 struct tree_type_decl 64

4.3.19 類型節點 67

4.3.20 tree_list節點 68

4.3.21 表達式節點 71

4.3.22 語句節點 73

4.3.23 其他樹節點 75

4.4 AST輸出及圖示 76

4.5 AST的生成 83

4.5.1 詞法分析 84

4.5.2 詞法分析過程 90

4.5.3 語法分析 98

4.5.4 語法分析過程 99

4.5.5 c_parse_file 103

4.5.6 c_parser_translation_unit 105

4.5.7 c_parser_external_declaration 105

4.5.8 c_parser_declaration_or_fndef 107

4.5.9 c_parser_declspecs 112

4.6 小結 114

第5章 從AST/GENERIC到GIMPLE 115

5.1 GIMPLE 115

5.2 GIMPLE語句 119

5.3 GIMPLE的表示與存儲 122

5.4 GIMPLE語句的操作數 128

5.5 GIMPLE語句序列的基本操作 132

5.6 GIMPLE的生成 135

5.6.1 gimplify_function_tree 136

5.6.2 gimplify_body 138

5.6.3 gimlify_parameters 139

5.6.4 gimplify_stmt 144

5.6.5 gimplify_expr 144

5.7 GIMPLE轉換實例 157

5.7.1 BIND_EXPR節點的GIMPLE生成 158

5.7.2 STATEMENT_LIST_EXPR節點的GIMPLE生成 159

5.7.3 MODIFY_EXPR節點的GIMPLE生成 160

5.7.4 POSTINCREMENT_EXPR節點的GIMPLE生成 162

5.8 實例分析 172

5.9 小結 176

第6章 GIMPLE處理及其優化 177

6.1 GCC Pass 177

6.1.1 核心數據結構 177

6.1.2 Pass的類型 179

6.1.3 Pass鏈的初始化 182

6.1.4 Pass的執行 184

6.2 Pass列表 187

6.3 GIMPLE Pass實例 193

6.3.1 pass_remove_useless_stmts 193

6.3.2 pass_lower_cf 195

6.3.3 pass_build_cfg 197

6.3.4 pass_build_cgraph_edges 203

6.3.5 pass_build_ssa 205

6.3.6 pass_all_optimizations 206

6.3.7 pass_expand 207

6.4 小結 207

第7章 RTL 208

7.1 RTL中的對象類型 209

7.2 RTX_CODE 210

7.3 RTX類型 210

7.4 RTX輸出格式 212

7.5 RTX操作數 213

7.6 RTX的機器模式 216

7.7 RTX的存儲 219

7.8 RTX表達式 222

7.8.1 常量 225

7.8.2 寄存器和內存 227

7.8.3 算術運算 228

7.8.4 比較運算 230

7.8.5 副作用 230

7.9 IR-RTL 232

7.9.1 INSN 233

7.9.2 JUMP_INSN 234

7.9.3 CALL_INSN 235

7.9.4 BARRIER 235

7.9.5 CODE_LABEL 236

7.9.6 NOTE 237

7.10 小結 238

第8章 機器描述文件${target}.md 239

8.1 機器描述文件 240

8.2 指令模板 241

8.2.1 模板名稱 242

8.2.2 RTL模板 246

8.2.3 條件 256

8.2.4 輸出模板 256

8.2.5 屬性 256

8.3 定義RTL序列 257

8.4 指令拆分 263

8.5 枚舉器 266

8.5.1 mode枚舉器 266

8.5.2 code枚舉器 268

8.6 窺孔優化 269

8.6.1 define_peephole 269

8.6.2 define_peephole2 270

8.7 小結 271

第9章 機器描述文件${target}.[ch] 272

9.1 targetm 272

9.1.1 struct gcc_target的定義 273

9.1.2 targetm的初始化 277

9.2 編譯驅動及選項 279

9.2.1 編譯選項 280

9.2.2 SPEC語言及SPEC文件 281

9.2.3 機器相關的編譯選項 285

9.3 存儲布局 286

9.3.1 位順序和字節順序 286

9.3.2 類型寬度 287

9.3.3 機器模式提升 287

9.3.4 存儲對齊 288

9.3.5 編程語言中數據類型的存儲布局 289

9.4 寄存器使用 290

9.4.1 寄存器的基本描述 290

9.4.2 寄存器分配順序 297

9.4.3 機器模式 298

9.4.4 寄存器類型 300

9.5 堆棧及函數調用規範描述 307

9.5.1 堆棧的基本特性 309

9.5.2 寄存器消除 313

9.5.3 函數棧幀的管理 315

9.5.4 參數傳遞 316

9.5.5 函數返回值 318

9.5.6 i386機器棧幀 318

9.6 尋址方式 325

9.7 匯編代碼分區 326

9.8 定義輸出的匯編語言 333

9.8.1 匯編代碼文件的框架 333

9.8.2 數據輸出 336

9.8.3 未初始化數據輸出 336

9.8.4 標籤輸出 338

9.8.5 指令輸出 342

9.9 機器描述信息的提取 343

9.9.1 gencode.c 347

9.9.2 genattr.c 348

9.9.3 genattrtab.c 348

9.9.4 genrecog.c 349

9.9.5 genflag.c 352

9.9.6 genemit.c 353

9.9.7 genextract.c 354

9.9.8 genopinit.c 356

9.9.9 genoutput.c 360

9.9.10 genpreds.c 362

9.9.11 其他 363

9.10 小結 364

  • 10章 從GIMPLE到RTL 365

10.1 GIMPLE序列 365

10.2 典型數據結構 366

10.3 RTL生成的基本過程 367

10.3.1 變量展開 370

10.3.2 參數及返回值處理 380

10.3.3 初始塊的處理 395

10.3.4 基本塊的RTL生成 398

10.3.5 退出塊的處理 410

10.3.6 其他處理 411

10.4 GIMPLE語句轉換成RTL 411

10.4.1 GIMPLE語句轉換的一般

參考文獻