Turn these two options in to trinary state so that they can be
authorEric Christopher <echristo@apple.com>
Thu, 23 Aug 2012 22:36:40 +0000 (22:36 +0000)
committerEric Christopher <echristo@apple.com>
Thu, 23 Aug 2012 22:36:40 +0000 (22:36 +0000)
turned on and off separate from the platform if you're on darwin.

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

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
test/DebugInfo/2010-04-13-PubType.ll

index 1991785b119028f8216180f3d1ddc1b22e9c6b47..fb4ae0f926474bc7d743dd7df4adf76fca2f33da 100644 (file)
@@ -54,13 +54,29 @@ static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
      cl::desc("Make an absence of debug location information explicit."),
      cl::init(false));
 
-static cl::opt<bool> DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
-     cl::desc("Output prototype dwarf accelerator tables."),
-     cl::init(false));
+namespace {
+  enum DefaultOnOff {
+    Default, Enable, Disable
+  };
+}
 
-static cl::opt<bool> DarwinGDBCompat("darwin-gdb-compat", cl::Hidden,
+static cl::opt<DefaultOnOff> DwarfAccelTables("dwarf-accel-tables", cl::Hidden,
+     cl::desc("Output prototype dwarf accelerator tables."),
+     cl::values(
+                clEnumVal(Default, "Default for platform"),
+                clEnumVal(Enable, "Enabled"),
+                clEnumVal(Disable, "Disabled"),
+                clEnumValEnd),
+     cl::init(Default));
+
+static cl::opt<DefaultOnOff> DarwinGDBCompat("darwin-gdb-compat", cl::Hidden,
      cl::desc("Compatibility with Darwin gdb."),
-     cl::init(false));
+     cl::values(
+                clEnumVal(Default, "Default for platform"),
+                clEnumVal(Enable, "Enabled"),
+                clEnumVal(Disable, "Disabled"),
+                clEnumValEnd),
+     cl::init(Default));
 
 namespace {
   const char *DWARFGroupName = "DWARF Emission";
@@ -141,13 +157,23 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
 
   // Turn on accelerator tables and older gdb compatibility
   // for Darwin.
-  if (Triple(M->getTargetTriple()).isOSDarwin()) {
-    DwarfAccelTables = true;
-    DarwinGDBCompat = true;
-  }
+  bool isDarwin = Triple(M->getTargetTriple()).isOSDarwin();
+  if (DarwinGDBCompat == Default) {
+    if (isDarwin)
+      isDarwinGDBCompat = true;
+    else
+      isDarwinGDBCompat = false;
+  } else
+    isDarwinGDBCompat = DarwinGDBCompat == Enable ? true : false;
+
+  if (DwarfAccelTables == Default) {
+    if (isDarwin)
+      hasDwarfAccelTables = true;
+    else
+      hasDwarfAccelTables = false;
+  } else
+    hasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
 
-  isDarwinGDBCompat = DarwinGDBCompat;
-  
   {
     NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
     beginModule(M);
@@ -826,7 +852,7 @@ void DwarfDebug::endModule() {
   emitAbbreviations();
 
   // Emit info into the dwarf accelerator table sections.
-  if (DwarfAccelTables) {
+  if (useDwarfAccelTables()) {
     emitAccelNames();
     emitAccelObjC();
     emitAccelNamespaces();
@@ -836,7 +862,7 @@ void DwarfDebug::endModule() {
   // 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 (DarwinGDBCompat)
+  if (useDarwinGDBCompat())
     emitDebugPubTypes();
 
   // Emit info into a debug loc section.
@@ -855,7 +881,7 @@ void DwarfDebug::endModule() {
   // TODO: When we don't need the option anymore we
   // can remove all of the code that this section
   // depends upon.
-  if (DarwinGDBCompat)
+  if (useDarwinGDBCompat())
     emitDebugInlineInfo();
 
   // Emit info into a debug str section.
index 78c871688e66f2647c42479e50c8a132e0a151da..f94c9d0b4bd5a9e8b55738b5f3f2a50c64703377 100644 (file)
@@ -309,7 +309,7 @@ class DwarfDebug {
 
   // A holder for the DarwinGDBCompat flag so that the compile unit can use it.
   bool isDarwinGDBCompat;
-
+  bool hasDwarfAccelTables;
 private:
 
   /// assignAbbrevNumber - Define a unique number for the abbreviation.
@@ -527,6 +527,7 @@ public:
   /// useDarwinGDBCompat - returns whether or not to limit some of our debug
   /// output to the limitations of darwin gdb.
   bool useDarwinGDBCompat() { return isDarwinGDBCompat; }
+  bool useDwarfAccelTables() { return hasDwarfAccelTables; }
 };
 } // End of namespace llvm
 
index 16ec9087fee5816cddce11625918cc2760949a19..559f032cb3a667336c1618879a34e0714be9267b 100644 (file)
@@ -1,4 +1,4 @@
-; RUN: llc -O0 -asm-verbose -darwin-gdb-compat -mtriple=x86_64-macosx < %s | FileCheck %s
+; RUN: llc -O0 -asm-verbose -mtriple=x86_64-macosx < %s | FileCheck %s
 ; CHECK-NOT: .asciz "X" ## External Name
 ; CHECK: .asciz "Y" ## External Name
 ; Test to check type with no definition is listed in pubtypes section.