summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2013-12-06 19:38:49 +0000
committerDavid Blaikie <dblaikie@gmail.com>2013-12-06 19:38:49 +0000
commit4f623205a9bcf6999ed8bf1594ab5fe97e38cdb5 (patch)
tree11d084cbe314518972d59a01b38865f0d90a10d1
parent2666e24ca57a1a68f28127b84fe9d6eca46ca9f1 (diff)
downloadbcm5719-llvm-4f623205a9bcf6999ed8bf1594ab5fe97e38cdb5.tar.gz
bcm5719-llvm-4f623205a9bcf6999ed8bf1594ab5fe97e38cdb5.zip
DwarfDebug: Walk skeletons during fission pubtypes/pubnames emission
This more accurately represents the actual walk - pubnames/pubtypes are emitted into the .o, not the .dwo, and reference the skeletons not the full units. Use the newly established ID->index invariant to lookup the underlying full unit to retrieve its public names and types. llvm-svn: 196601
-rw-r--r--llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index 7d780d1c2ed..f7723007e17 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -2411,10 +2411,10 @@ void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubNamesSection()
: Asm->getObjFileLowering().getDwarfPubNamesSection();
- for (SmallVectorImpl<Unit *>::const_iterator I = getUnits().begin(),
- E = getUnits().end();
- I != E; ++I) {
- Unit *TheU = *I;
+ DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
+ const SmallVectorImpl<Unit *> &Units = Holder.getUnits();
+ for (unsigned i = 0; i != Units.size(); ++i) {
+ Unit *TheU = Units[i];
unsigned ID = TheU->getUniqueID();
// Start the dwarf pubnames section.
@@ -2445,7 +2445,7 @@ void DwarfDebug::emitDebugPubNames(bool GnuStyle) {
4);
// Emit the pubnames for this compilation unit.
- const StringMap<const DIE *> &Globals = TheU->getGlobalNames();
+ const StringMap<const DIE *> &Globals = getUnits()[ID]->getGlobalNames();
for (StringMap<const DIE *>::const_iterator GI = Globals.begin(),
GE = Globals.end();
GI != GE; ++GI) {
@@ -2479,10 +2479,10 @@ void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
GnuStyle ? Asm->getObjFileLowering().getDwarfGnuPubTypesSection()
: Asm->getObjFileLowering().getDwarfPubTypesSection();
- for (SmallVectorImpl<Unit *>::const_iterator I = getUnits().begin(),
- E = getUnits().end();
- I != E; ++I) {
- Unit *TheU = *I;
+ DwarfFile &Holder = useSplitDwarf() ? SkeletonHolder : InfoHolder;
+ const SmallVectorImpl<Unit *> &Units = Holder.getUnits();
+ for (unsigned i = 0; i != Units.size(); ++i) {
+ Unit *TheU = Units[i];
unsigned ID = TheU->getUniqueID();
// Start the dwarf pubtypes section.
@@ -2514,7 +2514,7 @@ void DwarfDebug::emitDebugPubTypes(bool GnuStyle) {
Asm->GetTempSymbol(ISec->getLabelBeginName(), TheU->getUniqueID()), 4);
// Emit the pubtypes.
- const StringMap<const DIE *> &Globals = TheU->getGlobalTypes();
+ const StringMap<const DIE *> &Globals = getUnits()[ID]->getGlobalTypes();
for (StringMap<const DIE *>::const_iterator GI = Globals.begin(),
GE = Globals.end();
GI != GE; ++GI) {
OpenPOWER on IntegriCloud