From b5562e6c579cb5660ddd3262e41903df8c1e192e Mon Sep 17 00:00:00 2001 From: Eric Christopher Date: Thu, 23 Aug 2012 22:36:40 +0000 Subject: [PATCH] Turn these two options in to trinary state so that they can be turned on and off separate from the platform if you're on darwin. llvm-svn: 162487 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 54 ++++++++++++++++++++------- lib/CodeGen/AsmPrinter/DwarfDebug.h | 3 +- test/DebugInfo/2010-04-13-PubType.ll | 2 +- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 1991785b119..fb4ae0f9264 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -54,13 +54,29 @@ static cl::opt UnknownLocations("use-unknown-locations", cl::Hidden, cl::desc("Make an absence of debug location information explicit."), cl::init(false)); -static cl::opt 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 DarwinGDBCompat("darwin-gdb-compat", cl::Hidden, +static cl::opt 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 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. diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h index 78c871688e6..f94c9d0b4bd 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h @@ -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 diff --git a/test/DebugInfo/2010-04-13-PubType.ll b/test/DebugInfo/2010-04-13-PubType.ll index 16ec9087fee..559f032cb3a 100644 --- a/test/DebugInfo/2010-04-13-PubType.ll +++ b/test/DebugInfo/2010-04-13-PubType.ll @@ -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.