mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Sink DwarfDebug::AbstractSPDies down into DwarfFile
This is the first big step to allowing gmlt-like inline scope information in the skeleton CU. While this commit doesn't change the functionality, it's only a small step to call "constructAbstractSubprogramDIE" on both the InfoHolder and the SkeletonHolder (when in use) and that will at least create the abstract SP dies in that case, though still not creating the other subprograms. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221051 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5793838fc8
commit
153cd65fd4
@ -416,7 +416,7 @@ DwarfCompileUnit::constructInlinedScopeDIE(LexicalScope *Scope) {
|
|||||||
DISubprogram InlinedSP = getDISubprogram(DS);
|
DISubprogram InlinedSP = getDISubprogram(DS);
|
||||||
// Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
|
// Find the subprogram's DwarfCompileUnit in the SPMap in case the subprogram
|
||||||
// was inlined from another compile unit.
|
// was inlined from another compile unit.
|
||||||
DIE *OriginDIE = DD->getAbstractSPDies()[InlinedSP];
|
DIE *OriginDIE = DU->getAbstractSPDies()[InlinedSP];
|
||||||
assert(OriginDIE && "Unable to find original DIE for an inlined subprogram.");
|
assert(OriginDIE && "Unable to find original DIE for an inlined subprogram.");
|
||||||
|
|
||||||
auto ScopeDIE = make_unique<DIE>(dwarf::DW_TAG_inlined_subroutine);
|
auto ScopeDIE = make_unique<DIE>(dwarf::DW_TAG_inlined_subroutine);
|
||||||
@ -588,7 +588,7 @@ DIE *DwarfCompileUnit::createAndAddScopeChildren(LexicalScope *Scope,
|
|||||||
|
|
||||||
void
|
void
|
||||||
DwarfCompileUnit::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) {
|
DwarfCompileUnit::constructAbstractSubprogramScopeDIE(LexicalScope *Scope) {
|
||||||
DIE *&AbsDef = DD->getAbstractSPDies()[Scope->getScopeNode()];
|
DIE *&AbsDef = DU->getAbstractSPDies()[Scope->getScopeNode()];
|
||||||
if (AbsDef)
|
if (AbsDef)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -648,7 +648,7 @@ DwarfCompileUnit::constructImportedEntityDIE(const DIImportedEntity &Module) {
|
|||||||
|
|
||||||
void DwarfCompileUnit::finishSubprogramDefinition(DISubprogram SP) {
|
void DwarfCompileUnit::finishSubprogramDefinition(DISubprogram SP) {
|
||||||
DIE *D = getDIE(SP);
|
DIE *D = getDIE(SP);
|
||||||
if (DIE *AbsSPDIE = DD->getAbstractSPDies().lookup(SP)) {
|
if (DIE *AbsSPDIE = DU->getAbstractSPDies().lookup(SP)) {
|
||||||
if (D)
|
if (D)
|
||||||
// If this subprogram has an abstract definition, reference that
|
// If this subprogram has an abstract definition, reference that
|
||||||
addDIEEntry(*D, dwarf::DW_AT_abstract_origin, *AbsSPDIE);
|
addDIEEntry(*D, dwarf::DW_AT_abstract_origin, *AbsSPDIE);
|
||||||
@ -671,7 +671,7 @@ void DwarfCompileUnit::collectDeadVariables(DISubprogram SP) {
|
|||||||
if (Variables.getNumElements() == 0)
|
if (Variables.getNumElements() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DIE *SPDIE = DD->getAbstractSPDies().lookup(SP);
|
DIE *SPDIE = DU->getAbstractSPDies().lookup(SP);
|
||||||
if (!SPDIE)
|
if (!SPDIE)
|
||||||
SPDIE = getDIE(SP);
|
SPDIE = getDIE(SP);
|
||||||
assert(SPDIE);
|
assert(SPDIE);
|
||||||
|
@ -190,9 +190,6 @@ class DwarfDebug : public AsmPrinterHandler {
|
|||||||
|
|
||||||
LexicalScopes LScopes;
|
LexicalScopes LScopes;
|
||||||
|
|
||||||
// Collection of abstract subprogram DIEs.
|
|
||||||
DenseMap<const MDNode *, DIE *> AbstractSPDies;
|
|
||||||
|
|
||||||
// Collection of abstract variables.
|
// Collection of abstract variables.
|
||||||
DenseMap<const MDNode *, std::unique_ptr<DbgVariable>> AbstractVariables;
|
DenseMap<const MDNode *, std::unique_ptr<DbgVariable>> AbstractVariables;
|
||||||
SmallVector<std::unique_ptr<DbgVariable>, 64> ConcreteVariables;
|
SmallVector<std::unique_ptr<DbgVariable>, 64> ConcreteVariables;
|
||||||
@ -650,10 +647,6 @@ public:
|
|||||||
|
|
||||||
// FIXME: Sink these functions down into DwarfFile/Dwarf*Unit.
|
// FIXME: Sink these functions down into DwarfFile/Dwarf*Unit.
|
||||||
|
|
||||||
DenseMap<const MDNode *, DIE *> &getAbstractSPDies() {
|
|
||||||
return AbstractSPDies;
|
|
||||||
}
|
|
||||||
|
|
||||||
SmallPtrSet<const MDNode *, 16> &getProcessedSPNodes() {
|
SmallPtrSet<const MDNode *, 16> &getProcessedSPNodes() {
|
||||||
return ProcessedSPNodes;
|
return ProcessedSPNodes;
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,9 @@ class DwarfFile {
|
|||||||
// Collection of dbg variables of a scope.
|
// Collection of dbg variables of a scope.
|
||||||
DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8>> ScopeVariables;
|
DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8>> ScopeVariables;
|
||||||
|
|
||||||
|
// Collection of abstract subprogram DIEs.
|
||||||
|
DenseMap<const MDNode *, DIE *> AbstractSPDies;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DwarfFile(AsmPrinter *AP, DwarfDebug &DD, StringRef Pref,
|
DwarfFile(AsmPrinter *AP, DwarfDebug &DD, StringRef Pref,
|
||||||
BumpPtrAllocator &DA);
|
BumpPtrAllocator &DA);
|
||||||
@ -93,6 +96,10 @@ public:
|
|||||||
DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8>> &getScopeVariables() {
|
DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8>> &getScopeVariables() {
|
||||||
return ScopeVariables;
|
return ScopeVariables;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DenseMap<const MDNode *, DIE *> &getAbstractSPDies() {
|
||||||
|
return AbstractSPDies;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user