gcc源代码分析的方法【总结】

50 篇文章 2 订阅
41 篇文章 3 订阅

看gcc-1.40有段时间了,14年左右看了一段时间,15年左右看了一段时间。

现在可以说基本上明白了gcc的大部分代码。

如果说能快速的明白其中的原理,总结我看代码的方法捷径我列举以下几条。

第一,gcc版本低,这是成功的前提,也是一条捷径。

第二,分析最基本的hello.c文件,就一条函数调用,一个函数声明,

一个函数定义,但是已经足够。

int    printf            (const char *     , ... ) ;

int main()
{
    printf("Hello, world!\n");
    return 0;
}


第三,发现了debug_rtx ()函数和debug_tree ()函数。这两个函数可以说是看懂gcc的唯一的两把钥匙

第四,思路正确,expand_call()如何产生各种rtx的?这个思路借助debug_rtx ()函数。

expand_call ()函数的参数也就是用到的tree如何得到的?

expand_expr_stmt()函数的参数是如何得到的?

形象的可以说tree的形成可以看成套娃模型

最基本的小的套娃最先形成,然后各种操作tree的函数一层层的套上去,

我们debug_tree ()函数的print_node ()函数的作用则是把套娃分开!

大体的思路就是:就是如何从源代码到tree的,上面的可以说如何从tree到rtx的!

关注的是和printf相关的tree如何形成的?和"Hello,world!\n"相关的tree如何形成的?

第五,对语法分析bison的原理很熟悉。

判断一个人是否懂gcc可以分3个层次:

初级的:hello.c到hello.i到hello.s到hello.o到a.out

中级的:gcc前端,从源代码到rtl中间语言,后端从rtl到汇编语言。

高级的:c文件源代码到c-parse.tab.c到tree,tree到rtx,rtx到汇编语言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值