Treat the pubtypes section similarly to the pubnames section and emit
authorEric Christopher <echristo@gmail.com>
Mon, 26 Aug 2013 23:24:35 +0000 (23:24 +0000)
committerEric Christopher <echristo@gmail.com>
Mon, 26 Aug 2013 23:24:35 +0000 (23:24 +0000)
it by default under linux or when we're trying to keep compatibility
with old gdb versions.

Fix testcase for option name change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189289 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
test/DebugInfo/dwarf-public-names.ll

index c523972ac3c2d7e9d0363272c60b89973c48d575..600e233b2b78d9f83287057cee2f455b589edd3c 100644 (file)
@@ -101,12 +101,12 @@ SplitDwarf("split-dwarf", cl::Hidden,
            cl::init(Default));
 
 static cl::opt<DefaultOnOff>
-DwarfPubNames("generate-dwarf-pubnames", cl::Hidden,
-              cl::desc("Generate DWARF pubnames section"),
-              cl::values(clEnumVal(Default, "Default for platform"),
-                         clEnumVal(Enable, "Enabled"),
-                         clEnumVal(Disable, "Disabled"), clEnumValEnd),
-              cl::init(Default));
+DwarfPubSections("generate-dwarf-pub-sections", cl::Hidden,
+                 cl::desc("Generate DWARF pubnames and pubtypes sections"),
+                 cl::values(clEnumVal(Default, "Default for platform"),
+                            clEnumVal(Enable, "Enabled"),
+                            clEnumVal(Disable, "Disabled"), clEnumValEnd),
+                 cl::init(Default));
 
 static const char *const DWARFGroupName = "DWARF Emission";
 static const char *const DbgTimerName = "DWARF Debug Writer";
@@ -217,10 +217,10 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
   else
     HasSplitDwarf = SplitDwarf == Enable;
 
-  if (DwarfPubNames == Default)
-    HasDwarfPubNames = !IsDarwin;
+  if (DwarfPubSections == Default)
+    HasDwarfPubSections = !IsDarwin;
   else
-    HasDwarfPubNames = DwarfPubNames == Enable;
+    HasDwarfPubSections = DwarfPubSections == Enable;
 
   DwarfVersion = getDwarfVersionFromModule(MMI->getModule());
 
@@ -792,7 +792,7 @@ void DwarfDebug::constructSubprogramDIE(CompileUnit *TheCU,
   TheCU->addToContextOwner(SubprogramDie, SP.getContext());
 
   // Expose as global, if requested.
-  if (HasDwarfPubNames)
+  if (HasDwarfPubSections)
     TheCU->addGlobalName(SP.getName(), SubprogramDie);
 }
 
@@ -1141,13 +1141,13 @@ void DwarfDebug::endModule() {
   }
 
   // Emit info into a debug pubnames section, if requested.
-  if (HasDwarfPubNames)
+  if (HasDwarfPubSections)
     emitDebugPubnames();
 
   // Emit info into a debug pubtypes section.
   // TODO: When we don't need the option anymore we can
   // remove all of the code that adds to the table.
-  if (useDarwinGDBCompat())
+  if (useDarwinGDBCompat() || HasDwarfPubSections)
     emitDebugPubTypes();
 
   // Finally emit string information into a string table.
@@ -1927,9 +1927,9 @@ void DwarfDebug::emitSectionLabels() {
   DwarfLineSectionSym =
     emitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
   emitSectionSym(Asm, TLOF.getDwarfLocSection());
-  if (HasDwarfPubNames)
+  if (HasDwarfPubSections)
     emitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
-  if (useDarwinGDBCompat())
+  if (useDarwinGDBCompat() || HasDwarfPubSections)
     emitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
   DwarfStrSectionSym =
     emitSectionSym(Asm, TLOF.getDwarfStrSection(), "info_string");
index da959f41d9f561ae18d38745e9bb9392bfed9e41..c22b1f08932f68afba59318db957ea4de89fa864 100644 (file)
@@ -431,12 +431,15 @@ class DwarfDebug {
   // Holder for types that are going to be extracted out into a type unit.
   std::vector<DIE *> TypeUnits;
 
+  // Whether to emit the pubnames/pubtypes sections.
+  bool HasDwarfPubSections;
+
+  // Version of dwarf we're emitting.
+  unsigned DwarfVersion;
+
   // DWARF5 Experimental Options
   bool HasDwarfAccelTables;
   bool HasSplitDwarf;
-  bool HasDwarfPubNames;
-
-  unsigned DwarfVersion;
 
   // Separated Dwarf Variables
   // In general these will all be for bits that are left in the
index 7396aa996067c266a1811e011a3eee58a1419b07..019051d8b587afbfd9a98e94a0dcd28796e77763 100644 (file)
@@ -1,6 +1,6 @@
 ; REQUIRES: object-emission
 
-; RUN: llc -generate-dwarf-pubnames=Enable -filetype=obj -o %t.o < %s
+; RUN: llc -generate-dwarf-pub-sections=Enable -filetype=obj -o %t.o < %s
 ; RUN: llvm-dwarfdump -debug-dump=pubnames %t.o | FileCheck %s
 ; ModuleID = 'dwarf-public-names.cpp'
 ;