diff --git a/llvm/include/llvm/ObjectYAML/DWARFYAML.h b/llvm/include/llvm/ObjectYAML/DWARFYAML.h --- a/llvm/include/llvm/ObjectYAML/DWARFYAML.h +++ b/llvm/include/llvm/ObjectYAML/DWARFYAML.h @@ -215,7 +215,7 @@ Optional> DebugStrOffsets; Optional> DebugAranges; std::vector DebugRanges; - std::vector DebugAddr; + Optional> DebugAddr; Optional PubNames; Optional PubTypes; diff --git a/llvm/lib/ObjectYAML/DWARFEmitter.cpp b/llvm/lib/ObjectYAML/DWARFEmitter.cpp --- a/llvm/lib/ObjectYAML/DWARFEmitter.cpp +++ b/llvm/lib/ObjectYAML/DWARFEmitter.cpp @@ -594,7 +594,7 @@ } Error DWARFYAML::emitDebugAddr(raw_ostream &OS, const Data &DI) { - for (const AddrTableEntry &TableEntry : DI.DebugAddr) { + for (const AddrTableEntry &TableEntry : *DI.DebugAddr) { uint8_t AddrSize; if (TableEntry.AddrSize) AddrSize = *TableEntry.AddrSize; diff --git a/llvm/lib/ObjectYAML/DWARFYAML.cpp b/llvm/lib/ObjectYAML/DWARFYAML.cpp --- a/llvm/lib/ObjectYAML/DWARFYAML.cpp +++ b/llvm/lib/ObjectYAML/DWARFYAML.cpp @@ -32,7 +32,7 @@ SecNames.insert("debug_ranges"); if (!DebugLines.empty()) SecNames.insert("debug_line"); - if (!DebugAddr.empty()) + if (DebugAddr) SecNames.insert("debug_addr"); if (!DebugAbbrev.empty()) SecNames.insert("debug_abbrev"); diff --git a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-addr.yaml b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-addr.yaml --- a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-addr.yaml +++ b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-addr.yaml @@ -631,3 +631,18 @@ [[SIZENAME]]: 3 Entries: - Address: 0x1234 + +## n) Test that the .debug_addr section header is emitted if the "debug_addr" +## entry is empty. + +# RUN: yaml2obj --docnum=12 %s -o %t12.o +# RUN: llvm-readobj --sections %t12.o | \ +# RUN: FileCheck %s -DSIZE=0 -DADDRALIGN=1 --check-prefix=SHDR + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC +DWARF: + debug_addr: []