gcc编译器---前端和后端

 GCC编译器由编译预处理组件cpp和针对特定语言的编译器cc1组成

  [xxxx@ test_paag]$gcc  –S  -O2  main.c  -o  main.s 

  此编译命令解释:命令行中的GCC是一个驱动程序,它接受命令行参数并解释,然后根据命令行参数解释的结果选择下一步的步骤,最后调用编译组件cc1进行编译产生汇编指令*.s文件。

gcc编译器的工作过程:GCC编译器的前端将高级语言源码经过词法分析、语法分析生成与高级语言无关的低级中间层表示GENERIC[36],然后经过单一化赋值转化为另一种中间表示层GIMPLE[36],在中间层GIMPLE组建控制流程图(Control Flow Graph,CFG),并在GIMPLE上进行一系列的优化,然后将其转换为更加便于优化的RTL(Register Transfer Language,RTL)中间表示层[37],在RTL层做很多遍优化(pass),最后对于每条RTL通过模板匹配(Pattern Match)调用对应的汇编模板生成汇编代码。GCC编译流程图如下图1所示。


前端

GCC编译器的前端非常强大,经过多年的发展,GCC 编译器前端已经变得相当成熟,它能编译现在计算机界主流的高级编程语言,前端支持多种编程语言,如C、Fortran、Pascal、Objective-C、Java、Ada、Go等,同样支持这些语言的标准库libstdc++、 libgcj等。

GCC编译的前端将不同的高级编程语言经过词法分析、语法分析转化为与前端语言无关的统一的中间表示。有了与前端无关的中间表示,GCC的前端将不同的高级编程语言转换成这种中间表示,这就是GCC处理器支持多种编程语言的根本原因。


后端

编译器分为前端和后端,在GCC的组成结构中,后端负责将RTL表示的中间形式进行优化并最终生成对应平台的汇编代码。GCC后端是在RTL的中间形式上进行的,在RTL上做大量的优化,包括机器有关的优化和机器无关的优化。

RTL是从特定机器平台中抽象出的模型表示的,实际上它是一种抽象出来的机器模型。和所有实际存在的平台一样,这个抽象出来的机器模型也有它自己的“指令系统”。机器模型的“指令系统”在GCC中定义为标准指令模板的一系列指令,这些指令是GCC内部使用的。GCC的后端为不同的平台提供了描述这些指令模板的接口文件,这些指令模板在不同平台上的描述将GCC映射到不同的平台上去,这样就可以把GCC的后端移植到不同的平台上去。通过机器描述支持多种体系结构,机器描述文件给出机器各种参数的宏定义和指令集。这使得GCC移植非常方便,针对目前广泛使用的目标机器的体系结构提供了大部分的支持,后端支持的平台有x86、mips、Alpha、ARM、AVR、IA-64、SPARC、PowerPC等30多种平台。


前端后端结构框架图







  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值