This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
Re: dwarf2 class handling patch
- To: Jason Merrill <jason at cygnus dot com>
- Subject: Re: dwarf2 class handling patch
- From: Andrew Cagney <ac131313 at cygnus dot com>
- Date: Sat, 12 Feb 2000 17:08:24 +1100
- CC: gdb-patches at sourceware dot cygnus dot com
- Organization: Cygnus Solutions
- References: <199911240949.BAA18700@yorick.cygnus.com> <u9ln5uhh9t.fsf@yorick.cygnus.com>
Jason Merrill wrote:
>
> Ping? Without this patch, gdb gets things wrong with the current gcc.
Thanks.
Andrew
>
> >>>>> Jason Merrill <jason@cygnus.com> writes:
>
> > The dwarf2 spec says that an incomplete type will have AT_declaration set.
> > Some changes I'm making to gcc will produce class DIEs with children that
> > should still be considered incomplete.
>
> > 1999-11-24 Jason Merrill <jason@casey.cygnus.com>
>
> > * dwarf2read.c (die_is_declaration): New fn.
> > (read_structure_scope): Use it.
>
> > Index: dwarf2read.c
> > ===================================================================
> > RCS file: /cvs/cvsfiles/devo/gdb/dwarf2read.c,v
> > retrieving revision 2.33
> > diff -c -p -r2.33 dwarf2read.c
> > *** dwarf2read.c 1999/10/11 21:17:22 2.33
> > --- dwarf2read.c 1999/11/24 09:38:16
> > *************** static void set_cu_language PARAMS ((uns
> > *** 621,626 ****
> > --- 621,628 ----
> > static struct attribute *dwarf_attr PARAMS ((struct die_info *,
> > unsigned int));
>
> > + static int die_is_declaration PARAMS ((struct die_info *));
> > +
> > static void dwarf_decode_lines PARAMS ((unsigned int, char *, bfd *));
>
> > static void dwarf2_start_subfile PARAMS ((char *, char *));
> > *************** read_structure_scope (die, objfile)
> > *** 2202,2208 ****
> > type within the structure itself. */
> > die->type = type;
>
> > ! if (die->has_children)
> > {
> > struct field_info fi;
> > struct die_info *child_die;
> > --- 2204,2210 ----
> > type within the structure itself. */
> > die->type = type;
>
> > ! if (die->has_children && ! die_is_declaration (die))
> > {
> > struct field_info fi;
> > struct die_info *child_die;
> > *************** dwarf_attr (die, name)
> > *** 3700,3705 ****
> > --- 3702,3715 ----
> > return NULL;
> > }
>
> > + static int
> > + die_is_declaration (die)
> > + struct die_info *die;
> > + {
> > + return (dwarf_attr (die, DW_AT_declaration)
> > + && ! dwarf_attr (die, DW_AT_specification));
> > + }
> > +
> > /* Decode the line number information for the compilation unit whose
> > line number info is at OFFSET in the .debug_line section.
> > The compilation directory of the file is passed in COMP_DIR. */