Remove dead code.
[oota-llvm.git] / include / llvm / Object / ELFObjectFile.h
index 5022be552a5a83eb553b481d431f2e8394e3887c..103113192053908a1286829088cafca0c5729c2a 100644 (file)
@@ -28,6 +28,7 @@
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/raw_ostream.h"
 #include <algorithm>
+#include <cctype>
 #include <limits>
 #include <utility>
 
@@ -60,7 +61,6 @@ protected:
   virtual error_code getSymbolAddress(DataRefImpl Symb, uint64_t &Res) const;
   virtual error_code getSymbolAlignment(DataRefImpl Symb, uint32_t &Res) const;
   virtual error_code getSymbolSize(DataRefImpl Symb, uint64_t &Res) const;
-  virtual error_code getSymbolNMTypeChar(DataRefImpl Symb, char &Res) const;
   virtual error_code getSymbolFlags(DataRefImpl Symb, uint32_t &Res) const;
   virtual error_code getSymbolType(DataRefImpl Symb,
                                    SymbolRef::Type &Res) const;
@@ -103,8 +103,6 @@ protected:
   getRelocationValueString(DataRefImpl Rel,
                            SmallVectorImpl<char> &Result) const;
 
-protected: // ELF specific protected members.
-  const Elf_Sym *getSymbol(DataRefImpl Symb) const;
   uint64_t getROffset(DataRefImpl Rel) const;
   StringRef getRelocationTypeName(uint32_t Type) const;
 
@@ -167,7 +165,9 @@ protected: // ELF specific protected members.
   bool isDyldELFObject;
 
 public:
-  ELFObjectFile(MemoryBuffer *Object, error_code &ec);
+  ELFObjectFile(MemoryBuffer *Object, error_code &EC, bool BufferOwned = true);
+
+  const Elf_Sym *getSymbol(DataRefImpl Symb) const;
 
   virtual symbol_iterator begin_symbols() const;
   virtual symbol_iterator end_symbols() const;
@@ -187,7 +187,6 @@ public:
 
   virtual uint8_t getBytesInAddress() const;
   virtual StringRef getFileFormatName() const;
-  virtual StringRef getObjectType() const { return "ELF"; }
   virtual unsigned getArch() const;
   virtual StringRef getLoadName() const;
 
@@ -219,7 +218,7 @@ error_code ELFObjectFile<ELFT>::getSymbolName(DataRefImpl Symb,
                                               StringRef &Result) const {
   ErrorOr<StringRef> Name = EF.getSymbolName(toELFSymIter(Symb));
   if (!Name)
-    return Name;
+    return Name.getError();
   Result = *Name;
   return object_error::success;
 }
@@ -233,7 +232,7 @@ error_code ELFObjectFile<ELFT>::getSymbolVersion(SymbolRef SymRef,
   ErrorOr<StringRef> Ver =
       EF.getSymbolVersion(EF.getSection(Symb.d.b), symb, IsDefault);
   if (!Ver)
-    return Ver;
+    return Ver.getError();
   Version = *Ver;
   return object_error::success;
 }
