Hi,

(using my subscribed gmail address until my main address, CCed, is approved to 
also join the list.)

On 2022-05-09 16:48, Ron Brender via Dwarf-Discuss wrote:
> It seems to me that the problem here is not so much in the DWARF standard, as 
> in the DWARF that is produced.
> 
> The DWARF representation generally serves to capture all the semantic 
> information needed to properly represent
> the source program. In the example discussed here it appears that GCC does 
> that (by including the bit field information) and
> CLANG does not (by erroneously omitting the bit field information).
> 
> It is probably the case that in most languages char a; and char a:8; are 
> semantically equivalent IN ALL RESPECTS.
> For such languages,the producer/compiler is probably justified (or at least 
> can be forgiven) for omitting the bit field information
> for char a:8. But evidently for "AMDGP-Lang" the two are not the same--while 
> the storage layout may be the same, other
> subtle but critical aspects of the language and its ABI are quite different 
> in the two cases.

Agreed so far.

> 
> One might have a philosophical debate about whether this difference is 
> appropriate or not. But as Lancelot says, the ABI is
> what it is and any change is unlikely nearterm so such a debate is moot. The 
> only issue is whether DWARF is able to
> convey the needed information. I think DWARF is able, if only the 
> producer/compiler would do it properly.
> 

Agreed.

> So my suggestion is to file a bug report with CLANG, requesting they correct 
> their DWARF output to reflect all details needed
> by your language.

An issue here is that DWARF does say this, in (DWARF 5, 5.7.6 Data Member 
Entries, page 119):

 "If the size of a data member is not the same as the size of the type given 
for the
  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 data member, the data member has either a DW_AT_byte_size or a
 ^^^^^^^^^^^
 DW_AT_bit_size attribute whose integer constant value (see Section 2.19 on
 page 55) is the amount of storage needed to hold the value of the data member."

Note the part I underlined.  In Lancelot's case, the size of the data member
IS the same as the size of the type given for the data member.  So Clang could 
well pedantically
claim that they _are_ following the spec.  Shouldn't the spec be clarified here?

This then raises the question of whether a debugger can assume that the 
presence of a DW_AT_bit_size
attribute indicates that the field is a bit field at the C/C++ source level.  
GDB is assuming that
today, as there's really no other way to tell, but I don't think the spec 
explicitly says so.

Pedro Alves
_______________________________________________
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org

Reply via email to