From b1e66d0c4fed6f162424fd5257cedf0d2e705152 Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Sat, 15 Dec 2012 00:04:07 +0000 Subject: [PATCH] To simplify some code move the unit emission into the holders. Make emitDIE public accordingly. No functional change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170258 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 43 ++++++++++++++++----------- lib/CodeGen/AsmPrinter/DwarfDebug.h | 14 +++++---- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 6c99d9591ee..73502f21537 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1814,16 +1814,22 @@ void DwarfDebug::emitDIE(DIE *Die) { } } -void DwarfDebug::emitCompileUnits(const MCSection *Section) { - Asm->OutStreamer.SwitchSection(Section); - for (DenseMap::iterator I = CUMap.begin(), - E = CUMap.end(); I != E; ++I) { - CompileUnit *TheCU = I->second; +// Emit the various dwarf units to the unit section USection with +// the abbreviations going into ASection. +void DwarfUnits::emitUnits(DwarfDebug *DD, + const MCSection *USection, + const MCSection *ASection, + const MCSymbol *ASectionSym) { + Asm->OutStreamer.SwitchSection(USection); + for (SmallVector::iterator I = CUs.begin(), + E = CUs.end(); I != E; ++I) { + CompileUnit *TheCU = *I; DIE *Die = TheCU->getCUDie(); // Emit the compile units header. - Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(Section->getLabelBeginName(), - TheCU->getUniqueID())); + Asm->OutStreamer + .EmitLabel(Asm->GetTempSymbol(USection->getLabelBeginName(), + TheCU->getUniqueID())); // Emit size of content not including length itself unsigned ContentSize = Die->getSize() + @@ -1836,24 +1842,24 @@ void DwarfDebug::emitCompileUnits(const MCSection *Section) { Asm->OutStreamer.AddComment("DWARF version number"); Asm->EmitInt16(dwarf::DWARF_VERSION); Asm->OutStreamer.AddComment("Offset Into Abbrev. Section"); - const MCSection *ASec = Asm->getObjFileLowering().getDwarfAbbrevSection(); - Asm->EmitSectionOffset(Asm->GetTempSymbol(ASec->getLabelBeginName()), - DwarfAbbrevSectionSym); + Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()), + ASectionSym); Asm->OutStreamer.AddComment("Address Size (in bytes)"); Asm->EmitInt8(Asm->getDataLayout().getPointerSize()); - emitDIE(Die); - Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(Section->getLabelEndName(), + DD->emitDIE(Die); + Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol(USection->getLabelEndName(), TheCU->getUniqueID())); } } // Emit the debug info section. void DwarfDebug::emitDebugInfo() { - if (!useSplitDwarf()) - emitCompileUnits(Asm->getObjFileLowering().getDwarfInfoSection()); - else - emitSkeletonCU(Asm->getObjFileLowering().getDwarfInfoSection()); + DwarfUnits &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder; + + Holder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoSection(), + Asm->getObjFileLowering().getDwarfAbbrevSection(), + DwarfAbbrevSectionSym); } // Emit the abbreviation section. @@ -2392,5 +2398,8 @@ void DwarfDebug::emitSkeletonCU(const MCSection *Section) { // compile units that would normally be in debug_info. void DwarfDebug::emitDebugInfoDWO() { assert(useSplitDwarf() && "No split dwarf debug info?"); - emitCompileUnits(Asm->getObjFileLowering().getDwarfInfoDWOSection()); + // FIXME for Abbrev DWO. + InfoHolder.emitUnits(this, Asm->getObjFileLowering().getDwarfInfoDWOSection(), + Asm->getObjFileLowering().getDwarfAbbrevSection(), + DwarfAbbrevSectionSym); } diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index c03915aad12..738f117ad0b 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -219,6 +219,11 @@ public: /// \brief Add a unit to the list of CUs. void addUnit(CompileUnit *CU) { CUs.push_back(CU); } + + /// \brief Emit all of the units to the section listed with the given + /// abbreviation section. + void emitUnits(DwarfDebug *, const MCSection *, const MCSection *, + const MCSymbol *); }; /// \brief Collects and handles dwarf debug information. @@ -394,9 +399,6 @@ private: /// \brief Emit initial Dwarf sections with a label at the start of each one. void emitSectionLabels(); - /// \brief Recursively Emits a debug information entry. - void emitDIE(DIE *Die); - /// \brief Compute the size and offset of a DIE given an incoming Offset. unsigned computeSizeAndOffset(DIE *Die, unsigned Offset); @@ -417,9 +419,6 @@ private: /// open. void endSections(); - /// \brief Emit all of the compile units to the target section. - void emitCompileUnits(const MCSection *); - /// \brief Emit the debug info section. void emitDebugInfo(); @@ -569,6 +568,9 @@ public: /// string text. MCSymbol *getStringPoolEntry(StringRef Str); + /// \brief Recursively Emits a debug information entry. + void emitDIE(DIE *Die); + /// \brief Returns whether or not to limit some of our debug /// output to the limitations of darwin gdb. bool useDarwinGDBCompat() { return IsDarwinGDBCompat; } -- 2.34.1