深入分析GCC
目录
前言
章 GCC概述 11.1 GCC的产生与发展 11.2 GCC的特点 21.3 GCC代码分析 3第2章 GCC源代码分析工具 42.1 vim ctags代码阅读工具 42.2 GNU gdb调试工具 62.3 GNU binutils工具 82.4 shell工具及graphviz绘图工具 112.5 GCC调试选项 13第3章 GCC总体结构 163.1 GCC的目录结构 163.2 GCC的逻辑结构 183.3 GCC源代码编译 203.3.1 配置 213.3.2 编译 233.3.3 安装 25第4章 从源代码到AST/GENERIC 264.1 抽象语法树 264.2 树节点的声明 284.3 树节点结构 334.3.1 struct tree_base 354.3.2 struct tree_mon 364.3.3 常量节点 384.3.4 标识符节点 424.3.5 声明节点 444.3.6 struct tree_decl_minimal 464.3.7 struct tree_decl_mon 464.3.8 struct tree_field_decl 494.3.9 struct tree_decl_with_rtl 554.3.10 struct tree_label_decl 554.3.11 struct tree_result_decl 564.3.12 struct tree_const_decl 574.3.13 struct tree_parm_decl 574.3.14 struct tree_decl_with_vis 594.3.15 struct tree_var_decl 594.3.16 struct tree_decl_non_mon 624.3.17 struct tree_function_decl 624.3.18 struct tree_type_decl 644.3.19 类型节点 674.3.20 tree_list节点 684.3.21 表达式节点 714.3.22 语句节点 734.3.23 其他树节点 754.4 AST输出及图示 764.5 AST的生成 834.5.1 词法分析 844.5.2 词法分析过程 904.5.3 语法分析 984.5.4 语法分析过程 994.5.5 c_parse_file 1034.5.6 c_parser_translation_unit 1054.5.7 c_parser_external_declaration 1054.5.8 c_parser_declaration_or_fndef 1074.5.9 c_parser_declspecs 1124.6 小结 114第5章 从AST/GENERIC到GIMPLE 1155.1 GIMPLE 1155.2 GIMPLE语句 1195.3 GIMPLE的表示与存储 1225.4 GIMPLE语句的操作数 1285.5 GIMPLE语句序列的基本操作 1325.6 GIMPLE的生成 1355.6.1 gimplify_function_tree 1365.6.2 gimplify_body 1385.6.3 gimlify_parameters 1395.6.4 gimplify_stmt 1445.6.5 gimplify_expr 1445.7 GIMPLE转换实例 1575.7.1 BIND_EXPR节点的GIMPLE生成 1585.7.2 STATEMENT_LIST_EXPR节点的GIMPLE生成 1595.7.3 MODIFY_EXPR节点的GIMPLE生成 1605.7.4 POSTINCREMENT_EXPR节点的GIMPLE生成 1625.8 实例分析 1725.9 小结 176第6章 GIMPLE处理及其优化 1776.1 GCC Pass 1776.1.1 核心数据结构 1776.1.2 Pass的类型 1796.1.3 Pass链的初始化 1826.1.4 Pass的执行 1846.2 Pass列表 1876.3 GIMPLE Pass实例 1936.3.1 pass_remove_useless_stmts 1936.3.2 pass_lower_cf 1956.3.3 pass_build_cfg 1976.3.4 pass_build_cgraph_edges 2036.3.5 pass_build_ssa 2056.3.6 pass_all_optimizations 2066.3.7 pass_expand 2076.4 小结 207第7章 RTL 2087.1 RTL中的对象类型 2097.2 RTX_CODE 2107.3 RTX类型 2107.4 RTX输出格式 2127.5 RTX操作数 2137.6 RTX的机器模式 2167.7 RTX的存储 2197.8 RTX表达式 2227.8.1 常量 2257.8.2 寄存器和内存 2277.8.3 算术运算 2287.8.4 比较运算 2307.8.5 副作用 2307.9 IR-RTL 2327.9.1 INSN 2337.9.2 JUMP_INSN 2347.9.3 CALL_INSN 2357.9.4 BARRIER 2357.9.5 CODE_LABEL 2367.9.6 NOTE 2377.10 小结 238第8章 机器描述文件${target}.md 2398.1 机器描述文件 2408.2 指令模板 2418.2.1 模板名称 2428.2.2 RTL模板 2468.2.3 条件 2568.2.4 输出模板 2568.2.5 属性 2568.3 定义RTL序列 2578.4 指令拆分 2638.5 枚举器 2668.5.1 mode枚举器 2668.5.2 code枚举器 2688.6 窥孔优化 2698.6.1 define_peephole 2698.6.2 define_peephole2 2708.7 小结 271第9章 机器描述文件${target}. 2729.1 targetm 2729.1.1 struct gcc_target的定义 2739.1.2 targetm的初始化 2779.2 编译驱动及选项 2799.2.1 编译选项 2809.2.2 SPEC语言及SPEC文件 2819.2.3 机器相关的编译选项 2859.3 存储布局 2869.3.1 位顺序和字节顺序 2869.3.2 类型宽度 2879.3.3 机器模式提升 2879.3.4 存储对齐 2889.3.5 编程语言中数据类型的存储布局 2899.4 寄存器使用 2909.4.1 寄存器的基本描述 2909.4.2 寄存器分配顺序 2979.4.3 机器模式 2989.4.4 寄存器类型 3009.5 堆栈及函数调用规范描述 3079.5.1 堆栈的基本特性 3099.5.2 寄存器消除 3139.5.3 函数栈帧的管理 3159.5.4 参数传递 3169.5.5 函数返回值 3189.5.6 i386机器栈帧 3189.6 寻址方式 3259.7 汇编代码分区 3269.8 定义输出的汇编语言 3339.8.1 汇编代码文件的框架 3339.8.2 数据输出 3369.8.3 未初始化数据输出 3369.8.4 标签输出 3389.8.5 指令输出 3429.9 机器描述信息的提取 3439.9.1 gencode.c 3479.9.2 genattr.c 3489.9.3 genattrtab.c 3489.9.4 genrecog.c 3499.9.5 genflag.c 3529.9.6 genemit.c 3539.9.7 genextract.c 3549.9.8 genopinit.c 3569.9.9 genoutput.c 3609.9.10 genpreds.c 3629.9.11 其他 3639.10 小结 3640章 从GIMPLE到RTL 36510.1 GIMPLE序列 36510.2 典型数据结构 36610.3 RTL生成的基本过程 36710.3.1 变量展开 37010.3.2 参数及返回值处理 38010.3.3 初始块的处理 39510.3.4 基本块的RTL生成 39810.3.5 退出块的处理 41010.3.6 其他处理 41110.4 GIMPLE语句转换成RTL 41110.4.1 GIMPLE语句转换的一般过程 41210.4.2 GIMPLE_GOTO语句的RTL生成 41510.4.3 GIMPLE_ASSIGN语句的RTL生成 41710.5 小结 4321章 RTL处理及优化 43311.1 RTL处理过程 43311.2 特殊虚拟寄存器的实例化 43511.3 指令调度 43711.3.1 指令调度算法 43911.3.2 GCC指令调度的实现 44011.3.3 指令调度实例1 44211.3.4 指令调度实例2 45911.4 统一寄存器分配 46011.4.1 基本术语 46111.4.2 寄存器分配的主要流程 46311.4.3 代码分析 46611.4.4 寄存器分配实例1 46811.4.5 寄存器分配实例2 48311.5 汇编代码生成 49411.5.1 汇编代码文件的结构 49511.5.2 从RTL到汇编代码 49911.6 小结 5022章 支持新的目标处理器 50312.1 GCC移植 50312.2 PAAG处理器 50412.2.1 PAAG处理器指令集 50512.2.2 应用二进制接口 50512.3 GCC移植的基本步骤 50612.4 PAAG机器描述文件(paag.md) 50712.5 paag.文件 51212.5.1 存储布局 51212.5.2 寄存器使用规范 51312.5.3 堆栈布局及堆栈指针 51412.5.4 函数调用规范 51512.5.5 寻址方式 51912.5.6 汇编代码输出 52112.5.7 杂项 52312.6 PAAG后端注册 52312.7 GCC移植测试 52412.8 小结 526参考文献 527索引 529下载地址:
关注微信公众号获取提取码:
输入:plin8 获取提取码