diff options
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h | 4 | ||||
-rw-r--r-- | llvm/test/DebugInfo/Generic/empty.ll | 2 |
3 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index a9aa00cefc1..3a755306669 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -2105,6 +2105,8 @@ void DwarfDebug::emitDebugAbbrevDWO() { void DwarfDebug::emitDebugLineDWO() { assert(useSplitDwarf() && "No split dwarf?"); + if (!HasSplitTypeUnits) + return; Asm->OutStreamer->SwitchSection( Asm->getObjFileLowering().getDwarfLineDWOSection()); SplitTypeUnitFileTable.Emit(*Asm->OutStreamer, MCDwarfLineTableParams()); @@ -2220,6 +2222,7 @@ void DwarfDebug::addDwarfTypeUnitType(DwarfCompileUnit &CU, InfoHolder.computeSizeAndOffsetsForUnit(TU.first.get()); InfoHolder.emitUnit(TU.first.get(), useSplitDwarf()); } + HasSplitTypeUnits = useSplitDwarf(); } CU.addDIETypeSignature(RefDie, Signature); } diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h index 46d644657a8..e1de946f6f4 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -274,6 +274,10 @@ class DwarfDebug : public DebugHandlerBase { /// a monolithic sequence of string offsets. bool UseSegmentedStringOffsetsTable; + /// Whether we have emitted any type units with split DWARF (and therefore + /// need to emit a line table to the .dwo file). + bool HasSplitTypeUnits = false; + /// Separated Dwarf Variables /// In general these will all be for bits that are left in the /// original object file, rather than things that are meant diff --git a/llvm/test/DebugInfo/Generic/empty.ll b/llvm/test/DebugInfo/Generic/empty.ll index aeb4726ecfe..dd1e2752b31 100644 --- a/llvm/test/DebugInfo/Generic/empty.ll +++ b/llvm/test/DebugInfo/Generic/empty.ll @@ -16,7 +16,9 @@ ; CHECK: contents: ; Don't emit DW_AT_addr_base when there are no addresses. +; Also don't emit a split line table when there are no type units. ; FISSION-NOT: DW_AT_GNU_addr_base [DW_FORM_sec_offset] +; FISSION-NOT: .debug_line.dwo contents: !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!5} |