logo
分类于: 计算机基础 人工智能

简介

深入分析GCC: 源码分析系列

深入分析GCC: 源码分析系列 0.0分

资源最后更新于 2020-03-29 03:57:46

作者:王亚刚

出版社:出版社机械工业出版社

出版日期:2017-01

文件格式: pdf

标签: 软件 计算机与互联网 华章科技 源码分析系列

简介· · · · · ·

本书将围绕GCC编译过程,详细介绍从源代码到AST、从AST到GIMPLE、从GIMPLE到RTL,以及从RTL到最终的目标机器汇编代码的详细过程,涉及各个阶段中间表示的详细分析、生成过程。本书提供了大量的图表和实例,展示了GCC编译系统的总体工作流程和工作细节。本书的另外一个特点是结合GCC 4.4.0的源代码进行分析,使读者在了解编译原理的基础上进一步掌握其实现的总体流程和细节,让更多读者对编译技术的认识不再只停留在理论层面,而是向其展示一个编译系统实例的实现过程。在编写这本书的时候,有一种精神支撑着我,我相信“兴趣”加上“坚持”就是胜利!分析GCC不是一年半载的事情,需要3年、5年,甚至更长时间,不过我可以坚持,我要用我的坚持换来对GCC的深入分析,让更多的GCC爱好者熟悉它、接触它、了解它,更多地参与GCC的开发与维护。

想要: 点击会收藏到你的 我的收藏,可以在这里查看

已收: 表示已经收藏

Tips: 注册一个用户 可以通过用户中心得到电子书更新的通知哦

