diff options
Diffstat (limited to 'llvm/lib/DebugInfo/DWARF/DWARFContext.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/DWARF/DWARFContext.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp b/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp index 703fc894918..eaf26bfa295 100644 --- a/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp +++ b/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp @@ -934,6 +934,7 @@ class DWARFObjInMemory final : public DWARFObject { uint8_t AddressSize; StringRef FileName; const object::ObjectFile *Obj = nullptr; + std::vector<SectionName> SectionNames; using TypeSectionMap = MapVector<object::SectionRef, DWARFSectionMap, std::map<object::SectionRef, unsigned>>; @@ -1055,9 +1056,13 @@ public: AddressSize(Obj.getBytesInAddress()), FileName(Obj.getFileName()), Obj(&Obj) { + StringMap<unsigned> SectionAmountMap; for (const SectionRef &Section : Obj.sections()) { StringRef Name; Section.getName(Name); + ++SectionAmountMap[Name]; + SectionNames.push_back({ Name, true }); + // Skip BSS and Virtual sections, they aren't interesting. if (Section.isBSS() || Section.isVirtual()) continue; @@ -1179,6 +1184,10 @@ public: Map->insert({Reloc.getOffset(), Rel}); } } + + for (SectionName &S : SectionNames) + if (SectionAmountMap[S.Name] > 1) + S.IsNameUnique = false; } Optional<RelocAddrEntry> find(const DWARFSection &S, @@ -1192,6 +1201,10 @@ public: const object::ObjectFile *getFile() const override { return Obj; } + ArrayRef<SectionName> getSectionNames() const override { + return SectionNames; + } + bool isLittleEndian() const override { return IsLittleEndian; } StringRef getAbbrevDWOSection() const override { return AbbrevDWOSection; } const DWARFSection &getLineDWOSection() const override { |