summaryrefslogtreecommitdiffstats
path: root/llvm/lib/DebugInfo/DWARF/DWARFContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/DebugInfo/DWARF/DWARFContext.cpp')
-rw-r--r--llvm/lib/DebugInfo/DWARF/DWARFContext.cpp13
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 {
OpenPOWER on IntegriCloud