[Dwarf-Discuss] Regarding concrete inlined and out-of-line inlined instances

Cary Coutant ccoutant@gmail.com
Wed Jun 11 21:21:18 GMT 2014


> In the concrete inlined instance of 'ext2_lookup', its DW_AT_entry_pc
> value (0xc0000000001b49d0) is overlapping with the address range i.e.
> DW_AT_low_pc (0xc0000000001b4980) and DW_AT_high_pc
> (0xc0000000001b4a60) of the out-of-line instance root entry. Is this
> overlapping legitimate and how?

Is this a recursive inlined call? The DW_TAG_subprogram DIE at
<10397ce> represents an out-of-line copy of ext2_lookup. The
DW_TAG_inlined_subroutine DIE at <1039820> represents an inlined copy
of the same subprogram, inlined into the out-of-line copy. It makes
sense that the entry PC for an inlined subroutine would be within the
PC range of the calling subprogram. If you look at the range table
entry at <0x14a0c0>, you will be able to see the ranges of PCs within
the top-level subprogram that actually belong to the inlined copy.

It appears that the subprogram is defined at line 58 in the source
file, and the inlined call also occurs at line 58, so something looks
fishy. What does the source code look like?

-cary

>  <1><1038302>: Abbrev Number: 51 (DW_TAG_subprogram)
>     <1038303>   DW_AT_name        : (indirect string, offset:
> 0x7a615): ext2_lookup
>     <1038307>   DW_AT_decl_file   : 1
>     <1038308>   DW_AT_decl_line   : 58
>     <1038309>   DW_AT_prototyped  : 1
>     <103830a>   DW_AT_type        : <0x10330af>
>     <103830e>   DW_AT_inline      : 1   (inlined)
>     <103830f>   DW_AT_sibling     : <0x1038359>
>  <2><1038313>: Abbrev Number: 52 (DW_TAG_formal_parameter)
>     <1038314>   DW_AT_name        : dir
>     <1038318>   DW_AT_decl_file   : 1
>     <1038319>   DW_AT_decl_line   : 58
>     <103831a>   DW_AT_type        : <0x103331d>
>  <2><103831e>: Abbrev Number: 56 (DW_TAG_formal_parameter)
>     <103831f>   DW_AT_name        : (indirect string, offset: 0x4fb14): dentry
>     <1038323>   DW_AT_decl_file   : 1
>     <1038324>   DW_AT_decl_line   : 58
>     <1038325>   DW_AT_type        : <0x10330af>
>  <2><1038329>: Abbrev Number: 56 (DW_TAG_formal_parameter)
>     <103832a>   DW_AT_name        : (indirect string, offset: 0x1a72d5): flags
>     <103832e>   DW_AT_decl_file   : 1
>     <103832f>   DW_AT_decl_line   : 58
>     <1038330>   DW_AT_type        : <0x1030083>
>  <2><1038334>: Abbrev Number: 61 (DW_TAG_variable)
>     <1038335>   DW_AT_name        : (indirect string, offset: 0x7a533): inode
>     <1038339>   DW_AT_decl_file   : 1
>     <103833a>   DW_AT_decl_line   : 60
>     <103833b>   DW_AT_type        : <0x103331d>
>  <2><103833f>: Abbrev Number: 57 (DW_TAG_variable)
>     <1038340>   DW_AT_name        : ino
>     <1038344>   DW_AT_decl_file   : 1
>     <1038345>   DW_AT_decl_line   : 61
>     <1038346>   DW_AT_type        : <0x1030243>
>  <2><103834a>: Abbrev Number: 62 (DW_TAG_variable)
>     <103834b>   DW_AT_name        : (indirect string, offset: 0xdd81): __func__
>     <103834f>   DW_AT_type        : <0x1038369>
>     <1038353>   DW_AT_artificial  : 1
>     <1038354>   DW_AT_const_value : (indirect string, offset:
> 0x7a615): ext2_lookup
>  <1><1038359>: Abbrev Number: 8 (DW_TAG_array_type)
>     <103835a>   DW_AT_type        : <0x1030168>
>     <103835e>   DW_AT_sibling     : <0x1038369>
>  <2><1038362>: Abbrev Number: 9 (DW_TAG_subrange_type)
>     <1038363>   DW_AT_type        : <0x1030129>
>     <1038367>   DW_AT_upper_bound : 11
>  <1><1038369>: Abbrev Number: 11 (DW_TAG_const_type)
>     <103836a>   DW_AT_type        : <0x1038359>
> ..............................
> ...
> ................................. (some intermediate DIE entries)
> .................................
>  <1><10397ce>: Abbrev Number: 92 (DW_TAG_subprogram)
>     <10397cf>   DW_AT_abstract_origin: <0x1038302>
>     <10397d3>   DW_AT_low_pc      : 0xc0000000001b4980
>     <10397db>   DW_AT_high_pc     : 0xc0000000001b4a60
>     <10397e3>   DW_AT_frame_base  : 0x53243a    (location list)
>     <10397e7>   DW_AT_GNU_all_call_sites: 1
>     <10397e8>   DW_AT_sibling     : <0x10398eb>
>  <2><10397ec>: Abbrev Number: 70 (DW_TAG_formal_parameter)
>     <10397ed>   DW_AT_abstract_origin: <0x1038313>
>     <10397f1>   DW_AT_location    : 0x5324c5    (location list)
>  <2><10397f5>: Abbrev Number: 70 (DW_TAG_formal_parameter)
>     <10397f6>   DW_AT_abstract_origin: <0x103831e>
>     <10397fa>   DW_AT_location    : 0x53254d    (location list)
>  <2><10397fe>: Abbrev Number: 70 (DW_TAG_formal_parameter)
>     <10397ff>   DW_AT_abstract_origin: <0x1038329>
>     <1039803>   DW_AT_location    : 0x5325e8    (location list)
>  <2><1039807>: Abbrev Number: 93 (DW_TAG_variable)
>     <1039808>   DW_AT_abstract_origin: <0x1038334>
>  <2><103980c>: Abbrev Number: 93 (DW_TAG_variable)
>     <103980d>   DW_AT_abstract_origin: <0x103833f>
>  <2><1039811>: Abbrev Number: 94 (DW_TAG_variable)
>     <1039812>   DW_AT_abstract_origin: <0x103834a>
>     <1039816>   DW_AT_location    : 9 byte block: 3 c0 0 0 0 0 79 3e
> a0         (DW_OP_addr: c000000000793ea0)
> <2><1039820>: Abbrev Number: 95 (DW_TAG_inlined_subroutine)
>     <1039821>   DW_AT_abstract_origin: <0x1038302>
>     <1039825>   DW_AT_entry_pc    : 0xc0000000001b49d0
>     <103982d>   DW_AT_ranges      : 0x14a0c0
>     <1039831>   DW_AT_call_file   : 1
>     <1039832>   DW_AT_call_line   : 58
>  <3><1039833>: Abbrev Number: 96 (DW_TAG_formal_parameter)
>     <1039834>   DW_AT_abstract_origin: <0x103831e>
>  <3><1039838>: Abbrev Number: 70 (DW_TAG_formal_parameter)
>     <1039839>   DW_AT_abstract_origin: <0x1038313>
>     <103983d>   DW_AT_location    : 0x53264a    (location list)
>  <3><1039841>: Abbrev Number: 86 (DW_TAG_lexical_block)
>     <1039842>   DW_AT_ranges      : 0x14a0f0
>  <4><1039846>: Abbrev Number: 87 (DW_TAG_variable)
>     <1039847>   DW_AT_abstract_origin: <0x1038334>
>     <103984b>   DW_AT_location    : 0x532696    (location list)
>  <4><103984f>: Abbrev Number: 87 (DW_TAG_variable)
>     <1039850>   DW_AT_abstract_origin: <0x103833f>
>     <1039854>   DW_AT_location    : 0x5326f4    (location list)
>  <4><1039858>: Abbrev Number: 96 (DW_TAG_formal_parameter)
>     <1039859>   DW_AT_abstract_origin: <0x1038329>
>  <4><103985d>: Abbrev Number: 94 (DW_TAG_variable)
>     <103985e>   DW_AT_abstract_origin: <0x103834a>
>     <1039862>   DW_AT_location    : 9 byte block: 3 c0 0 0 0 0 79 3e
> a0         (DW_OP_addr: c000000000793ea0)
>
> Thank you,
> Venkata Ramanaiah N
> _______________________________________________
> Dwarf-Discuss mailing list
> Dwarf-Discuss at lists.dwarfstd.org
> http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org



More information about the Dwarf-discuss mailing list