舉報(bào)

會(huì)員
深入分析GCC
最新章節(jié):
參考文獻(xiàn)
本書將圍繞GCC編譯過程,詳細(xì)介紹從源代碼到AST、從AST到GIMPLE、從GIMPLE到RTL,以及從RTL到最終的目標(biāo)機(jī)器匯編代碼的詳細(xì)過程,涉及各個(gè)階段中間表示的詳細(xì)分析、生成過程。本書提供了大量的圖表和實(shí)例,展示了GCC編譯系統(tǒng)的總體工作流程和工作細(xì)節(jié)。本書的另外一個(gè)特點(diǎn)是結(jié)合GCC4.4.0的源代碼進(jìn)行分析,使讀者在了解編譯原理的基礎(chǔ)上進(jìn)一步掌握其實(shí)現(xiàn)的總體流程和細(xì)節(jié),讓更多讀者對(duì)編譯技術(shù)的認(rèn)識(shí)不再只停留在理論層面,而是向其展示一個(gè)編譯系統(tǒng)實(shí)例的實(shí)現(xiàn)過程。在編寫這本書的時(shí)候,有一種精神支撐著我,我相信“興趣”加上“堅(jiān)持”就是勝利!分析GCC不是一年半載的事情,需要3年、5年,甚至更長時(shí)間,不過我可以堅(jiān)持,我要用我的堅(jiān)持換來對(duì)GCC的深入分析,讓更多的GCC愛好者熟悉它、接觸它、了解它,更多地參與GCC的開發(fā)與維護(hù)。
最新章節(jié)
書友吧品牌:機(jī)械工業(yè)出版社
上架時(shí)間:2017-03-30 18:21:03
出版社:機(jī)械工業(yè)出版社
本書數(shù)字版權(quán)由機(jī)械工業(yè)出版社提供,并由其授權(quán)上海閱文信息技術(shù)有限公司制作發(fā)行
- 參考文獻(xiàn) 更新時(shí)間:2019-01-04 15:49:54
- 12.8 小結(jié)
- 12.7 GCC移植測試
- 12.6 PAAG后端注冊(cè)
- 12.5.7 雜項(xiàng)
- 12.5.6 匯編代碼輸出
- 12.5.5 尋址方式
- 12.5.4 函數(shù)調(diào)用規(guī)范
- 12.5.3 堆棧布局及堆棧指針
- 12.5.2 寄存器使用規(guī)范
- 12.5.1 存儲(chǔ)布局
- 12.5 paag.[ch]文件
- 12.4 PAAG機(jī)器描述文件(paag.md)
- 12.3 GCC移植的基本步驟
- 12.2.2 應(yīng)用二進(jìn)制接口
- 12.2.1 PAAG處理器指令集
- 12.2 PAAG處理器
- 12.1 GCC移植
- 第12章 支持新的目標(biāo)處理器
- 11.6 小結(jié)
- 11.5.2 從RTL到匯編代碼
- 11.5.1 匯編代碼文件的結(jié)構(gòu)
- 11.5 匯編代碼生成
- 11.4.5 寄存器分配實(shí)例2
- 11.4.4 寄存器分配實(shí)例1
- 11.4.3 代碼分析
- 11.4.2 寄存器分配的主要流程
- 11.4.1 基本術(shù)語
- 11.4 統(tǒng)一寄存器分配
- 11.3.4 指令調(diào)度實(shí)例2
- 11.3.3 指令調(diào)度實(shí)例1
- 11.3.2 GCC指令調(diào)度的實(shí)現(xiàn)
- 11.3.1 指令調(diào)度算法
- 11.3 指令調(diào)度
- 11.2 特殊虛擬寄存器的實(shí)例化
- 11.1 RTL處理過程
- 第11章 RTL處理及優(yōu)化
- 10.5 小結(jié)
- 10.4.3 GIMPLE_ASSIGN語句的RTL生成
- 10.4.2 GIMPLE_GOTO語句的RTL生成
- 10.4.1 GIMPLE語句轉(zhuǎn)換的一般過程
- 10.4 GIMPLE語句轉(zhuǎn)換成RTL
- 10.3.6 其他處理
- 10.3.5 退出塊的處理
- 10.3.4 基本塊的RTL生成
- 10.3.3 初始?jí)K的處理
- 10.3.2 參數(shù)及返回值處理
- 10.3.1 變量展開
- 10.3 RTL生成的基本過程
- 10.2 典型數(shù)據(jù)結(jié)構(gòu)
- 10.1 GIMPLE序列
- 第10章 從GIMPLE到RTL
- 9.10 小結(jié)
- 9.9.11 其他
- 9.9.10 genpreds.c
- 9.9.9 genoutput.c
- 9.9.8 genopinit.c
- 9.9.7 genextract.c
- 9.9.6 genemit.c
- 9.9.5 genflag.c
- 9.9.4 genrecog.c
- 9.9.3 genattrtab.c
- 9.9.2 genattr.c
- 9.9.1 gencode.c
- 9.9 機(jī)器描述信息的提取
- 9.8.5 指令輸出
- 9.8.4 標(biāo)簽輸出
- 9.8.3 未初始化數(shù)據(jù)輸出
- 9.8.2 數(shù)據(jù)輸出
- 9.8.1 匯編代碼文件的框架
- 9.8 定義輸出的匯編語言
- 9.7 匯編代碼分區(qū)
- 9.6 尋址方式
- 9.5.6 i386機(jī)器棧幀
- 9.5.5 函數(shù)返回值
- 9.5.4 參數(shù)傳遞
- 9.5.3 函數(shù)棧幀的管理
- 9.5.2 寄存器消除
- 9.5.1 堆棧的基本特性
- 9.5 堆棧及函數(shù)調(diào)用規(guī)范描述
- 9.4.4 寄存器類型
- 9.4.3 機(jī)器模式
- 9.4.2 寄存器分配順序
- 9.4.1 寄存器的基本描述
- 9.4 寄存器使用
- 9.3.5 編程語言中數(shù)據(jù)類型的存儲(chǔ)布局
- 9.3.4 存儲(chǔ)對(duì)齊
- 9.3.3 機(jī)器模式提升
- 9.3.2 類型寬度
- 9.3.1 位順序和字節(jié)順序
- 9.3 存儲(chǔ)布局
- 9.2.3 機(jī)器相關(guān)的編譯選項(xiàng)
- 9.2.2 SPEC語言及SPEC文件
- 9.2.1 編譯選項(xiàng)
- 9.2 編譯驅(qū)動(dòng)及選項(xiàng)
- 9.1.2 targetm的初始化
- 9.1.1 struct gcc_target的定義
- 9.1 targetm
- 第9章 機(jī)器描述文件${target}.[ch]
- 8.7 小結(jié)
- 8.6.2 define_peephole2
- 8.6.1 define_peephole
- 8.6 窺孔優(yōu)化
- 8.5.2 code枚舉器
- 8.5.1 mode枚舉器
- 8.5 枚舉器
- 8.4 指令拆分
- 8.3 定義RTL序列
- 8.2.5 屬性
- 8.2.4 輸出模板
- 8.2.3 條件
- 8.2.2 RTL模板
- 8.2.1 模板名稱
- 8.2 指令模板
- 8.1 機(jī)器描述文件
- 第8章 機(jī)器描述文件${target}.md
- 7.10 小結(jié)
- 7.9.6 NOTE
- 7.9.5 CODE_LABEL
- 7.9.4 BARRIER
- 7.9.3 CALL_INSN
- 7.9.2 JUMP_INSN
- 7.9.1 INSN
- 7.9 IR-RTL
- 7.8.5 副作用
- 7.8.4 比較運(yùn)算
- 7.8.3 算術(shù)運(yùn)算
- 7.8.2 寄存器和內(nèi)存
- 7.8.1 常量
- 7.8 RTX表達(dá)式
- 7.7 RTX的存儲(chǔ)
- 7.6 RTX的機(jī)器模式
- 7.5 RTX操作數(shù)
- 7.4 RTX輸出格式
- 7.3 RTX類型
- 7.2 RTX_CODE
- 7.1 RTL中的對(duì)象類型
- 第7章 RTL
- 6.4 小結(jié)
- 6.3.7 pass_expand
- 6.3.6 pass_all_optimizations
- 6.3.5 pass_build_ssa
- 6.3.4 pass_build_cgraph_edges
- 6.3.3 pass_build_cfg
- 6.3.2 pass_lower_cf
- 6.3.1 pass_remove_useless_stmts
- 6.3 GIMPLE Pass實(shí)例
- 6.2 Pass列表
- 6.1.4 Pass的執(zhí)行
- 6.1.3 Pass鏈的初始化
- 6.1.2 Pass的類型
- 6.1.1 核心數(shù)據(jù)結(jié)構(gòu)
- 6.1 GCC Pass
- 第6章 GIMPLE處理及其優(yōu)化
- 5.9 小結(jié)
- 5.8 實(shí)例分析
- 5.7.4 POSTINCREMENT_EXPR節(jié)點(diǎn)的GIMPLE生成
- 5.7.3 MODIFY_EXPR節(jié)點(diǎn)的GIMPLE生成
- 5.7.2 STATEMENT_LIST_EXPR節(jié)點(diǎn)的GIMPLE生成
- 5.7.1 BIND_EXPR節(jié)點(diǎn)的GIMPLE生成
- 5.7 GIMPLE轉(zhuǎn)換實(shí)例
- 5.6.5 gimplify_expr
- 5.6.4 gimplify_stmt
- 5.6.3 gimlify_parameters
- 5.6.2 gimplify_body
- 5.6.1 gimplify_function_tree
- 5.6 GIMPLE的生成
- 5.5 GIMPLE語句序列的基本操作
- 5.4 GIMPLE語句的操作數(shù)
- 5.3 GIMPLE的表示與存儲(chǔ)
- 5.2 GIMPLE語句
- 5.1 GIMPLE
- 第5章 從AST/GENERIC到GIMPLE
- 4.6 小結(jié)
- 4.5.9 c_parser_declspecs
- 4.5.8 c_parser_declaration_or_fndef
- 4.5.7 c_parser_external_declaration
- 4.5.6 c_parser_translation_unit
- 4.5.5 c_parse_file
- 4.5.4 語法分析過程
- 4.5.3 語法分析
- 4.5.2 詞法分析過程
- 4.5.1 詞法分析
- 4.5 AST的生成
- 4.4 AST輸出及圖示
- 4.3.23 其他樹節(jié)點(diǎn)
- 4.3.22 語句節(jié)點(diǎn)
- 4.3.21 表達(dá)式節(jié)點(diǎn)
- 4.3.20 tree_list節(jié)點(diǎn)
- 4.3.19 類型節(jié)點(diǎn)
- 4.3.18 struct tree_type_decl
- 4.3.17 struct tree_function_decl
- 4.3.16 struct tree_decl_non_common
- 4.3.15 struct tree_var_decl
- 4.3.14 struct tree_decl_with_vis
- 4.3.13 struct tree_parm_decl
- 4.3.12 struct tree_const_decl
- 4.3.11 struct tree_result_decl
- 4.3.10 struct tree_label_decl
- 4.3.9 struct tree_decl_with_rtl
- 4.3.8 struct tree_field_decl
- 4.3.7 struct tree_decl_common
- 4.3.6 struct tree_decl_minimal
- 4.3.5 聲明節(jié)點(diǎn)
- 4.3.4 標(biāo)識(shí)符節(jié)點(diǎn)
- 4.3.3 常量節(jié)點(diǎn)
- 4.3.2 struct tree_common
- 4.3.1 struct tree_base
- 4.3 樹節(jié)點(diǎn)結(jié)構(gòu)
- 4.2 樹節(jié)點(diǎn)的聲明
- 4.1 抽象語法樹
- 第4章 從源代碼到AST/GENERIC
- 3.3.3 安裝
- 3.3.2 編譯
- 3.3.1 配置
- 3.3 GCC源代碼編譯
- 3.2 GCC的邏輯結(jié)構(gòu)
- 3.1 GCC的目錄結(jié)構(gòu)
- 第3章 GCC總體結(jié)構(gòu)
- 2.5 GCC調(diào)試選項(xiàng)
- 2.4 shell工具及graphviz繪圖工具
- 2.3 GNU binutils工具
- 2.2 GNU gdb調(diào)試工具
- 2.1 vim+ctags代碼閱讀工具
- 第2章 GCC源代碼分析工具
- 1.3 GCC代碼分析
- 1.2 GCC的特點(diǎn)
- 1.1 GCC的產(chǎn)生與發(fā)展
- 第1章 GCC概述
- 前言
- 版權(quán)信息
- 封面
- 封面
- 版權(quán)信息
- 前言
- 第1章 GCC概述
- 1.1 GCC的產(chǎn)生與發(fā)展
- 1.2 GCC的特點(diǎn)
- 1.3 GCC代碼分析
- 第2章 GCC源代碼分析工具
- 2.1 vim+ctags代碼閱讀工具
- 2.2 GNU gdb調(diào)試工具
- 2.3 GNU binutils工具
- 2.4 shell工具及graphviz繪圖工具
- 2.5 GCC調(diào)試選項(xiàng)
- 第3章 GCC總體結(jié)構(gòu)
- 3.1 GCC的目錄結(jié)構(gòu)
- 3.2 GCC的邏輯結(jié)構(gòu)
- 3.3 GCC源代碼編譯
- 3.3.1 配置
- 3.3.2 編譯
- 3.3.3 安裝
- 第4章 從源代碼到AST/GENERIC
- 4.1 抽象語法樹
- 4.2 樹節(jié)點(diǎn)的聲明
- 4.3 樹節(jié)點(diǎn)結(jié)構(gòu)
- 4.3.1 struct tree_base
- 4.3.2 struct tree_common
- 4.3.3 常量節(jié)點(diǎn)
- 4.3.4 標(biāo)識(shí)符節(jié)點(diǎn)
- 4.3.5 聲明節(jié)點(diǎn)
- 4.3.6 struct tree_decl_minimal
- 4.3.7 struct tree_decl_common
- 4.3.8 struct tree_field_decl
- 4.3.9 struct tree_decl_with_rtl
- 4.3.10 struct tree_label_decl
- 4.3.11 struct tree_result_decl
- 4.3.12 struct tree_const_decl
- 4.3.13 struct tree_parm_decl
- 4.3.14 struct tree_decl_with_vis
- 4.3.15 struct tree_var_decl
- 4.3.16 struct tree_decl_non_common
- 4.3.17 struct tree_function_decl
- 4.3.18 struct tree_type_decl
- 4.3.19 類型節(jié)點(diǎn)
- 4.3.20 tree_list節(jié)點(diǎn)
- 4.3.21 表達(dá)式節(jié)點(diǎn)
- 4.3.22 語句節(jié)點(diǎn)
- 4.3.23 其他樹節(jié)點(diǎn)
- 4.4 AST輸出及圖示
- 4.5 AST的生成
- 4.5.1 詞法分析
- 4.5.2 詞法分析過程
- 4.5.3 語法分析
- 4.5.4 語法分析過程
- 4.5.5 c_parse_file
- 4.5.6 c_parser_translation_unit
- 4.5.7 c_parser_external_declaration
- 4.5.8 c_parser_declaration_or_fndef
- 4.5.9 c_parser_declspecs
- 4.6 小結(jié)
- 第5章 從AST/GENERIC到GIMPLE
- 5.1 GIMPLE
- 5.2 GIMPLE語句
- 5.3 GIMPLE的表示與存儲(chǔ)
- 5.4 GIMPLE語句的操作數(shù)
- 5.5 GIMPLE語句序列的基本操作
- 5.6 GIMPLE的生成
- 5.6.1 gimplify_function_tree
- 5.6.2 gimplify_body
- 5.6.3 gimlify_parameters
- 5.6.4 gimplify_stmt
- 5.6.5 gimplify_expr
- 5.7 GIMPLE轉(zhuǎn)換實(shí)例
- 5.7.1 BIND_EXPR節(jié)點(diǎn)的GIMPLE生成
- 5.7.2 STATEMENT_LIST_EXPR節(jié)點(diǎn)的GIMPLE生成
- 5.7.3 MODIFY_EXPR節(jié)點(diǎn)的GIMPLE生成
- 5.7.4 POSTINCREMENT_EXPR節(jié)點(diǎn)的GIMPLE生成
- 5.8 實(shí)例分析
- 5.9 小結(jié)
- 第6章 GIMPLE處理及其優(yōu)化
- 6.1 GCC Pass
- 6.1.1 核心數(shù)據(jù)結(jié)構(gòu)
- 6.1.2 Pass的類型
- 6.1.3 Pass鏈的初始化
- 6.1.4 Pass的執(zhí)行
- 6.2 Pass列表
- 6.3 GIMPLE Pass實(shí)例
- 6.3.1 pass_remove_useless_stmts
- 6.3.2 pass_lower_cf
- 6.3.3 pass_build_cfg
- 6.3.4 pass_build_cgraph_edges
- 6.3.5 pass_build_ssa
- 6.3.6 pass_all_optimizations
- 6.3.7 pass_expand
- 6.4 小結(jié)
- 第7章 RTL
- 7.1 RTL中的對(duì)象類型
- 7.2 RTX_CODE
- 7.3 RTX類型
- 7.4 RTX輸出格式
- 7.5 RTX操作數(shù)
- 7.6 RTX的機(jī)器模式
- 7.7 RTX的存儲(chǔ)
- 7.8 RTX表達(dá)式
- 7.8.1 常量
- 7.8.2 寄存器和內(nèi)存
- 7.8.3 算術(shù)運(yùn)算
- 7.8.4 比較運(yùn)算
- 7.8.5 副作用
- 7.9 IR-RTL
- 7.9.1 INSN
- 7.9.2 JUMP_INSN
- 7.9.3 CALL_INSN
- 7.9.4 BARRIER
- 7.9.5 CODE_LABEL
- 7.9.6 NOTE
- 7.10 小結(jié)
- 第8章 機(jī)器描述文件${target}.md
- 8.1 機(jī)器描述文件
- 8.2 指令模板
- 8.2.1 模板名稱
- 8.2.2 RTL模板
- 8.2.3 條件
- 8.2.4 輸出模板
- 8.2.5 屬性
- 8.3 定義RTL序列
- 8.4 指令拆分
- 8.5 枚舉器
- 8.5.1 mode枚舉器
- 8.5.2 code枚舉器
- 8.6 窺孔優(yōu)化
- 8.6.1 define_peephole
- 8.6.2 define_peephole2
- 8.7 小結(jié)
- 第9章 機(jī)器描述文件${target}.[ch]
- 9.1 targetm
- 9.1.1 struct gcc_target的定義
- 9.1.2 targetm的初始化
- 9.2 編譯驅(qū)動(dòng)及選項(xiàng)
- 9.2.1 編譯選項(xiàng)
- 9.2.2 SPEC語言及SPEC文件
- 9.2.3 機(jī)器相關(guān)的編譯選項(xiàng)
- 9.3 存儲(chǔ)布局
- 9.3.1 位順序和字節(jié)順序
- 9.3.2 類型寬度
- 9.3.3 機(jī)器模式提升
- 9.3.4 存儲(chǔ)對(duì)齊
- 9.3.5 編程語言中數(shù)據(jù)類型的存儲(chǔ)布局
- 9.4 寄存器使用
- 9.4.1 寄存器的基本描述
- 9.4.2 寄存器分配順序
- 9.4.3 機(jī)器模式
- 9.4.4 寄存器類型
- 9.5 堆棧及函數(shù)調(diào)用規(guī)范描述
- 9.5.1 堆棧的基本特性
- 9.5.2 寄存器消除
- 9.5.3 函數(shù)棧幀的管理
- 9.5.4 參數(shù)傳遞
- 9.5.5 函數(shù)返回值
- 9.5.6 i386機(jī)器棧幀
- 9.6 尋址方式
- 9.7 匯編代碼分區(qū)
- 9.8 定義輸出的匯編語言
- 9.8.1 匯編代碼文件的框架
- 9.8.2 數(shù)據(jù)輸出
- 9.8.3 未初始化數(shù)據(jù)輸出
- 9.8.4 標(biāo)簽輸出
- 9.8.5 指令輸出
- 9.9 機(jī)器描述信息的提取
- 9.9.1 gencode.c
- 9.9.2 genattr.c
- 9.9.3 genattrtab.c
- 9.9.4 genrecog.c
- 9.9.5 genflag.c
- 9.9.6 genemit.c
- 9.9.7 genextract.c
- 9.9.8 genopinit.c
- 9.9.9 genoutput.c
- 9.9.10 genpreds.c
- 9.9.11 其他
- 9.10 小結(jié)
- 第10章 從GIMPLE到RTL
- 10.1 GIMPLE序列
- 10.2 典型數(shù)據(jù)結(jié)構(gòu)
- 10.3 RTL生成的基本過程
- 10.3.1 變量展開
- 10.3.2 參數(shù)及返回值處理
- 10.3.3 初始?jí)K的處理
- 10.3.4 基本塊的RTL生成
- 10.3.5 退出塊的處理
- 10.3.6 其他處理
- 10.4 GIMPLE語句轉(zhuǎn)換成RTL
- 10.4.1 GIMPLE語句轉(zhuǎn)換的一般過程
- 10.4.2 GIMPLE_GOTO語句的RTL生成
- 10.4.3 GIMPLE_ASSIGN語句的RTL生成
- 10.5 小結(jié)
- 第11章 RTL處理及優(yōu)化
- 11.1 RTL處理過程
- 11.2 特殊虛擬寄存器的實(shí)例化
- 11.3 指令調(diào)度
- 11.3.1 指令調(diào)度算法
- 11.3.2 GCC指令調(diào)度的實(shí)現(xiàn)
- 11.3.3 指令調(diào)度實(shí)例1
- 11.3.4 指令調(diào)度實(shí)例2
- 11.4 統(tǒng)一寄存器分配
- 11.4.1 基本術(shù)語
- 11.4.2 寄存器分配的主要流程
- 11.4.3 代碼分析
- 11.4.4 寄存器分配實(shí)例1
- 11.4.5 寄存器分配實(shí)例2
- 11.5 匯編代碼生成
- 11.5.1 匯編代碼文件的結(jié)構(gòu)
- 11.5.2 從RTL到匯編代碼
- 11.6 小結(jié)
- 第12章 支持新的目標(biāo)處理器
- 12.1 GCC移植
- 12.2 PAAG處理器
- 12.2.1 PAAG處理器指令集
- 12.2.2 應(yīng)用二進(jìn)制接口
- 12.3 GCC移植的基本步驟
- 12.4 PAAG機(jī)器描述文件(paag.md)
- 12.5 paag.[ch]文件
- 12.5.1 存儲(chǔ)布局
- 12.5.2 寄存器使用規(guī)范
- 12.5.3 堆棧布局及堆棧指針
- 12.5.4 函數(shù)調(diào)用規(guī)范
- 12.5.5 尋址方式
- 12.5.6 匯編代碼輸出
- 12.5.7 雜項(xiàng)
- 12.6 PAAG后端注冊(cè)
- 12.7 GCC移植測試
- 12.8 小結(jié)
- 參考文獻(xiàn) 更新時(shí)間:2019-01-04 15:49:54