<div dir="ltr"><div class="gmail_extra">Hi Rafael,</div><div class="gmail_extra"><br></div><div class="gmail_extra">We were relying on this to figure out the dependencies of an ELF library. From what I was told, this code is actually somewhat buggy but my co-worker was preparing to send a patch to the list when he noticed it was just deleted.<br>

</div><div class="gmail_extra"><br></div><div class="gmail_extra">Can this be reverted?</div><div class="gmail_extra"> </div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Aug 8, 2014 at 5:49 PM, Rafael Espindola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Fri Aug  8 11:49:35 2014<br>
New Revision: 215224<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=215224&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=215224&view=rev</a><br>
Log:<br>
Delete dead code. NFC.<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/Object/COFF.h<br>
    llvm/trunk/include/llvm/Object/ELFObjectFile.h<br>
    llvm/trunk/include/llvm/Object/MachO.h<br>
    llvm/trunk/include/llvm/Object/ObjectFile.h<br>
    llvm/trunk/lib/Object/COFFObjectFile.cpp<br>
    llvm/trunk/lib/Object/MachOObjectFile.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/Object/COFF.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFF.h?rev=215224&r1=215223&r2=215224&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFF.h?rev=215224&r1=215223&r2=215224&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/include/llvm/Object/COFF.h (original)<br>
+++ llvm/trunk/include/llvm/Object/COFF.h Fri Aug  8 11:49:35 2014<br>
@@ -414,17 +414,10 @@ protected:<br>
   getRelocationValueString(DataRefImpl Rel,<br>
                            SmallVectorImpl<char> &Result) const override;<br>
<br>
-  std::error_code getLibraryNext(DataRefImpl LibData,<br>
-                                 LibraryRef &Result) const override;<br>
-  std::error_code getLibraryPath(DataRefImpl LibData,<br>
-                                 StringRef &Result) const override;<br>
-<br>
 public:<br>
   COFFObjectFile(std::unique_ptr<MemoryBuffer> Object, std::error_code &EC);<br>
   basic_symbol_iterator symbol_begin_impl() const override;<br>
   basic_symbol_iterator symbol_end_impl() const override;<br>
-  library_iterator needed_library_begin() const override;<br>
-  library_iterator needed_library_end() const override;<br>
   section_iterator section_begin() const override;<br>
   section_iterator section_end() const override;<br>
<br>
<br>
Modified: llvm/trunk/include/llvm/Object/ELFObjectFile.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFObjectFile.h?rev=215224&r1=215223&r2=215224&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFObjectFile.h?rev=215224&r1=215223&r2=215224&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/include/llvm/Object/ELFObjectFile.h (original)<br>
+++ llvm/trunk/include/llvm/Object/ELFObjectFile.h Fri Aug  8 11:49:35 2014<br>
@@ -71,11 +71,6 @@ protected:<br>
   std::error_code getSymbolSection(DataRefImpl Symb,<br>
                                    section_iterator &Res) const override;<br>
<br>
-  std::error_code getLibraryNext(DataRefImpl Data,<br>
-                                 LibraryRef &Result) const override;<br>
-  std::error_code getLibraryPath(DataRefImpl Data,<br>
-                                 StringRef &Res) const override;<br>
-<br>
   void moveSectionNext(DataRefImpl &Sec) const override;<br>
   std::error_code getSectionName(DataRefImpl Sec,<br>
                                  StringRef &Res) const override;<br>
@@ -191,9 +186,6 @@ public:<br>
   section_iterator section_begin() const override;<br>
   section_iterator section_end() const override;<br>
<br>
-  library_iterator needed_library_begin() const override;<br>
-  library_iterator needed_library_end() const override;<br>
-<br>
   std::error_code getRelocationAddend(DataRefImpl Rel, int64_t &Res) const;<br>
   std::error_code getSymbolVersion(SymbolRef Symb, StringRef &Version,<br>
                                    bool &IsDefault) const;<br>
