[Dwarf-Discuss] How do we get the value of type attribute from dwarf info programatically

Jim Blandy jimb at red-bean.com
Tue Apr 8 09:39:48 PDT 2008

On Tue, Apr 8, 2008 at 5:38 AM, ashim saikia <ar.saikia at yahoo.com> wrote:
> Now suppose I have dwarf information for array as follows:-
>  <2><1a1>: Abbrev Number: 11 (DW_TAG_variable)
>   <1a2>     DW_AT_name        : ary
>   <1a6>     DW_AT_decl_file   : 1
>   <1a7>     DW_AT_decl_line   : 18
>   <1a8>     DW_AT_type        : <1e2>
>   <1ac>     DW_AT_location    : 3 byte block: 91 98 7f  (DW_OP_fbreg: -104)
>  <1><1e2>: Abbrev Number: 7 (DW_TAG_array_type)
>   <1e3>     DW_AT_sibling     : <1f2>
>   <1e7>     DW_AT_type        : <bb>
>  <2><1eb>: Abbrev Number: 8 (DW_TAG_subrange_type)
>   <1ec>     DW_AT_type        : <f9>
>   <1f0>     DW_AT_upper_bound : 19.
> Now I can conclude the following from the above given dwarf info:-
> 1. ary is a variable of type <1e2> and at location -104 off the frame base
> register.
> 2. Type <1e2> is an array with an element type of <bb>
> 3. Has one dimension with the implied lower bound of 0 and the declared
> upper bound of 19.
> Now, I am trying to write a program that will give me these information into
> a file .Everything goes fine until I encounter the DW_AT_type attribute.
> DW_AT_type attribute gives me the value <1e2>, and I get the die <1e2>.
> Again I have to read the die <1e2>. I do so,... again I get a DW_AT_type
> attribute again a die <bb>(... doing recursion). Now bb gives me the base
> type... (ok fine). Now what about the DW_TAG_subrange type, the
> DW_AT_upper_bound is of my interest. Because I m doing recursion, I end up
> with the die given by <bb>. Now If I check out this die, for "having a child
> die", obviously it doesnot have one. But the die <1e2> which defines array
> type has a child,... How do I keep track of that?

When you look at the DW_TAG_subrange_type, why do you end up at <bb>
again?  The DW_AT_type attribute of a DW_TAG_subrange_type for an
array gives the type used to index the array --- in your example, the
type at <f9>.  I don't see why the type of the elements of the array
would get involved here at all.

More information about the Dwarf-Discuss mailing list