diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 54 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h | 3 | ||||
| -rw-r--r-- | llvm/test/DebugInfo/2010-04-13-PubType.ll | 2 | 
3 files changed, 43 insertions, 16 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 1991785b119..fb4ae0f9264 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -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. diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h index 78c871688e6..f94c9d0b4bd 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h +++ b/llvm/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/llvm/test/DebugInfo/2010-04-13-PubType.ll b/llvm/test/DebugInfo/2010-04-13-PubType.ll index 16ec9087fee..559f032cb3a 100644 --- a/llvm/test/DebugInfo/2010-04-13-PubType.ll +++ b/llvm/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.  | 

