Modernize getELFDynamicSymbolIterators.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 25 Jun 2015 14:39:35 +0000 (14:39 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 25 Jun 2015 14:39:35 +0000 (14:39 +0000)
* Have it return a iterator_range.
* Remove the global function.
* Rename to getDynamicSymbolIterators.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240644 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/ELFObjectFile.h
tools/llvm-nm/llvm-nm.cpp
tools/llvm-symbolizer/LLVMSymbolize.cpp

index d8e1c161036b10f5c9a9bd5e33fe997292a87cb9..8ecfa71ff2e0c8d3d28e1527e4f2e819ee038ea8 100644 (file)
@@ -46,8 +46,7 @@ public:
   // and addend or not.
   virtual bool hasRelocationAddend(DataRefImpl Rel) const = 0;
 
   // and addend or not.
   virtual bool hasRelocationAddend(DataRefImpl Rel) const = 0;
 
-  virtual std::pair<symbol_iterator, symbol_iterator>
-  getELFDynamicSymbolIterators() const = 0;
+  virtual symbol_iterator_range getDynamicSymbolIterators() const = 0;
 
   virtual uint64_t getSectionFlags(SectionRef Sec) const = 0;
   virtual uint32_t getSectionType(SectionRef Sec) const = 0;
 
   virtual uint64_t getSectionFlags(SectionRef Sec) const = 0;
   virtual uint32_t getSectionType(SectionRef Sec) const = 0;
@@ -237,8 +236,7 @@ public:
                                       ELFT::Is64Bits);
   }
 
                                       ELFT::Is64Bits);
   }
 
-  std::pair<symbol_iterator, symbol_iterator>
-  getELFDynamicSymbolIterators() const override;
+  symbol_iterator_range getDynamicSymbolIterators() const override;
 
   bool isRelocatableObject() const override;
 };
 
   bool isRelocatableObject() const override;
 };
@@ -855,20 +853,15 @@ unsigned ELFObjectFile<ELFT>::getArch() const {
 }
 
 template <class ELFT>
 }
 
 template <class ELFT>
-std::pair<symbol_iterator, symbol_iterator>
-ELFObjectFile<ELFT>::getELFDynamicSymbolIterators() const {
-  return std::make_pair(dynamic_symbol_begin(), dynamic_symbol_end());
+ObjectFile::symbol_iterator_range
+ELFObjectFile<ELFT>::getDynamicSymbolIterators() const {
+  return make_range(dynamic_symbol_begin(), dynamic_symbol_end());
 }
 
 template <class ELFT> bool ELFObjectFile<ELFT>::isRelocatableObject() const {
   return EF.getHeader()->e_type == ELF::ET_REL;
 }
 
 }
 
 template <class ELFT> bool ELFObjectFile<ELFT>::isRelocatableObject() const {
   return EF.getHeader()->e_type == ELF::ET_REL;
 }
 
-inline std::pair<symbol_iterator, symbol_iterator>
-getELFDynamicSymbolIterators(const SymbolicFile *Obj) {
-  return cast<ELFObjectFileBase>(Obj)->getELFDynamicSymbolIterators();
-}
-
 }
 }
 
 }
 }
 
index b96d152f783afcf30e376e1d3b09322c6d510d93..15dbc8c9beaee163a0c34221bd2b457907f0c31b 100644 (file)
@@ -890,14 +890,14 @@ static void dumpSymbolNamesFromObject(SymbolicFile &Obj, bool printName,
   basic_symbol_iterator IBegin = Obj.symbol_begin();
   basic_symbol_iterator IEnd = Obj.symbol_end();
   if (DynamicSyms) {
   basic_symbol_iterator IBegin = Obj.symbol_begin();
   basic_symbol_iterator IEnd = Obj.symbol_end();
   if (DynamicSyms) {
-    if (!Obj.isELF()) {
+    const auto *E = dyn_cast<ELFObjectFileBase>(&Obj);
+    if (!E) {
       error("File format has no dynamic symbol table", Obj.getFileName());
       return;
     }
       error("File format has no dynamic symbol table", Obj.getFileName());
       return;
     }
-    std::pair<symbol_iterator, symbol_iterator> IDyn =
-        getELFDynamicSymbolIterators(&Obj);
-    IBegin = IDyn.first;
-    IEnd = IDyn.second;
+    auto IDyn = E->getDynamicSymbolIterators();
+    IBegin = IDyn.begin();
+    IEnd = IDyn.end();
   }
   std::string NameBuffer;
   raw_string_ostream OS(NameBuffer);
   }
   std::string NameBuffer;
   raw_string_ostream OS(NameBuffer);
index b6af342a0bc0ed6ce588a4bfd117d83abd684929..eaf0d08f1052f47884d566946d623c694082b394 100644 (file)
@@ -77,10 +77,9 @@ ModuleInfo::ModuleInfo(ObjectFile *Obj, DIContext *DICtx)
   bool NoSymbolTable = (Module->symbol_begin() == Module->symbol_end());
   if (NoSymbolTable && Module->isELF()) {
     // Fallback to dynamic symbol table, if regular symbol table is stripped.
   bool NoSymbolTable = (Module->symbol_begin() == Module->symbol_end());
   if (NoSymbolTable && Module->isELF()) {
     // Fallback to dynamic symbol table, if regular symbol table is stripped.
-    std::pair<symbol_iterator, symbol_iterator> IDyn =
-        getELFDynamicSymbolIterators(Module);
-    for (symbol_iterator si = IDyn.first, se = IDyn.second; si != se; ++si) {
-      addSymbol(*si, OpdExtractor.get(), OpdAddress);
+    auto IDyn = cast<ELFObjectFileBase>(Module)->getDynamicSymbolIterators();
+    for (SymbolRef Sym : IDyn) {
+      addSymbol(Sym, OpdExtractor.get(), OpdAddress);
     }
   }
 }
     }
   }
 }