]> granicus.if.org Git - llvm/commitdiff
Split getSHNDXTable in two.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 3 Nov 2016 12:23:41 +0000 (12:23 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 3 Nov 2016 12:23:41 +0000 (12:23 +0000)
Some clients already have the section table available.

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

include/llvm/Object/ELF.h

index 71e27042af95e2c0143918c5071da458f85434d6..48120a30f4d6a8d4e9c653a8512d28c04a418e71 100644 (file)
@@ -81,6 +81,8 @@ public:
   ErrorOr<StringRef> getStringTableForSymtab(const Elf_Shdr &Section) const;
 
   ErrorOr<ArrayRef<Elf_Word>> getSHNDXTable(const Elf_Shdr &Section) const;
+  ErrorOr<ArrayRef<Elf_Word>> getSHNDXTable(const Elf_Shdr &Section,
+                                            Elf_Shdr_Range Sections) const;
 
   void VerifyStrTab(const Elf_Shdr *sh) const;
 
@@ -423,12 +425,23 @@ ELFFile<ELFT>::getStringTable(const Elf_Shdr *Section) const {
 template <class ELFT>
 ErrorOr<ArrayRef<typename ELFT::Word>>
 ELFFile<ELFT>::getSHNDXTable(const Elf_Shdr &Section) const {
+  auto SectionsOrErr = sections();
+  if (std::error_code EC = SectionsOrErr.getError())
+    return EC;
+  return getSHNDXTable(Section, *SectionsOrErr);
+}
+
+template <class ELFT>
+ErrorOr<ArrayRef<typename ELFT::Word>>
+ELFFile<ELFT>::getSHNDXTable(const Elf_Shdr &Section,
+                             Elf_Shdr_Range Sections) const {
   assert(Section.sh_type == ELF::SHT_SYMTAB_SHNDX);
   auto VOrErr = getSectionContentsAsArray<Elf_Word>(&Section);
   if (std::error_code EC = VOrErr.getError())
     return EC;
   ArrayRef<Elf_Word> V = *VOrErr;
-  ErrorOr<const Elf_Shdr *> SymTableOrErr = getSection(Section.sh_link);
+  ErrorOr<const Elf_Shdr *> SymTableOrErr =
+      object::getSection<ELFT>(Sections, Section.sh_link);
   if (std::error_code EC = SymTableOrErr.getError())
     return EC;
   const Elf_Shdr &SymTable = **SymTableOrErr;