跳转到内容

GNU C 编译器内部

25% developed
来自维基教科书,开放世界中的开放书籍

什么是 GCC?

[编辑 | 编辑源代码]

GNU 编译器集合 (GCC) 是一个自由软件项目,包括针对AdaCC++FortranJavaObjective-C的编译器,以及这些语言的库。它能够为各种平台生成可执行文件,包括各种平台,例如x86ARMMIPSPowerPC等。

GCC 的历史

[编辑 | 编辑源代码]

GCC 的主页是http://gcc.gnu.org。GCC 的现代历史始于 GCC 2.95 版本。该版本于 1999 年 7 月 31 日发布。GCC 3.0 被认为是 C++ 编译器的现代历史,于 2001 年 6 月 18 日发布。后来创建了额外的分支。截至目前,活跃的开发分支是 GCC 3.4,最新版本发布于 2005 年 11 月 30 日,以及 GCC 4.0,最后一次发布于 2005 年 9 月 28 日。GCC 4.1 于 2006 年 2 月 28 日发布。GCC 4.2 是 GCC 的开发分支。源代码仓库可在线获取。GCC 4.2(主干)是唯一进行真正开发和添加新功能的地方。

GCC 已在工业界和学术界流行起来。其源代码的可用性使人们可以向编译器添加新功能。GCC 用于几个基于源代码的安全项目,即在使程序更安全的工具中对程序的源代码进行检测。然而,到目前为止,描述 GCC 内部结构的文档很少。

当实现新功能时,会直接修改 GCC 的源代码。但是,这些编译器扩展很难分发,因为 GCC 是一个非常大的程序。创建模块化扩展的框架将极大地简化编译器扩展的开发。

GCC 4.0 及更高版本包括 SSA 优化器,应将其用于进一步的高级优化和转换。RTL 级别应仅用于特定于目标的优化和低级优化,例如调度。在一些人看来,任何低于 4.0 的 GCC 都是一个过时的旧编译器,已经显露出其时代特征。

本书的目的

[编辑 | 编辑源代码]

本书的目的是满足 GCC 黑客的需求。我们从描述GCC 3.4.1 架构开始,重点介绍源代码解析器。我们选择此版本的 GCC 是因为我们主要使用该版本。然后我们解决扩展开发的问题。我们将在下一章介绍GCC 可扩展模块 (GEM) 项目。GEM 在整个 GCC 源代码中提供了一系列挂钩。它作为 GCC 的补丁实现。基于 GEM 的编译器扩展开发为一个独立的程序。当扩展完成时,与不使用 GEM 时分发 GCC 的源代码相比,只需分发其源代码即可。我们将在本书结尾给出演示 GEM 编程的示例。

要点: 本书是什么:面向扩展程序员的 GCC 内部结构指南。介绍了用于开发模块化扩展的 GEM 框架。本书不是什么:编程语言参考手册,GCC 安装手册。


本书描述了 GCC 的两个版本:3.4 和 4.1。


华夏公益教科书