gcc源代码分析
gcc源代码分析,以hello.c为参考对象。
sitelist
这个作者很懒,什么都没留下…
展开
-
gcc源代码分析,get_parm_info ()函数分析
/* Return a tree_list node with info on a parameter list just parsed. The TREE_PURPOSE is a chain of decls of those parms. The TREE_VALUE is a list of structure, union and enum tags defined.原创 2015-01-15 13:33:02 · 1668 阅读 · 0 评论 -
gcc源代码分析,grokdeclarator()函数分析
grokdeclarator部分代码: if (initialized) error ("parameter `%s' is initialized", name); decl = build_decl (PARM_DECL, declarator, type);调试结果:build_decl type原创 2015-01-15 18:42:51 · 1722 阅读 · 0 评论 -
gcc源代码分析,grokdeclarator()函数分析 ,第二部分
函数声明的类型tree是如何生成的?grokdeclarator()函数的第二个参数为: value global 824d0* int> permanent VOID file (null) line 0 align 1 size_unit 1 offset 0原创 2015-01-16 22:36:51 · 1318 阅读 · 0 评论 -
gcc源代码分析,函数声明的类型<tree_list 95608产生的过程
int printf (const char * , ... ) ;typed_declspecs: typespec reserved_declspecs { $$ = tree_cons (NULL_TREE, $1, $2); }printf value原创 2015-01-17 12:05:59 · 1108 阅读 · 0 评论 -
gcc源代码分析,grokparms ()函数分析
arg_types = grokparms (TREE_OPERAND (declarator, 1), funcdef_flag /* Say it's a definition only for the CALL_EXPR closest原创 2015-01-17 15:28:43 · 1406 阅读 · 1 评论 -
gcc源代码分析,actualparameterlist ()函数分析
/* Build a function call to function FUNCTION with parameters PARAMS. PARAMS is a list--a chain of TREE_LIST nodes--in which the TREE_VALUE of each node is a parameter-expression. FUNCTION原创 2015-01-11 13:05:14 · 1209 阅读 · 0 评论 -
gcc源代码分析,build_pointer_type ()函数分析
function = build (ADDR_EXPR, build_pointer_type (TREE_TYPE (function)), function);继续分析上篇文章的这句。/* Constructors for pointer, array and function types. (RECORD_TYPE, UNION_TY原创 2015-01-11 09:23:06 · 1318 阅读 · 0 评论 -
gcc源代码分析,build_function_call ()函数分析
在文件c-typeck.c中c-parse.tab.y文件中这个地方调用!primary: | primary '(' exprlist ')' %prec '.' { $$ = build_function_call ($1, $3); }/* Build a function call to function FUNCTION w原创 2015-01-09 19:02:55 · 1921 阅读 · 0 评论 -
gcc源代码分析,print_node()函数分析第一部分
type type size align 8 size_unit 8 sep_unit 8 symtab 0 sep max pointer_to_this permanent unsigned SI原创 2015-01-08 18:02:22 · 1408 阅读 · 0 评论 -
gcc源代码分析,expand_call()函数和printf("Hello, world!\n");的关系
expand_call()函数在expr.c文件中。下面是expand_call()函数的主要调试结果,记录之。主要是加入了debug_tree()函数和debug_rtx()函数。debug_tree()函数加入到了expand_expr()函数的开始。debug_rtx()函数加入到了gen_rtx()函数的结束处。emit_call_1()函数是何时调用的也能看出。e原创 2015-01-05 10:58:47 · 1566 阅读 · 0 评论 -
gcc源代码分析,语法树
expand_expr code = 3d call_expr 840f0 type size align 32 size_unit 8 sep_unit 32 symtab 0 sep max pointer_to_this chain volatile arg原创 2014-01-17 22:45:41 · 3357 阅读 · 0 评论 -
gcc源代码分析,insn_extract()函数和recog_operand[]数组的关系
Insn-recog.c:23rtx *recog_operand_loc[MAX_RECOG_OPERANDS];VOIDextract_140 (insn) rtx insn;{ recog_operand[0] = *(recog_operand_loc[0] = &XEXP (insn, 0)); recog_operand[1]原创 2014-01-17 12:08:23 · 9181 阅读 · 0 评论 -
gcc源代码分析,end_final()函数把insn转化成汇编代码
end_final()函数在toplev.c里面被调用。定义在end_final.c文件里。end_final (main_input_filename);final()函数:voidfinal (first, file, write_symbols, optimize, prescan) rtx first; FILE *file;原创 2014-01-13 18:24:26 · 2009 阅读 · 0 评论 -
gcc源代码分析,debug_rtx()函数,利器啊
修改方法:emit-rtl.c文件里面的gen_rtx()函数里面进行修改。 va_end (p);debug_rtx(rt_val); return rt_val; /* Return the new RTX... */}...(symbol_ref:SI ("main"))(mem:QI (原创 2014-01-12 19:47:05 · 1887 阅读 · 0 评论 -
gcc源代码分析 gen_rtx()函数
emit_jump_insn()定义在emit-rtl.c文件中被Expmed.c Expr.c Insn-emit.c Stmt.c中调用/* Make an insn of code JUMP_INSN with pattern PATTERN and add it to the end of the doubly-linked list. */rtxem原创 2014-01-11 18:24:00 · 1986 阅读 · 0 评论 -
Gcc源代码分析,insn和rtx的关系
(call_insn 7 6 9 (set (reg:SI 0) (call (mem:QI (symbol_ref/v:SI ("printf"))) (const_int 4))) -1 (nil) (nil))(insn 9 7 10 (set (reg/i:SI 0) (const_int 0)) -1 (nil)原创 2014-01-13 11:06:57 · 4948 阅读 · 1 评论