NFC: DebugInfo: Refactor debug_loc/loclist emission into a common function
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 13 Dec 2019 00:37:52 +0000 (16:37 -0800)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 13 Dec 2019 00:39:12 +0000 (16:39 -0800)
(except for v4 loclists, which are sufficiently different to not fit
well in this generic implementation)

In subsequent patches I intend to refactor the DebugLoc and ranges data
structures to be more similar so I can common more of the implementation
here.

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

index 098b5a9..aa33659 100644 (file)
@@ -2466,22 +2466,15 @@ static void emitLocList(DwarfDebug &DD, AsmPrinter *Asm, const DebugLocStream::L
                 });
 }
 
-// Emit locations into the .debug_loc/.debug_loclists section.
-void DwarfDebug::emitDebugLoc() {
+void DwarfDebug::emitDebugLocImpl(MCSection *Sec) {
   if (DebugLocs.getLists().empty())
     return;
 
-  MCSymbol *TableEnd = nullptr;
-  if (getDwarfVersion() >= 5) {
-
-    Asm->OutStreamer->SwitchSection(
-        Asm->getObjFileLowering().getDwarfLoclistsSection());
+  Asm->OutStreamer->SwitchSection(Sec);
 
+  MCSymbol *TableEnd = nullptr;
+  if (getDwarfVersion() >= 5)
     TableEnd = emitLoclistsTableHeader(Asm, *this);
-  } else {
-    Asm->OutStreamer->SwitchSection(
-        Asm->getObjFileLowering().getDwarfLocSection());
-  }
 
   for (const auto &List : DebugLocs.getLists())
     emitLocList(*this, Asm, List);
@@ -2490,21 +2483,20 @@ void DwarfDebug::emitDebugLoc() {
     Asm->OutStreamer->EmitLabel(TableEnd);
 }
 
+// Emit locations into the .debug_loc/.debug_loclists section.
+void DwarfDebug::emitDebugLoc() {
+  emitDebugLocImpl(
+      getDwarfVersion() >= 5
+          ? Asm->getObjFileLowering().getDwarfLoclistsSection()
+          : Asm->getObjFileLowering().getDwarfLocSection());
+}
+
 // Emit locations into the .debug_loc.dwo/.debug_loclists.dwo section.
 void DwarfDebug::emitDebugLocDWO() {
-  if (DebugLocs.getLists().empty())
-    return;
-
   if (getDwarfVersion() >= 5) {
-    MCSymbol *TableEnd = nullptr;
-    Asm->OutStreamer->SwitchSection(
+    emitDebugLocImpl(
         Asm->getObjFileLowering().getDwarfLoclistsDWOSection());
-    TableEnd = emitLoclistsTableHeader(Asm, *this);
-    for (const auto &List : DebugLocs.getLists())
-      emitLocList(*this, Asm, List);
 
-    if (TableEnd)
-      Asm->OutStreamer->EmitLabel(TableEnd);
     return;
   }
 
index bdd1b25..8fc0ac8 100644 (file)
@@ -503,6 +503,8 @@ class DwarfDebug : public DebugHandlerBase {
   /// Emit variable locations into a debug loc dwo section.
   void emitDebugLocDWO();
 
+  void emitDebugLocImpl(MCSection *Sec);
+
   /// Emit address ranges into a debug aranges section.
   void emitDebugARanges();