[lld] r264653 - Remove dead flags.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 28 13:59:48 PDT 2016


Author: ruiu
Date: Mon Mar 28 15:59:47 2016
New Revision: 264653

URL: http://llvm.org/viewvc/llvm-project?rev=264653&view=rev
Log:
Remove dead flags.

searchArchivesToOverrideTentativeDefinitions and
searchSharedLibrariesToOverrideTentativeDefinitions are always false.
For the dead flags, we have a fairly large amount of code which is
never be executed.

http://reviews.llvm.org/D17791

Modified:
    lld/trunk/include/lld/Core/ArchiveLibraryFile.h
    lld/trunk/include/lld/Core/LinkingContext.h
    lld/trunk/include/lld/Core/Resolver.h
    lld/trunk/include/lld/Core/SharedLibraryFile.h
    lld/trunk/lib/Core/Resolver.cpp
    lld/trunk/lib/ReaderWriter/FileArchive.cpp
    lld/trunk/lib/ReaderWriter/MachO/File.h
    lld/trunk/lib/ReaderWriter/MachO/FlatNamespaceFile.h
    lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp

Modified: lld/trunk/include/lld/Core/ArchiveLibraryFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/ArchiveLibraryFile.h?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/ArchiveLibraryFile.h (original)
+++ lld/trunk/include/lld/Core/ArchiveLibraryFile.h Mon Mar 28 15:59:47 2016
@@ -32,7 +32,7 @@ public:
 
   /// Check if any member of the archive contains an Atom with the
   /// specified name and return the File object for that member, or nullptr.
-  virtual File *find(StringRef name, bool dataSymbolOnly) = 0;
+  virtual File *find(StringRef name) = 0;
 
   virtual std::error_code
   parseAllMembers(std::vector<std::unique_ptr<File>> &result) = 0;

Modified: lld/trunk/include/lld/Core/LinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/LinkingContext.h?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/LinkingContext.h (original)
+++ lld/trunk/include/lld/Core/LinkingContext.h Mon Mar 28 15:59:47 2016
@@ -69,28 +69,6 @@ public:
     _deadStripRoots.push_back(symbolName);
   }
 
-  /// Archive files (aka static libraries) are normally lazily loaded.  That is,
-  /// object files within an archive are only loaded and linked in, if the
-  /// object file contains a DefinedAtom which will replace an existing
-  /// UndefinedAtom.  If this method returns true, core linking will also look
-  /// for archive members to replace existing tentative definitions in addition
-  /// to replacing undefines. Note: a "tentative definition" (also called a
-  /// "common" symbols) is a C (but not C++) concept. They are modeled in lld
-  /// as a DefinedAtom with merge() of mergeAsTentative.
-  bool searchArchivesToOverrideTentativeDefinitions() const {
-    return _searchArchivesToOverrideTentativeDefinitions;
-  }
-
-  /// Normally core linking will turn a tentative definition into a real
-  /// definition if not replaced by a real DefinedAtom from some object file.
-  /// If this method returns true, core linking will search all supplied
-  /// dynamic shared libraries for symbol names that match remaining tentative
-  /// definitions.  If any are found, the corresponding tentative definition
-  /// atom is replaced with SharedLibraryAtom.
-  bool searchSharedLibrariesToOverrideTentativeDefinitions() const {
-    return _searchSharedLibrariesToOverrideTentativeDefinitions;
-  }
-
   /// Normally, every UndefinedAtom must be replaced by a DefinedAtom or a
   /// SharedLibraryAtom for the link to be successful.  This method controls
   /// whether core linking prints out a list of remaining UndefinedAtoms.
@@ -139,12 +117,6 @@ public:
 
   void setDeadStripping(bool enable) { _deadStrip = enable; }
   void setGlobalsAreDeadStripRoots(bool v) { _globalsAreDeadStripRoots = v; }
-  void setSearchArchivesToOverrideTentativeDefinitions(bool search) {
-    _searchArchivesToOverrideTentativeDefinitions = search;
-  }
-  void setSearchSharedLibrariesToOverrideTentativeDefinitions(bool search) {
-    _searchSharedLibrariesToOverrideTentativeDefinitions = search;
-  }
   void setPrintRemainingUndefines(bool print) {
     _printRemainingUndefines = print;
   }
