diff options
| author | Rui Ueyama <ruiu@google.com> | 2013-10-24 18:22:16 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2013-10-24 18:22:16 +0000 |
| commit | 671c8013edd26112dab399d43227eb2ca446f157 (patch) | |
| tree | a1eb274216eaf9e57843f19066311d1428ac7f59 | |
| parent | 32744412d248b7f905c4cb44739d308dfffb58cf (diff) | |
| download | bcm5719-llvm-671c8013edd26112dab399d43227eb2ca446f157.tar.gz bcm5719-llvm-671c8013edd26112dab399d43227eb2ca446f157.zip | |
Revert "r193300 - [PassManager] add ReaderWriter{Native, YAML} to the Driver"
The patch have completely broken COFF port and disabled many tests.
This also reverts r193302 (comment fix).
llvm-svn: 193362
45 files changed, 58 insertions, 303 deletions
diff --git a/lld/include/lld/Core/Pass.h b/lld/include/lld/Core/Pass.h index 6d4b6a5cc26..147162a6674 100644 --- a/lld/include/lld/Core/Pass.h +++ b/lld/include/lld/Core/Pass.h @@ -36,7 +36,7 @@ public: virtual ~Pass() { } /// Do the actual work of the Pass. - virtual void perform(std::unique_ptr<MutableFile> &mergedFile) = 0; + virtual void perform(MutableFile &mergedFile) = 0; protected: // Only subclassess can be instantiated. @@ -53,7 +53,7 @@ public: /// Scans all Atoms looking for call-site uses of SharedLibraryAtoms /// and transfroms the call-site to call a stub instead using the /// helper methods below. - virtual void perform(std::unique_ptr<MutableFile> &mergedFile); + virtual void perform(MutableFile &mergedFile); /// If true, the pass should use stubs for references /// to shared library symbols. If false, the pass @@ -87,7 +87,7 @@ public: /// Scans all Atoms looking for pointer to SharedLibraryAtoms /// and transfroms them to a pointer to a GOT entry using the /// helper methods below. - virtual void perform(std::unique_ptr<MutableFile> &mergedFile); + virtual void perform(MutableFile &mergedFile); /// If true, the pass will use GOT entries for references /// to shared library symbols. If false, the pass diff --git a/lld/include/lld/Core/PassManager.h b/lld/include/lld/Core/PassManager.h index 2ed7a84db40..98a22512f26 100644 --- a/lld/include/lld/Core/PassManager.h +++ b/lld/include/lld/Core/PassManager.h @@ -32,7 +32,7 @@ public: _passes.push_back(std::move(pass)); } - ErrorOr<void> runOnFile(std::unique_ptr<MutableFile> &); + ErrorOr<void> runOnFile(MutableFile &); private: /// \brief Passes in the order they should run. diff --git a/lld/include/lld/Core/Resolver.h b/lld/include/lld/Core/Resolver.h index 26f19226aa6..7ffd3523b50 100644 --- a/lld/include/lld/Core/Resolver.h +++ b/lld/include/lld/Core/Resolver.h @@ -4,7 +4,6 @@ // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. -// License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// @@ -38,9 +37,8 @@ public: }; Resolver(LinkingContext &context) - : _context(context), _symbolTable(context), - _result(new MergedFile(context)), _haveLLVMObjs(false), - _addToFinalSection(false) {} + : _context(context), _symbolTable(context), _result(context), + _haveLLVMObjs(false), _addToFinalSection(false) {} virtual ~Resolver() {} @@ -64,7 +62,9 @@ public: /// @brief do work of merging and resolving and return list bool resolve(); - std::unique_ptr<MutableFile> resultFile() { return std::move(_result); } + MutableFile& resultFile() { + return _result; + } private: @@ -117,7 +117,7 @@ private: std::set<const Atom *> _deadStripRoots; std::vector<const Atom *> _atomsWithUnresolvedReferences; llvm::DenseSet<const Atom *> _liveAtoms; - std::unique_ptr<MergedFile> _result; + MergedFile _result; bool _haveLLVMObjs; bool _addToFinalSection; }; diff --git a/lld/include/lld/Passes/LayoutPass.h b/lld/include/lld/Passes/LayoutPass.h index bbd277f488f..39a9b49f208 100644 --- a/lld/include/lld/Passes/LayoutPass.h +++ b/lld/include/lld/Passes/LayoutPass.h @@ -48,7 +48,7 @@ public: LayoutPass() : Pass(), _compareAtoms(*this) {} /// Sorts atoms in mergedFile by content type then by command line order. - virtual void perform(std::unique_ptr<MutableFile> &mergedFile); + virtual void perform(MutableFile &mergedFile); virtual ~LayoutPass() {} diff --git a/lld/include/lld/Passes/RoundTripNativePass.h b/lld/include/lld/Passes/RoundTripNativePass.h deleted file mode 100644 index b2e286a4fd8..00000000000 --- a/lld/include/lld/Passes/RoundTripNativePass.h +++ /dev/null @@ -1,40 +0,0 @@ -//===- Passes/RoundTripNativePass.cpp - Write Native file/Read it back-----===// -// -// The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLD_PASSES_ROUNDTRIP_NATIVE_PASS_H -#define LLD_PASSES_ROUNDTRIP_NATIVE_PASS_H - -#include "lld/Core/File.h" -#include "lld/Core/LinkingContext.h" -#include "lld/Core/Pass.h" - -#include <map> -#include <vector> - -namespace lld { -class RoundTripNativePass : public Pass { -public: - RoundTripNativePass(LinkingContext &context) : Pass(), _context(context) {} - - /// Sorts atoms in mergedFile by content type then by command line order. - virtual void perform(std::unique_ptr<MutableFile> &mergedFile); - - virtual ~RoundTripNativePass() {} - -private: - LinkingContext &_context; - // Keep the parsed file alive for the rest of the link. All atoms - // that are created by the RoundTripNativePass are owned by the - // nativeFile. - std::vector<std::unique_ptr<File> > _nativeFile; -}; - -} // namespace lld - -#endif // LLD_PASSES_ROUNDTRIP_NATIVE_PASS_H diff --git a/lld/include/lld/Passes/RoundTripYAMLPass.h b/lld/include/lld/Passes/RoundTripYAMLPass.h deleted file mode 100644 index 422e7e0c9eb..00000000000 --- a/lld/include/lld/Passes/RoundTripYAMLPass.h +++ /dev/null @@ -1,40 +0,0 @@ -//===- Passes/RoundTripYAMLPass.h- Write YAML file/Read it back-----------===// -// -// The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLD_PASSES_ROUNDTRIP_YAML_PASS_H -#define LLD_PASSES_ROUNDTRIP_YAML_PASS_H - -#include "lld/Core/File.h" -#include "lld/Core/LinkingContext.h" -#include "lld/Core/Pass.h" - -#include <map> -#include <vector> - -namespace lld { -class RoundTripYAMLPass : public Pass { -public: - RoundTripYAMLPass(LinkingContext &context) : Pass(), _context(context) {} - - /// Sorts atoms in mergedFile by content type then by command line order. - virtual void perform(std::unique_ptr<MutableFile> &mergedFile); - - virtual ~RoundTripYAMLPass() {} - -private: - LinkingContext &_context; - // Keep the parsed file alive for the rest of the link. All atoms - // that are created by the RoundTripYAMLPass are owned by the - // yamlFile. - std::vector<std::unique_ptr<File> > _yamlFile; -}; - -} // namespace lld - -#endif // LLD_PASSES_ROUNDTRIP_YAML_PASS_H diff --git a/lld/include/lld/ReaderWriter/Simple.h b/lld/include/lld/ReaderWriter/Simple.h index 6baa4265a2b..c7d4bef3919 100644 --- a/lld/include/lld/ReaderWriter/Simple.h +++ b/lld/include/lld/ReaderWriter/Simple.h @@ -62,31 +62,13 @@ public: return make_range(_definedAtoms._atoms); } -protected: +private: atom_collection_vector<DefinedAtom> _definedAtoms; atom_collection_vector<UndefinedAtom> _undefinedAtoms; atom_collection_vector<SharedLibraryAtom> _sharedLibraryAtoms; atom_collection_vector<AbsoluteAtom> _absoluteAtoms; }; -class FileToMutable : public SimpleFile { -public: - explicit FileToMutable(const LinkingContext &context, File &file) - : SimpleFile(context, file.path()), _file(file) { - for (auto definedAtom : _file.defined()) - _definedAtoms._atoms.push_back(std::move(definedAtom)); - for (auto undefAtom : _file.undefined()) - _undefinedAtoms._atoms.push_back(std::move(undefAtom)); - for (auto shlibAtom : _file.sharedLibrary()) - _sharedLibraryAtoms._atoms.push_back(std::move(shlibAtom)); - for (auto absAtom : _file.absolute()) - _absoluteAtoms._atoms.push_back(std::move(absAtom)); - } - -private: - const File &_file; -}; - class SimpleReference : public Reference { public: SimpleReference(Reference::Kind k, uint64_t off, const Atom *t, diff --git a/lld/lib/Core/PassManager.cpp b/lld/lib/Core/PassManager.cpp index 715a5fbda11..238fb0a6b64 100644 --- a/lld/lib/Core/PassManager.cpp +++ b/lld/lib/Core/PassManager.cpp @@ -15,7 +15,7 @@ #include "llvm/Support/ErrorOr.h" namespace lld { -ErrorOr<void> PassManager::runOnFile(std::unique_ptr<MutableFile> &mf) { +ErrorOr<void> PassManager::runOnFile(MutableFile &mf) { for (auto &pass : _passes) { pass->perform(mf); } diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp index 3af0c5cba71..3a34cd3fe3f 100644 --- a/lld/lib/Core/Resolver.cpp +++ b/lld/lib/Core/Resolver.cpp @@ -480,7 +480,7 @@ bool Resolver::resolve() { } this->removeCoalescedAwayAtoms(); this->linkTimeOptimize(); - this->_result->addAtoms(_atoms); + this->_result.addAtoms(_atoms); return true; } diff --git a/lld/lib/Driver/Driver.cpp b/lld/lib/Driver/Driver.cpp index fcbdbe723b5..6f0f4ecdde6 100644 --- a/lld/lib/Driver/Driver.cpp +++ b/lld/lib/Driver/Driver.cpp @@ -16,8 +16,6 @@ #include "lld/Core/Resolver.h" #include "lld/ReaderWriter/Reader.h" #include "lld/ReaderWriter/Writer.h" -#include "lld/Passes/RoundTripNativePass.h" -#include "lld/Passes/RoundTripYAMLPass.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringSwitch.h" @@ -107,25 +105,19 @@ bool Driver::link(LinkingContext &context, raw_ostream &diagnostics) { Resolver resolver(context); if (!resolver.resolve()) return false; - std::unique_ptr<MutableFile> merged = resolver.resultFile(); + MutableFile &merged = resolver.resultFile(); resolveTask.end(); // Run passes on linked atoms. ScopedTask passTask(getDefaultDomain(), "Passes"); PassManager pm; context.addPasses(pm); - -#ifndef NDEBUG - pm.add(std::unique_ptr<Pass>(new RoundTripNativePass(context))); - pm.add(std::unique_ptr<Pass>(new RoundTripYAMLPass(context))); -#endif - pm.runOnFile(merged); passTask.end(); // Give linked atoms to Writer to generate output file. ScopedTask writeTask(getDefaultDomain(), "Write"); - if (error_code ec = context.writeFile(*merged)) { + if (error_code ec = context.writeFile(merged)) { diagnostics << "Failed to write file '" << context.outputPath() << "': " << ec.message() << "\n"; return false; diff --git a/lld/lib/Passes/CMakeLists.txt b/lld/lib/Passes/CMakeLists.txt index 3cec05afec5..10759023a38 100644 --- a/lld/lib/Passes/CMakeLists.txt +++ b/lld/lib/Passes/CMakeLists.txt @@ -2,8 +2,4 @@ add_lld_library(lldPasses GOTPass.cpp StubsPass.cpp LayoutPass.cpp - RoundTripNativePass.cpp - RoundTripYAMLPass.cpp ) - -target_link_libraries(lldPasses lldReaderWriter) diff --git a/lld/lib/Passes/GOTPass.cpp b/lld/lib/Passes/GOTPass.cpp index b9a6f73e5b1..1bb6e4cee4a 100644 --- a/lld/lib/Passes/GOTPass.cpp +++ b/lld/lib/Passes/GOTPass.cpp @@ -67,12 +67,12 @@ findGOTAtom(const Atom *target, } } // end anonymous namespace -void GOTPass::perform(std::unique_ptr<MutableFile> &mergedFile) { +void GOTPass::perform(MutableFile &mergedFile) { // Use map so all pointers to same symbol use same GOT entry. llvm::DenseMap<const Atom*, const DefinedAtom*> targetToGOT; // Scan all references in all atoms. - for (const DefinedAtom *atom : mergedFile->defined()) { + for(const DefinedAtom *atom : mergedFile.defined()) { for (const Reference *ref : *atom) { // Look at instructions accessing the GOT. bool canBypassGOT; @@ -102,7 +102,7 @@ void GOTPass::perform(std::unique_ptr<MutableFile> &mergedFile) { // add all created GOT Atoms to master file for (auto &it : targetToGOT) { - mergedFile->addAtom(*it.second); + mergedFile.addAtom(*it.second); } } } diff --git a/lld/lib/Passes/LayoutPass.cpp b/lld/lib/Passes/LayoutPass.cpp index f7e73df7087..b00887d6fd4 100644 --- a/lld/lib/Passes/LayoutPass.cpp +++ b/lld/lib/Passes/LayoutPass.cpp @@ -534,9 +534,9 @@ void LayoutPass::checkFollowonChain(MutableFile::DefinedAtomRange &range) { #endif // #ifndef NDEBUG /// Perform the actual pass -void LayoutPass::perform(std::unique_ptr<MutableFile> &mergedFile) { +void LayoutPass::perform(MutableFile &mergedFile) { ScopedTask task(getDefaultDomain(), "LayoutPass"); - MutableFile::DefinedAtomRange atomRange = mergedFile->definedAtoms(); + MutableFile::DefinedAtomRange atomRange = mergedFile.definedAtoms(); // Build follow on tables buildFollowOnTable(atomRange); diff --git a/lld/lib/Passes/RoundTripNativePass.cpp b/lld/lib/Passes/RoundTripNativePass.cpp deleted file mode 100644 index e5d81c65340..00000000000 --- a/lld/lib/Passes/RoundTripNativePass.cpp +++ /dev/null @@ -1,41 +0,0 @@ -//===- Passes/RoundTripNativePass.cpp - Write Native file/Read it back-----===// -// -// The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -#define DEBUG_TYPE "RoundTripNativePass" - -#include "lld/Core/Instrumentation.h" -#include "lld/Passes/RoundTripNativePass.h" -#include "lld/ReaderWriter/Simple.h" -#include "lld/ReaderWriter/Writer.h" - -#include "llvm/Support/Path.h" - -using namespace lld; - -/// Perform the actual pass -void RoundTripNativePass::perform(std::unique_ptr<MutableFile> &mergedFile) { - ScopedTask task(getDefaultDomain(), "RoundTripNativePass"); - std::unique_ptr<Writer> nativeWriter = createWriterNative(_context); - SmallString<128> tmpNativeFile; - // Separate the directory from the filename - StringRef outFile = llvm::sys::path::filename(_context.outputPath()); - if (llvm::sys::fs::createTemporaryFile(outFile, "native", tmpNativeFile)) - return; - - nativeWriter->writeFile(*mergedFile, tmpNativeFile.str()); - llvm::OwningPtr<llvm::MemoryBuffer> buff; - if (llvm::MemoryBuffer::getFileOrSTDIN(tmpNativeFile.str(), buff)) - return; - - std::unique_ptr<MemoryBuffer> mb(buff.take()); - _context.getNativeReader().parseFile(mb, _nativeFile); - - mergedFile.reset(new FileToMutable(_context, *_nativeFile[0].get())); - - llvm::sys::fs::remove(tmpNativeFile.str()); -} diff --git a/lld/lib/Passes/RoundTripYAMLPass.cpp b/lld/lib/Passes/RoundTripYAMLPass.cpp deleted file mode 100644 index bbe6a57d9a0..00000000000 --- a/lld/lib/Passes/RoundTripYAMLPass.cpp +++ /dev/null @@ -1,42 +0,0 @@ -//===- Passes/RoundTripYAMLPass.cpp - Write YAML file/Read it back--------===// -// -// The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#define DEBUG_TYPE "RoundTripYAMLPass" - -#include "lld/Core/Instrumentation.h" -#include "lld/Passes/RoundTripYAMLPass.h" -#include "lld/ReaderWriter/Simple.h" -#include "lld/ReaderWriter/Writer.h" - -#include "llvm/Support/Path.h" - -using namespace lld; - -/// Perform the actual pass -void RoundTripYAMLPass::perform(std::unique_ptr<MutableFile> &mergedFile) { - ScopedTask task(getDefaultDomain(), "RoundTripYAMLPass"); - std::unique_ptr<Writer> yamlWriter = createWriterYAML(_context); - SmallString<128> tmpYAMLFile; - // Separate the directory from the filename - StringRef outFile = llvm::sys::path::filename(_context.outputPath()); - if (llvm::sys::fs::createTemporaryFile(outFile, "yaml", tmpYAMLFile)) - return; - - yamlWriter->writeFile(*mergedFile, tmpYAMLFile.str()); - llvm::OwningPtr<llvm::MemoryBuffer> buff; - if (llvm::MemoryBuffer::getFileOrSTDIN(tmpYAMLFile.str(), buff)) - return; - - std::unique_ptr<MemoryBuffer> mb(buff.take()); - _context.getYAMLReader().parseFile(mb, _yamlFile); - - mergedFile.reset(new FileToMutable(_context, *_yamlFile[0].get())); - - llvm::sys::fs::remove(tmpYAMLFile.str()); -} diff --git a/lld/lib/Passes/StubsPass.cpp b/lld/lib/Passes/StubsPass.cpp index b75f2316bcb..ef3870580cb 100644 --- a/lld/lib/Passes/StubsPass.cpp +++ b/lld/lib/Passes/StubsPass.cpp @@ -23,13 +23,13 @@ namespace lld { -void StubsPass::perform(std::unique_ptr<MutableFile> &mergedFile) { +void StubsPass::perform(MutableFile &mergedFile) { // Skip this pass if output format uses text relocations instead of stubs. if ( ! this->noTextRelocs() ) return; // Scan all references in all atoms. - for (const DefinedAtom *atom : mergedFile->defined()) { + for(const DefinedAtom *atom : mergedFile.defined()) { for (const Reference *ref : *atom) { // Look at call-sites. if (this->isCallSite(ref->kind()) ) { @@ -61,6 +61,6 @@ void StubsPass::perform(std::unique_ptr<MutableFile> &mergedFile) { } // Add all created stubs and support Atoms. - this->addStubAtoms(*mergedFile); + this->addStubAtoms(mergedFile); } } diff --git a/lld/lib/ReaderWriter/CoreLinkingContext.cpp b/lld/lib/ReaderWriter/CoreLinkingContext.cpp index d6e522c5dcc..ec8962bbce2 100644 --- a/lld/lib/ReaderWriter/CoreLinkingContext.cpp +++ b/lld/lib/ReaderWriter/CoreLinkingContext.cpp @@ -12,7 +12,6 @@ #include "lld/Core/Pass.h" #include "lld/Core/PassManager.h" #include "lld/Passes/LayoutPass.h" -#include "lld/ReaderWriter/Simple.h" #include "llvm/ADT/ArrayRef.h" @@ -150,10 +149,10 @@ private: uint32_t _ordinal; }; -class TestingPassFile : public SimpleFile { +class TestingPassFile : public MutableFile { public: TestingPassFile(const LinkingContext &ctx) - : SimpleFile(ctx, "Testing pass") {} + : MutableFile(ctx, "Testing pass") {} virtual void addAtom(const Atom &atom) { if (const DefinedAtom *defAtom = dyn_cast<DefinedAtom>(&atom)) diff --git a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp index 659dcb15ad0..7c918877fc2 100644 --- a/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp +++ b/lld/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.cpp @@ -157,9 +157,9 @@ public: /// /// After all references are handled, the atoms created during that are all /// added to mf. - virtual void perform(std::unique_ptr<MutableFile> &mf) { + virtual void perform(MutableFile &mf) { // Process all references. - for (const auto &atom : mf->defined()) + for (const auto &atom : mf.defined()) for (const auto &ref : *atom) handleReference(*atom, *ref); @@ -167,23 +167,23 @@ public: uint64_t ordinal = 0; if (_PLT0) { _PLT0->setOrdinal(ordinal++); - mf->addAtom(*_PLT0); + mf.addAtom(*_PLT0); } for (auto &plt : _pltVector) { plt->setOrdinal(ordinal++); - mf->addAtom(*plt); + mf.addAtom(*plt); } if (_null) { _null->setOrdinal(ordinal++); - mf->addAtom(*_null); + mf.addAtom(*_null); } if (_got0) { _got0->setOrdinal(ordinal++); - mf->addAtom(*_got0); + mf.addAtom(*_got0); } for (auto &got : _gotVector) { got->setOrdinal(ordinal++); - mf->addAtom(*got); + mf.addAtom(*got); } } diff --git a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp index f52629db324..5aeb1f95ac6 100644 --- a/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp +++ b/lld/lib/ReaderWriter/ELF/X86_64/X86_64LinkingContext.cpp @@ -219,10 +219,10 @@ public: /// /// After all references are handled, the atoms created during that are all /// added to mf. - virtual void perform(std::unique_ptr<MutableFile> &mf) { + virtual void perform(MutableFile &mf) { ScopedTask task(getDefaultDomain(), "X86-64 GOT/PLT Pass"); // Process all references. - for (const auto &atom : mf->defined()) + for (const auto &atom : mf.defined()) for (const auto &ref : *atom) handleReference(*atom, *ref); @@ -230,29 +230,29 @@ public: uint64_t ordinal = 0; if (_PLT0) { _PLT0->setOrdinal(ordinal++); - mf->addAtom(*_PLT0); + mf.addAtom(*_PLT0); } for (auto &plt : _pltVector) { plt->setOrdinal(ordinal++); - mf->addAtom(*plt); + mf.addAtom(*plt); } if (_null) { _null->setOrdinal(ordinal++); - mf->addAtom(*_null); + mf.addAtom(*_null); } if (_PLT0) { _got0->setOrdinal(ordinal++); _got1->setOrdinal(ordinal++); - mf->addAtom(*_got0); - mf->addAtom(*_got1); + mf.addAtom(*_got0); + mf.addAtom(*_got1); } for (auto &got : _gotVector) { got->setOrdinal(ordinal++); - mf->addAtom(*got); + mf.addAtom(*got); } for (auto obj : _objectVector) { obj->setOrdinal(ordinal++); - mf->addAtom(*obj); + mf.addAtom(*obj); } } diff --git a/lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h b/lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h index e3186031b87..f8836061a07 100644 --- a/lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h +++ b/lld/lib/ReaderWriter/PECOFF/GroupedSectionsPass.h @@ -60,9 +60,9 @@ class GroupedSectionsPass : public lld::Pass { public: GroupedSectionsPass() {} - virtual void perform(std::unique_ptr<MutableFile> &mergedFile) { - std::map<StringRef, std::vector<COFFDefinedAtom *> > sectionToHeadAtoms( - filterHeadAtoms(*mergedFile)); + virtual void perform(MutableFile &mergedFile) { + std::map<StringRef, std::vector<COFFDefinedAtom *>> sectionToHeadAtoms( + filterHeadAtoms(mergedFile)); std::vector<std::vector<COFFDefinedAtom *>> groupedAtomsList( groupBySectionName(sectionToHeadAtoms)); for (auto &groupedAtoms : groupedAtomsList) diff --git a/lld/lib/ReaderWriter/PECOFF/IdataPass.h b/lld/lib/ReaderWriter/PECOFF/IdataPass.h index f56376fba2c..beb9401d3ee 100644 --- a/lld/lib/ReaderWriter/PECOFF/IdataPass.h +++ b/lld/lib/ReaderWriter/PECOFF/IdataPass.h @@ -252,13 +252,13 @@ class IdataPass : public lld::Pass { public: IdataPass(const LinkingContext &ctx) : _dummyFile(ctx) {} - virtual void perform(std::unique_ptr<MutableFile> &file) { - if (file->sharedLibrary().size() == 0) + virtual void perform(MutableFile &file) { + if (file.sharedLibrary().size() == 0) return; - Context context(*file, _dummyFile); + Context context(file, _dummyFile); map<StringRef, vector<COFFSharedLibraryAtom *> > sharedAtoms = - groupByLoadName(*file); + groupByLoadName(file); for (auto i : sharedAtoms) { StringRef loadName = i.first; vector<COFFSharedLibraryAtom *> &atoms = i.second; diff --git a/lld/test/darwin/hello-world.objtxt b/lld/test/darwin/hello-world.objtxt index bcafee28341..24a496e73e2 100644 --- a/lld/test/darwin/hello-world.objtxt +++ b/lld/test/darwin/hello-world.objtxt @@ -34,5 +34,3 @@ shared-library-atoms: # CHECK: {{[0-9a-f]+}} s _main # CHECK: 00000000 u _printf # CHECK: 00000000 u dyld_stub_binder -# Disable the test for now as this is going to fail with DEBUG mode -# REQUIRES: disable diff --git a/lld/test/elf/X86_64/dontignorezerosize-sections.test b/lld/test/elf/X86_64/dontignorezerosize-sections.test index 7123661a445..1296b984099 100644 --- a/lld/test/elf/X86_64/dontignorezerosize-sections.test +++ b/lld/test/elf/X86_64/dontignorezerosize-sections.test @@ -3,7 +3,9 @@ RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/zerosizedsection.o \ RUN: --noinhibit-exec --output-filetype=yaml -o %t RUN: FileCheck %s < %t +CHECK: section-name: .data CHECK: references: CHECK: - kind: R_X86_64_16 CHECK: offset: 0 CHECK: target: L000 +CHECK: section-name: .text diff --git a/lld/test/elf/X86_64/largebss.test b/lld/test/elf/X86_64/largebss.test index 13788a2431f..cd8bc080170 100644 --- a/lld/test/elf/X86_64/largebss.test +++ b/lld/test/elf/X86_64/largebss.test @@ -10,11 +10,14 @@ CHECK: scope: global CHECK: type: zero-fill CHECK: size: 4000 CHECK: merge: as-tentative +CHECK: section-name: .bss CHECK: - name: largebss CHECK: scope: global CHECK: type: zero-fill CHECK: size: 4000 +CHECK: section-name: .bss CHECK: - name: largetbss CHECK: scope: global CHECK: type: thread-zero-fill CHECK: size: 4000 +CHECK: section-name: .tbss diff --git a/lld/test/elf/X86_64/note-sections-ro_plus_rw.test b/lld/test/elf/X86_64/note-sections-ro_plus_rw.test index 76fcce01506..ddeeaa41a75 100644 --- a/lld/test/elf/X86_64/note-sections-ro_plus_rw.test +++ b/lld/test/elf/X86_64/note-sections-ro_plus_rw.test @@ -40,7 +40,3 @@ NOTESEGMENT: PF_W (0x2) NOTESEGMENT: ] NOTESEGMENT: Alignment: 4 NOTESEGMENT: } - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable - diff --git a/lld/test/elf/X86_64/weak-override.test b/lld/test/elf/X86_64/weak-override.test index da64edf8a04..c4932c798f0 100644 --- a/lld/test/elf/X86_64/weak-override.test +++ b/lld/test/elf/X86_64/weak-override.test @@ -41,6 +41,7 @@ WEAKATOMSORDER: - kind: layout-before WEAKATOMSORDER: offset: 0 WEAKATOMSORDER: target: [[CONSTSTRA]] WEAKATOMSORDER: - ref-name: {{[0-9A-Z]+}} +WEAKATOMSORDER: section-name: .text WEAKATOMSORDER: references: WEAKATOMSORDER: - kind: layout-after WEAKATOMSORDER: offset: 0 diff --git a/lld/test/elf/X86_64/weak-zero-sized.test b/lld/test/elf/X86_64/weak-zero-sized.test index 496b01717e1..515cb23fa1a 100644 --- a/lld/test/elf/X86_64/weak-zero-sized.test +++ b/lld/test/elf/X86_64/weak-zero-sized.test @@ -10,6 +10,7 @@ WEAKORDER: 004001a4 T _start WEAKATOMSORDER: - ref-name: [[TARGETA:[-a-zA-Z0-9_]+]] WEAKATOMSORDER: alignment: 2^2 +WEAKATOMSORDER: section-name: .text WEAKATOMSORDER: - kind: layout-after WEAKATOMSORDER: offset: 0 WEAKATOMSORDER: target: [[TARGETB:[-a-zA-Z0-9_]+]] @@ -17,6 +18,7 @@ WEAKATOMSORDER: - name: _start WEAKATOMSORDER: scope: global WEAKATOMSORDER: merge: as-weak WEAKATOMSORDER: alignment: 2^2 +WEAKATOMSORDER: section-name: .text WEAKATOMSORDER: references: WEAKATOMSORDER: - kind: layout-after WEAKATOMSORDER: offset: 0 @@ -25,6 +27,7 @@ WEAKATOMSORDER: - ref-name: [[TARGETB]] WEAKATOMSORDER: scope: global WEAKATOMSORDER: content: [ C3 ] WEAKATOMSORDER: alignment: 2^2 +WEAKATOMSORDER: section-name: .text WEAKATOMSORDER: references: WEAKATOMSORDER: - kind: layout-before WEAKATOMSORDER: offset: 0 diff --git a/lld/test/elf/check.test b/lld/test/elf/check.test index 6b378dd44f2..dfed51e2d5a 100644 --- a/lld/test/elf/check.test +++ b/lld/test/elf/check.test @@ -37,6 +37,3 @@ ELF-hexagon: absolute-atoms: ELF-hexagon: - name: sample.c ELF-hexagon: scope: static ELF-hexagon: value: 0x0000000000000000 - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/elf/phdr.test b/lld/test/elf/phdr.test index db245248837..b3dfd10698d 100644 --- a/lld/test/elf/phdr.test +++ b/lld/test/elf/phdr.test @@ -85,6 +85,3 @@ I386-NEXT: } X86_64: LOAD off 0x0000000000000000 X86_64: LOAD off 0x0000000000001000 - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/elf/ppc.test b/lld/test/elf/ppc.test index 9ac2358b802..dd501f64f8f 100644 --- a/lld/test/elf/ppc.test +++ b/lld/test/elf/ppc.test @@ -12,6 +12,3 @@ ppc-readobj: ABIVersion: 0 ppc-readobj: } ppc-readobj: Type: Executable (0x2) ppc-readobj: Machine: EM_PPC (0x14) - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/elf/undef-from-main-dso.test b/lld/test/elf/undef-from-main-dso.test index d988a9153a0..1a282517bfa 100644 --- a/lld/test/elf/undef-from-main-dso.test +++ b/lld/test/elf/undef-from-main-dso.test @@ -30,6 +30,3 @@ CHECK-NEXT: Binding: Global (0x1) CHECK-NEXT: Type: Object (0x1) CHECK-NEXT: Other: 0 CHECK-NEXT: Section: .bss - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/alignment.test b/lld/test/pecoff/alignment.test index d43a9ef10b6..b2e1d002541 100644 --- a/lld/test/pecoff/alignment.test +++ b/lld/test/pecoff/alignment.test @@ -4,6 +4,3 @@ # RUN: -- %t.obj && llvm-readobj -sections %t1 | FileCheck %s CHECK: VirtualSize: 0x1001 - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/base-reloc.test b/lld/test/pecoff/base-reloc.test index 9dfdd9fb219..4b81171c23d 100644 --- a/lld/test/pecoff/base-reloc.test +++ b/lld/test/pecoff/base-reloc.test @@ -47,6 +47,3 @@ BASEREL-HEADER-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) BASEREL-HEADER-NEXT: IMAGE_SCN_MEM_DISCARDABLE (0x2000000) BASEREL-HEADER-NEXT: IMAGE_SCN_MEM_READ (0x40000000) BASEREL-HEADER-NEXT: ] - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/bss-section.test b/lld/test/pecoff/bss-section.test index 607ac693065..f686e12d722 100644 --- a/lld/test/pecoff/bss-section.test +++ b/lld/test/pecoff/bss-section.test @@ -18,6 +18,3 @@ CHECK-NEXT: IMAGE_SCN_MEM_READ CHECK-NEXT: IMAGE_SCN_MEM_WRITE CHECK-NEXT: ] CHECK-NEXT: } - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/drectve.test b/lld/test/pecoff/drectve.test index 98f1e9ee491..3250312f70f 100644 --- a/lld/test/pecoff/drectve.test +++ b/lld/test/pecoff/drectve.test @@ -22,6 +22,3 @@ IMPORT-NEXT: 1 fn IMPORT-NEXT: 1 ERROR-NOT: foo - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/dynamic.test b/lld/test/pecoff/dynamic.test index c605cb77dc1..2d5c6e81e08 100644 --- a/lld/test/pecoff/dynamic.test +++ b/lld/test/pecoff/dynamic.test @@ -8,6 +8,3 @@ CHECK-NEXT: Hint/Ord Name CHECK-NEXT: 0 _name_with_underscore CHECK-NEXT: 1 fn CHECK-NEXT: 1 - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/dynamicbase.test b/lld/test/pecoff/dynamicbase.test index 6207bf03eae..52eaae75ff0 100644 --- a/lld/test/pecoff/dynamicbase.test +++ b/lld/test/pecoff/dynamicbase.test @@ -21,6 +21,3 @@ DYNAMICBASE: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE NODYNAMICBASE-NOT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE DYNAMIC-AND-FIXED: /dynamicbase must not be specified with /fixed - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/entry.test b/lld/test/pecoff/entry.test index e62789e1a7c..deee5ed825a 100644 --- a/lld/test/pecoff/entry.test +++ b/lld/test/pecoff/entry.test @@ -7,6 +7,3 @@ # RUN: FileCheck -check-prefix=CHECK %s < %t1.log CHECK: : _main - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/hello.test b/lld/test/pecoff/hello.test index 738bef4f2df..b2f6172a5bd 100644 --- a/lld/test/pecoff/hello.test +++ b/lld/test/pecoff/hello.test @@ -52,6 +52,3 @@ SECTIONS: IMAGE_SCN_MEM_WRITE (0x80000000) SECTIONS: ] SECTIONS: } SECTIONS: ] - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/imagebase.test b/lld/test/pecoff/imagebase.test index e229353bc4f..9a89eb167a4 100644 --- a/lld/test/pecoff/imagebase.test +++ b/lld/test/pecoff/imagebase.test @@ -10,6 +10,3 @@ CHECK1: a1 00 20 40 00 movl 4202496, %eax CHECK2: a1 00 20 01 00 movl 73728, %eax - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/importlib.test b/lld/test/pecoff/importlib.test index 177cc9a44cd..9aefbdcd02e 100644 --- a/lld/test/pecoff/importlib.test +++ b/lld/test/pecoff/importlib.test @@ -36,6 +36,3 @@ CHECK-NEXT: 101a: 03 c6 addl %esi, %eax CHECK-NEXT: 101c: 5e popl %esi CHECK-NEXT: 101d: 5d popl %ebp CHECK-NEXT: 101e: c3 ret - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/lib.test b/lld/test/pecoff/lib.test index f3e9266c84c..b18351cd016 100644 --- a/lld/test/pecoff/lib.test +++ b/lld/test/pecoff/lib.test @@ -10,6 +10,3 @@ CHECK: .text: CHECK: 1000: a1 04 20 40 00 movl 4202500, %eax CHECK: 1005: 03 05 00 20 40 00 addl 4202496, %eax CHECK: 100b: c3 ret - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/multi.test b/lld/test/pecoff/multi.test index bc68f0c7c72..debbce13733 100644 --- a/lld/test/pecoff/multi.test +++ b/lld/test/pecoff/multi.test @@ -12,6 +12,3 @@ CHECK: .text: CHECK: 1000: a1 04 20 40 00 movl 4202500, %eax CHECK: 1005: 03 05 00 20 40 00 addl 4202496, %eax CHECK: 100b: c3 ret - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/reloc.test b/lld/test/pecoff/reloc.test index 2077e794b4c..bfef4600376 100644 --- a/lld/test/pecoff/reloc.test +++ b/lld/test/pecoff/reloc.test @@ -38,6 +38,3 @@ AFTER: 1035: 31 c0 AFTER: 1037: 83 c4 14 AFTER: 103a: 5d AFTER: 103b: c3 - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable diff --git a/lld/test/pecoff/weak-external.test b/lld/test/pecoff/weak-external.test index b8fdabbafd2..2fb0c029084 100644 --- a/lld/test/pecoff/weak-external.test +++ b/lld/test/pecoff/weak-external.test @@ -7,6 +7,3 @@ CHECK-NOT: _no_such_symbol1 CHECK-NOT: _no_such_symbol2 CHECK: _no_such_symbol3 - -# Disable the test for now as this is going to fail with DEBUG mode -REQUIRES: disable |

