diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Object/ELF.h | 14 | ||||
-rw-r--r-- | llvm/include/llvm/Object/ELFTypes.h | 12 | ||||
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-readobj/ELFDumper.cpp | 3 | ||||
-rw-r--r-- | llvm/tools/obj2yaml/elf2yaml.cpp | 4 |
5 files changed, 18 insertions, 17 deletions
diff --git a/llvm/include/llvm/Object/ELF.h b/llvm/include/llvm/Object/ELF.h index 54ab3f922b8..35d414899ec 100644 --- a/llvm/include/llvm/Object/ELF.h +++ b/llvm/include/llvm/Object/ELF.h @@ -371,7 +371,6 @@ public: /// /// \p SymTab is used to lookup the string table to use to get the symbol's /// name. - ErrorOr<StringRef> getSymbolName(StringRef StrTab, const Elf_Sym *Symb) const; ErrorOr<StringRef> getSectionName(const Elf_Shdr *Section) const; uint64_t getSymbolIndex(const Elf_Sym *sym) const; ErrorOr<ArrayRef<uint8_t> > getSectionContents(const Elf_Shdr *Sec) const; @@ -881,7 +880,7 @@ const char *ELFFile<ELFT>::getDynamicString(uintX_t Offset) const { template <class ELFT> ErrorOr<StringRef> ELFFile<ELFT>::getStaticSymbolName(const Elf_Sym *Symb) const { - return getSymbolName(DotStrtab, Symb); + return Symb->getName(DotStrtab); } template <class ELFT> @@ -899,15 +898,6 @@ ErrorOr<StringRef> ELFFile<ELFT>::getSymbolName(const Elf_Sym *Symb, } template <class ELFT> -ErrorOr<StringRef> ELFFile<ELFT>::getSymbolName(StringRef StrTab, - const Elf_Sym *Sym) const { - uint32_t Offset = Sym->st_name; - if (Offset >= StrTab.size()) - return object_error::parse_failed; - return StringRef(StrTab.data() + Offset); -} - -template <class ELFT> ErrorOr<StringRef> ELFFile<ELFT>::getSectionName(const Elf_Shdr *Section) const { uint32_t Offset = Section->sh_name; @@ -932,7 +922,7 @@ ErrorOr<StringRef> ELFFile<ELFT>::getSymbolVersion(const Elf_Shdr *section, // Non-dynamic symbols can have versions in their names // A name of the form 'foo@V1' indicates version 'V1', non-default. // A name of the form 'foo@@V2' indicates version 'V2', default version. - ErrorOr<StringRef> SymName = getSymbolName(StrTab, symb); + ErrorOr<StringRef> SymName = symb->getName(StrTab); if (!SymName) return SymName; StringRef Name = *SymName; diff --git a/llvm/include/llvm/Object/ELFTypes.h b/llvm/include/llvm/Object/ELFTypes.h index 3dcd46ef305..63e13909ae5 100644 --- a/llvm/include/llvm/Object/ELFTypes.h +++ b/llvm/include/llvm/Object/ELFTypes.h @@ -10,9 +10,11 @@ #ifndef LLVM_OBJECT_ELFTYPES_H #define LLVM_OBJECT_ELFTYPES_H +#include "llvm/Object/Error.h" #include "llvm/Support/DataTypes.h" #include "llvm/Support/ELF.h" #include "llvm/Support/Endian.h" +#include "llvm/Support/ErrorOr.h" namespace llvm { namespace object { @@ -205,8 +207,18 @@ struct Elf_Sym_Impl : Elf_Sym_Base<ELFT> { bool isExternal() const { return getBinding() != ELF::STB_LOCAL; } + + ErrorOr<StringRef> getName(StringRef StrTab) const; }; +template <class ELFT> +ErrorOr<StringRef> Elf_Sym_Impl<ELFT>::getName(StringRef StrTab) const { + uint32_t Offset = this->st_name; + if (Offset >= StrTab.size()) + return object_error::parse_failed; + return StringRef(StrTab.data() + Offset); +} + /// Elf_Versym: This is the structure of entries in the SHT_GNU_versym section /// (.gnu.version). This structure is identical for ELF32 and ELF64. template <class ELFT> diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 33308234e7d..796a79eb5c2 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -359,7 +359,7 @@ static std::error_code getRelocationValueString(const ELFObjectFile<ELFT> *Obj, return EC; Target = *SecName; } else { - ErrorOr<StringRef> SymName = EF.getSymbolName(StrTab, symb); + ErrorOr<StringRef> SymName = symb->getName(StrTab); if (!SymName) return SymName.getError(); Target = *SymName; diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index b1ba0906f69..c185e2944f0 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -760,8 +760,7 @@ void ELFDumper<ELFT>::printRelocation(const Elf_Shdr *Sec, const Elf_Shdr *StrTableSec = Obj->getSection(SymTable->sh_link); ErrorOr<StringRef> StrTableOrErr = Obj->getStringTable(StrTableSec); if (!error(StrTableOrErr.getError())) - TargetName = - errorOrDefault(Obj->getSymbolName(*StrTableOrErr, Sym.second)); + TargetName = errorOrDefault(Sym.second->getName(*StrTableOrErr)); } if (opts::ExpandRelocs) { diff --git a/llvm/tools/obj2yaml/elf2yaml.cpp b/llvm/tools/obj2yaml/elf2yaml.cpp index 73c83d897d9..e738945b4bd 100644 --- a/llvm/tools/obj2yaml/elf2yaml.cpp +++ b/llvm/tools/obj2yaml/elf2yaml.cpp @@ -189,7 +189,7 @@ std::error_code ELFDumper<ELFT>::dumpRelocation(const Elf_Shdr *Shdr, return EC; StringRef StrTab = *StrTabOrErr; - ErrorOr<StringRef> NameOrErr = Obj.getSymbolName(StrTab, NamePair.second); + ErrorOr<StringRef> NameOrErr = NamePair.second->getName(StrTab); if (std::error_code EC = NameOrErr.getError()) return EC; R.Symbol = NameOrErr.get(); @@ -314,7 +314,7 @@ ErrorOr<ELFYAML::Group *> ELFDumper<ELFT>::dumpGroup(const Elf_Shdr *Shdr) { auto sectionContents = Obj.getSectionContents(Shdr); if (std::error_code ec = sectionContents.getError()) return ec; - ErrorOr<StringRef> symbolName = Obj.getSymbolName(StrTab, symbol); + ErrorOr<StringRef> symbolName = symbol->getName(StrTab); if (std::error_code EC = symbolName.getError()) return EC; S->Info = *symbolName; |