@@ -257,12 +229,10 @@ protected:
   StringRef _entrySymbolName;
   bool _deadStrip = false;
   bool _globalsAreDeadStripRoots = false;
-  bool _searchArchivesToOverrideTentativeDefinitions = false;
-  bool _searchSharedLibrariesToOverrideTentativeDefinitions = false;
   bool _printRemainingUndefines = true;
   bool _allowRemainingUndefines = false;
   bool _logInputFiles = false;
-  bool _allowShlibUndefines = true;
+  bool _allowShlibUndefines = false;
   std::vector<StringRef> _deadStripRoots;
   std::vector<const char *> _llvmOptions;
   StringRefVector _initialUndefinedSymbols;

Modified: lld/trunk/include/lld/Core/Resolver.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Resolver.h?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/Resolver.h (original)
+++ lld/trunk/include/lld/Core/Resolver.h Mon Mar 28 15:59:47 2016
@@ -56,7 +56,7 @@ public:
   std::unique_ptr<SimpleFile> resultFile() { return std::move(_result); }
 
 private:
-  typedef std::function<ErrorOr<bool>(StringRef, bool)> UndefCallback;
+  typedef std::function<ErrorOr<bool>(StringRef)> UndefCallback;
 
   bool undefinesAdded(int begin, int end);
   File *getFile(int &index);
@@ -67,8 +67,7 @@ private:
   void deadStripOptimize();
   bool checkUndefines();
   void removeCoalescedAwayAtoms();
-  ErrorOr<bool> forEachUndefines(File &file, bool searchForOverrides,
-                                 UndefCallback callback);
+  ErrorOr<bool> forEachUndefines(File &file, UndefCallback callback);
 
   void markLive(const Atom *atom);
 

Modified: lld/trunk/include/lld/Core/SharedLibraryFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/SharedLibraryFile.h?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/SharedLibraryFile.h (original)
+++ lld/trunk/include/lld/Core/SharedLibraryFile.h Mon Mar 28 15:59:47 2016
@@ -27,8 +27,7 @@ public:
   /// Check if the shared library exports a symbol with the specified name.
   /// If so, return a SharedLibraryAtom which represents that exported
   /// symbol.  Otherwise return nullptr.
-  virtual OwningAtomPtr<SharedLibraryAtom> exports(StringRef name,
-                                           bool dataSymbolOnly) const = 0;
+  virtual OwningAtomPtr<SharedLibraryAtom> exports(StringRef name) const = 0;
 
   // Returns the install name.
   virtual StringRef getDSOName() const = 0;

Modified: lld/trunk/lib/Core/Resolver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/lib/Core/Resolver.cpp (original)
+++ lld/trunk/lib/Core/Resolver.cpp Mon Mar 28 15:59:47 2016
@@ -46,8 +46,7 @@ ErrorOr<bool> Resolver::handleFile(File
   return undefAdded;
 }
 
-ErrorOr<bool> Resolver::forEachUndefines(File &file, bool searchForOverrides,
-                                         UndefCallback callback) {
+ErrorOr<bool> Resolver::forEachUndefines(File &file, UndefCallback callback) {
   size_t i = _undefineIndex[&file];
   bool undefAdded = false;
   do {
@@ -61,27 +60,11 @@ ErrorOr<bool> Resolver::forEachUndefines
         _undefines[i] = "";
         continue;
       }
-      auto undefAddedOrError = callback(undefName, false);
+      auto undefAddedOrError = callback(undefName);
       if (undefAddedOrError.getError())
         return undefAddedOrError;
       undefAdded |= undefAddedOrError.get();
     }
-    if (!searchForOverrides)
-      continue;
-    for (StringRef tentDefName : _symbolTable.tentativeDefinitions()) {
-      // Load for previous tentative may also have loaded
-      // something that overrode this tentative, so always check.
-      const Atom *curAtom = _symbolTable.findByName(tentDefName);
-      assert(curAtom != nullptr);
-      if (const DefinedAtom *curDefAtom = dyn_cast<DefinedAtom>(curAtom)) {
-        if (curDefAtom->merge() == DefinedAtom::mergeAsTentative) {
-          auto undefAddedOrError = callback(tentDefName, true);
-          if (undefAddedOrError.getError())
-            return undefAddedOrError;
-          undefAdded |= undefAddedOrError.get();
-        }
-      }
-    }
   } while (i < _undefines.size());
   _undefineIndex[&file] = i;
   return undefAdded;
