From c528858cbd4fef01f2007cea8a4e8e25a6b86443 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Fri, 24 Jan 2014 11:40:29 +0000 Subject: Use DW_AT_high_pc and DW_AT_low_pc for the high and low pc for a compile unit. Make these relocations on the platforms that need relocations and add a routine to ensure that we don't put the addresses in an offset table for split dwarf. llvm-svn: 199990 --- llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp') diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 7ba4fece43b..077af8c3756 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -187,6 +187,7 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M) DwarfAddrSectionSym = 0; DwarfAbbrevDWOSectionSym = DwarfStrDWOSectionSym = 0; FunctionBeginSym = FunctionEndSym = 0; + TextSectionBeginSym = TextSectionEndSym = 0; CurFn = 0; CurMI = 0; @@ -1061,9 +1062,12 @@ void DwarfDebug::finalizeModuleInfo() { addSectionLabel(Asm, U, U->getUnitDie(), dwarf::DW_AT_ranges, Asm->GetTempSymbol("cu_ranges", U->getUniqueID()), DwarfDebugRangeSectionSym); - else - U->addUInt(U->getUnitDie(), dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, - 0); + else { + U->addLocalLabelAddress(U->getUnitDie(), dwarf::DW_AT_low_pc, + TextSectionBeginSym); + U->addLocalLabelAddress(U->getUnitDie(), dwarf::DW_AT_high_pc, + TextSectionEndSym); + } } } @@ -1117,6 +1121,10 @@ void DwarfDebug::endSections() { Sym = Asm->GetTempSymbol("debug_end", ID); Asm->OutStreamer.SwitchSection(Section); Asm->OutStreamer.EmitLabel(Sym); + // If this is the end of the text section keep track of where the end of + // the section is so that we can use it later. + if (Section == Asm->getObjFileLowering().getTextSection()) + TextSectionEndSym = Sym; } // Insert a final terminator. @@ -2012,6 +2020,8 @@ void DwarfDebug::emitSectionLabels() { DwarfDebugLocSectionSym = emitSectionSym(Asm, TLOF.getDwarfLocSection(), "section_debug_loc"); + + TextSectionBeginSym = emitSectionSym(Asm, TLOF.getTextSection(), "text_begin"); } // Recursively emits a debug information entry. -- cgit v1.2.3