@@ -838,44 +830,6 @@ StringRef ELFObjectFile<ELFT>::getLoadNa<br>
 }<br>
<br>
 template <class ELFT><br>
-library_iterator ELFObjectFile<ELFT>::needed_library_begin() const {<br>
-  Elf_Dyn_Iter DI = EF.begin_dynamic_table();<br>
-  Elf_Dyn_Iter DE = EF.end_dynamic_table();<br>
-<br>
-  while (DI != DE && DI->getTag() != ELF::DT_SONAME)<br>
-    ++DI;<br>
-<br>
-  return library_iterator(LibraryRef(toDRI(DI), this));<br>
-}<br>
-<br>
-template <class ELFT><br>
-std::error_code ELFObjectFile<ELFT>::getLibraryNext(DataRefImpl Data,<br>
-                                                    LibraryRef &Result) const {<br>
-  Elf_Dyn_Iter DI = toELFDynIter(Data);<br>
-  Elf_Dyn_Iter DE = EF.end_dynamic_table();<br>
-<br>
-  // Skip to the next DT_NEEDED entry.<br>
-  do<br>
-    ++DI;<br>
-  while (DI != DE && DI->getTag() != ELF::DT_NEEDED);<br>
-<br>
-  Result = LibraryRef(toDRI(DI), this);<br>
-  return object_error::success;<br>
-}<br>
-<br>
-template <class ELFT><br>
-std::error_code ELFObjectFile<ELFT>::getLibraryPath(DataRefImpl Data,<br>
-                                                    StringRef &Res) const {<br>
-  Res = EF.getDynamicString(toELFDynIter(Data)->getVal());<br>
-  return object_error::success;<br>
-}<br>
-<br>
-template <class ELFT><br>
-library_iterator ELFObjectFile<ELFT>::needed_library_end() const {<br>
-  return library_iterator(LibraryRef(toDRI(EF.end_dynamic_table()), this));<br>
-}<br>
-<br>
-template <class ELFT><br>
 uint8_t ELFObjectFile<ELFT>::getBytesInAddress() const {<br>
   return ELFT::Is64Bits ? 8 : 4;<br>
 }<br>
<br>
Modified: llvm/trunk/include/llvm/Object/MachO.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/MachO.h?rev=215224&r1=215223&r2=215224&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/MachO.h?rev=215224&r1=215223&r2=215224&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/include/llvm/Object/MachO.h (original)<br>
+++ llvm/trunk/include/llvm/Object/MachO.h Fri Aug  8 11:49:35 2014<br>
@@ -118,11 +118,6 @@ public:<br>
   std::error_code getRelocationHidden(DataRefImpl Rel,<br>
                                       bool &Result) const override;<br>
<br>
-  std::error_code getLibraryNext(DataRefImpl LibData,<br>
-                                 LibraryRef &Res) const override;<br>
-  std::error_code getLibraryPath(DataRefImpl LibData,<br>
-                                 StringRef &Res) const override;<br>
-<br>
   // MachO specific.<br>
   std::error_code getLibraryShortNameByIndex(unsigned Index, StringRef &Res);<br>
<br>
@@ -138,9 +133,6 @@ public:<br>
   section_iterator section_begin() const override;<br>
   section_iterator section_end() const override;<br>
<br>
-  library_iterator needed_library_begin() const override;<br>
-  library_iterator needed_library_end() const override;<br>
-<br>
   uint8_t getBytesInAddress() const override;<br>
<br>
   StringRef getFileFormatName() const override;<br>
<br>
Modified: llvm/trunk/include/llvm/Object/ObjectFile.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=215224&r1=215223&r2=215224&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=215224&r1=215223&r2=215224&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/include/llvm/Object/ObjectFile.h (original)<br>
+++ llvm/trunk/include/llvm/Object/ObjectFile.h Fri Aug  8 11:49:35 2014<br>
@@ -178,30 +178,6 @@ public:<br>
   }<br>
 };<br>
