Add a version of getSymbol with an explicit symbol table. Use it. NFC.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 23 Jul 2015 12:49:40 +0000 (12:49 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 23 Jul 2015 12:49:40 +0000 (12:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@243011 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/ELF.h
tools/obj2yaml/elf2yaml.cpp

index 22d14db4c139ce49970a2480cd24f3a649ab6a62..2c3d841553e033145ac470fd61b0a961050be430 100644 (file)
@@ -268,7 +268,13 @@ public:
   const Elf_Ehdr *getHeader() const { return Header; }
   ErrorOr<const Elf_Shdr *> getSection(const Elf_Sym *symb) const;
   ErrorOr<const Elf_Shdr *> getSection(uint32_t Index) const;
-  const Elf_Sym *getSymbol(uint32_t index) const;
+
+  const Elf_Sym *getSymbol(const Elf_Shdr *Sec, uint32_t Index) const {
+    return &*(symbol_begin(Sec) + Index);
+  }
+  const Elf_Sym *getSymbol(uint32_t Index) const {
+    return getSymbol(dot_symtab_sec, Index);
+  }
 
   ErrorOr<StringRef> getSectionName(const Elf_Shdr *Section) const;
   ErrorOr<ArrayRef<uint8_t> > getSectionContents(const Elf_Shdr *Sec) const;
@@ -378,12 +384,6 @@ ELFFile<ELFT>::getSection(const Elf_Sym *symb) const {
   return getSection(symb->st_shndx);
 }
 
-template <class ELFT>
-const typename ELFFile<ELFT>::Elf_Sym *
-ELFFile<ELFT>::getSymbol(uint32_t Index) const {
-  return &*(symbol_begin() + Index);
-}
-
 template <class ELFT>
 ErrorOr<ArrayRef<uint8_t> >
 ELFFile<ELFT>::getSectionContents(const Elf_Shdr *Sec) const {
index def3981eae164de8f3e85212bdfd4ea0cdbc7d3b..212e911452f6c32a81615410108f83fe8af0c4ff 100644 (file)
@@ -338,11 +338,12 @@ ErrorOr<ELFYAML::Group *> ELFDumper<ELFT>::dumpGroup(const Elf_Shdr *Shdr) {
   if (std::error_code EC = dumpCommonSection(Shdr, *S))
     return EC;
   // Get sh_info which is the signature.
-  const Elf_Sym *symbol = Obj.getSymbol(Shdr->sh_info);
-  ErrorOr<const Elf_Shdr *> Symtab = Obj.getSection(Shdr->sh_link);
-  if (std::error_code EC = Symtab.getError())
+  ErrorOr<const Elf_Shdr *> SymtabOrErr = Obj.getSection(Shdr->sh_link);
+  if (std::error_code EC = SymtabOrErr.getError())
     return EC;
-  ErrorOr<const Elf_Shdr *> StrTabSec = Obj.getSection((*Symtab)->sh_link);
+  const Elf_Shdr *Symtab = *SymtabOrErr;
+  const Elf_Sym *symbol = Obj.getSymbol(Symtab, Shdr->sh_info);
+  ErrorOr<const Elf_Shdr *> StrTabSec = Obj.getSection(Symtab->sh_link);
   if (std::error_code EC = StrTabSec.getError())
     return EC;
   ErrorOr<StringRef> StrTabOrErr = Obj.getStringTable(*StrTabSec);