forked from OSchip/llvm-project
DebugInfo: Sink constructImportedEntityDIE down into DwarfUnit from DwarfDebug.
It was just calling a bunch of DwarfUnit functions anyway, as can be seen by the simplification of removing "TheCU" from all the function calls in the implementation. llvm-svn: 219103
This commit is contained in:
parent
64ee99183b
commit
febfafd13a
|
@ -595,7 +595,7 @@ void DwarfDebug::constructScopeDIE(
|
|||
for (ImportedEntityMap::const_iterator i = Range.first; i != Range.second;
|
||||
++i)
|
||||
Children.push_back(
|
||||
constructImportedEntityDIE(TheCU, DIImportedEntity(i->second)));
|
||||
TheCU.constructImportedEntityDIE(DIImportedEntity(i->second)));
|
||||
// If there are only other scopes as children, put them directly in the
|
||||
// parent instead, as this scope would serve no purpose.
|
||||
if (Children.size() == ChildScopeCount) {
|
||||
|
@ -690,36 +690,7 @@ void DwarfDebug::constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
|
|||
DIImportedEntity Module(N);
|
||||
assert(Module.Verify());
|
||||
if (DIE *D = TheCU.getOrCreateContextDIE(Module.getContext()))
|
||||
D->addChild(constructImportedEntityDIE(TheCU, Module));
|
||||
}
|
||||
|
||||
std::unique_ptr<DIE>
|
||||
DwarfDebug::constructImportedEntityDIE(DwarfCompileUnit &TheCU,
|
||||
const DIImportedEntity &Module) {
|
||||
assert(Module.Verify() &&
|
||||
"Use one of the MDNode * overloads to handle invalid metadata");
|
||||
std::unique_ptr<DIE> IMDie = make_unique<DIE>((dwarf::Tag)Module.getTag());
|
||||
TheCU.insertDIE(Module, IMDie.get());
|
||||
DIE *EntityDie;
|
||||
DIDescriptor Entity = resolve(Module.getEntity());
|
||||
if (Entity.isNameSpace())
|
||||
EntityDie = TheCU.getOrCreateNameSpace(DINameSpace(Entity));
|
||||
else if (Entity.isSubprogram())
|
||||
EntityDie = TheCU.getOrCreateSubprogramDIE(DISubprogram(Entity));
|
||||
else if (Entity.isType())
|
||||
EntityDie = TheCU.getOrCreateTypeDIE(DIType(Entity));
|
||||
else
|
||||
EntityDie = TheCU.getDIE(Entity);
|
||||
assert(EntityDie);
|
||||
TheCU.addSourceLine(*IMDie, Module.getLineNumber(),
|
||||
Module.getContext().getFilename(),
|
||||
Module.getContext().getDirectory());
|
||||
TheCU.addDIEEntry(*IMDie, dwarf::DW_AT_import, *EntityDie);
|
||||
StringRef Name = Module.getName();
|
||||
if (!Name.empty())
|
||||
TheCU.addString(*IMDie, dwarf::DW_AT_name, Name);
|
||||
|
||||
return IMDie;
|
||||
D->addChild(TheCU.constructImportedEntityDIE(Module));
|
||||
}
|
||||
|
||||
// Emit all Dwarf sections that should come prior to the content. Create
|
||||
|
|
|
@ -508,11 +508,6 @@ class DwarfDebug : public AsmPrinterHandler {
|
|||
void constructAndAddImportedEntityDIE(DwarfCompileUnit &TheCU,
|
||||
const MDNode *N);
|
||||
|
||||
/// \brief Construct import_module DIE.
|
||||
std::unique_ptr<DIE>
|
||||
constructImportedEntityDIE(DwarfCompileUnit &TheCU,
|
||||
const DIImportedEntity &Module);
|
||||
|
||||
/// \brief Register a source line with debug info. Returns the unique
|
||||
/// label that was emitted and which provides correspondence to the
|
||||
/// source line list.
|
||||
|
|
|
@ -1139,6 +1139,34 @@ void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeArray Args) {
|
|||
}
|
||||
}
|
||||
|
||||
std::unique_ptr<DIE>
|
||||
DwarfUnit::constructImportedEntityDIE(const DIImportedEntity &Module) {
|
||||
assert(Module.Verify() &&
|
||||
"Use one of the MDNode * overloads to handle invalid metadata");
|
||||
std::unique_ptr<DIE> IMDie = make_unique<DIE>((dwarf::Tag)Module.getTag());
|
||||
insertDIE(Module, IMDie.get());
|
||||
DIE *EntityDie;
|
||||
DIDescriptor Entity = resolve(Module.getEntity());
|
||||
if (Entity.isNameSpace())
|
||||
EntityDie = getOrCreateNameSpace(DINameSpace(Entity));
|
||||
else if (Entity.isSubprogram())
|
||||
EntityDie = getOrCreateSubprogramDIE(DISubprogram(Entity));
|
||||
else if (Entity.isType())
|
||||
EntityDie = getOrCreateTypeDIE(DIType(Entity));
|
||||
else
|
||||
EntityDie = getDIE(Entity);
|
||||
assert(EntityDie);
|
||||
addSourceLine(*IMDie, Module.getLineNumber(),
|
||||
Module.getContext().getFilename(),
|
||||
Module.getContext().getDirectory());
|
||||
addDIEEntry(*IMDie, dwarf::DW_AT_import, *EntityDie);
|
||||
StringRef Name = Module.getName();
|
||||
if (!Name.empty())
|
||||
addString(*IMDie, dwarf::DW_AT_name, Name);
|
||||
|
||||
return IMDie;
|
||||
}
|
||||
|
||||
/// constructTypeDIE - Construct type DIE from DICompositeType.
|
||||
void DwarfUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
|
||||
// Add name if not anonymous or intermediate type.
|
||||
|
|
|
@ -424,6 +424,10 @@ public:
|
|||
/// constructSubprogramArguments - Construct function argument DIEs.
|
||||
void constructSubprogramArguments(DIE &Buffer, DITypeArray Args);
|
||||
|
||||
/// \brief Construct import_module DIE.
|
||||
std::unique_ptr<DIE>
|
||||
constructImportedEntityDIE(const DIImportedEntity &Module);
|
||||
|
||||
/// Create a DIE with the given Tag, add the DIE to its parent, and
|
||||
/// call insertDIE if MD is not null.
|
||||
DIE &createAndAddDIE(unsigned Tag, DIE &Parent,
|
||||
|
|
Loading…
Reference in New Issue