From: David Blaikie Date: Wed, 4 Dec 2013 21:31:26 +0000 (+0000) Subject: DwarfDebug: Reduce code duplication for sec offset emission X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=a18dcd4cce040b210c38b6e243c451e35bc79b5e;p=oota-llvm.git DwarfDebug: Reduce code duplication for sec offset emission git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196414 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 2e9f89e640b..3d53d3da9c1 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -724,6 +724,28 @@ unsigned DwarfDebug::getOrCreateSourceID(StringRef FileName, StringRef DirName, return SrcId; } +static void addSectionLabel(AsmPrinter *Asm, Unit *U, DIE *D, + dwarf::Attribute A, const MCSymbol *L, + const MCSymbol *Sec) { + if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) + U->addSectionLabel(D, A, L); + else + U->addSectionDelta(D, A, L, Sec); +} + +void DwarfDebug::addGnuPubAttributes(Unit *U, DIE *D) const { + if (!GenerateGnuPubSections) + return; + + addSectionLabel(Asm, U, D, dwarf::DW_AT_GNU_pubnames, + Asm->GetTempSymbol("gnu_pubnames", U->getUniqueID()), + DwarfGnuPubNamesSectionSym); + + addSectionLabel(Asm, U, D, dwarf::DW_AT_GNU_pubtypes, + Asm->GetTempSymbol("gnu_pubtypes", U->getUniqueID()), + DwarfGnuPubTypesSectionSym); +} + // Create new CompileUnit for the given metadata node with tag // DW_TAG_compile_unit. CompileUnit *DwarfDebug::constructCompileUnit(DICompileUnit DIUnit) { @@ -783,29 +805,7 @@ CompileUnit *DwarfDebug::constructCompileUnit(DICompileUnit DIUnit) { if (!CompilationDir.empty()) NewCU->addString(Die, dwarf::DW_AT_comp_dir, CompilationDir); - // Flags to let the linker know we have emitted new style pubnames. Only - // emit it here if we don't have a skeleton CU for split dwarf. - if (GenerateGnuPubSections) { - if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) - NewCU->addSectionLabel( - Die, dwarf::DW_AT_GNU_pubnames, - Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID())); - else - NewCU->addSectionDelta( - Die, dwarf::DW_AT_GNU_pubnames, - Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID()), - DwarfGnuPubNamesSectionSym); - - if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) - NewCU->addSectionLabel( - Die, dwarf::DW_AT_GNU_pubtypes, - Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID())); - else - NewCU->addSectionDelta( - Die, dwarf::DW_AT_GNU_pubtypes, - Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID()), - DwarfGnuPubTypesSectionSym); - } + addGnuPubAttributes(NewCU, Die); } if (DIUnit.isOptimized()) @@ -3018,41 +3018,13 @@ CompileUnit *DwarfDebug::constructSkeletonCU(const CompileUnit *CU) { if (!CompilationDir.empty()) NewCU->addLocalString(Die, dwarf::DW_AT_comp_dir, CompilationDir); - // Flags to let the linker know we have emitted new style pubnames. - if (GenerateGnuPubSections) { - if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) - NewCU->addSectionLabel( - Die, dwarf::DW_AT_GNU_pubnames, - Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID())); - else - NewCU->addSectionDelta( - Die, dwarf::DW_AT_GNU_pubnames, - Asm->GetTempSymbol("gnu_pubnames", NewCU->getUniqueID()), - DwarfGnuPubNamesSectionSym); - - if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) - NewCU->addSectionLabel( - Die, dwarf::DW_AT_GNU_pubtypes, - Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID())); - else - NewCU->addSectionDelta( - Die, dwarf::DW_AT_GNU_pubtypes, - Asm->GetTempSymbol("gnu_pubtypes", NewCU->getUniqueID()), - DwarfGnuPubTypesSectionSym); - } + addGnuPubAttributes(NewCU, Die); // Attribute if we've emitted any ranges and their location for the compile unit. - if (!CU->getRangeLists().empty()) { - if (Asm->MAI->doesDwarfUseRelocationsAcrossSections()) - NewCU->addSectionLabel( - Die, dwarf::DW_AT_GNU_ranges_base, - Asm->GetTempSymbol("gnu_ranges", NewCU->getUniqueID())); - else - NewCU->addSectionDelta( - Die, dwarf::DW_AT_GNU_ranges_base, - Asm->GetTempSymbol("gnu_ranges", NewCU->getUniqueID()), - DwarfDebugRangeSectionSym); - } + if (!CU->getRangeLists().empty()) + addSectionLabel(Asm, NewCU, Die, dwarf::DW_AT_GNU_ranges_base, + Asm->GetTempSymbol("gnu_ranges", NewCU->getUniqueID()), + DwarfDebugRangeSectionSym); SkeletonHolder.addUnit(NewCU); diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index c68e37e7ec5..92152507254 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -627,6 +627,10 @@ class DwarfDebug : public AsmPrinterHandler { /// \brief Emit the debug str dwo section. void emitDebugStrDWO(); + /// Flags to let the linker know we have emitted new style pubnames. Only + /// emit it here if we don't have a skeleton CU for split dwarf. + void addGnuPubAttributes(Unit *U, DIE *D) const; + /// \brief Create new CompileUnit for the given metadata node with tag /// DW_TAG_compile_unit. CompileUnit *constructCompileUnit(DICompileUnit DIUnit);