[置顶] gcc源代码分析的方法【总结】

看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到汇编语言。

你可能感兴趣的:(gcc,源代码,分析)