I am using the LLVM compiler to generate DWARF version 2 (passing -gdwarf-2
flag to the compiler).
In the documentation (see DWARF 2 standard, section 3.1 Compilation Unit
Entries <http://www.dwarfstd.org/doc/dwarf-2.0.0.pdf> ) it says:
The presence of low and high pc attributes in a compilation unit entry imply
that the code
generated for that compilation unit is contiguous and exists totally within
specified by those two attributes. If that is not the case, no low and high
should be produced.
Starting with DWARF version 3 there is a new representation described in
section 2.17 Code Addresses and Ranges (see DWARF standard version 3
Looking in the Compiler sources I found that it works according to the newer
standard without any checking of the used version:
In the function "DwarfDebug::constructCompileUnit" from the file
// 2.17.1 requires that we use DW_AT_low_pc for a single entry point
// into an entity. We're using 0 (or a NULL label) for this. For
// split dwarf it's in the skeleton CU so omit it here.
NewCU->addLabelAddress(Die, dwarf::DW_AT_low_pc, NULL);
I didn't find any DW_AT_high_pc attribute generation here for the compile
I may didn't understand these attributes that is why the mentioned above
seems to me is a bug (or at least inconsistent to the DWARF 2 standard).
So I will appreciate any comments or links describing in details (with cases
if possible) these low/high_pc attributes' meaning and contiguous/not
contiguous compile unit.