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

深入分析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语句转换的一般

参考文献