This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Mangled Typedef names in GNU 4.1.2 DWARF data?


The use of anonymous structure does seem to be the problem.  I also missed the fact that the TYPE_DEF DIE is missing from the DWARF data.  If the TYPE
_DEF DIE was in the DWARF data, I could still parse the anonymous type.

Do you think the TYPE_DEF DIE should be part of the output?  Is this a GNU 
bug or just an unsupported feature?

Thanks.


--- On Fri, 1/22/10, Michael Eager <eager@eagercon.com> wrote:

> From: Michael Eager <eager@eagercon.com>
> Subject: Re: Mangled Typedef names in GNU 4.1.2 DWARF data?
> To: "Ron Louzon" <louzonr@yahoo.com>
> Cc: gcc@gcc.gnu.org
> Date: Friday, January 22, 2010, 4:39 PM
> Ron Louzon wrote:
> > The GNU 4.1.2 C++ compiler is mangling typedef names
> to the point that they are not retrievable from the DWARF
> data.
> > 
> > For example, the type BASE_UNION is defined as
> > 
> > typedef union
> > {
> >? ? char ch;
> >? ? int iVal;
> >? ? long IVal;
> > } BASE_UNION;
> 
> This is an anonymous union which is typedef'ed to
> BASE_UNION.
> 
> > 
> > The GNU 4.1.2 compiler generates the following DWARF
> data for this type
> > 
> > <1><1279>: Abbrev Number: 35
> (DW_TAG_union_type)
> >???<127a>?
> ???DW_AT_sibling? ???:
> <12a8>??? 
> >???<127e>?
> ???DW_AT_name? ? ? ? :
> $_4??? 
> >???<1282>?
> ???DW_AT_byte_size???:
> 4??? 
> >???<1283>?
> ???DW_AT_decl_file???:
> 35??? 
> >???<1284>?
> ???DW_AT_decl_line???:
> 29??? 
> 
> This doesn't look correct.? The union has no name, so
> DW_AT_name should
> not be present or should be null.? From the DWARF v.3
> spec:
> 
> ? 2.15 Identifier Names
> 
> ? Any debugging information entry representing a
> program entity that has been
> ? given a name may have a DW_AT_name attribute, whose
> value is a string
> ? representing the name as it appears in the source
> program. A debugging
> ? information entry containing no name attribute, or
> containing a name attribute
> ? whose value consists of a name containing a single
> null byte, represents a
> ? program entity for which no name was given in the
> source.
> 
> >? <2><1285>: Abbrev Number: 36
> (DW_TAG_member)
> >???<1286>?
> ???DW_AT_name? ? ? ? :
> ch??? 
> >???<1289>?
> ???DW_AT_decl_file???:
> 35??? 
> >???<128a>?
> ???DW_AT_decl_line???:
> 30??? 
> >???<128b>?
> ???DW_AT_type? ? ? ? :
> <c0d>??? 
> >? <2><128f>: Abbrev Number: 36
> (DW_TAG_member)
> >???<1290>?
> ???DW_AT_name? ? ? ? :
> iVal??? 
> >???<1295>?
> ???DW_AT_decl_file???:
> 35??? 
> >???<1296>?
> ???DW_AT_decl_line???:
> 31??? 
> >???<1297>?
> ???DW_AT_type? ? ? ? :
> <b7f>??? 
> >? <2><129b>: Abbrev Number: 36
> (DW_TAG_member)
> >???<129c>?
> ???DW_AT_name? ? ? ? :
> IVal??? 
> >???<12a1>?
> ???DW_AT_decl_file???:
> 35??? 
> >???<12a2>?
> ???DW_AT_decl_line???:
> 32??? 
> >???<12a3>?
> ???DW_AT_type? ? ? ? :
> <b86>??? 
> > 
> > Notice that the union name has been changed to "$_4"
> in DIE <1279>.
> > 
> > The GNU 3.4.4 compiler generates the following DWARF
> data from the same source code:
> > 
> >? <1><11d0>: Abbrev Number: 27
> (DW_TAG_union_type)
> >? ? ? DW_AT_sibling?
> ???: <123f>??? 
> >? ? ? DW_AT_name? ? ?
> ? : (indirect string, offset: 0x6e):
> BASE_UNION??? 
> >? ? ? DW_AT_byte_size???:
> 4??? 
> >? ? ? DW_AT_decl_file???:
> 3??? 
> >? ? ? DW_AT_decl_line???:
> 29??? 
> 
> This is similarly incorrect.? The union has no name.
> 
> 
> > Why is GNU 4.1.2 generating the mangled type name and
> how do I correct this to generate the real type name?
> 
> A better question might by why there is no DW_TAG_typedef
> DIE which looks like
> 
> ???DW_TAG_typedef
> ?
> ???DW_AT_name:???BASE_UNION
> ?
> ???DW_AT_type:???<1279>
> 
> BTW gcc-4.3.2 generates
> 
> ? DW_AT_name: <anonymous union>
> 
> which is also incorrect.
> 
> 
> 
> -- Michael Eager?????eager@eagercon.com
> 1960 Park Blvd., Palo Alto, CA 94306? 650-325-8077
> 




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]