From: Rui Ueyama Date: Mon, 28 Mar 2016 20:59:47 +0000 (+0000) Subject: Remove dead flags. X-Git-Tag: llvmorg-3.9.0-rc1~10703 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=46a8e2958799dd63da3ba664abafdb2641d28a49;p=platform%2Fupstream%2Fllvm.git 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 llvm-svn: 264653 --- diff --git a/lld/include/lld/Core/ArchiveLibraryFile.h b/lld/include/lld/Core/ArchiveLibraryFile.h index 4de6d17..2c736e7 100644 --- a/lld/include/lld/Core/ArchiveLibraryFile.h +++ b/lld/include/lld/Core/ArchiveLibraryFile.h @@ -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> &result) = 0; diff --git a/lld/include/lld/Core/LinkingContext.h b/lld/include/lld/Core/LinkingContext.h index 22c70a6..7227b17 100644 --- a/lld/include/lld/Core/LinkingContext.h +++ b/lld/include/lld/Core/LinkingContext.h @@ -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 _deadStripRoots; std::vector _llvmOptions; StringRefVector _initialUndefinedSymbols; diff --git a/lld/include/lld/Core/Resolver.h b/lld/include/lld/Core/Resolver.h index efaf19f..33892e9 100644 --- a/lld/include/lld/Core/Resolver.h +++ b/lld/include/lld/Core/Resolver.h @@ -56,7 +56,7 @@ public: std::unique_ptr resultFile() { return std::move(_result); } private: - typedef std::function(StringRef, bool)> UndefCallback; + typedef std::function(StringRef)> UndefCallback; bool undefinesAdded(int begin, int end); File *getFile(int &index); @@ -67,8 +67,7 @@ private: void deadStripOptimize(); bool checkUndefines(); void removeCoalescedAwayAtoms(); - ErrorOr forEachUndefines(File &file, bool searchForOverrides, - UndefCallback callback); + ErrorOr forEachUndefines(File &file, UndefCallback callback); void markLive(const Atom *atom); diff --git a/lld/include/lld/Core/SharedLibraryFile.h b/lld/include/lld/Core/SharedLibraryFile.h index 5fa0e95..53bf967 100644 --- a/lld/include/lld/Core/SharedLibraryFile.h +++ b/lld/include/lld/Core/SharedLibraryFile.h @@ -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 exports(StringRef name, - bool dataSymbolOnly) const = 0; + virtual OwningAtomPtr exports(StringRef name) const = 0; // Returns the install name. virtual StringRef getDSOName() const = 0; diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp index d94699a..7d2aada 100644 --- a/lld/lib/Core/Resolver.cpp +++ b/lld/lib/Core/Resolver.cpp @@ -46,8 +46,7 @@ ErrorOr Resolver::handleFile(File &file) { return undefAdded; } -ErrorOr Resolver::forEachUndefines(File &file, bool searchForOverrides, - UndefCallback callback) { +ErrorOr Resolver::forEachUndefines(File &file, UndefCallback callback) { size_t i = _undefineIndex[&file]; bool undefAdded = false; do { @@ -61,27 +60,11 @@ ErrorOr Resolver::forEachUndefines(File &file, bool searchForOverrides, _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(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 Resolver::forEachUndefines(File &file, bool searchForOverrides, ErrorOr Resolver::handleArchiveFile(File &file) { ArchiveLibraryFile *archiveFile = cast(&file); - bool searchForOverrides = - _ctx.searchArchivesToOverrideTentativeDefinitions(); - return forEachUndefines(file, searchForOverrides, - [&](StringRef undefName, - bool dataSymbolOnly)->ErrorOr { - if (File *member = archiveFile->find(undefName, dataSymbolOnly)) { + return forEachUndefines(file, [&](StringRef undefName) -> ErrorOr { + if (File *member = archiveFile->find(undefName)) { member->setOrdinal(_ctx.getNextOrdinalAndIncrement()); return handleFile(*member); } @@ -108,16 +87,13 @@ std::error_code Resolver::handleSharedLibrary(File &file) { auto undefAddedOrError = handleFile(*sharedLibrary); if (undefAddedOrError.getError()) return undefAddedOrError.getError(); - bool searchForOverrides = - _ctx.searchSharedLibrariesToOverrideTentativeDefinitions(); - undefAddedOrError = forEachUndefines(file, searchForOverrides, - [&](StringRef undefName, - bool dataSymbolOnly)->ErrorOr { - auto atom = sharedLibrary->exports(undefName, dataSymbolOnly); - if (atom.get()) - doSharedLibraryAtom(std::move(atom)); - return false; - }); + undefAddedOrError = + forEachUndefines(file, [&](StringRef undefName) -> ErrorOr { + auto atom = sharedLibrary->exports(undefName); + if (atom.get()) + doSharedLibraryAtom(std::move(atom)); + return false; + }); if (undefAddedOrError.getError()) return undefAddedOrError.getError(); diff --git a/lld/lib/ReaderWriter/FileArchive.cpp b/lld/lib/ReaderWriter/FileArchive.cpp index ff24d4e..9097914 100644 --- a/lld/lib/ReaderWriter/FileArchive.cpp +++ b/lld/lib/ReaderWriter/FileArchive.cpp @@ -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 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 buf = (*member)->getMemoryBufferRef(); - if (buf.getError()) - return false; - std::unique_ptr mb(MemoryBuffer::getMemBuffer( - buf.get().getBuffer(), buf.get().getBufferIdentifier(), false)); - - auto objOrErr(ObjectFile::createObjectFile(mb->getMemBufferRef())); - if (objOrErr.getError()) - return false; - std::unique_ptr obj = std::move(objOrErr.get()); - - for (SymbolRef sym : obj->symbols()) { - // Skip until we find the symbol. - ErrorOr 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 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 '" diff --git a/lld/lib/ReaderWriter/MachO/File.h b/lld/lib/ReaderWriter/MachO/File.h index f7262bb..3b7c379 100644 --- a/lld/lib/ReaderWriter/MachO/File.h +++ b/lld/lib/ReaderWriter/MachO/File.h @@ -275,8 +275,7 @@ public: MachODylibFile(StringRef path) : SharedLibraryFile(path) {} - OwningAtomPtr exports(StringRef name, - bool isData) const override { + OwningAtomPtr 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. diff --git a/lld/lib/ReaderWriter/MachO/FlatNamespaceFile.h b/lld/lib/ReaderWriter/MachO/FlatNamespaceFile.h index 08b28f4..76d2958 100644 --- a/lld/lib/ReaderWriter/MachO/FlatNamespaceFile.h +++ b/lld/lib/ReaderWriter/MachO/FlatNamespaceFile.h @@ -25,8 +25,7 @@ public: FlatNamespaceFile(const MachOLinkingContext &context) : SharedLibraryFile("flat namespace") { } - OwningAtomPtr exports(StringRef name, - bool dataSymbolOnly) const override { + OwningAtomPtr exports(StringRef name) const override { return new (allocator()) MachOSharedLibraryAtom(*this, name, getDSOName(), false); } diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp index bec2c68..f98fa0e 100644 --- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp +++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp @@ -591,22 +591,11 @@ template <> struct MappingTraits { _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(member._content); - switch (atom->contentType()) { - case lld::DefinedAtom::typeData: - case lld::DefinedAtom::typeZeroFill: - return const_cast(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(member._content); return nullptr; }