diff options
| author | Rui Ueyama <ruiu@google.com> | 2016-02-28 21:22:44 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2016-02-28 21:22:44 +0000 |
| commit | 8cca07eacf7f1f9f87f2108850abee9eade18f28 (patch) | |
| tree | 5fa67494fe79df3ddba77a069adbf77a2ef60a7d /lld/lib | |
| parent | 701c3250e57a428ca3b0d6fca7760f5810230e89 (diff) | |
| download | bcm5719-llvm-8cca07eacf7f1f9f87f2108850abee9eade18f28.tar.gz bcm5719-llvm-8cca07eacf7f1f9f87f2108850abee9eade18f28.zip | |
Remove dead code for ELF.
The preload feature was buggy that we had disabled it even for ELF.
llvm-svn: 262194
Diffstat (limited to 'lld/lib')
| -rw-r--r-- | lld/lib/Core/Resolver.cpp | 35 | ||||
| -rw-r--r-- | lld/lib/Driver/Driver.cpp | 7 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/FileArchive.cpp | 45 |
3 files changed, 3 insertions, 84 deletions
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp index de98fb83412..98d2c71023f 100644 --- a/lld/lib/Core/Resolver.cpp +++ b/lld/lib/Core/Resolver.cpp @@ -36,10 +36,8 @@ ErrorOr<bool> Resolver::handleFile(File &file) { for (const DefinedAtom *atom : file.defined()) doDefinedAtom(*atom); for (const UndefinedAtom *atom : file.undefined()) { - if (doUndefinedAtom(*atom)) { + if (doUndefinedAtom(*atom)) undefAdded = true; - maybePreloadArchiveMember(atom->name()); - } } for (const SharedLibraryAtom *atom : file.sharedLibrary()) doSharedLibraryAtom(*atom); @@ -98,7 +96,6 @@ ErrorOr<bool> Resolver::handleArchiveFile(File &file) { bool dataSymbolOnly)->ErrorOr<bool> { if (File *member = archiveFile->find(undefName, dataSymbolOnly)) { member->setOrdinal(_ctx.getNextOrdinalAndIncrement()); - updatePreloadArchiveMap(); return handleFile(*member); } return false; @@ -207,17 +204,6 @@ void Resolver::addAtoms(const std::vector<const DefinedAtom *> &newAtoms) { doDefinedAtom(*newAtom); } -// Instantiate an archive file member if there's a file containing a -// defined symbol for a given symbol name. Instantiation is done in a -// different worker thread and has no visible side effect. -void Resolver::maybePreloadArchiveMember(StringRef sym) { - auto it = _archiveMap.find(sym); - if (it == _archiveMap.end()) - return; - ArchiveLibraryFile *archive = it->second; - archive->preload(_ctx.getTaskGroup(), sym); -} - // Returns true if at least one of N previous files has created an // undefined symbol. bool Resolver::undefinesAdded(int begin, int end) { @@ -248,23 +234,6 @@ File *Resolver::getFile(int &index) { return cast<FileNode>(inputs[index++].get())->getFile(); } -// Update a map of Symbol -> ArchiveFile. The map is used for speculative -// file loading. -void Resolver::updatePreloadArchiveMap() { - std::vector<std::unique_ptr<Node>> &nodes = _ctx.getNodes(); - for (int i = nodes.size() - 1; i >= 0; --i) { - auto *fnode = dyn_cast<FileNode>(nodes[i].get()); - if (!fnode) - continue; - auto *archive = dyn_cast<ArchiveLibraryFile>(fnode->getFile()); - if (!archive || _archiveSeen.count(archive)) - continue; - _archiveSeen.insert(archive); - for (StringRef sym : archive->getDefinedSymbols()) - _archiveMap[sym] = archive; - } -} - // Keep adding atoms until _ctx.getNextFile() returns an error. This // function is where undefined atoms are resolved. bool Resolver::resolveUndefines() { @@ -287,7 +256,6 @@ bool Resolver::resolveUndefines() { } DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "Loaded file: " << file->path() << "\n"); - updatePreloadArchiveMap(); switch (file->kind()) { case File::kindErrorObject: case File::kindNormalizedObject: @@ -503,7 +471,6 @@ void Resolver::removeCoalescedAwayAtoms() { bool Resolver::resolve() { DEBUG_WITH_TYPE("resolver", llvm::dbgs() << "******** Resolving atom references:\n"); - updatePreloadArchiveMap(); if (!resolveUndefines()) return false; updateReferences(); diff --git a/lld/lib/Driver/Driver.cpp b/lld/lib/Driver/Driver.cpp index 6cc8c7338a7..af638a1076c 100644 --- a/lld/lib/Driver/Driver.cpp +++ b/lld/lib/Driver/Driver.cpp @@ -11,7 +11,6 @@ #include "lld/Core/File.h" #include "lld/Core/Instrumentation.h" #include "lld/Core/LLVM.h" -#include "lld/Core/Parallel.h" #include "lld/Core/PassManager.h" #include "lld/Core/Reader.h" #include "lld/Core/Resolver.h" @@ -84,7 +83,7 @@ bool Driver::link(LinkingContext &ctx, raw_ostream &diagnostics) { for (std::unique_ptr<Node> &ie : ctx.getNodes()) if (FileNode *node = dyn_cast<FileNode>(ie.get())) - ctx.getTaskGroup().spawn([node] { node->getFile()->parse(); }); + node->getFile()->parse(); std::vector<std::unique_ptr<File>> internalFiles; ctx.createInternalFiles(internalFiles); @@ -108,10 +107,8 @@ bool Driver::link(LinkingContext &ctx, raw_ostream &diagnostics) { // Do core linking. ScopedTask resolveTask(getDefaultDomain(), "Resolve"); Resolver resolver(ctx); - if (!resolver.resolve()) { - ctx.getTaskGroup().sync(); + if (!resolver.resolve()) return false; - } std::unique_ptr<SimpleFile> merged = resolver.resultFile(); resolveTask.end(); diff --git a/lld/lib/ReaderWriter/FileArchive.cpp b/lld/lib/ReaderWriter/FileArchive.cpp index 7786d11dced..5b4605e1ce5 100644 --- a/lld/lib/ReaderWriter/FileArchive.cpp +++ b/lld/lib/ReaderWriter/FileArchive.cpp @@ -10,7 +10,6 @@ #include "lld/Core/ArchiveLibraryFile.h" #include "lld/Core/LLVM.h" #include "lld/Core/LinkingContext.h" -#include "lld/Core/Parallel.h" #include "lld/Driver/Driver.h" #include "llvm/ADT/Hashing.h" #include "llvm/ADT/StringRef.h" @@ -64,17 +63,6 @@ public: _membersInstantiated.insert(memberStart); - // Check if a file is preloaded. - { - std::lock_guard<std::mutex> lock(_mutex); - auto it = _preloaded.find(memberStart); - if (it != _preloaded.end()) { - std::unique_ptr<Future<File *>> &p = it->second; - Future<File *> *future = p.get(); - return future->get(); - } - } - std::unique_ptr<File> result; if (instantiateMember(ci, result)) return nullptr; @@ -86,38 +74,6 @@ public: return file; } - // Instantiate a member file containing a given symbol name. - void preload(TaskGroup &group, StringRef name) override { - auto member = _symbolMemberMap.find(name); - if (member == _symbolMemberMap.end()) - return; - Archive::child_iterator ci = member->second; - if (ci->getError()) - return; - - // Do nothing if a member is already instantiated. - ErrorOr<StringRef> buf = (*ci)->getBuffer(); - if (!buf) - return; - const char *memberStart = buf->data(); - if (_membersInstantiated.count(memberStart)) - return; - - std::lock_guard<std::mutex> lock(_mutex); - if (_preloaded.find(memberStart) != _preloaded.end()) - return; - - // Instantiate the member - auto *future = new Future<File *>(); - _preloaded[memberStart] = std::unique_ptr<Future<File *>>(future); - - group.spawn([=] { - std::unique_ptr<File> result; - std::error_code ec = instantiateMember(ci, result); - future->set(ec ? nullptr : result.release()); - }); - } - /// \brief parse each member std::error_code parseAllMembers(std::vector<std::unique_ptr<File>> &result) override { @@ -262,7 +218,6 @@ private: InstantiatedSet _membersInstantiated; bool _logLoading; std::vector<std::unique_ptr<MemoryBuffer>> _memberBuffers; - std::map<const char *, std::unique_ptr<Future<File *>>> _preloaded; std::mutex _mutex; FileVector _filesReturned; }; |

