深入分析GCC.html

上传人:紫*** 文档编号:132910644 上传时间:2020-05-21 格式:PDF 页数:92 大小:13.87MB
返回 下载 相关 举报
深入分析GCC.html_第1页
第1页 / 共92页
深入分析GCC.html_第2页
第2页 / 共92页
深入分析GCC.html_第3页
第3页 / 共92页
深入分析GCC.html_第4页
第4页 / 共92页
深入分析GCC.html_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《深入分析GCC.html》由会员分享,可在线阅读,更多相关《深入分析GCC.html(92页珍藏版)》请在金锄头文库上搜索。

1、前言 GCC GNU Compiler Collection GNU编译器套件 是一套由GNU开发的程序设计语言编译工具 是GNU工程中最重要的组成部分 经过近30年的发展 GCC不仅支持众多的前端编程语言 还支持各 种主流的处理器平台和操作系统平台 成为公认的跨平台编译器的事实标准 也成为编译器设计的成功典范 作为一名GCC编译器的使用者和源码阅读的爱好者 我一直想写一本关于GCC的技术书 2002年 我开始在Linux系统上进行一些软件开发 GCC就是我使用的编译工具 我一直对从源代码到目标代码的转换过程充满好奇 想知道在这个过程中GCC到底都做了些什么 GCC是如何设计的 那些成千上万个

2、GCC的源代码文件都表示了什么意义 那时我常常幻想 要是能透彻地分析和理解GCC源代码 多好 从那时起 在教学科研之余 我偶尔会翻阅一下GCC的相关源代码 可是看着繁多的 GCC源代码 也常常感觉手足无措 真有一种 老虎吃天 无法下爪 的尴尬 于是分析GCC源代码的事情被搁置了 然而那种一探究竟的心情总是挥之不去 2012年开始 我有了较多的闲暇时间 在经过一段彷徨之后 分析GCC源代码的冲动又一次浮现在脑海 我知道 这次是要来真的了 我要做点自己喜欢的事 Why 我有空余时间了 我要干些自己感兴趣的事情 在我创建的GCC爱好者交流群中经常有朋友问 有没有介绍GCC的资料呀 大多人都会说 有

3、请看官方文档 我也去看了看 没错 GCC有比较详 细的官方文档 包括gccinternal及用户手册等 然而 这些文档的内容庞杂 缺乏系统分析GCC设计框架和工作流程的内容 并且大多的内容对读者来讲都是零散的 让初学者无所适从 于是我想 为什么 不分析一下GCC系统 把GCC的设计实现用一种更清晰明了 更系统的方法介绍给GCC的爱好者呢 What 本书将围绕GCC编译过程 详细介绍从源代码到AST 从AST到GIMPLE 从GIMPLE到RTL 以及从RTL到最终的目标机器汇编代码的详细过程 涉及各个阶段中间表示的详细分析 生成过程 本书 提供了大量的图表和实例 展示了GCC编译系统的总体工作

4、流程和工作细节 本书的另外一个特点是结合GCC 4 4 0的源代码进行分析 使读者在了解编译原理的基础上进一步掌握其实现的总体流程和细 节 让更多读者对编译技术的认识不再只停留在理论层面 而是向其展示一个编译系统实例的实现过程 How GCC源代码涉及的内容非常庞杂 很难在一本书中全面描述 因此本书以GCC中间表示为主线 详细分析GCC从源代码开始 直到生成目标机器汇编代码的整个过程中所使用的三种中间表示 AST GIMPLE及RTL 并对这三种中间表示的基本概念 生成过程进行详细的描述 对基于GIMPLE和RTL的优化处理进行介绍 从而描述一条从源代码到目标机器汇编代码的清晰路线图 Who

5、本书以热爱编译系统理论及其实现的在校大学生 研究生为主要读者对象 也可以作为企业中研发编译系统以及进行编译系统移植的研发工程师的有益参考 在编写这本书的时候 有一种精神支撑着我 我相信 兴趣 加上 坚持 就是胜利 分析GCC不是一年半载的事情 需要3年 5年 甚至更长时间 不过我可以坚持 我要用我的坚持换来对GCC的 深入分析 让更多的GCC爱好者熟悉它 接触它 了解它 更多地参与GCC的开发与维护 感谢我的爱人和孩子 给了我家的温暖和亲情 感谢病榻上的父亲 虽然他不能和我说话 但他那一双大手 依然经常抚摸在我的头上 感谢年老体弱的母亲 感谢她一直照顾我的父亲 让我知道什 么是坚持 什么是不离

6、不弃 感谢西安邮电大学GPU项目组的各位同事在本书的写作中提出的宝贵建议 本书的写作得到国家自然科学基金重点项目 项目编号 61136002 以及陕西省教育厅科研计划项目 项目编号 14JK1674 资助 鉴于作者水平有限 在分析和写作本书的过程中也引入了一些个人观点 因此难免有一些理解的偏差和错误 敬请读者批评指正并不吝赐教 如有意见和建议 请联系作者lazy linux 在此一 并感谢 王亚刚 2016年10月于西安邮电大学 第1章 GCC概述 本章主要对GCC的发展过程及GCC的特点进行简介 并给出了本书的主要内容简介 1 1 GCC的产生与发展 GCC GNU Compiler Col

7、lection 是GNU工程 GNU Project 中的核心工具软件 其官方网址为https gcc gnu org GCC支持多种前端的编程语言 包括C C Java Ada和Fortran等 其编译生成的目标代码可以在几乎所有的处理器平台上运行 是目前使用最广泛的编译系统之一 GCC遵循GNU GPL GNU Public License 协议 由FSF Free Software Foundation 发布 GNU和 GCC的图标如图1 1所示 图1 1 GNU及GCC的图标 初期的GCC仅仅作为C语言的编译器 即GNU C Compiler 1987年GCC 1 0发布 同年12月

