1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00

llvm-dwarfdump: Don't try to parse a debug_loclist contribution if this CU has no DW_AT_loclists_base

llvm-dwarfdump was trying to parse debug_loclists even in the absence of
a loclists_base if there was a loclists section at all.
This commit is contained in:
David Blaikie 2020-04-14 15:17:24 -07:00
parent 471a88e46f
commit db9beef334
2 changed files with 36 additions and 5 deletions

View File

@ -527,14 +527,20 @@ Error DWARFUnit::tryExtractDIEsIfNeeded(bool CUDieOnly) {
// In a split dwarf unit, there is no DW_AT_loclists_base attribute.
// Setting LocSectionBase to point past the table header.
if (IsDWO)
setLocSection(&Context.getDWARFObj().getLoclistsDWOSection(),
if (IsDWO) {
auto &DWOSection = Context.getDWARFObj().getLoclistsDWOSection();
if (DWOSection.Data.empty())
return Error::success();
setLocSection(&DWOSection,
DWARFListTableHeader::getHeaderSize(Header.getFormat()));
else
} else if (auto X = UnitDie.find(DW_AT_loclists_base)) {
setLocSection(&Context.getDWARFObj().getLoclistsSection(),
toSectionOffset(UnitDie.find(DW_AT_loclists_base), 0));
toSectionOffset(X, 0));
} else {
return Error::success();
}
if (LocSection->Data.size()) {
if (LocSection) {
if (IsDWO)
LoclistTableHeader.emplace(".debug_loclists.dwo", "locations");
else

View File

@ -0,0 +1,25 @@
# RUN: llvm-mc %s -filetype obj -triple x86_64-pc-linux -o %t.o
# RUN: llvm-dwarfdump %t.o | FileCheck %s
# CHECK: 0x00000000: Compile Unit: length = 0x00000009 version = 0x0005 unit_type = DW_UT_compile abbr_offset = 0x0000 addr_size = 0x08 (next unit at 0x0000000d)
# CHECK: 0x0000000c: DW_TAG_compile_unit
.section .debug_abbrev,"",@progbits
.byte 1 # Abbreviation Code
.byte 17 # DW_TAG_compile_unit
.byte 0 # DW_CHILDREN_no
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 0 # EOM(3)
.section .debug_info,"",@progbits
.Lcu_begin0:
.long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
.Ldebug_info_start0:
.short 5 # DWARF version number
.byte 1 # DWARF Unit Type
.byte 8 # Address Size (in bytes)
.long .debug_abbrev # Offset Into Abbrev. Section
.byte 1 # Abbrev [1] 0xc:0x22 DW_TAG_compile_unit
.Ldebug_info_end0:
.section .debug_loclists,"",@progbits
.byte 0