深入分析GCC

深入分析GCC

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

围绕GCC编译过程,详细介绍从源代码到AST、从AST到GIMPLE、从GIMPLE到RTL,以及从RTL到最终的目标机器汇编代码的详细过程。

内容简介

本书结合GCC4.4.0源代码,内容涉及编译过程各个阶段中间表示的详细分析、生成过程,使读者在了解编译原理的基础上进一步掌握其实现的总体流程和实现细节,让更多的读者对编译技术不再只是停留在理论层面,而是学会如何实现一个编译系统实例。

作者简介

王亚刚,博士生,西安邮电大学副教授,CCF会员。1994年毕业于四川大学计算机应用专业,2005年在西北大学获计算机应用技术专业硕士学位,2007年开始在沈绪榜院士指导下进行博士研究生阶段的科研工作。主要研究方向为计算机系统结构、嵌入式系统、计算机网络等。

章节目录

版权信息

前言

第1章 GCC概述

1.1 GCC的产生与发展

1.2 GCC的特点

1.3 GCC代码分析

第2章 GCC源代码分析工具

2.1 vim+ctags代码阅读工具

2.2 GNU gdb调试工具

2.3 GNU binutils工具

2.4 shell工具及graphviz绘图工具

2.5 GCC调试选项

第3章 GCC总体结构

3.1 GCC的目录结构

3.2 GCC的逻辑结构

3.3 GCC源代码编译

3.3.1 配置

3.3.2 编译

3.3.3 安装

第4章 从源代码到AST/GENERIC

4.1 抽象语法树

4.2 树节点的声明

4.3 树节点结构

4.3.1 struct tree_base

4.3.2 struct tree_common

4.3.3 常量节点

4.3.4 标识符节点

4.3.5 声明节点

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 类型节点

4.3.20 tree_list节点

4.3.21 表达式节点

4.3.22 语句节点

4.3.23 其他树节点

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 小结

第5章 从AST/GENERIC到GIMPLE

5.1 GIMPLE

5.2 GIMPLE语句

5.3 GIMPLE的表示与存储

5.4 GIMPLE语句的操作数

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转换实例

5.7.1 BIND_EXPR节点的GIMPLE生成

5.7.2 STATEMENT_LIST_EXPR节点的GIMPLE生成

5.7.3 MODIFY_EXPR节点的GIMPLE生成

5.7.4 POSTINCREMENT_EXPR节点的GIMPLE生成

5.8 实例分析

5.9 小结

第6章 GIMPLE处理及其优化

6.1 GCC Pass

6.1.1 核心数据结构

6.1.2 Pass的类型

6.1.3 Pass链的初始化

6.1.4 Pass的执行

6.2 Pass列表

6.3 GIMPLE Pass实例

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 小结

第7章 RTL

7.1 RTL中的对象类型

7.2 RTX_CODE

7.3 RTX类型

7.4 RTX输出格式

7.5 RTX操作数

7.6 RTX的机器模式

7.7 RTX的存储

7.8 RTX表达式

7.8.1 常量

7.8.2 寄存器和内存

7.8.3 算术运算

7.8.4 比较运算

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 小结

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

8.1 机器描述文件

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 窥孔优化

8.6.1 define_peephole

8.6.2 define_peephole2

8.7 小结

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

9.1 targetm

9.1.1 struct gcc_target的定义

9.1.2 targetm的初始化

9.2 编译驱动及选项

9.2.1 编译选项

9.2.2 SPEC语言及SPEC文件

9.2.3 机器相关的编译选项

9.3 存储布局

9.3.1 位顺序和字节顺序

9.3.2 类型宽度

9.3.3 机器模式提升

9.3.4 存储对齐

9.3.5 编程语言中数据类型的存储布局

9.4 寄存器使用

9.4.1 寄存器的基本描述

9.4.2 寄存器分配顺序

9.4.3 机器模式

9.4.4 寄存器类型

9.5 堆栈及函数调用规范描述

9.5.1 堆栈的基本特性

9.5.2 寄存器消除

9.5.3 函数栈帧的管理

9.5.4 参数传递

9.5.5 函数返回值

9.5.6 i386机器栈帧

9.6 寻址方式

9.7 汇编代码分区

9.8 定义输出的汇编语言

9.8.1 汇编代码文件的框架

9.8.2 数据输出

9.8.3 未初始化数据输出

9.8.4 标签输出

9.8.5 指令输出

9.9 机器描述信息的提取

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 小结

第10章 从GIMPLE到RTL

10.1 GIMPLE序列

10.2 典型数据结构

10.3 RTL生成的基本过程

10.3.1 变量展开

10.3.2 参数及返回值处理

10.3.3 初始块的处理

10.3.4 基本块的RTL生成

10.3.5 退出块的处理

10.3.6 其他处理

10.4 GIMPLE语句转换成RTL

10.4.1 GIMPLE语句转换的一般过程

10.4.2 GIMPLE_GOTO语句的RTL生成

10.4.3 GIMPLE_ASSIGN语句的RTL生成

10.5 小结

第11章 RTL处理及优化

11.1 RTL处理过程

11.2 特殊虚拟寄存器的实例化

11.3 指令调度

11.3.1 指令调度算法

11.3.2 GCC指令调度的实现

11.3.3 指令调度实例1

11.3.4 指令调度实例2

11.4 统一寄存器分配

11.4.1 基本术语

11.4.2 寄存器分配的主要流程

11.4.3 代码分析

11.4.4 寄存器分配实例1

11.4.5 寄存器分配实例2

11.5 汇编代码生成

11.5.1 汇编代码文件的结构

11.5.2 从RTL到汇编代码

11.6 小结

第12章 支持新的目标处理器

12.1 GCC移植

12.2 PAAG处理器

12.2.1 PAAG处理器指令集

12.2.2 应用二进制接口

12.3 GCC移植的基本步骤

12.4 PAAG机器描述文件(paag.md)

12.5 paag.[ch]文件

12.5.1 存储布局

12.5.2 寄存器使用规范

12.5.3 堆栈布局及堆栈指针

12.5.4 函数调用规范

12.5.5 寻址方式

12.5.6 汇编代码输出

12.5.7 杂项

12.6 PAAG后端注册

12.7 GCC移植测试

12.8 小结

参考文献

索引

深入分析GCC是2017年由机械工业出版社华章分社出版,作者王亚刚。

得书感谢您对《深入分析GCC》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
一本书读懂华为光网络 电子书
1.本书对光网络在工程应用中的每项关键技术均有详细讲解及实际应用注意事项,其可读性与可实践性强。 2.本书从工程应用场景回溯技术原理,再回头思考工程应用,由表及里,深入浅出。 3.本书以典型运营商网络为模型,详细介绍每种网络技术的原理及应用。本书中实例均来自真实网络交付实例,理论与实践相结合,使读者更好地运用到实际生活中。
大话万物感知:从传感器到物联网 电子书
本书介绍了5G时代人工智能、大数据、云计算背景下的物联网感知层的技术,带领读者一本书读懂物联网感知技术。
六级真题一笑而过 电子书
适读人群 :大学英语六级考试考生   你不用再纠结该买什么真题和模拟,更不用再犹豫哪几本单项分册需要入手,因为从今天起,过六级,这一本,就够了!   它不仅包括:近3年10套真题 3套模拟,重点难点易错点抽丝剥茧条分缕析!   还包括:如亲临新东方课堂般的名师细致讲解,告别传统真题书不痛不痒的无聊解释!写作、阅读、翻译部分均配有全文翻译!   重要的是,附赠一本超详技巧分册,听、读、写、译的通关秘籍尽在掌握!   跟着英语大王,让你的六级一笑而过!
四级单词一笑而过第2版 电子书
适读人群 :在校大学生 这不是一本普通的词汇书,它跟所有你曾见过的词汇书都不一样!有了它,你每天会期待和单词的邂逅,从此对于所有单词的困难,一笑而过! 单词收录:完全按照大纲词汇,收录全面,绝不偷工减料,更不为了显示繁杂而堆砌额外词汇! 详尽解释:对释义、动词及物和不及物、例句、真题等都做了很多增添和改进,更包罗万千绚烂多姿! 超强例句:2000个真题例句 实用生活例句 幽默场景句,让你告别一头雾水的“字典”例句! 激励青春:每单元后都有思思大王的精彩励志故事,跟弱小但仍敢做梦的你,分享青春的力量! 炫酷插图:漫画插图?Out!这里的插图几乎都是思思大王和朋友们的Cosplay,让你永生难忘! 标准录音:地道纯正的外教朗读录音,扫码即听,多感官立体学习,用对方法就能事半功倍!
四级真题一笑而过 电子书
适读人群 :大学英语四级考试考生   你不用再纠结该买什么真题和模拟,更不用再犹豫哪几本单项分册需要入手,因为从今天起,过四级,这一本,就够了!   它不仅包括:近3年10套真题 3套模拟,重点难点易错点抽丝剥茧条分缕析!!   还包括:如亲临新东方课堂般的名师细致讲解,告别传统真题书不痛不痒的无聊解释!写作、阅读、翻译部分均配有全文翻译!   重要的是,附赠一本超详技巧分册,听、读、写、译的通关秘籍尽在掌握!   跟着英语大王,让你的四级一笑而过!