目录

  1. 前言
  2. 第1章 GCC概述
  3. 1.1 GCC的产生与发展
  4. 1.2 GCC的特点
  5. 1.3 GCC代码分析
  6. 第2章 GCC源代码分析工具
  7. 2.1 vim+ctags代码阅读工具
  8. 2.2 GNU gdb调试工具
  9. 2.3 GNU binutils工具
  10. 2.4 shell工具及graphviz绘图工具
  11. 2.5 GCC调试选项
  12. 第3章 GCC总体结构
  13. 3.1 GCC的目录结构
  14. 3.2 GCC的逻辑结构
  15. 3.3 GCC源代码编译
  16. 3.3.1 配置
  17. 3.3.2 编译
  18. 3.3.3 安装
  19. 第4章 从源代码到AST/GENERIC
  20. 4.1 抽象语法树
  21. 4.2 树节点的声明
  22. 4.3 树节点结构
  23. 4.3.1 struct tree_base
  24. 4.3.2 struct tree_common
  25. 4.3.3 常量节点
  26. 4.3.4 标识符节点
  27. 4.3.5 声明节点
  28. 4.3.6 struct tree_decl_minimal
  29. 4.3.7 struct tree_decl_common
  30. 4.3.8 struct tree_field_decl
  31. 4.3.9 struct tree_decl_with_rtl
  32. 4.3.10 struct tree_label_decl
  33. 4.3.11 struct tree_result_decl
  34. 4.3.12 struct tree_const_decl
  35. 4.3.13 struct tree_parm_decl
  36. 4.3.14 struct tree_decl_with_vis
  37. 4.3.15 struct tree_var_decl
  38. 4.3.16 struct tree_decl_non_common
  39. 4.3.17 struct tree_function_decl
  40. 4.3.18 struct tree_type_decl
  41. 4.3.19 类型节点
  42. 4.3.20 tree_list节点
  43. 4.3.21 表达式节点
  44. 4.3.22 语句节点
  45. 4.3.23 其他树节点
  46. 4.4 AST输出及图示
  47. 4.5 AST的生成
  48. 4.5.1 词法分析
  49. 4.5.2 词法分析过程
  50. 4.5.3 语法分析
  51. 4.5.4 语法分析过程
  52. 4.5.5 c_parse_file
  53. 4.5.6 c_parser_translation_unit
  54. 4.5.7 c_parser_external_declaration
  55. 4.5.8 c_parser_declaration_or_fndef
  56. 4.5.9 c_parser_declspecs
  57. 4.6 小结
  58. 第5章 从AST/GENERIC到GIMPLE
  59. 5.1 GIMPLE
  60. 5.2 GIMPLE语句
  61. 5.3 GIMPLE的表示与存储
  62. 5.4 GIMPLE语句的操作数
  63. 5.5 GIMPLE语句序列的基本操作
  64. 5.6 GIMPLE的生成
  65. 5.6.1 gimplify_function_tree
  66. 5.6.2 gimplify_body
  67. 5.6.3 gimlify_parameters
  68. 5.6.4 gimplify_stmt
  69. 5.6.5 gimplify_expr
  70. 5.7 GIMPLE转换实例
  71. 5.7.1 BIND_EXPR节点的GIMPLE生成
  72. 5.7.2 STATEMENT_LIST_EXPR节点的GIMPLE生成
  73. 5.7.3 MODIFY_EXPR节点的GIMPLE生成
  74. 5.7.4 POSTINCREMENT_EXPR节点的GIMPLE生成
  75. 5.8 实例分析
  76. 5.9 小结
  77. 第6章 GIMPLE处理及其优化
  78. 6.1 GCC Pass
  79. 6.1.1 核心数据结构
  80. 6.1.2 Pass的类型
  81. 6.1.3 Pass链的初始化
  82. 6.1.4 Pass的执行
  83. 6.2 Pass列表
  84. 6.3 GIMPLE Pass实例
  85. 6.3.1 pass_remove_useless_stmts
  86. 6.3.2 pass_lower_cf
  87. 6.3.3 pass_build_cfg
  88. 6.3.4 pass_build_cgraph_edges
  89. 6.3.5 pass_build_ssa
  90. 6.3.6 pass_all_optimizations
  91. 6.3.7 pass_expand
  92. 6.4 小结
  93. 第7章 RTL
  94. 7.1 RTL中的对象类型
  95. 7.2 RTX_CODE
  96. 7.3 RTX类型
  97. 7.4 RTX输出格式
  98. 7.5 RTX操作数
  99. 7.6 RTX的机器模式
  100. 7.7 RTX的存储
  101. 7.8 RTX表达式
  102. 7.8.1 常量
  103. 7.8.2 寄存器和内存
  104. 7.8.3 算术运算
  105. 7.8.4 比较运算
  106. 7.8.5 副作用
  107. 7.9 IR-RTL
  108. 7.9.1 INSN
  109. 7.9.2 JUMP_INSN
  110. 7.9.3 CALL_INSN
  111. 7.9.4 BARRIER
  112. 7.9.5 CODE_LABEL
  113. 7.9.6 NOTE
  114. 7.10 小结
  115. 第8章 机器描述文件${target}.md
  116. 8.1 机器描述文件
  117. 8.2 指令模板
  118. 8.2.1 模板名称
  119. 8.2.2 RTL模板
  120. 8.2.3 条件
  121. 8.2.4 输出模板
  122. 8.2.5 属性
  123. 8.3 定义RTL序列
  124. 8.4 指令拆分
  125. 8.5 枚举器
  126. 8.5.1 mode枚举器
  127. 8.5.2 code枚举器
  128. 8.6 窥孔优化
  129. 8.6.1 define_peephole
  130. 8.6.2 define_peephole2
  131. 8.7 小结
  132. 第9章 机器描述文件${target}.[ch]
  133. 9.1 targetm
  134. 9.1.1 struct gcc_target的定义
  135. 9.1.2 targetm的初始化
  136. 9.2 编译驱动及选项
  137. 9.2.1 编译选项
  138. 9.2.2 SPEC语言及SPEC文件
  139. 9.2.3 机器相关的编译选项
  140. 9.3 存储布局
  141. 9.3.1 位顺序和字节顺序
  142. 9.3.2 类型宽度
  143. 9.3.3 机器模式提升
  144. 9.3.4 存储对齐
  145. 9.3.5 编程语言中数据类型的存储布局
  146. 9.4 寄存器使用
  147. 9.4.1 寄存器的基本描述
  148. 9.4.2 寄存器分配顺序
  149. 9.4.3 机器模式
  150. 9.4.4 寄存器类型
  151. 9.5 堆栈及函数调用规范描述
  152. 9.5.1 堆栈的基本特性
  153. 9.5.2 寄存器消除
  154. 9.5.3 函数栈帧的管理
  155. 9.5.4 参数传递
  156. 9.5.5 函数返回值
  157. 9.5.6 i386机器栈帧
  158. 9.6 寻址方式
  159. 9.7 汇编代码分区
  160. 9.8 定义输出的汇编语言
  161. 9.8.1 汇编代码文件的框架
  162. 9.8.2 数据输出
  163. 9.8.3 未初始化数据输出
  164. 9.8.5 指令输出
  165. 9.8.4 标签输出
  166. 9.9 机器描述信息的提取
  167. 9.9.1 gencode.c
  168. 9.9.2 genattr.c
  169. 9.9.3 genattrtab.c
  170. 9.9.4 genrecog.c
  171. 9.9.5 genflag.c
  172. 9.9.6 genemit.c
  173. 9.9.7 genextract.c
  174. 9.9.8 genopinit.c
  175. 9.9.9 genoutput.c
  176. 9.9.10 genpreds.c
  177. 9.9.11 其他
  178. 9.10 小结
  179. 第10章 从GIMPLE到RTL
  180. 10.1 GIMPLE序列
  181. 10.2 典型数据结构
  182. 10.3 RTL生成的基本过程
  183. 10.3.1 变量展开
  184. 10.3.2 参数及返回值处理
  185. 10.3.3 初始块的处理
  186. 10.3.4 基本块的RTL生成
  187. 10.3.5 退出块的处理
  188. 10.3.6 其他处理
  189. 10.4 GIMPLE语句转换成RTL
  190. 10.4.1 GIMPLE语句转换的一般过程
  191. 10.4.2 GIMPLE_GOTO语句的RTL生成
  192. 10.4.3 GIMPLE_ASSIGN语句的RTL生成
  193. 10.5 小结
  194. 第11章 RTL处理及优化
  195. 11.1 RTL处理过程
  196. 11.2 特殊虚拟寄存器的实例化
  197. 11.3 指令调度
  198. 11.3.1 指令调度算法
  199. 11.3.2 GCC指令调度的实现
  200. 11.3.3 指令调度实例1
  201. 11.3.4 指令调度实例2
  202. 11.4 统一寄存器分配
  203. 11.4.1 基本术语
  204. 11.4.2 寄存器分配的主要流程
  205. 11.4.3 代码分析
  206. 11.4.4 寄存器分配实例1
  207. 11.4.5 寄存器分配实例2
  208. 11.5 汇编代码生成
  209. 11.5.1 汇编代码文件的结构
  210. 11.5.2 从RTL到汇编代码
  211. 11.6 小结
  212. 第12章 支持新的目标处理器
  213. 12.1 GCC移植
  214. 12.2 PAAG处理器
  215. 12.2.1 PAAG处理器指令集
  216. 12.2.2 应用二进制接口
  217. 12.3 GCC移植的基本步骤
  218. 12.4 PAAG机器描述文件(paag.md)
  219. 12.5 paag.[ch]文件
  220. 12.5.1 存储布局
  221. 12.5.2 寄存器使用规范
  222. 12.5.3 堆栈布局及堆栈指针
  223. 12.5.4 函数调用规范
  224. 12.5.5 寻址方式
  225. 12.5.6 汇编代码输出
  226. 12.5.7 杂项
  227. 12.6 PAAG后端注册
  228. 12.7 GCC移植测试
  229. 12.8 小结
  230. 参考文献
  231. 索引