Re: [rfa] add 'parent' field to struct die_info

Elena Zannoni
2003-10-02T15:44:20Z

Jim Blandy writes:
>
> Elena Zannoni <ezannoni@redhat.com> writes:
> > May I suggest to add a comment where the structure is defined that explains
> > in plain English the structure/relations of the dies?
>
> How's this?
>

The thing I am trying to capture is the organization of the
tree/graph, i.e. how the various functions that loop through the
entries following the pointers navigate the structure.

I get often confused by statements like:
if (dies->has_children)
{
child_die = dies->next;

which now is much clearer anyway. I think basically we need something
to capture the definition of next die to be visited. Like below.

Each debugging information entry is defined either to have child
entries or not to have child entries. If an entry is defined not to
have children, the next physically succeeding entry is a sibling. If
an entry is defined to have children, the next physically succeeding
entry is its first child. Additional children are represented as
siblings of the first child. A chain of sibling entries is terminated
by a null entry.

elena

> 2003-10-01 Jim Blandy <jimb@redhat.com>
>
> * dwarf2read.c (struct die_info): Doc fix.
>
> Index: gdb/dwarf2read.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/dwarf2read.c,v
> retrieving revision 1.109
> diff -c -c -F'^(' -r1.109 dwarf2read.c
> *** gdb/dwarf2read.c 30 Sep 2003 22:29:28 -0000 1.109
> --- gdb/dwarf2read.c 2 Oct 2003 04:06:12 -0000
> ***************
> *** 320,328 ****
> --- 320,335 ----
> unsigned int num_attrs; /* Number of attributes */
> struct attribute *attrs; /* An array of attributes */
> struct die_info *next_ref; /* Next die in ref hash table */
> +
> + /* The dies in a compilation unit form an n-ary tree. PARENT
> + points to this die's parent; CHILD points to the first child of
> + this node; and all the children of a given node are chained
> + together via their SIBLING fields, terminated by a die whose
> + tag is zero. */
> struct die_info *child; /* Its first child, if any. */
> struct die_info *sibling; /* Its next sibling, if any. */
> struct die_info *parent; /* Its parent, if any. */
> +
> struct type *type; /* Cached type information */
> };
>