Lan*_*ard 5 c compiler-construction assembly gcc
GCC源代码中的代码实际构建了不同体系结构的程序集在哪里?
想知道它编译了多少种不同的汇编语言,以及它实际上是如何做到的(通过查看源代码).
是在某个地方的gcc回购中,还是在另一个回购中?我已经开始挖掘但没有找到任何东西.
https://github.com/gcc-mirror/gcc
例如,以下是V8中的一些程序集生成代码:
https://github.com/v8/v8-git-mirror/tree/master/src/x64
是否有与GCC相同的东西?
我想知道,因为GCC是如何做到的,这是一个谜,这将是一个了解编译器如何实际实现到汇编级别的好方法.
GCC 的实际源代码最容易从这里访问:
该软件可通过源代码控制系统 SVN (subversion) 访问。这将安装在许多版本的 Linux/UNIX 上,但如果不在您的平台上,您可以安装 svn 工具包,然后使用以下命令获取源:
svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir
Run Code Online (Sandbox Code Playgroud)
GCC 很复杂,需要丰富的经验才能理解应用程序实际编译到不同体系结构的本质。
简而言之,GCC 具有三个主要组件——前端、中台和后端处理。前端处理器具有语言解析组件,用于理解语言(如 C、C++、Objective-C 等)的语法。前端将代码解构为可移植的构造,然后将其传递给后端以编译到目标环境。
中间部分执行代码分析和优化,尝试对代码进行优先级排序,以在整个流程结束时生成最佳输出。从技术上讲,由于在分析过程中发现了模式,因此可以在流程的任何部分进行优化。
后端处理器将代码编译为树形输出格式(实际上不是最终的可执行代码)。根据预期输出的设计,“伪代码”针对使用寄存器、位大小、字节序等进行了优化。然后在汇编阶段生成最终代码,将后端代码转换为机器可执行指令。
需要注意的是,编译器有许多选项来处理输出格式,因此您可以创建输出到许多体系结构类,通常是开箱即用的。对于交叉编译和目标编译器选项,请尝试查看此链接:
https://gcc.gnu.org/install/configure.html