From fa070b01753e2d547539dca4e9d55459c652dc9c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 4 Apr 2010 22:33:59 +0000 Subject: [PATCH] remove the didInitial ivar, rename emitInitial to be more descriptive, change EmitSectionOffset back to taking a symbol instead of a string. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100361 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 27 +++++++++++-------------- lib/CodeGen/AsmPrinter/DwarfDebug.h | 10 +++------ lib/CodeGen/AsmPrinter/DwarfPrinter.cpp | 15 ++++++++++---- lib/CodeGen/AsmPrinter/DwarfPrinter.h | 7 ++++--- 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 32a632aa336..72bf0ad81a6 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -301,8 +301,7 @@ DbgScope::~DbgScope() { DwarfDebug::DwarfDebug(AsmPrinter *A) : DwarfPrinter(A), ModuleCU(0), - AbbreviationsSet(InitAbbreviationsSetSize), Abbreviations(), - DIEBlocks(), SectionSourceLines(), didInitial(false), shouldEmit(false), + AbbreviationsSet(InitAbbreviationsSetSize), shouldEmit(false), CurrentFnDbgScope(0), DebugTimer(0) { NextStringPoolNumber = 0; if (TimePassesIsEnabled) @@ -1835,7 +1834,7 @@ void DwarfDebug::beginModule(Module *M) { } // Emit initial sections - emitInitial(); + EmitSectionLabels(); } /// endModule - Emit all Dwarf sections that should come after the content. @@ -2438,13 +2437,9 @@ void DwarfDebug::computeSizeAndOffsets() { CompileUnitOffsets[ModuleCU] = 0; } -/// emitInitial - Emit initial Dwarf declarations. This is necessary for cc +/// EmitSectionLabels - Emit initial Dwarf declarations. This is necessary for cc /// tools to recognize the object file contains Dwarf information. -void DwarfDebug::emitInitial() { - // Check to see if we already emitted intial headers. - if (didInitial) return; - didInitial = true; - +void DwarfDebug::EmitSectionLabels() { const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering(); // Dwarf sections base addresses. @@ -2566,7 +2561,8 @@ void DwarfDebug::emitDebugInfo() { Asm->OutStreamer.AddComment("DWARF version number"); Asm->EmitInt16(dwarf::DWARF_VERSION); Asm->OutStreamer.AddComment("Offset Into Abbrev. Section"); - EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"), "section_abbrev"); + EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"), + Asm->GetTempSymbol("section_abbrev")); Asm->OutStreamer.AddComment("Address Size (in bytes)"); Asm->EmitInt8(TD->getPointerSize()); @@ -2878,7 +2874,7 @@ emitFunctionDebugFrame(const FunctionDebugFrameInfo &DebugFrameInfo) { Asm->OutStreamer.AddComment("FDE CIE offset"); EmitSectionOffset(Asm->GetTempSymbol("debug_frame_common"), - "section_debug_frame"); + Asm->GetTempSymbol("section_debug_frame")); Asm->OutStreamer.AddComment("FDE initial location"); MCSymbol *FuncBeginSym = @@ -2917,7 +2913,7 @@ void DwarfDebug::emitDebugPubNames() { Asm->OutStreamer.AddComment("Offset of Compilation Unit Info"); EmitSectionOffset(Asm->GetTempSymbol("info_begin", ModuleCU->getID()), - "section_info"); + Asm->GetTempSymbol("section_info")); Asm->OutStreamer.AddComment("Compilation Unit Length"); Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", ModuleCU->getID()), @@ -2961,7 +2957,7 @@ void DwarfDebug::emitDebugPubTypes() { Asm->OutStreamer.AddComment("Offset of Compilation ModuleCU Info"); EmitSectionOffset(Asm->GetTempSymbol("info_begin", ModuleCU->getID()), - "section_info"); + Asm->GetTempSymbol("section_info")); Asm->OutStreamer.AddComment("Compilation ModuleCU Length"); Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", ModuleCU->getID()), @@ -3107,10 +3103,11 @@ void DwarfDebug::emitDebugInlineInfo() { Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator. } else EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)), - "section_str"); + Asm->GetTempSymbol("section_str")); Asm->OutStreamer.AddComment("Function name"); - EmitSectionOffset(getStringPoolEntry(Name), "section_str"); + EmitSectionOffset(getStringPoolEntry(Name), + Asm->GetTempSymbol("section_str")); Asm->EmitULEB128(Labels.size(), "Inline count"); for (SmallVector::iterator LI = Labels.begin(), diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 5dabd8e48a3..2268de528fc 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -120,10 +120,6 @@ class DwarfDebug : public DwarfPrinter { /// std::vector > SectionSourceLines; - /// didInitial - Flag to indicate if initial emission has been done. - /// - bool didInitial; - /// shouldEmit - Flag to indicate if debug information should be emitted. /// bool shouldEmit; @@ -396,9 +392,9 @@ class DwarfDebug : public DwarfPrinter { /// constructScopeDIE - Construct a DIE for this scope. DIE *constructScopeDIE(DbgScope *Scope); - /// emitInitial - Emit initial Dwarf declarations. This is necessary for cc - /// tools to recognize the object file contains Dwarf information. - void emitInitial(); + /// EmitSectionLabels - Emit initial Dwarf sections with a label at + /// the start of each one. + void EmitSectionLabels(); /// emitDIE - Recusively Emits a debug information entry. /// diff --git a/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp b/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp index 895898594eb..71bdd52762f 100644 --- a/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp @@ -35,11 +35,19 @@ using namespace llvm; DwarfPrinter::DwarfPrinter(AsmPrinter *A) : Asm(A), MAI(A->MAI), TD(Asm->TM.getTargetData()), RI(Asm->TM.getRegisterInfo()), M(NULL), MF(NULL), MMI(NULL), - SubprogramCount(0) {} + SubprogramCount(0) { +} +/// EmitSectionOffset - Emit the 4-byte offset of Label from the start of its +/// section. This can be done with a special directive if the target supports +/// it (e.g. cygwin) or by emitting it as an offset from a label at the start +/// of the section. +/// +/// SectionLabel is a temporary label emitted at the start of the section that +/// Label lives in. void DwarfPrinter::EmitSectionOffset(const MCSymbol *Label, - const char *SectionLabel) { + const MCSymbol *SectionLabel) const { // On COFF targets, we have to emit the special .secrel32 directive. if (const char *SecOffDir = MAI->getDwarfSectionOffsetDirective()) { // FIXME: MCize. @@ -54,8 +62,7 @@ void DwarfPrinter::EmitSectionOffset(const MCSymbol *Label, return; } - MCSymbol *SectionSym = Asm->GetTempSymbol(SectionLabel); - Asm->EmitLabelDifference(Label, SectionSym, 4); + Asm->EmitLabelDifference(Label, SectionLabel, 4); } /// EmitFrameMoves - Emit frame instructions to describe the layout of the diff --git a/lib/CodeGen/AsmPrinter/DwarfPrinter.h b/lib/CodeGen/AsmPrinter/DwarfPrinter.h index 20bfbf92697..1c18490a71c 100644 --- a/lib/CodeGen/AsmPrinter/DwarfPrinter.h +++ b/lib/CodeGen/AsmPrinter/DwarfPrinter.h @@ -79,9 +79,10 @@ public: /// it (e.g. cygwin) or by emitting it as an offset from a label at the start /// of the section. /// - /// SectionLabel is the name of a temporary label emitted at the start of the - /// section. - void EmitSectionOffset(const MCSymbol *Label, const char *SectionLabel); + /// SectionLabel is a temporary label emitted at the start of the section that + /// Label lives in. + void EmitSectionOffset(const MCSymbol *Label, + const MCSymbol *SectionLabel) const; /// EmitFrameMoves - Emit frame instructions to describe the layout of the /// frame.