diff options
author | Eric Christopher <echristo@gmail.com> | 2014-01-29 22:22:56 +0000 |
---|---|---|
committer | Eric Christopher <echristo@gmail.com> | 2014-01-29 22:22:56 +0000 |
commit | 8873adaa60d3fff28758d341f136c650fc1314db (patch) | |
tree | fec8033cee2c295a8b017a60c483531b9f89e8e3 | |
parent | 35db2b3d4c89343171a52963518b03880432de0c (diff) | |
download | llvm-8873adaa60d3fff28758d341f136c650fc1314db.zip llvm-8873adaa60d3fff28758d341f136c650fc1314db.tar.gz llvm-8873adaa60d3fff28758d341f136c650fc1314db.tar.bz2 |
If we use DW_AT_ranges we need to specify a base address that ranges
are relative to in the compile unit. Currently let's just use 0...
Thanks to Greg Clayton for the catch!
llvm-svn: 200425
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 10 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll | 4 |
2 files changed, 12 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index d557f40..326c448 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/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<DwarfCompileUnit *>(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/llvm/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll b/llvm/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll index 5cb8f61..4e14e60 100644 --- a/llvm/test/DebugInfo/X86/stmt-list-multiple-compile-units.ll +++ b/llvm/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: |