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
This commit is contained in:
Eric Christopher 2012-08-23 22:36:40 +00:00
parent 4977f214d7
commit 20b76a77c3
3 changed files with 43 additions and 16 deletions

View 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,12 +157,22 @@ 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;
isDarwinGDBCompat = DarwinGDBCompat;
if (DwarfAccelTables == Default) {
if (isDarwin)
hasDwarfAccelTables = true;
else
hasDwarfAccelTables = false;
} else
hasDwarfAccelTables = DwarfAccelTables == Enable ? true : false;
{
NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
@ -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.

View 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

View 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.