From: Rafael Espindola <rafael.espindola@gmail.com>
Date: Thu, 3 Nov 2016 13:22:51 +0000 (+0000)
Subject: Split getStringTableForSymtab.
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=74509075a40103f39f0f248d8820bafdb965515c;p=llvm

Split getStringTableForSymtab.

For use in cases where we already have the section table.

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

diff --git a/include/llvm/Object/ELF.h b/include/llvm/Object/ELF.h
index 48120a30f4d..5fd2d38793c 100644
--- a/include/llvm/Object/ELF.h
+++ b/include/llvm/Object/ELF.h
@@ -79,6 +79,8 @@ public:
 
   ErrorOr<StringRef> getStringTable(const Elf_Shdr *Section) const;
   ErrorOr<StringRef> getStringTableForSymtab(const Elf_Shdr &Section) const;
+  ErrorOr<StringRef> getStringTableForSymtab(const Elf_Shdr &Section,
+                                             Elf_Shdr_Range Sections) const;
 
   ErrorOr<ArrayRef<Elf_Word>> getSHNDXTable(const Elf_Shdr &Section) const;
   ErrorOr<ArrayRef<Elf_Word>> getSHNDXTable(const Elf_Shdr &Section,
@@ -456,9 +458,21 @@ ELFFile<ELFT>::getSHNDXTable(const Elf_Shdr &Section,
 template <class ELFT>
 ErrorOr<StringRef>
 ELFFile<ELFT>::getStringTableForSymtab(const Elf_Shdr &Sec) const {
+  auto SectionsOrErr = sections();
+  if (std::error_code EC = SectionsOrErr.getError())
+    return EC;
+  return getStringTableForSymtab(Sec, *SectionsOrErr);
+}
+
+template <class ELFT>
+ErrorOr<StringRef>
+ELFFile<ELFT>::getStringTableForSymtab(const Elf_Shdr &Sec,
+                                       Elf_Shdr_Range Sections) const {
+
   if (Sec.sh_type != ELF::SHT_SYMTAB && Sec.sh_type != ELF::SHT_DYNSYM)
     return object_error::parse_failed;
-  ErrorOr<const Elf_Shdr *> SectionOrErr = getSection(Sec.sh_link);
+  ErrorOr<const Elf_Shdr *> SectionOrErr =
+      object::getSection<ELFT>(Sections, Sec.sh_link);
   if (std::error_code EC = SectionOrErr.getError())
     return EC;
   return getStringTable(*SectionOrErr);