Convert obj->getSymbolName to sym->getName.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 29 Jun 2015 21:24:55 +0000 (21:24 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 29 Jun 2015 21:24:55 +0000 (21:24 +0000)
I doesn't depend on the object anymore.

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

include/llvm/Object/ELF.h
include/llvm/Object/ELFTypes.h
tools/llvm-objdump/llvm-objdump.cpp
tools/llvm-readobj/ELFDumper.cpp
tools/obj2yaml/elf2yaml.cpp

index 54ab3f922b833e5075ae220d9a06af4173885274..35d414899ecc1141715fc3544bc4398040d8b7f3 100644 (file)
@@ -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>
@@ -898,15 +897,6 @@ ErrorOr<StringRef> ELFFile<ELFT>::getSymbolName(const Elf_Sym *Symb,
   return getStaticSymbolName(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 {
@@ -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;
index 3dcd46ef3052b16b762cabb5550ac41f4b65a249..63e13909ae5c9481d0dc48a87a5141701b9a2ca9 100644 (file)
 #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>
index 33308234e7d7e504b6b554bac7eee00474dd08f9..796a79eb5c2b5db25c55fc9ceb8821b25928a6a2 100644 (file)
@@ -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;
index b1ba0906f69691375e25e67a793ce4bb0b1936d4..c185e2944f0b63b2d76aa92ee862975be963d73e 100644 (file)
@@ -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) {
index 73c83d897d99cbced44b3d8249fb0a00bdf487cc..e738945b4bdc196ce2f4ef01eaa5e334b5e51cc7 100644 (file)
@@ -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;