8、GCC开始支持C 语言 随后 GCC开始支持Objective C Objective C Fortran Java和Ada等 语言 与此同时 GCC也被逐渐移植到各种各样的主流处理器体系结构上 包括i386 ix86 64 SPARCE ARM和MIPS等处理器平台 自从1987年Richard Stallman和Len Tower发布GCC的第一个版本GCC 1 0以来 目前GCC的最新版本已经更新到GCC 6 0 https gcc gnu org releases html给出了GCC在各个时期推出的GCC版 本 其中最重大的变化是在1999年7月 GCC与EGCS Experimen

9、tal Enhanced GNU Compiler System 重新融合并发布了GCC 2 95版本 相关的资料可以查阅以下官方网站信息 GNU Compiler Collection https gcc gnu org Free Software Foundation http www fsf org GNU Project https gnu org GNU Public License https www gnu org licenses licenses en html GPL 1 2 GCC的特点 GCC作为目前较为成功的编译系统之一 具有非常突出的优点 主要包括 1 GCC编译系

10、统支持众多的前端编程语言 GCC 4 4 0中 GCC SOURCE gcc 目录下包含了前端编程语言处理的目录及其代码 其中 GCC SOURCE 表示GCC源代码的主目录 下同 主要 包括C C Ada Fortran Java Objective C Objective C 等语言的前端处理 可以使用如下命令查看这些目录 GCC localhost gcc 4 4 0 ls l gcc drwxrwxr x 3 GCC GCC 69632 Apr 21 2009 ada drwxrwxr x 2 GCC GCC 4096 Nov 27 2013 cp drwxrwxr x 2 GCC G

11、CC 4096 Nov 6 15 14 fortran drwxrwxr x 2 GCC GCC 4096 Oct 9 17 34 java drwxrwxr x 2 GCC GCC 4096 Apr 21 2009 objc drwxrwxr x 2 GCC GCC 4096 Apr 21 2009 objcp 2 GCC支持众多的目标机器体系结构 具有良好的可移植性 GCC 4 4 0的 GCC SOURCE gcc config 目录下包含了GCC对目标处理器的支持情况 其中包括了各种主流的处理器 例 如 arm i386 mips以及alpha等 以下是GCC 4 4 0代码所支持的处

12、理器列表 alpha arc arm avr cris crx fr30 frv h8300 i386 ia64 iq2000 m32c m32r m68hc11 m68k mcore mips mmix mn10300 pa pdp11 picochip rs6000 s390 score sh sparc spu stormy16 v850 vax xtensa 3 GCC具有丰富的配套工具链支持 GCC不是一个孤立的编译工具 而是整个GNU工程中的一个组成部分 GNU工程中的其他软件 包括GNU C库glibc GNU的调试工具gdb 以及GNU二进制工具链binutils GNU Bi

13、nutils Toolchains 例如汇编工具as 连接工具ld 目标文件分析工具objdump objcopy等 等都与GCC关系密切 互相依赖 可以使用下述的shell命令查看GNU二进制工具链中主要包括的工具 GCC localhost paag gcc rpm ql binutils xargs ls l grep usr bin rwxr xr x 1 root root 24352 Oct 15 2014 usr bin addr2line rwxr xr x 1 root root 54444 Oct 15 2014 usr bin ar rwxr xr x 1 root ro

14、ot 527220 Oct 15 2014 usr bin as rwxr xr x 1 root root 26356 Oct 15 2014 usr bin c filt rwxr xr x 1 root root 99212 Oct 15 2014 usr bin gprof rwxr xr x 1 root root 588116 Oct 15 2014 usr bin ld rwxr xr x 1 root root 38800 Oct 15 2014 usr bin nm rwxr xr x 1 root root 212216 Oct 15 2014 usr bin objcop

15、y rwxr xr x 1 root root 276528 Oct 15 2014 usr bin objdump rwxr xr x 1 root root 54448 Oct 15 2014 usr bin ranlib rwxr xr x 1 root root 288560 Oct 15 2014 usr bin readelf rwxr xr x 1 root root 27196 Oct 15 2014 usr bin size rwxr xr x 1 root root 25832 Oct 15 2014 usr bin strings rwxr xr x 1 root roo

16、t 212244 Oct 15 2014 usr bin strip 4 GCC提供可靠 高效 高质量的目标代码 GCC是目前使用的最为广泛的编译器系统之一 众多工业级应用的实践证明 GCC编译系统生成的代码具有很高的可靠性和运行效率 5 GCC对于并行编译的支持 在GCC 4 4 0中 已经提供了对OpenMP的完整支持 1 3 GCC代码分析 GCC作为目前GNU项目中应用最广泛的工具软件之一 是工程师设计编译系统最典型 最成功的范例 是高校学生学习编译系统最生动 最权威的设计实例 同时也是程序员进行高质量代码设计的有 益参考 本书以GCC 4 4 0的源代码为例 对GCC的设计和实现进行分析和解读 主要涉及以下内容 1 GCC的发展历史及特点 2 GCC的总体结构 3 GCC中各种中间表示 包括抽象语法树 GIMPLE 寄存器传输语言 的生成技术 4 GCC中基于GIMPLE的优化处理 这一部分主要实现一些与目标机器无关的性能优化 5 GCC中基于RTL的优化处理 这一部分主要实现一些与目标机器相关的性能优化 6 GCC的移植技术 即如何让GCC支持新的目标机器 本书将紧密围绕编

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号