auto Offset = toSectionOffset(getUnitDIE().find(DW_AT_str_offsets_base), 0);
Optional<StrOffsetsContributionDescriptor> Descriptor;
// Attempt to find a DWARF64 contribution 16 bytes before the base.
- if (Offset >= 16)
+ switch (Header.getFormat()) {
+ case dwarf::DwarfFormat::DWARF64:
+ if (Offset < 16)
+ return None;
Descriptor =
parseDWARF64StringOffsetsTableHeader(DA, (uint32_t)Offset - 16);
- // Try to find a DWARF32 contribution 8 bytes before the base.
- if (!Descriptor && Offset >= 8)
+ break;
+ case dwarf::DwarfFormat::DWARF32:
+ if (Offset < 8)
+ return None;
Descriptor = parseDWARF32StringOffsetsTableHeader(DA, (uint32_t)Offset - 8);
+ break;
+ }
return Descriptor ? Descriptor->validateContributionSize(DA) : Descriptor;
}
CU1_5_end:
# DWARF v5 CU header
- .long CU2_5_end-CU2_5_version # Length of Unit
+ .long 0xffffffff
+ .quad CU2_5_end-CU2_5_version # Length of Unit
CU2_5_version:
.short 5 # DWARF version number
.byte 1 # DWARF Unit Type
.byte 8 # Address Size (in bytes)
- .long 0 # Offset Into Abbrev. Section
+ .quad 0 # Offset Into Abbrev. Section
# The compile-unit DIE, which has a DW_AT_producer, DW_AT_name,
# DW_AT_str_offsets and DW_AT_compdir.
.byte 1 # Abbreviation code
.byte 0 # The index of the producer string
.byte 1 # The index of the CU name string
- .long Ldebug_str_offsets_base1-Ldebug_str_offsets
+ .quad Ldebug_str_offsets_base1-Ldebug_str_offsets
.byte 2 # The index of the comp dir string
.byte 0 # NULL
CU2_5_end: