mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-26 20:57:15 +00:00
Sink DwarfUnit::constructImportedEntityDIE into DwarfCompileUnit.
So that it has access to getOrCreateGlobalVariableDIE. If we ever support decsribing using directive in C++ classes (thus requiring support in type units), it will certainly use another mechanism anyway. Differential Revision: http://reviews.llvm.org/D5975 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220594 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
44efa200e2
commit
ab08da75d7
@ -615,6 +615,34 @@ DwarfCompileUnit::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) {
|
||||
return AbsDef;
|
||||
}
|
||||
|
||||
std::unique_ptr<DIE>
|
||||
DwarfCompileUnit::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;
|
||||
}
|
||||
|
||||
void DwarfCompileUnit::finishSubprogramDefinition(DISubprogram SP) {
|
||||
DIE *D = getDIE(SP);
|
||||
if (DIE *AbsSPDIE = DD->getAbstractSPDies().lookup(SP)) {
|
||||
|
@ -123,6 +123,10 @@ public:
|
||||
|
||||
DIE &constructAbstractSubprogramScopeDIE(LexicalScope *Scope);
|
||||
|
||||
/// \brief Construct import_module DIE.
|
||||
std::unique_ptr<DIE>
|
||||
constructImportedEntityDIE(const DIImportedEntity &Module);
|
||||
|
||||
void finishSubprogramDefinition(DISubprogram SP);
|
||||
};
|
||||
|
||||
|
@ -1119,34 +1119,6 @@ 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.
|
||||
|
@ -411,10 +411,6 @@ 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…
x
Reference in New Issue
Block a user