diff options
author | Vladislav Dzhidzhoev <vdzhidzhoev@accesssoftek.com> | 2023-06-15 18:04:32 +0200 |
---|---|---|
committer | Vladislav Dzhidzhoev <vdzhidzhoev@accesssoftek.com> | 2023-06-15 18:04:32 +0200 |
commit | fbdeb8cbc147f8f49fbd4bf23fae01bd142f0f5d (patch) | |
tree | adafb5b1b81e23b3f185cdcabc44ac42b844fa5d /llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h | |
parent | dcdfc963d7934a1313094b6fe9ce7aa04debe495 (diff) | |
download | llvm-fbdeb8cbc147f8f49fbd4bf23fae01bd142f0f5d.zip llvm-fbdeb8cbc147f8f49fbd4bf23fae01bd142f0f5d.tar.gz llvm-fbdeb8cbc147f8f49fbd4bf23fae01bd142f0f5d.tar.bz2 |
Revert "[DebugMetadata][DwarfDebug] Fix DWARF emisson of function-local imported entities (3/7)"
This reverts commit d80fdc6fc1a6e717af1bcd7a7313e65de433ba85.
split-dwarf-local-impor3.ll fails because of an issue with
Dwo sections emission on Windows platform.
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h | 53 |
1 files changed, 22 insertions, 31 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h index 6ef73eb..5581b91 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h @@ -61,6 +61,11 @@ class DwarfCompileUnit final : public DwarfUnit { /// The start of the unit macro info within macro section. MCSymbol *MacroLabelBegin; + using ImportedEntityList = SmallVector<const MDNode *, 8>; + using ImportedEntityMap = DenseMap<const MDNode *, ImportedEntityList>; + + ImportedEntityMap ImportedEntities; + /// GlobalNames - A map of globally visible named entities for this unit. StringMap<const DIE *> GlobalNames; @@ -74,20 +79,7 @@ class DwarfCompileUnit final : public DwarfUnit { // ranges/locs. const MCSymbol *BaseAddress = nullptr; - using MDNodeSetVector = - SetVector<const MDNode *, SmallVector<const MDNode *, 4>, - SmallPtrSet<const MDNode *, 4>>; - - // List of entities (either static locals, types or imports) that - // belong to subprograms within this CU. - MDNodeSetVector DeferredLocalDecls; - - // List of concrete lexical block scopes belong to subprograms within this CU. - DenseMap<const DILocalScope *, DIE *> LexicalBlockDIEs; - - // List of abstract local scopes (either DISubprogram or DILexicalBlock). - DenseMap<const DILocalScope *, DIE *> AbstractLocalScopeDIEs; - + DenseMap<const MDNode *, DIE *> AbstractSPDies; DenseMap<const DINode *, std::unique_ptr<DbgEntity>> AbstractEntities; /// DWO ID for correlating skeleton and split units. @@ -102,10 +94,10 @@ class DwarfCompileUnit final : public DwarfUnit { bool isDwoUnit() const override; - DenseMap<const DILocalScope *, DIE *> &getAbstractScopeDIEs() { + DenseMap<const MDNode *, DIE *> &getAbstractSPDies() { if (isDwoUnit() && !DD->shareAcrossDWOCUs()) - return AbstractLocalScopeDIEs; - return DU->getAbstractScopeDIEs(); + return AbstractSPDies; + return DU->getAbstractSPDies(); } DenseMap<const DINode *, std::unique_ptr<DbgEntity>> &getAbstractEntities() { @@ -183,6 +175,17 @@ public: unsigned getOrCreateSourceID(const DIFile *File) override; + void addImportedEntity(const DIImportedEntity* IE) { + DIScope *Scope = IE->getScope(); + assert(Scope && "Invalid Scope encoding!"); + if (!isa<DILocalScope>(Scope)) + // No need to add imported enities that are not local declaration. + return; + + auto *LocalScope = cast<DILocalScope>(Scope)->getNonLexicalBlockFileScope(); + ImportedEntities[LocalScope].push_back(IE); + } + /// addRange - Add an address range to the list of ranges for this unit. void addRange(RangeSpan Range); @@ -214,11 +217,6 @@ public: /// attach DW_AT_low_pc/DW_AT_high_pc labels. DIE *constructLexicalScopeDIE(LexicalScope *Scope); - /// Get a DIE for the given DILexicalBlock. - /// Note that this function assumes that the DIE has been already created - /// and it's an error, if it hasn't. - DIE *getLexicalBlockDIE(const DILexicalBlock *LB); - /// constructVariableDIE - Construct a DIE for the given DbgVariable. DIE *constructVariableDIE(DbgVariable &DV, bool Abstract = false); @@ -230,10 +228,6 @@ public: void createBaseTypeDIEs(); - /// Construct a DIE for a given scope. - /// This instance of 'getOrCreateContextDIE()' can handle DILocalScope. - DIE *getOrCreateContextDIE(const DIScope *Ty) override; - /// Construct a DIE for this subprogram scope. DIE &constructSubprogramScopeDIE(const DISubprogram *Sub, LexicalScope *Scope); @@ -272,9 +266,8 @@ public: void constructCallSiteParmEntryDIEs(DIE &CallSiteDIE, SmallVector<DbgCallSiteParam, 4> &Params); - /// Get or create a DIE for an imported entity. - DIE *getOrCreateImportedEntityDIE(const DIImportedEntity *IE); - DIE *constructImportedEntityDIE(const DIImportedEntity *IE); + /// Construct import_module DIE. + DIE *constructImportedEntityDIE(const DIImportedEntity *Module); void finishSubprogramDefinition(const DISubprogram *SP); void finishEntityDefinition(const DbgEntity *Entity); @@ -371,8 +364,6 @@ public: bool hasDwarfPubSections() const; void addBaseTypeRef(DIEValueList &Die, int64_t Idx); - - MDNodeSetVector &getDeferredLocalDecls() { return DeferredLocalDecls; } }; } // end namespace llvm |