diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index d557f403480..326c4482d2e 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1054,11 +1054,17 @@ void DwarfDebug::finalizeModuleInfo() { // FIXME: We should use ranges if we have multiple compile units or // allow reordering of code ala .subsections_via_symbols in mach-o. DwarfCompileUnit *U = SkCU ? SkCU : static_cast(TheU); - if (useCURanges() && TheU->getRanges().size()) + if (useCURanges() && TheU->getRanges().size()) { addSectionLabel(Asm, U, U->getUnitDie(), dwarf::DW_AT_ranges, Asm->GetTempSymbol("cu_ranges", U->getUniqueID()), DwarfDebugRangeSectionSym); - else + + // A DW_AT_low_pc attribute may also be specified in combination with + // DW_AT_ranges to specify the default base address for use in location + // lists (see Section 2.6.2) and range lists (see Section 2.17.3). + U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, + 0); + } else U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, 0); } diff --git a/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll b/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll index 5cb8f613a34..4e14e6099a1 100644 --- a/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll +++ b/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll @@ -9,10 +9,12 @@ ; CHECK: DW_TAG_compile_unit ; CHECK: DW_AT_stmt_list [DW_FORM_sec_offset] (0x00000000) ; CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000000) +; CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) ; CHECK: DW_TAG_compile_unit ; CHECK: DW_AT_stmt_list [DW_FORM_sec_offset] (0x0000003c) ; CHECK: DW_AT_ranges [DW_FORM_sec_offset] (0x00000020) +; CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) ; CHECK: .debug_line contents: ; CHECK-NEXT: Line table prologue: @@ -27,10 +29,12 @@ ; DWARF3: DW_TAG_compile_unit ; DWARF3: DW_AT_stmt_list [DW_FORM_data4] (0x00000000) ; DWARF3: DW_AT_ranges [DW_FORM_data4] (0x00000000) +; DWARF3: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) ; DWARF3: DW_TAG_compile_unit ; DWARF3: DW_AT_stmt_list [DW_FORM_data4] (0x0000003c) ; DWARF3: DW_AT_ranges [DW_FORM_data4] (0x00000020) +; DWARF3: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) ; DWARF3: .debug_line contents: ; DWARF3-NEXT: Line table prologue: