[Dwarf-discuss] Re: Dwarf Comment Submission

Nettleton, Brian brian.nettleton
Sat May 28 22:21:10 GMT 2005


The point I'm about to make is a current implementation issue and not
really a standards issue, but implementations are ultimately important
too.

We currently make the assumption in our debugger that the first tag in a
compilation unit block is the only top-level tag.  For the four compiler
implementations we've seen so far this assumption has held.  This was
done for performance reasons.  None of the compilers generate a
DW_AT_sibling attribute for this single top-level tag which makes sense
since they don't have a sibling.  However this situation makes it
relatively expensive to check whether a sibling exists or not--you have
to traverse the children to determine whether a sibling exists or not.
This is expensive enough and never fruitful so that we eliminated it.
We did relax the assumption a bit, just in case, to handle the case
where the top-level tag did have a DW_AT_sibling (but this situation
hasn't been used yet).

-Brian Nettleton
Wind River Systems

> -----Original Message-----
> From: dwarf-discuss-bounces at base3.freestandards.org 
> [mailto:dwarf-discuss-bounces at base3.freestandards.org] On 
> Behalf Of Chris Quenelle
> Sent: Saturday, May 28, 2005 2:40 PM
> To: dwarf-discuss at base3.freestandards.org
> Subject: Re: [Dwarf-discuss] Re: Dwarf Comment Submission
> 
> 
> I believe the intention is that multiple top-level tags can
> be in one CU-block.   The spec uses the same name for
> CU tags and for the CU block with a header.
> That makes it difficult to even *discuss* what the standard 
> is trying to say.  :-(
> 
> That's the gist of what I was trying to get at with issue: 030814.1
> 
> We are working on the terminology issue, but for now I think 
> you should assume that multiple top-level (CU) tags can be in 
> a CU block.  (If I'm wrong, someone will correct me I'm sure.)
> 
> Also, I don't think that top-level tags are required to be 
> grouped in any way, and I don't think that one object file is 
> restricted to containing only one CU block.  So my reading is 
> that an implementation may choose to split each CU tag into 
> its own CU block, or it can choose to combine them together.
> 
> --chris
> 
> 
> 
> Michael Eager wrote:
> > I think this would be better discussed on the mailing list 
> rather than 
> > as a new issue.
> > 
> > dwarf at eagercon.com wrote:
> > 
> >> Subject: Re: DWARF Issue 041108.1
> >> Submitter: Phil Barnard
> >> Email: phil.barnard at atollic.com
> >> Section: 7.5
> >> Page: 119
> >> Type: Clarification - request for clarification about the standard
> >> Comment: I\'ve read both the v2 and v3 specs but still 
> feel there is 
> >> some need for clarification on the use of padding (for me anyhow), 
> >> specifically in the debug_info section.
> >>
> >> sections 7.5.2 and 7.5.3 seem to tell us that a null 
> debugging info 
> >> entry can be used for padding to suit section alignment 
> requirements.
> >> However a null die is also used to specify the end of a list of 
> >> sibling die\'s, and thus, when forming a tree of die\'s, 
> to pop back 
> >> up a level so that the next die is a sibling of the 
> previous die\'s 
> >> parent.
> >>
> >> Surely this implies that the only place padding can be inserted is 
> >> inbetween compilation units (i.e. regions in the 
> debug_info section 
> >> that are delimited by compilation unit headers) as the 
> header\'s size 
> >> value can be used to determine the start of the next 
> compilation unit 
> >> header.
> >>
> >> If padding were to occur anywhere else, surely a stream of null 
> >> die\'s would result in an incorrectly formed tree of 
> die\'s (and even 
> >> in this case a special rule would have to be added to the dwarf 
> >> parser to ignore a stream of null die\'s once you\'ve 
> popped your way 
> >> back up to the root).
> >>
> >> Also, related to this issue, and the discussion, the standard 
> >> doesn\'t seem to explicitly allow or disallow the 
> effective die tree 
> >> structure within a single compilation unit (defined by a 
> compilation 
> >> unit
> >> header) to contain more than one \'root\' 
> DW_TAG_compile_unit (or for 
> >> that matter any other die as it also doesn\'t explicitly 
> state that 
> >> the DW_TAG_compile unit must be the first/root entry).  Some 
> >> guidance, and examples here would be useful.  Using indentation to 
> >> show parent/child relationships to highlight the issue:
> >>
> >> <cu header #1>  -- a simple compilation unit region 
> >> DW_TAG_compile_unit
> >>    DW_TAG_typedef
> >>    DW_TAG_variable
> >>    DW_TAG_subprogram
> >>       DW_TAG_formal_parameter
> >>       DW_TAG_lexical_block
> >> <cu header #2> -- a rather odd compilation unit region 
> >> DW_TAG_compile_unit
> >>    DW_TAG_typedef
> >>    DW_TAG_variable
> >> DW_TAG_compile_unit
> >>    DW_TAG_subprogram
> >>       DW_TAG_formal_parameter
> >>       DW_TAG_lexical_block
> >> <cu header #3>
> >> ...
> >>
> >> I hope that the above makes sense and appreciate your comment.
> >>
> > 
> > 
> 
> 
> _______________________________________________
> Dwarf-discuss mailing list
> Dwarf-discuss at mail.freestandards.org
> http://mail.freestandards.org/mailman/listinfo/dwarf-discuss
> 




More information about the Dwarf-discuss mailing list