@@ -89,12 +72,8 @@ ErrorOr<bool> Resolver::forEachUndefines
 
 ErrorOr<bool> Resolver::handleArchiveFile(File &file) {
   ArchiveLibraryFile *archiveFile = cast<ArchiveLibraryFile>(&file);
-  bool searchForOverrides =
-      _ctx.searchArchivesToOverrideTentativeDefinitions();
-  return forEachUndefines(file, searchForOverrides,
-                          [&](StringRef undefName,
-                              bool dataSymbolOnly)->ErrorOr<bool> {
-    if (File *member = archiveFile->find(undefName, dataSymbolOnly)) {
+  return forEachUndefines(file, [&](StringRef undefName) -> ErrorOr<bool> {
+    if (File *member = archiveFile->find(undefName)) {
       member->setOrdinal(_ctx.getNextOrdinalAndIncrement());
       return handleFile(*member);
     }
@@ -108,16 +87,13 @@ std::error_code Resolver::handleSharedLi
   auto undefAddedOrError = handleFile(*sharedLibrary);
   if (undefAddedOrError.getError())
     return undefAddedOrError.getError();
-  bool searchForOverrides =
-      _ctx.searchSharedLibrariesToOverrideTentativeDefinitions();
-  undefAddedOrError = forEachUndefines(file, searchForOverrides,
-                                       [&](StringRef undefName,
-                                           bool dataSymbolOnly)->ErrorOr<bool> {
-    auto atom = sharedLibrary->exports(undefName, dataSymbolOnly);
-    if (atom.get())
-      doSharedLibraryAtom(std::move(atom));
-    return false;
-  });
+  undefAddedOrError =
+      forEachUndefines(file, [&](StringRef undefName) -> ErrorOr<bool> {
+        auto atom = sharedLibrary->exports(undefName);
+        if (atom.get())
+          doSharedLibraryAtom(std::move(atom));
+        return false;
+      });
 
   if (undefAddedOrError.getError())
     return undefAddedOrError.getError();

Modified: lld/trunk/lib/ReaderWriter/FileArchive.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/FileArchive.cpp?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/FileArchive.cpp (original)
+++ lld/trunk/lib/ReaderWriter/FileArchive.cpp Mon Mar 28 15:59:47 2016
@@ -42,7 +42,7 @@ public:
 
   /// \brief Check if any member of the archive contains an Atom with the
   /// specified name and return the File object for that member, or nullptr.
-  File *find(StringRef name, bool dataSymbolOnly) override {
+  File *find(StringRef name) override {
     auto member = _symbolMemberMap.find(name);
     if (member == _symbolMemberMap.end())
       return nullptr;
@@ -57,9 +57,6 @@ public:
     const char *memberStart = buf->data();
     if (_membersInstantiated.count(memberStart))
       return nullptr;
-    if (dataSymbolOnly && !isDataSymbol(ci, name))
-      return nullptr;
-
     _membersInstantiated.insert(memberStart);
 
     std::unique_ptr<File> result;
@@ -157,46 +154,6 @@ private:
     return std::error_code();
   }
 
-  // Parses the given memory buffer as an object file, and returns true
-  // code if the given symbol is a data symbol. If the symbol is not a data
-  // symbol or does not exist, returns false.
-  bool isDataSymbol(Archive::child_iterator cOrErr, StringRef symbol) const {
-    if (cOrErr->getError())
-      return false;
-    Archive::child_iterator member = cOrErr->get();
-    ErrorOr<llvm::MemoryBufferRef> buf = (*member)->getMemoryBufferRef();
-    if (buf.getError())
-      return false;
-    std::unique_ptr<MemoryBuffer> mb(MemoryBuffer::getMemBuffer(
-        buf.get().getBuffer(), buf.get().getBufferIdentifier(), false));
-
-    auto objOrErr(ObjectFile::createObjectFile(mb->getMemBufferRef()));
-    if (objOrErr.getError())
-      return false;
-    std::unique_ptr<ObjectFile> obj = std::move(objOrErr.get());
-
-    for (SymbolRef sym : obj->symbols()) {
-      // Skip until we find the symbol.
-      ErrorOr<StringRef> name = sym.getName();
-      if (!name)
-        return false;
-      if (*name != symbol)
-        continue;
-      uint32_t flags = sym.getFlags();
-      if (flags <= SymbolRef::SF_Undefined)
-        continue;
-
-      // Returns true if it's a data symbol.
-      ErrorOr<SymbolRef::Type> typeOrErr = sym.getType();
-      if (typeOrErr.getError())
-        return false;
-      SymbolRef::Type type = *typeOrErr;
-      if (type == SymbolRef::ST_Data)
-        return true;
-    }
-    return false;
-  }
-
   std::error_code buildTableOfContents() {
     DEBUG_WITH_TYPE("FileArchive", llvm::dbgs()
                                        << "Table of contents for archive '"

Modified: lld/trunk/lib/ReaderWriter/MachO/File.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/File.h?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/File.h (original)
+++ lld/trunk/lib/ReaderWriter/MachO/File.h Mon Mar 28 15:59:47 2016
@@ -275,8 +275,7 @@ public:
 
   MachODylibFile(StringRef path) : SharedLibraryFile(path) {}
 
-  OwningAtomPtr<SharedLibraryAtom> exports(StringRef name,
-                                           bool isData) const override {
+  OwningAtomPtr<SharedLibraryAtom> exports(StringRef name) const override {
     // Pass down _installName so that if this requested symbol
     // is re-exported through this dylib, the SharedLibraryAtom's loadName()
     // is this dylib installName and not the implementation dylib's.

Modified: lld/trunk/lib/ReaderWriter/MachO/FlatNamespaceFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/FlatNamespaceFile.h?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/FlatNamespaceFile.h (original)
+++ lld/trunk/lib/ReaderWriter/MachO/FlatNamespaceFile.h Mon Mar 28 15:59:47 2016
@@ -25,8 +25,7 @@ public:
   FlatNamespaceFile(const MachOLinkingContext &context)
     : SharedLibraryFile("flat namespace") { }
 
-  OwningAtomPtr<SharedLibraryAtom> exports(StringRef name,
-                                   bool dataSymbolOnly) const override {
+  OwningAtomPtr<SharedLibraryAtom> exports(StringRef name) const override {
     return new (allocator()) MachOSharedLibraryAtom(*this, name, getDSOName(),
                                                     false);
   }

Modified: lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp?rev=264653&r1=264652&r2=264653&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp (original)
+++ lld/trunk/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp Mon Mar 28 15:59:47 2016
@@ -591,22 +591,11 @@ template <> struct MappingTraits<const l
       _noAbsoluteAtoms.clear();
     }
 
-    File *find(StringRef name, bool dataSymbolOnly) override {
-      for (const ArchMember &member : _members) {
-        for (const lld::DefinedAtom *atom : member._content->defined()) {
-          if (name == atom->name()) {
-            if (!dataSymbolOnly)
-              return const_cast<File *>(member._content);
-            switch (atom->contentType()) {
-            case lld::DefinedAtom::typeData:
-            case lld::DefinedAtom::typeZeroFill:
-              return const_cast<File *>(member._content);
-            default:
-              break;
-            }
-          }
-        }
-      }
+    File *find(StringRef name) override {
+      for (const ArchMember &member : _members)
+        for (const lld::DefinedAtom *atom : member._content->defined())
+          if (name == atom->name())
+            return const_cast<File *>(member._content);
       return nullptr;
     }
 




More information about the llvm-commits mailing list