<br>
-/// LibraryRef - This is a value type class that represents a single library in<br>
-/// the list of libraries needed by a shared or dynamic object.<br>
-class LibraryRef {<br>
-  friend class SectionRef;<br>
-  DataRefImpl LibraryPimpl;<br>
-  const ObjectFile *OwningObject;<br>
-<br>
-public:<br>
-  LibraryRef() : OwningObject(nullptr) { }<br>
-<br>
-  LibraryRef(DataRefImpl LibraryP, const ObjectFile *Owner);<br>
-<br>
-  bool operator==(const LibraryRef &Other) const;<br>
-  bool operator<(const LibraryRef &Other) const;<br>
-<br>
-  std::error_code getNext(LibraryRef &Result) const;<br>
-<br>
-  // Get the path to this library, as stored in the object file.<br>
-  std::error_code getPath(StringRef &Result) const;<br>
-<br>
-  DataRefImpl getRawDataRefImpl() const;<br>
-};<br>
-typedef content_iterator<LibraryRef> library_iterator;<br>
-<br>
 /// ObjectFile - This class is the base class for all object file types.<br>
 /// Concrete instances of this object are created by createObjectFile, which<br>
 /// figures out which type to create.<br>
@@ -299,13 +275,6 @@ protected:<br>
     return object_error::success;<br>
   }<br>
<br>
-  // Same for LibraryRef<br>
-  friend class LibraryRef;<br>
-  virtual std::error_code getLibraryNext(DataRefImpl Lib,<br>
-                                         LibraryRef &Res) const = 0;<br>
-  virtual std::error_code getLibraryPath(DataRefImpl Lib,<br>
-                                         StringRef &Res) const = 0;<br>
-<br>
 public:<br>
   typedef iterator_range<symbol_iterator> symbol_iterator_range;<br>
   symbol_iterator_range symbols() const {<br>
@@ -320,9 +289,6 @@ public:<br>
     return section_iterator_range(section_begin(), section_end());<br>
   }<br>
<br>
-  virtual library_iterator needed_library_begin() const = 0;<br>
-  virtual library_iterator needed_library_end() const = 0;<br>
-<br>
   /// @brief The number of bytes used to represent an address in this object<br>
   ///        file format.<br>
   virtual uint8_t getBytesInAddress() const = 0;<br>
@@ -549,26 +515,6 @@ inline const ObjectFile *RelocationRef::<br>
   return OwningObject;<br>
 }<br>
<br>
-// Inline function definitions.<br>
-inline LibraryRef::LibraryRef(DataRefImpl LibraryP, const ObjectFile *Owner)<br>
-  : LibraryPimpl(LibraryP)<br>
-  , OwningObject(Owner) {}<br>
-<br>
-inline bool LibraryRef::operator==(const LibraryRef &Other) const {<br>
-  return LibraryPimpl == Other.LibraryPimpl;<br>
-}<br>
-<br>
-inline bool LibraryRef::operator<(const LibraryRef &Other) const {<br>
-  return LibraryPimpl < Other.LibraryPimpl;<br>
-}<br>
-<br>
-inline std::error_code LibraryRef::getNext(LibraryRef &Result) const {<br>
-  return OwningObject->getLibraryNext(LibraryPimpl, Result);<br>
-}<br>
-<br>
-inline std::error_code LibraryRef::getPath(StringRef &Result) const {<br>
-  return OwningObject->getLibraryPath(LibraryPimpl, Result);<br>
-}<br>
<br>
 } // end namespace object<br>
 } // end namespace llvm<br>
