您的位置:首页 > 编程语言

gcc源代码分析,debug_tree()函数的利用

2015-01-04 22:12 330 查看

tree.def 中第0x3d个元素是

DEFTREECODE (CALL_EXPR, "call_expr", "e", 3)

下面是debug_tree()函数的结果,可以看出expand_expr()函数到gen_rtx()函数的调用过程!

expand_expr code = 3d

 <call_expr 840f0

    type <integer_type 824d0 int permanent SI

        size <integer_cst 8254c literal permanent 4

        align 32 size_unit 8 sep_unit 32 symtab 0

        sep <integer_cst 8251c literal permanent -2147483648 precision 32 min <integer_cst 8251c -2147483648>

        max <integer_cst 82534 literal permanent 2147483647

        pointer_to_this <pointer_type 88b4c> chain <integer_type 825bc char>

    volatile

    arg 0 <addr_expr 84090

        type <pointer_type 98f48 type <function_type 956e8>

            permanent unsigned SI size <integer_cst 8254c 4>

            align 32 size_unit 8 sep_unit 32 symtab 0

       

        arg 0 <function_decl 95740 printf type <function_type 956e8>

            external public permanent used QI file /usr/include/stdio.h line 214

            align 1 size_unit 1 offset 0 chain <function_decl 954d8 ungetc>

    arg 1 <tree_list 83270

        value <nop_expr 840d8 type <pointer_type 9117c>

            literal

            arg 0 <nop_expr 840c0 type <pointer_type 88a44>

                literal

                arg 0 <addr_expr 840a8 type <pointer_type 94f58>

                    literal

                    arg 0 <string_cst 84014 type <array_type 94ef4>

                        static literal "Hello, world!

"(nil)

expand_expr code = 71

 <nop_expr 840d8

    type <pointer_type 9117c

        type <integer_type 91130 char readonly permanent QI

            size <integer_cst 82638 literal permanent 1

            align 8 size_unit 8 sep_unit 8 symtab 0

            sep <integer_cst 82608 literal permanent -128 precision 8 min <integer_cst 82608 -128>

            max <integer_cst 82620 literal permanent 127

            pointer_to_this <pointer_type 9117c>

        permanent unsigned SI

        size <integer_cst 8254c literal permanent 4

        align 32 size_unit 8 sep_unit 32 symtab 0

        chain <function_type 912c0>

    literal

    arg 0 <nop_expr 840c0

        type <pointer_type 88a44 type <integer_type 825bc char>

            permanent unsigned SI size <integer_cst 8254c 4>

            align 32 size_unit 8 sep_unit 32 symtab 0

            chain <array_type 88a90>

        literal

        arg 0 <addr_expr 840a8 type <pointer_type 94f58>

            literal

            arg 0 <string_cst 84014 type <array_type 94ef4>

                static literal "Hello, world!

"

expand_expr code = 71

 <nop_expr 840c0

    type <pointer_type 88a44

        type <integer_type 825bc char permanent QI

            size <integer_cst 82638 literal permanent 1

            align 8 size_unit 8 sep_unit 8 symtab 0

            sep <integer_cst 82608 literal permanent -128 precision 8 min <integer_cst 82608 -128>

            max <integer_cst 82620 literal permanent 127

            pointer_to_this <pointer_type 88a44> chain <integer_type 826a8 long int>

        permanent unsigned SI

        size <integer_cst 8254c literal permanent 4

        align 32 size_unit 8 sep_unit 32 symtab 0

        chain <array_type 88a90>

    literal

    arg 0 <addr_expr 840a8

        type <pointer_type 94f58 type <array_type 94ef4>

            unsigned SI size <integer_cst 8254c 4>

            align 32 size_unit 8 sep_unit 32 symtab 0

        literal

        arg 0 <string_cst 84014 type <array_type 94ef4>

            static literal "Hello, world!

"

expand_expr code = 74

 <addr_expr 840a8

    type <pointer_type 94f58

        type <array_type 94ef4 type <integer_type 825bc char>

            BLK

            size <integer_cst 94f40 literal 15

            align 8 size_unit 8 sep_unit 8 symtab 0

            sep <integer_cst 82638 literal permanent 1 domain <integer_type 94ea8>

            pointer_to_this <pointer_type 94f58> chain <pointer_type 94f58>

        unsigned SI

        size <integer_cst 8254c literal permanent 4

        align 32 size_unit 8 sep_unit 32 symtab 0

    literal

    arg 0 <string_cst 84014 type <array_type 94ef4>

        static literal "Hello, world!

"

expand_expr code = 26

 <string_cst 84014

    type <array_type 94ef4

        type <integer_type 825bc char permanent QI

            size <integer_cst 82638 literal permanent 1

            align 8 size_unit 8 sep_unit 8 symtab 0

            sep <integer_cst 82608 literal permanent -128 precision 8 min <integer_cst 82608 -128>

            max <integer_cst 82620 literal permanent 127

            pointer_to_this <pointer_type 88a44> chain <integer_type 826a8 long int>

        BLK

        size <integer_cst 94f40 literal 15

        align 8 size_unit 8 sep_unit 8 symtab 0 sep <integer_cst 82638 1>

        domain <integer_type 94ea8 SI

            size <integer_cst 8254c literal permanent 4

            align 32 size_unit 8 sep_unit 32 symtab 0

            sep <integer_cst 84048 literal 0 precision 32 min <integer_cst 84048 0>

            max <integer_cst 84078 literal 14

        pointer_to_this <pointer_type 94f58> chain <pointer_type 94f58>

    static literal "Hello, world!

"

(symbol_ref:SI ("*LC0"))

(mem:BLK (symbol_ref:SI ("*LC0")))

(pre_dec:SI (reg:SI 7))

(mem:SI (pre_dec:SI (reg:SI 7)))

(set (mem:SI (pre_dec:SI (reg:SI 7)))

   (symbol_ref:SI ("*LC0")))

(insn_list 6 (nil))

(insn_list 2 (insn_list 6 (nil)))

(sequence[ ] )

(reg:SI 0)

(const_int 4)

emit_call_1 funexp symbol_ref

(mem:QI (symbol_ref/v:SI ("printf")))

(call (mem:QI (symbol_ref/v:SI ("printf")))

   (const_int 4))

(set (reg:SI 0)

   (call (mem:QI (symbol_ref/v:SI ("printf")))

       (const_int 4)))

emit_call_insn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gcc 源代码 分析