[llvm-dwarfdump] - Refactor section name/uniqueness gathering.

As was requested in D36313 thread,

with this patch section names and uniqueness calculated once,
and not every time when a range is dumped.

Differential revision: https://reviews.llvm.org/D36740

llvm-svn: 310923
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
index 6b557b9..7086535 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -57,18 +57,9 @@
                        const DWARFAddressRangesVector &Ranges,
                        unsigned AddressSize, unsigned Indent,
                        const DIDumpOptions &DumpOpts) {
-  StringMap<unsigned> SectionAmountMap;
-  std::vector<StringRef> SectionNames;
-  if (Obj.getFile() && !DumpOpts.Brief) {
-    for (const SectionRef &Section : Obj.getFile()->sections()) {
-      StringRef Name;
-      if (Section.getName(Name))
-        Name = "<error>";
-
-      ++SectionAmountMap[Name];
-      SectionNames.push_back(Name);
-    }
-  }
+  ArrayRef<SectionName> SectionNames;
+  if (!DumpOpts.Brief)
+    SectionNames = Obj.getSectionNames();
 
   for (size_t I = 0; I < Ranges.size(); ++I) {
     const DWARFAddressRange &R = Ranges[I];
@@ -81,13 +72,11 @@
     if (SectionNames.empty() || R.SectionIndex == -1ULL)
       continue;
 
-    StringRef Name = R.SectionIndex < SectionNames.size()
-                         ? SectionNames[R.SectionIndex]
-                         : "<error>";
-    OS << format(" \"%s\"", Name.str().c_str());
+    StringRef Name = SectionNames[R.SectionIndex].Name;
+    OS << " \"" << Name << '\"';
 
-    // Print section index if there is more than one section with this name.
-    if (SectionAmountMap[Name] > 1)
+    // Print section index if name is not unique.
+    if (!SectionNames[R.SectionIndex].IsNameUnique)
       OS << format(" [%u]", R.SectionIndex);
   }
 }