@@ -295,6 +294,7 @@ error_code ELFObjectFile<ELFT>::getSymbolAddress(DataRefImpl Symb,
   case ELF::STT_FUNC:
   case ELF::STT_OBJECT:
   case ELF::STT_NOTYPE:
+  case ELF::STT_TLS:
     bool IsRelocatable;
     switch (EF.getHeader()->e_type) {
     case ELF::ET_EXEC:
@@ -337,78 +337,6 @@ error_code ELFObjectFile<ELFT>::getSymbolSize(DataRefImpl Symb,
   return object_error::success;
 }
 
-template <class ELFT>
-error_code ELFObjectFile<ELFT>::getSymbolNMTypeChar(DataRefImpl Symb,
-                                                    char &Result) const {
-  const Elf_Sym *ESym = getSymbol(Symb);
-  const Elf_Shdr *ESec = EF.getSection(ESym);
-
-  char ret = '?';
-
-  if (ESec) {
-    switch (ESec->sh_type) {
-    case ELF::SHT_PROGBITS:
-    case ELF::SHT_DYNAMIC:
-      switch (ESec->sh_flags) {
-      case (ELF::SHF_ALLOC | ELF::SHF_EXECINSTR):
-        ret = 't';
-        break;
-      case (ELF::SHF_ALLOC | ELF::SHF_WRITE):
-        ret = 'd';
-        break;
-      case ELF::SHF_ALLOC:
-      case (ELF::SHF_ALLOC | ELF::SHF_MERGE):
-      case (ELF::SHF_ALLOC | ELF::SHF_MERGE | ELF::SHF_STRINGS):
-        ret = 'r';
-        break;
-      }
-      break;
-    case ELF::SHT_NOBITS:
-      ret = 'b';
-    }
-  }
-
-  switch (EF.getSymbolTableIndex(ESym)) {
-  case ELF::SHN_UNDEF:
-    if (ret == '?')
-      ret = 'U';
-    break;
-  case ELF::SHN_ABS:
-    ret = 'a';
-    break;
-  case ELF::SHN_COMMON:
-    ret = 'c';
-    break;
-  }
-
-  switch (ESym->getBinding()) {
-  case ELF::STB_GLOBAL:
-    ret = ::toupper(ret);
-    break;
-  case ELF::STB_WEAK:
-    if (EF.getSymbolTableIndex(ESym) == ELF::SHN_UNDEF)
-      ret = 'w';
-    else if (ESym->getType() == ELF::STT_OBJECT)
-      ret = 'V';
-    else
-      ret = 'W';
-  }
-
-  if (ret == '?' && ESym->getType() == ELF::STT_SECTION) {
-    ErrorOr<StringRef> Name = EF.getSymbolName(toELFSymIter(Symb));
-    if (!Name)
-      return Name;
-    Result = StringSwitch<char>(*Name)
-        .StartsWith(".debug", 'N')
-        .StartsWith(".note", 'n')
-        .Default('?');
-    return object_error::success;
-  }
-
-  Result = ret;
-  return object_error::success;
-}
-
 template <class ELFT>
 error_code ELFObjectFile<ELFT>::getSymbolType(DataRefImpl Symb,
                                               SymbolRef::Type &Result) const {
@@ -507,7 +435,7 @@ error_code ELFObjectFile<ELFT>::getSectionName(DataRefImpl Sec,
                                                StringRef &Result) const {
   ErrorOr<StringRef> Name = EF.getSectionName(&*toELFShdrIter(Sec));
   if (!Name)
-    return Name;
+    return Name.getError();
   Result = *Name;
   return object_error::success;
 }
@@ -815,7 +743,7 @@ error_code ELFObjectFile<ELFT>::getRelocationValueString(
   ErrorOr<StringRef> SymName =
       EF.getSymbolName(EF.getSection(sec->sh_link), symb);
   if (!SymName)
-    return SymName;
+    return SymName.getError();
   switch (EF.getHeader()->e_machine) {
   case ELF::EM_X86_64:
     switch (type) {
@@ -855,6 +783,7 @@ error_code ELFObjectFile<ELFT>::getRelocationValueString(
   }
   case ELF::EM_ARM:
   case ELF::EM_HEXAGON:
+  case ELF::EM_MIPS:
     res = *SymName;
     break;
   default:
@@ -884,11 +813,12 @@ ELFObjectFile<ELFT>::getRela(DataRefImpl Rela) const {
 }
 
 template <class ELFT>
-ELFObjectFile<ELFT>::ELFObjectFile(MemoryBuffer *Object, error_code &ec)
+ELFObjectFile<ELFT>::ELFObjectFile(MemoryBuffer *Object, error_code &ec,
+                                   bool BufferOwned)
     : ObjectFile(getELFType(static_cast<endianness>(ELFT::TargetEndianness) ==
                                 support::little,
                             ELFT::Is64Bits),
-                 Object),
+                 Object, BufferOwned),
       EF(Object, ec) {}
 
 template <class ELFT>
@@ -994,6 +924,9 @@ StringRef ELFObjectFile<ELFT>::getFileFormatName() const {
       return "ELF32-mips";
     case ELF::EM_PPC:
       return "ELF32-ppc";
+    case ELF::EM_SPARC:
+    case ELF::EM_SPARC32PLUS:
+      return "ELF32-sparc";
     default:
       return "ELF32-unknown";
     }
@@ -1009,6 +942,8 @@ StringRef ELFObjectFile<ELFT>::getFileFormatName() const {
       return "ELF64-ppc64";
     case ELF::EM_S390:
       return "ELF64-s390";
+    case ELF::EM_SPARCV9:
+      return "ELF64-sparc";
     default:
       return "ELF64-unknown";
     }
@@ -1039,6 +974,13 @@ unsigned ELFObjectFile<ELFT>::getArch() const {
                                                        : Triple::ppc64;
   case ELF::EM_S390:
     return Triple::systemz;
+
+  case ELF::EM_SPARC:
+  case ELF::EM_SPARC32PLUS:
+    return Triple::sparc;
+  case ELF::EM_SPARCV9:
+    return Triple::sparcv9;
+
   default:
     return Triple::UnknownArch;
   }