gcc
文章平均质量分 68
sitelist
这个作者很懒,什么都没留下…
展开
-
扫雷源代码gcc通过
/存放排查出的雷的信息用于显示。//存放布置好的雷的信息。上面两条处理后可以在vs2019里面编译通过。#include <stdlib.h>去掉。scanf改为scanf_s。//坐标位置雷的个数。原创 2024-09-19 23:14:32 · 607 阅读 · 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源代码分析,debug_tree()函数的利用
tree.def 中第0x3d个元素是DEFTREECODE (CALL_EXPR, "call_expr", "e", 3)下面是debug_tree()函数的结果,可以看出expand_expr()函数到gen_rtx()函数的调用过程!expand_expr code = 3d type size align 3原创 2015-01-04 22:12:12 · 1606 阅读 · 0 评论 -
gcc 中-g对应的源代码和gdb有关的flags和变量 write_symbols
flags.h 中有write_symbols的定义/* 1 => write gdb debugging output (using symout.c). 2 => write dbx debugging output (using dbxout.c). 3 => write sdb debugging output (using sdbout.c). */enum原创 2014-12-30 22:28:40 · 1668 阅读 · 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 -g选项产生的.s文件,hello.c对应的,很有参考价值!!!
.file "hello.c"gcc_compiled.:.textLC0: .ascii "Hello, world!\12\0" .align 2.globl _main_main: pushl %ebp movl %esp,%ebp pushl $LC0 call _printf xorl %ea原创 2014-12-30 23:23:35 · 2192 阅读 · 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源代码分析,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源代码分析,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源代码分析的方法【总结】
看gcc-1.40有段时间了,14年左右看了一段时间,15年左右看了一段时间。现在可以说基本上明白了gcc的大部分代码。如果说能快速的明白其中的原理,总结我看代码的方法捷径我列举以下几条。第一,gcc版本低,这是成功的前提,也是一条捷径。第二,分析最基本的hello.c文件,就一条函数调用,但是已经足够。第三,发现了debug_rtx ()函数和debug_tree ()函数。原创 2015-01-09 19:35:38 · 3740 阅读 · 1 评论 -
gcc源代码分析,debug_tree()函数,又一利器啊
gcc源代码分析,debug_rtx()函数,利器啊print-tree.c#include "config.h"#include "tree.h"#include /* Names of tree components. Used for printing out the tree and error messages. */#def原创 2015-01-03 21:41:51 · 1536 阅读 · 0 评论 -
libc.a中FILE结构的分析
stdio.h中有FILE结构的定义 typedef char __stdiobuf_t; /* stdio buffer type */ typedef STDIO_USIZE_T __stdiosize_t; /* unsigned size_t */typedef struct __iobuf { __stdiobuf_t __rptr; / pointe原创 2016-10-08 22:22:15 · 1035 阅读 · 0 评论 -
gcc源代码分析,expand_call ()函数第四部分,emit_call_1 ()函数
本文是为了解释下面这4个rtx是如何产生的,和emit_call_1 ()函数有关。(const_int 4)(mem:QI (symbol_ref/v:SI ("printf")))(call (mem:QI (symbol_ref/v:SI ("printf"))) (const_int 4))(set (reg:SI 0) (call (m原创 2015-01-06 08:48:16 · 1302 阅读 · 0 评论 -
gcc源代码分析,expand_call()函数第三部分
(insn_list 6 (nil))(insn_list 2 (insn_list 6 (nil)))(sequence[ ] )(reg:SI 0)(const_int 4)这次是解释这5条rtx的产生过程 相关的代码片段:/* Mark all register-parms as living through the call原创 2015-01-06 08:13:31 · 1293 阅读 · 0 评论 -
gcc源代码分析,expand_call ()函数分析第五部分,store_one_arg ()函数
本文主要是分析store_one_arg ()函数和expand_expr ()的关系来说明如何处理函数的参数。printf("Hello, world!\n");中的"Hello, world!\n"这个字符串常量的!expand_call () 函数中的相关代码: if (args[i].reg == 0 && TYPE_SIZE (TREE_TYPE原创 2015-01-06 11:07:17 · 1224 阅读 · 0 评论 -
gcc源代码分析gen_push_operand ()函数和emit_move_insn ()函数
如何生成下面红色的3个指令?和gen_push_operand ()函数和emit_move_insn ()函数有关,他们都在expand_call()函数中被调用。具体位置: rtx addr;#ifdef PUSH_ROUNDING if (args_addr == 0) addr = gen_push_operand ();原创 2015-01-05 18:32:01 · 1606 阅读 · 0 评论 -
gcc源代码分析之varasm.c
rtxexpand_expr (exp, target, tmode, modifier) register tree exp; rtx target; enum machine_mode tmode; enum expand_modifier modifier;{..... case STRING_CST:原创 2015-01-05 09:08:22 · 1343 阅读 · 0 评论 -
Gcc源代码分析,rtl.c源代码分析
Gcc源代码分析,insn和rtx的关系下面是gcc -dr hello.c产生的hello.dr文件的一部分(insn 6 4 7 (set (mem:SI (pre_dec:SI (reg:SI 7))) (symbol_ref:SI ("*LC0"))) -1 (nil) (nil))(call_insn 7 6 9 (set (reg:SI原创 2015-01-04 19:04:32 · 1912 阅读 · 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源代码分析,finish_decl ()函数和rest_of_decl_compilation ()函数分析
int printf (const char * , ... ) ; 本文探讨函数声明到tree到rtx的生成过程。c-parse.y文件中有下面的一条规则,会调用start_decl ()函数和finish_decl ()函数。initdcl: declarator maybeasm maybe_attribute '='原创 2015-01-14 20:19:04 · 1259 阅读 · 0 评论 -
gcc源代码分析,finish_decl ()函数和push_parm_decl ()函数分析
parms: parm { push_parm_decl ($1); }/* This is what appears inside the parens in a function declarator. Is value is represented in the format that grokdeclarator expects. */pa原创 2015-01-14 21:56:22 · 1223 阅读 · 0 评论 -
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源代码分析,output_asm_insn()函数
insn call_insn 140i=0 regi=1 memi=2 const_intoutput_asm_insn call %1/* Output of assembler code from a template, and its subroutines. *//* Output text from TEMPLATE to the assembler原创 2014-01-17 13:04:48 · 1649 阅读 · 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源代码分析,recog_memoized()函数
定义在recog.c文件中intrecog_memoized (insn) rtx insn;{ volatile_ok = 1; if (INSN_CODE (insn) INSN_CODE (insn) = recog (PATTERN (insn), insn); return INSN_CODE (insn);}recog(原创 2014-01-14 13:03:22 · 1889 阅读 · 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源代码分析,rtx_alloc函数分析
/* Allocate an rtx of code CODE. The CODE is stored in the rtx; all the rest is initialized to zero. */rtxrtx_alloc (code) RTX_CODE code;{ rtx rt; register int nelts = GET_RTX_L原创 2014-01-13 12:08:16 · 1843 阅读 · 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 评论 -
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_call_value()函数
(call_insn 7 6 9 (set (reg:SI 0) (call (mem:QI (symbol_ref/v:SI ("printf"))) (const_int 4))) -1 (nil) (nil))rtxgen_call_value (operand0, operand1, operand2) r原创 2014-01-12 10:00:33 · 1547 阅读 · 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源代码分析,expand_expr_stmt()函数
stmt: compstmt {} | expr ';' { emit_line_note (input_filename, lineno); /* Do default conversion if safe and possibly important, in case within ({...})原创 2014-01-18 14:34:31 · 1772 阅读 · 0 评论 -
gcc源代码分析,default_conversion ()函数分析
/* Perform default promotions for C data used in expressions. Arrays and functions are converted to pointers; enumeral types or short or char, to int. In addition, manifest constants symbo原创 2015-01-11 15:42:48 · 1394 阅读 · 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源代码分析,get_identifier ()函数分析,printf 产生标识符的过程
if (value == IDENTIFIER) { yylval.ttype = get_identifier (token_buffer); lastiddecl = lookup_name (yylval.ttype); if (lastiddecl != 0 && TREE_CODE (lastiddecl) == TYPE_原创 2015-01-09 11:31:09 · 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 ()函数 和expand_expr_stmt ()函数的开始处加入debug_tree ()函数
对于expand_call函数来说最主要的参数就是exp这个tree树,打印出来之后我们终于看到了printf和Hello,world!expand_call type size align 32 size_unit 8 sep_unit 32 symtab 0 sep max原创 2015-01-08 21:38:15 · 1453 阅读 · 0 评论 -
gcc源代码分析,函数定义和finish_function()函数
fndef: typed_declspecs setspecs declarator { if (! start_function ($1, $3)) YYFAIL; reinit_parse_for_function (); } xdecls { store_parm_decls ()原创 2014-01-18 15:46:41 · 1842 阅读 · 0 评论 -
Expr.c:文件中的emit_call_insn()函数调用了gen_call()函数
genoutput由i386.md生成Insn-output.crtx (*const insn_gen_function[]) () = { gen_tstsi, gen_tsthi, gen_tstqi, gen_tstsf, gen_tstdf, gen_cmpsi, gen_cmphi, ge原创 2014-01-11 19:34:20 · 1314 阅读 · 0 评论