
GCC 源码分析
sstower
这个作者很懒,什么都没留下…
展开
-
gcc 源码分析-从一个最简单的程序说起2
接下来作语法分析,其中涉及到的语法规则:1. fndef: typed_declspecs setspecs declarator { if (! start_function ($1, $3)) ... 2. declarator: after_type_declarator| notype_declarator ; 3. notype_declarator:notype_declar...原创 2020-08-19 11:48:07 · 399 阅读 · 0 评论 -
怎样编译gcc源码
2004年4月20日最新版本的GCC编译器3.4.0发布了。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。GCC 3.4.0比以前版本更好地支持了C++标准。本文以在Redhat Linux上安装GCC3.4.0为例,介绍了GCC的安装过程。 安装之前,系统中必须要有cc或者gcc等编译器,并且是可用的,或者用环境变量CC转载 2010-05-25 23:07:00 · 14573 阅读 · 0 评论 -
GCC 源码调试
单独来阅读gcc源码,恐怕没有哪个不头痛的,如果我们把gcc编译成可调试的,然后在gdb下一步一步跟踪,大概要有趣的多,但遗憾的是,gcc 源码的配置项却缺少直接编译成可调试的选项,看来只有动动歪脑子了,这里已 3.4.4 版为例。 把源码解压,在源码所在目录有一个configure 文件,用写字板打开,查找CFLAGS字窜,你会发现有这样的内容: CFLAGS=${CFLAGS原创 2011-01-21 23:29:00 · 3503 阅读 · 2 评论 -
gcc 源码分析-序
市面上讲述编译原理的书籍比较多,但基本上都是以理论为主,即使谈到适用的技术,也都是泛泛而谈,我这里就开一个头,来探讨一下编译器的具体实现方式,我以大名鼎鼎的gcc编译器为基础,聊一聊它的具体实现。gcc编译器版本比较多,最新的大概已到了4.7, 如果以最新的来分析,第一个问题,代码太多,看起来比较痛苦;第二,中间可能要夹杂太多的边缘东西,为了降低难度,我将以gcc1.40版为主。要分析gc原创 2013-03-16 23:42:51 · 2162 阅读 · 1 评论 -
gcc 源码分析1
本分析将基于gcc 1.40 源代码预处理部分不做分析,我们将直接基于cc1源代码部分,该部分是输入c源代码,产生汇编:该代码的入口部分在topleve.c中,main是gcc初始化部分:在main里面,将依次执行如下的初始化: init_tree(); init_lex(); init_rtl(); init_emit_once (); init_dec原创 2013-03-15 18:42:58 · 2071 阅读 · 0 评论 -
gcc 源码分析-前端篇1
前年写了 gcc源码分析,感觉写的不好,如果没有源代码读起来很痛苦,基本上是读天书,这一次改了一种写法,用另一种思路来写,希望这一次能好一点:1.基本数据结构编译器前端主要的任务就是把输入的源码转换成一棵语法树,在gcc中,树的每一个节点用一个结构体来表示,下面就来谈一谈gcc中用到的这个结构体: union tree_node { s原创 2015-08-07 15:10:10 · 2139 阅读 · 2 评论 -
gcc 源码分析-从一个最简单的程序说起1
本节将以一个简单的函数来分析gcc 的执行过程,这个函数没有函数体,但是有传入的参数。例子如下:int main(int a,int b) { }其中涉及到的语法规则:1. fndef: typed_declspecs setspecs declarator { if (!原创 2020-08-04 12:12:20 · 1182 阅读 · 0 评论 -
gcc 源码分析-前端篇2
2. 对ID及保留字的处理 在c语言中,系统预留了很多关键字,也被称为保留字,比如表示数据类型的int,short,char,控制分支执行的if,then等。 任何关键字,本质上也是一个ID,比如它也有长度,对int就是3,对short就是5,也有内容,比如int,short。但比起一般id, 它还有其他一些属性,比如表示数据类型的int,它有一个数值范围,它的值范围是-x原创 2015-08-11 11:04:18 · 1454 阅读 · 1 评论 -
gcc 源码分析-前端篇3
3. GCC如何函表示一个函数 对c语言来说,函数是其核心,所有的东西都在围绕着函数在转。对于一个函数来说,它主要的一些特性如下: 1. 有一个返回值,在这里我们没有把返回值的函数认为它的返回值是void; 2. 它有传入的参数,而这个参数个数不确定,可多可少,也可以没有; 3. 它有一个函数名称,这个名称具有唯一性,也就是同一个工程,不能有名称一样的多个函数; 4.原创 2015-08-21 11:32:03 · 1344 阅读 · 1 评论