summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Christopher <echristo@gmail.com>2013-08-26 23:24:35 +0000
committerEric Christopher <echristo@gmail.com>2013-08-26 23:24:35 +0000
commit63ae7c9aeca10f1028bb7232672ccefb2343ba08 (patch)
treecabdb82c4f927380761fb008aebfa9c1bca9d397
parent978046bd070fbd3b9359922611b3fd5d3fd7ab96 (diff)
downloadllvm-63ae7c9aeca10f1028bb7232672ccefb2343ba08.tar.gz
llvm-63ae7c9aeca10f1028bb7232672ccefb2343ba08.tar.bz2
llvm-63ae7c9aeca10f1028bb7232672ccefb2343ba08.tar.xz
Treat the pubtypes section similarly to the pubnames section and emit
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
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.cpp28
-rw-r--r--lib/CodeGen/AsmPrinter/DwarfDebug.h9
-rw-r--r--test/DebugInfo/dwarf-public-names.ll2
3 files changed, 21 insertions, 18 deletions
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index c523972ac3..600e233b2b 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -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");
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.h b/lib/CodeGen/AsmPrinter/DwarfDebug.h
index da959f41d9..c22b1f0893 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.h
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.h
@@ -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
diff --git a/test/DebugInfo/dwarf-public-names.ll b/test/DebugInfo/dwarf-public-names.ll
index 7396aa9960..019051d8b5 100644
--- a/test/DebugInfo/dwarf-public-names.ll
+++ b/test/DebugInfo/dwarf-public-names.ll
@@ -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'
;