跳转到内容

GNU C 编译器内部/简介

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

什么是 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 安装手册。
华夏公益教科书