[RFA/dwarf-2] Fix for the null record problem

Joel Brobecker brobecker@gnat.com
Thu Apr 1 01:18:00 GMT 2004


Hello Elena,

> Let's try the Vulcan mind meld: "We need a gdb.ada directory. We need
> a gdb.ada directory. We need a gdb.ada directory. We need a gdb.ada
> directory." :-) 

OK, now done| :-)

> Seriously, I'd like to see a testcase that FAIL->PASS with this patch.
> Can somebody get a C++ testcase, at least?

With this patch, we see a test in gdb.ada/null_record.exp FAIL->PASS.

> the patch looks sensible, but I would like to see the testcase go in
> at the same time, or we'll forget.

I've checked that the patch below is still applicable. Would you mind
reviewing it and let me know if it's ok to check it in?

Thank you,
-- 
Joel

>  > I have found the source of the problem, and suggest the attached patch.
>  > The problem was that GDB was mistakenly deducing that the empry record
>  > was only a stub because of the lack of fields, and was therefore tagging
>  > it with TYPE_FLAG_STUB. This is not correct. Instead, the right
>  > approach, I believe, is to check for the DW_AT_declaration attribute.
>  > 
>  > 2004-02-19  J. Brobecker  <brobecker@gnat.com>
>  > 
>  >         * dwarf2read.c (read_structure_scope): Identify stub types
>  >         using the DW_AT_declaration attribute.
>  > 
>  > tested on x86-linux. No regression. Fixes the testcase that was
>  > proposed by Andrew (even though it is not legal C) and the Ada
>  > case.
>  > 
>  > OK to apply?
>  > 
>  > Thanks,
>  > -- 
>  > Joel
>  > 
>  > Index: dwarf2read.c
>  > ===================================================================
>  > RCS file: /cvs/src/src/gdb/dwarf2read.c,v
>  > retrieving revision 1.130
>  > diff -u -p -r1.130 dwarf2read.c
>  > --- dwarf2read.c	28 Jan 2004 18:43:06 -0000	1.130
>  > +++ dwarf2read.c	19 Feb 2004 13:58:42 -0000
>  > @@ -3077,6 +3077,9 @@ read_structure_scope (struct die_info *d
>  >        TYPE_LENGTH (type) = 0;
>  >      }
>  >  
>  > +  if (dwarf2_attr (die, DW_AT_declaration, cu) != NULL)
>  > +    TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
>  > +
>  >    /* We need to add the type field to the die immediately so we don't
>  >       infinitely recurse when dealing with pointers to the structure
>  >       type within the structure itself. */
>  > @@ -3213,11 +3216,6 @@ read_structure_scope (struct die_info *d
>  >        new_symbol (die, type, cu);
>  >  
>  >        do_cleanups (back_to);
>  > -    }
>  > -  else
>  > -    {
>  > -      /* No children, must be stub. */
>  > -      TYPE_FLAGS (type) |= TYPE_FLAG_STUB;
>  >      }
>  >  
>  >    processing_current_prefix = previous_prefix;



More information about the Gdb-patches mailing list