On 5/9/22 13:18, Pedro Alves via Dwarf-Discuss wrote:
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.
DWARF tries to avoid having one piece of information with a clear
description imply or suggest something else, with perhaps different
implications for different people.
It seems to me that other languages (Ada?) have variables which do not
fill the data type, so it would be reasonable for them to have a
DW_AT_bit_size which is different from the data type size, yet not be a
bit field.
As currently described, DW_AT_bit_size only describes the size of the
data, nothing more, and only when that cannot be determined from the
size of the base type. If you want to change the definition to say that
it has an additional meaning (describing a bit field with a certain
size), submit an issue. Alternately, Todd suggested a new flag to
identify a bit field.
--
Michael Eager
_______________________________________________
Dwarf-Discuss mailing list
Dwarf-Discuss@lists.dwarfstd.org
http://lists.dwarfstd.org/listinfo.cgi/dwarf-discuss-dwarfstd.org