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);