Remove the symbol iteration functions that don't take a symbol table.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 7 Aug 2015 20:07:27 +0000 (20:07 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 7 Aug 2015 20:07:27 +0000 (20:07 +0000)
Another step in making ELFFile's constructor not iterate over all sections.

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

include/llvm/Object/ELF.h
include/llvm/Object/ELFObjectFile.h
tools/llvm-readobj/ARMEHABIPrinter.h
tools/llvm-readobj/ELFDumper.cpp
tools/obj2yaml/elf2yaml.cpp

index a5c06dacec6e9686e9cd74a1217bf6a30a14fd99..78e035986b3b76dd2882cc60336ea4da08a56dc6 100644 (file)
@@ -147,16 +147,6 @@ public:
     return make_range(symbol_begin(Sec), symbol_end(Sec));
   }
 
-  const Elf_Sym *symbol_begin() const { return symbol_begin(dot_symtab_sec); }
-  const Elf_Sym *symbol_end() const { return symbol_end(dot_symtab_sec); }
-  Elf_Sym_Range symbols() const { return symbols(dot_symtab_sec); }
-
-  const Elf_Sym *dynamic_symbol_begin() const {
-    return symbol_begin(DotDynSymSec);
-  }
-  const Elf_Sym *dynamic_symbol_end() const { return symbol_end(DotDynSymSec); }
-  Elf_Sym_Range dynamic_symbols() const { return symbols(DotDynSymSec); }
-
   typedef iterator_range<const Elf_Rela *> Elf_Rela_Range;
 
   const Elf_Rela *rela_begin(const Elf_Shdr *sec) const {
@@ -235,7 +225,7 @@ template <class ELFT>
 ELF::Elf64_Word
 ELFFile<ELFT>::getExtendedSymbolTableIndex(const Elf_Sym *Sym) const {
   assert(Sym->st_shndx == ELF::SHN_XINDEX);
-  unsigned Index = Sym - symbol_begin();
+  unsigned Index = Sym - symbol_begin(dot_symtab_sec);
 
   // FIXME: error checking
   const Elf_Word *ShndxTable = reinterpret_cast<const Elf_Word *>(
index cde5f8dc51ebbc0687cbfb26b87690b3e9e4e93b..4b628e1df97a2753f7855987cb536dad7ca18ca6 100644 (file)
@@ -474,7 +474,8 @@ uint32_t ELFObjectFile<ELFT>::getSymbolFlags(DataRefImpl Sym) const {
     Result |= SymbolRef::SF_Absolute;
 
   if (ESym->getType() == ELF::STT_FILE || ESym->getType() == ELF::STT_SECTION ||
-      ESym == EF.symbol_begin() || ESym == EF.dynamic_symbol_begin())
+      ESym == EF.symbol_begin(EF.getDotSymtabSec()) ||
+      ESym == EF.symbol_begin(EF.getDotDynSymSec()))
     Result |= SymbolRef::SF_FormatSpecific;
 
   if (EF.getHeader()->e_machine == ELF::EM_ARM) {
index 4b8744e201566ce11326b115627b6f85514b97eb..2917cf0e1181ca9153967275e52eacf9158058c4 100644 (file)
@@ -349,7 +349,7 @@ PrinterContext<ET>::FunctionAtAddress(unsigned Section,
   error(StrTableOrErr.getError());
   StringRef StrTable = *StrTableOrErr;
 
-  for (const Elf_Sym &Sym : ELF->symbols())
+  for (const Elf_Sym &Sym : ELF->symbols(ELF->getDotSymtabSec()))
     if (Sym.st_shndx == Section && Sym.st_value == Address &&
         Sym.getType() == ELF::STT_FUNC)
       return Sym.getName(StrTable);
index 5887d2944d1244a7cfc6993e7638d7b54f56e435..50473d7bb04280b490693193dff10ef29878f61d 100644 (file)
@@ -995,7 +995,7 @@ void ELFDumper<ELFT>::printSections() {
       error(StrTableOrErr.getError());
       StringRef StrTable = *StrTableOrErr;
 
-      for (const Elf_Sym &Sym : Obj->symbols()) {
+      for (const Elf_Sym &Sym : Obj->symbols(Symtab)) {
         ErrorOr<const Elf_Shdr *> SymSec = Obj->getSection(&Sym);
         if (!SymSec)
           continue;
@@ -1126,7 +1126,7 @@ void ELFDumper<ELFT>::printSymbols() {
   ErrorOr<StringRef> StrTableOrErr = Obj->getStringTableForSymtab(*Symtab);
   error(StrTableOrErr.getError());
   StringRef StrTable = *StrTableOrErr;
-  for (const Elf_Sym &Sym : Obj->symbols())
+  for (const Elf_Sym &Sym : Obj->symbols(Symtab))
     printSymbol(&Sym, StrTable, false);
 }
 
index 2c6fc1bb09cacd1ba4b57d85d7165336d4c09fc3..0dcb4ef38f882be6d7e26597c41b4116b3cfdd5b 100644 (file)
@@ -129,7 +129,7 @@ ErrorOr<ELFYAML::Object *> ELFDumper<ELFT>::dump() {
   StringRef StrTable = *StrTableOrErr;
 
   bool IsFirstSym = true;
-  for (const Elf_Sym &Sym : Obj.symbols()) {
+  for (const Elf_Sym &Sym : Obj.symbols(Obj.getDotSymtabSec())) {
     if (IsFirstSym) {
       IsFirstSym = false;
       continue;