<br>
Modified: llvm/trunk/lib/Object/COFFObjectFile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFObjectFile.cpp?rev=215224&r1=215223&r2=215224&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFObjectFile.cpp?rev=215224&r1=215223&r2=215224&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Object/COFFObjectFile.cpp (original)<br>
+++ llvm/trunk/lib/Object/COFFObjectFile.cpp Fri Aug  8 11:49:35 2014<br>
@@ -610,16 +610,6 @@ basic_symbol_iterator COFFObjectFile::sy<br>
   return basic_symbol_iterator(SymbolRef(Ret, this));<br>
 }<br>
<br>
-library_iterator COFFObjectFile::needed_library_begin() const {<br>
-  // TODO: implement<br>
-  report_fatal_error("Libraries needed unimplemented in COFFObjectFile");<br>
-}<br>
-<br>
-library_iterator COFFObjectFile::needed_library_end() const {<br>
-  // TODO: implement<br>
-  report_fatal_error("Libraries needed unimplemented in COFFObjectFile");<br>
-}<br>
-<br>
 import_directory_iterator COFFObjectFile::import_directory_begin() const {<br>
   return import_directory_iterator(<br>
       ImportDirectoryEntryRef(ImportDirectory, 0, this));<br>
@@ -989,16 +979,6 @@ COFFObjectFile::getRelocationValueString<br>
   return object_error::success;<br>
 }<br>
<br>
-std::error_code COFFObjectFile::getLibraryNext(DataRefImpl LibData,<br>
-                                               LibraryRef &Result) const {<br>
-  report_fatal_error("getLibraryNext not implemented in COFFObjectFile");<br>
-}<br>
-<br>
-std::error_code COFFObjectFile::getLibraryPath(DataRefImpl LibData,<br>
-                                               StringRef &Result) const {<br>
-  report_fatal_error("getLibraryPath not implemented in COFFObjectFile");<br>
-}<br>
-<br>
 bool ImportDirectoryEntryRef::<br>
 operator==(const ImportDirectoryEntryRef &Other) const {<br>
   return ImportTable == Other.ImportTable && Index == Other.Index;<br>
<br>
Modified: llvm/trunk/lib/Object/MachOObjectFile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=215224&r1=215223&r2=215224&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/MachOObjectFile.cpp?rev=215224&r1=215223&r2=215224&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/Object/MachOObjectFile.cpp (original)<br>
+++ llvm/trunk/lib/Object/MachOObjectFile.cpp Fri Aug  8 11:49:35 2014<br>
@@ -1009,16 +1009,6 @@ std::error_code MachOObjectFile::getRelo<br>
   return object_error::success;<br>
 }<br>
<br>
-std::error_code MachOObjectFile::getLibraryNext(DataRefImpl LibData,<br>
-                                                LibraryRef &Res) const {<br>
-  report_fatal_error("Needed libraries unimplemented in MachOObjectFile");<br>
-}<br>
-<br>
-std::error_code MachOObjectFile::getLibraryPath(DataRefImpl LibData,<br>
-                                                StringRef &Res) const {<br>
-  report_fatal_error("Needed libraries unimplemented in MachOObjectFile");<br>
-}<br>
-<br>
 //<br>
 // guessLibraryShortName() is passed a name of a dynamic library and returns a<br>
 // guess on what the short name is.  Then name is returned as a substring of the<br>
@@ -1246,16 +1236,6 @@ section_iterator MachOObjectFile::sectio<br>
   return section_iterator(SectionRef(DRI, this));<br>
 }<br>
<br>
-library_iterator MachOObjectFile::needed_library_begin() const {<br>
-  // TODO: implement<br>
-  report_fatal_error("Needed libraries unimplemented in MachOObjectFile");<br>
-}<br>
-<br>
-library_iterator MachOObjectFile::needed_library_end() const {<br>
-  // TODO: implement<br>
-  report_fatal_error("Needed libraries unimplemented in MachOObjectFile");<br>
-}<br>
-<br>
 uint8_t MachOObjectFile::getBytesInAddress() const {<br>
   return is64Bit() ? 8 : 4;<br>
 }<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>João Matos
</div></div>