Remove unused variable.
[oota-llvm.git] / include / llvm / Object / ELF.h
index 82fc19bc6263cb356f693fcbbeb2329c115d940f..c579d06a94d7b77721f9741960ae1bf4af1ad524 100644 (file)
@@ -194,13 +194,11 @@ private:
   };
 
   DynRegionInfo DynamicRegion;
-  DynRegionInfo DynHashRegion;
   DynRegionInfo DynStrRegion;
   DynRegionInfo DynRelaRegion;
 
-  // Pointer to SONAME entry in dynamic string table
-  // This is set the first time getLoadName is called.
-  mutable const char *dt_soname = nullptr;
+  // SONAME entry in dynamic string table
+  StringRef DTSoname;
 
   // Records for each version index the corresponding Verdef or Vernaux entry.
   // This is filled the first time LoadVersionMap() is called.
@@ -282,11 +280,9 @@ public:
   }
 
   const Elf_Dyn *dynamic_table_begin() const;
-  /// \param NULLEnd use one past the first DT_NULL entry as the end instead of
-  /// the section size.
-  const Elf_Dyn *dynamic_table_end(bool NULLEnd = false) const;
-  Elf_Dyn_Range dynamic_table(bool NULLEnd = false) const {
-    return make_range(dynamic_table_begin(), dynamic_table_end(NULLEnd));
+  const Elf_Dyn *dynamic_table_end() const;
+  Elf_Dyn_Range dynamic_table() const {
+    return make_range(dynamic_table_begin(), dynamic_table_end());
   }
 
   const Elf_Sym *dynamic_symbol_begin() const {
@@ -751,6 +747,7 @@ template <class ELFT> void ELFFile<ELFT>::scanDynamicTable() {
     return this->base() + Phdr.p_offset + Delta;
   };
 
+  uint64_t SONameOffset = 0;
   for (const Elf_Dyn &Dyn : dynamic_table()) {
     switch (Dyn.d_tag) {
     case ELF::DT_HASH:
@@ -776,8 +773,14 @@ template <class ELFT> void ELFFile<ELFT>::scanDynamicTable() {
       break;
     case ELF::DT_RELAENT:
       DynRelaRegion.EntSize = Dyn.getVal();
+      break;
+    case ELF::DT_SONAME:
+      SONameOffset = Dyn.getVal();
+      break;
     }
   }
+  if (SONameOffset)
+    DTSoname = getDynamicString(SONameOffset);
 }
 
 template <class ELFT>
@@ -818,38 +821,17 @@ ELFFile<ELFT>::dynamic_table_begin() const {
 
 template <class ELFT>
 const typename ELFFile<ELFT>::Elf_Dyn *
-ELFFile<ELFT>::dynamic_table_end(bool NULLEnd) const {
+ELFFile<ELFT>::dynamic_table_end() const {
   uint64_t Size = DynamicRegion.Size;
   if (Size % sizeof(Elf_Dyn))
     report_fatal_error("Invalid dynamic table size");
 
-  const Elf_Dyn *Ret = dynamic_table_begin() + Size / sizeof(Elf_Dyn);
-
-  if (NULLEnd) {
-    const Elf_Dyn *Start = dynamic_table_begin();
-    while (Start != Ret && Start->getTag() != ELF::DT_NULL)
-      ++Start;
-
-    // Include the DT_NULL.
-    if (Start != Ret)
-      ++Start;
-    Ret = Start;
-  }
-  return Ret;
+  return dynamic_table_begin() + Size / sizeof(Elf_Dyn);
 }
 
 template <class ELFT>
 StringRef ELFFile<ELFT>::getLoadName() const {
-  if (!dt_soname) {
-    dt_soname = "";
-    // Find the DT_SONAME entry
-    for (const auto &Entry : dynamic_table())
-      if (Entry.getTag() == ELF::DT_SONAME) {
-        dt_soname = getDynamicString(Entry.getVal());
-        break;
-      }
-  }
-  return dt_soname;
+  return DTSoname;
 }
 
 template <class ELFT>