DwarfDebug: Reduce code duplication for sec offset emission
authorDavid Blaikie <dblaikie@gmail.com>
Wed, 4 Dec 2013 21:31:26 +0000 (21:31 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Wed, 4 Dec 2013 21:31:26 +0000 (21:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196414 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h

index 2e9f89e640b72c790451ec4585c8907d1dcbe798..3d53d3da9c1ed5f4fb3e76ed68fd8cfbcf3203f5 100644 (file)
@@ -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);
 
index c68e37e7ec58dfaafb06ab6a4d97ea4743a137f6..92152507254849b668371ab8d6a6e8bbed162711 100644 (file)
@@ -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);