GNU C 编译器内部/简介
GNU 编译器集合 (GCC) 是一个自由软件项目,包括用于 Ada、C、C++、Fortran、Java 和 Objective-C 的编译器,以及这些语言的库。它能够为 各种平台 生成可执行文件,包括 x86、ARM、MIPS、PowerPC 等。
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 安装手册。 |