From: Eric Christopher Date: Wed, 15 Jan 2014 00:04:29 +0000 (+0000) Subject: Make sure we emit a relocation to the debug_ranges section in the X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=cd94a7676a7f3a8b1c2ed42809b28d3319c671c1;p=oota-llvm.git Make sure we emit a relocation to the debug_ranges section in the presence of CU ranges. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199276 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index c895f17931d..f76e898cfb5 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -209,6 +209,10 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) else HasDwarfPubSections = DwarfPubSections == Enable; + // For now only turn on CU ranges if we've explicitly asked for it + // or we have -ffunction-sections enabled. + HasCURanges = DwarfCURanges || TargetMachine::getFunctionSections(); + DwarfVersion = DwarfVersionNumber ? DwarfVersionNumber : getDwarfVersionFromModule(MMI->getModule()); @@ -1057,8 +1061,7 @@ 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 ((DwarfCURanges || TargetMachine::getFunctionSections()) && - TheU->getRanges().size()) + if (useCURanges() && TheU->getRanges().size()) addSectionLabel(Asm, U, U->getUnitDie(), dwarf::DW_AT_ranges, Asm->GetTempSymbol("cu_ranges", U->getUniqueID()), DwarfDebugRangeSectionSym); @@ -2910,7 +2913,7 @@ void DwarfDebug::emitDebugRanges() { } // Now emit a range for the CU itself. - if (DwarfCURanges) { + if (useCURanges()) { Asm->OutStreamer.EmitLabel( Asm->GetTempSymbol("cu_ranges", TheCU->getUniqueID())); const SmallVectorImpl &Ranges = TheCU->getRanges(); diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 5a211060554..516def804d1 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -458,6 +458,9 @@ class DwarfDebug : public AsmPrinterHandler { // Whether to emit the pubnames/pubtypes sections. bool HasDwarfPubSections; + // Whether or not to use AT_ranges for compilation units. + bool HasCURanges; + // Version of dwarf we're emitting. unsigned DwarfVersion; @@ -733,6 +736,9 @@ public: /// split dwarf proposal support. bool useSplitDwarf() { return HasSplitDwarf; } + /// \brief Returns whether or not to use AT_ranges for compilation units. + bool useCURanges() { return HasCURanges; } + /// Returns the Dwarf Version. unsigned getDwarfVersion() const { return DwarfVersion; } diff --git a/test/DebugInfo/X86/cu-ranges.ll b/test/DebugInfo/X86/cu-ranges.ll index 77561a4e633..e582ea73324 100644 --- a/test/DebugInfo/X86/cu-ranges.ll +++ b/test/DebugInfo/X86/cu-ranges.ll @@ -1,5 +1,6 @@ ; RUN: llc -split-dwarf=Enable -O0 %s -ffunction-sections -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o %t ; RUN: llvm-dwarfdump -debug-dump=all %t | FileCheck --check-prefix=FUNCTION-SECTIONS %s +; RUN: llvm-readobj --relocations %t | FileCheck --check-prefix=FUNCTION-SECTIONS-RELOCS %s ; RUN: llc -split-dwarf=Enable -O0 %s -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o %t ; RUN: llvm-dwarfdump -debug-dump=all %t | FileCheck --check-prefix=NO-FUNCTION-SECTIONS %s @@ -12,6 +13,9 @@ ; With function sections enabled make sure that we have a DW_AT_ranges attribute. ; FUNCTION-SECTIONS: DW_AT_ranges +; Check that we have a relocation against the .debug_ranges section. +; FUNCTION-SECTIONS-RELOCS: R_X86_64_32 .debug_ranges 0x0 + ; Without function sections enabled make sure that we have no DW_AT_ranges attribute. ; NO-FUNCTION-SECTIONS-NOT: DW_AT_ranges