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:
parent
471a88e46f
commit
db9beef334
@ -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
|
||||
|
25
test/tools/llvm-dwarfdump/X86/debug_loclists_nouse.s
Normal file
25
test/tools/llvm-dwarfdump/X86/debug_loclists_nouse.s
Normal 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
|
Loading…
Reference in New Issue
Block a user