]> granicus.if.org Git - llvm/commitdiff
Move a free function out of ELFFile.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 3 Nov 2016 14:41:17 +0000 (14:41 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 3 Nov 2016 14:41:17 +0000 (14:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@285920 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/ELF.h
tools/llvm-readobj/ELFDumper.cpp

index 27cd7145a3e96dc15b8382a4283327220fcbf8b5..eb2405f32eee59a7cfac03817b7e34c463f98fdc 100644 (file)
@@ -150,9 +150,6 @@ public:
   ErrorOr<uint32_t>
   getExtendedSymbolTableIndex(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
                               ArrayRef<Elf_Word> ShndxTable) const;
-  ErrorOr<uint32_t>
-  getExtendedSymbolTableIndex(const Elf_Sym *Sym, const Elf_Sym *FirstSym,
-                              ArrayRef<Elf_Word> ShndxTable) const;
   const Elf_Ehdr *getHeader() const { return Header; }
   ErrorOr<uint32_t> getSectionIndex(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
                                     ArrayRef<Elf_Word> ShndxTable) const;
@@ -194,19 +191,10 @@ getSection(typename ELFT::ShdrRange Sections, uint32_t Index) {
 }
 
 template <class ELFT>
-ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
-    const Elf_Sym *Sym, const Elf_Shdr *SymTab,
-    ArrayRef<Elf_Word> ShndxTable) const {
-  auto SymsOrErr = symbols(SymTab);
-  if (std::error_code EC = SymsOrErr.getError())
-    return EC;
-  return getExtendedSymbolTableIndex(Sym, SymsOrErr->begin(), ShndxTable);
-}
-
-template <class ELFT>
-ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
-    const Elf_Sym *Sym, const Elf_Sym *FirstSym,
-    ArrayRef<Elf_Word> ShndxTable) const {
+inline ErrorOr<uint32_t>
+getExtendedSymbolTableIndex(const typename ELFT::Sym *Sym,
+                            const typename ELFT::Sym *FirstSym,
+                            ArrayRef<typename ELFT::Word> ShndxTable) {
   assert(Sym->st_shndx == ELF::SHN_XINDEX);
   unsigned Index = Sym - FirstSym;
   if (Index >= ShndxTable.size())
@@ -215,6 +203,17 @@ ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
   return ShndxTable[Index];
 }
 
+template <class ELFT>
+ErrorOr<uint32_t> ELFFile<ELFT>::getExtendedSymbolTableIndex(
+    const Elf_Sym *Sym, const Elf_Shdr *SymTab,
+    ArrayRef<Elf_Word> ShndxTable) const {
+  auto SymsOrErr = symbols(SymTab);
+  if (std::error_code EC = SymsOrErr.getError())
+    return EC;
+  return object::getExtendedSymbolTableIndex<ELFT>(Sym, SymsOrErr->begin(),
+                                                   ShndxTable);
+}
+
 template <class ELFT>
 ErrorOr<uint32_t>
 ELFFile<ELFT>::getSectionIndex(const Elf_Sym *Sym, const Elf_Shdr *SymTab,
index e6041530b06c911613b4700c4c77c331bf7beaef..5507bc5ac93a5dd9ef2f792a01c2e715499bbe07 100644 (file)
@@ -696,11 +696,11 @@ std::string ELFDumper<ELFT>::getFullSymbolName(const Elf_Sym *Symbol,
   return FullSymbolName;
 }
 
-template <typename ELFO>
+template <typename ELFT>
 static void
-getSectionNameIndex(const ELFO &Obj, const typename ELFO::Elf_Sym *Symbol,
-                    const typename ELFO::Elf_Sym *FirstSym,
-                    ArrayRef<typename ELFO::Elf_Word> ShndxTable,
+getSectionNameIndex(const ELFFile<ELFT> &Obj, const typename ELFT::Sym *Symbol,
+                    const typename ELFT::Sym *FirstSym,
+                    ArrayRef<typename ELFT::Word> ShndxTable,
                     StringRef &SectionName, unsigned &SectionIndex) {
   SectionIndex = Symbol->st_shndx;
   if (Symbol->isUndefined())
@@ -717,9 +717,9 @@ getSectionNameIndex(const ELFO &Obj, const typename ELFO::Elf_Sym *Symbol,
     SectionName = "Reserved";
   else {
     if (SectionIndex == SHN_XINDEX)
-      SectionIndex = unwrapOrError(
-          Obj.getExtendedSymbolTableIndex(Symbol, FirstSym, ShndxTable));
-    const typename ELFO::Elf_Shdr *Sec =
+      SectionIndex = unwrapOrError(object::getExtendedSymbolTableIndex<ELFT>(
+          Symbol, FirstSym, ShndxTable));
+    const typename ELFT::Shdr *Sec =
         unwrapOrError(Obj.getSection(SectionIndex));
     SectionName = unwrapOrError(Obj.getSectionName(Sec));
   }
@@ -2737,7 +2737,7 @@ std::string GNUStyle<ELFT>::getSymbolSectionNdx(const ELFO *Obj,
   case ELF::SHN_COMMON:
     return "COM";
   case ELF::SHN_XINDEX:
-    SectionIndex = unwrapOrError(Obj->getExtendedSymbolTableIndex(
+    SectionIndex = unwrapOrError(object::getExtendedSymbolTableIndex<ELFT>(
         Symbol, FirstSym, this->dumper()->getShndxTable()));
   default:
     // Find if: