From 5a5c549fe9a3fef595297bd21d36bed8409dc37d Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Wed, 30 Dec 2015 11:57:38 +0000 Subject: Vendor import of lld trunk r256633: https://llvm.org/svn/llvm-project/lld/trunk@256633 --- lib/ReaderWriter/CoreLinkingContext.cpp | 135 ++------------------------------ 1 file changed, 7 insertions(+), 128 deletions(-) (limited to 'lib/ReaderWriter/CoreLinkingContext.cpp') diff --git a/lib/ReaderWriter/CoreLinkingContext.cpp b/lib/ReaderWriter/CoreLinkingContext.cpp index 86fad4f6e77d..02f6263c0c3f 100644 --- a/lib/ReaderWriter/CoreLinkingContext.cpp +++ b/lib/ReaderWriter/CoreLinkingContext.cpp @@ -14,139 +14,19 @@ #include "lld/Core/Simple.h" #include "lld/ReaderWriter/CoreLinkingContext.h" #include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/STLExtras.h" using namespace lld; namespace { -/// \brief Simple atom created by the stubs pass. -class TestingStubAtom : public DefinedAtom { -public: - TestingStubAtom(const File &F, const Atom &) : _file(F) { - static uint32_t lastOrdinal = 0; - _ordinal = lastOrdinal++; - } - - const File &file() const override { return _file; } - - StringRef name() const override { return StringRef(); } - - uint64_t ordinal() const override { return _ordinal; } - - uint64_t size() const override { return 0; } - - Scope scope() const override { return DefinedAtom::scopeLinkageUnit; } - - Interposable interposable() const override { return DefinedAtom::interposeNo; } - - Merge merge() const override { return DefinedAtom::mergeNo; } - - ContentType contentType() const override { return DefinedAtom::typeStub; } - - Alignment alignment() const override { return Alignment(0, 0); } - - SectionChoice sectionChoice() const override { - return DefinedAtom::sectionBasedOnContent; - } - - StringRef customSectionName() const override { return StringRef(); } - - DeadStripKind deadStrip() const override { - return DefinedAtom::deadStripNormal; - } - - ContentPermissions permissions() const override { - return DefinedAtom::permR_X; - } - - ArrayRef rawContent() const override { return ArrayRef(); } - - reference_iterator begin() const override { - return reference_iterator(*this, nullptr); - } - - reference_iterator end() const override { - return reference_iterator(*this, nullptr); - } - - const Reference *derefIterator(const void *iter) const override { - return nullptr; - } - - void incrementIterator(const void *&iter) const override {} - -private: - const File &_file; - uint32_t _ordinal; -}; - -/// \brief Simple atom created by the GOT pass. -class TestingGOTAtom : public DefinedAtom { -public: - TestingGOTAtom(const File &F, const Atom &) : _file(F) { - static uint32_t lastOrdinal = 0; - _ordinal = lastOrdinal++; - } - - const File &file() const override { return _file; } - - StringRef name() const override { return StringRef(); } - - uint64_t ordinal() const override { return _ordinal; } - - uint64_t size() const override { return 0; } - - Scope scope() const override { return DefinedAtom::scopeLinkageUnit; } - - Interposable interposable() const override { return DefinedAtom::interposeNo; } - - Merge merge() const override { return DefinedAtom::mergeNo; } - - ContentType contentType() const override { return DefinedAtom::typeGOT; } - - Alignment alignment() const override { return Alignment(3, 0); } - - SectionChoice sectionChoice() const override { - return DefinedAtom::sectionBasedOnContent; - } - - StringRef customSectionName() const override { return StringRef(); } - - DeadStripKind deadStrip() const override { - return DefinedAtom::deadStripNormal; - } - - ContentPermissions permissions() const override { - return DefinedAtom::permRW_; - } - - ArrayRef rawContent() const override { return ArrayRef(); } - - reference_iterator begin() const override { - return reference_iterator(*this, nullptr); - } - - reference_iterator end() const override { - return reference_iterator(*this, nullptr); - } - - const Reference *derefIterator(const void *iter) const override { - return nullptr; - } - - void incrementIterator(const void *&iter) const override {} - -private: - const File &_file; - uint32_t _ordinal; -}; - class OrderPass : public Pass { public: /// Sorts atoms by position - void perform(std::unique_ptr &file) override { - MutableFile::DefinedAtomRange defined = file->definedAtoms(); + std::error_code perform(SimpleFile &file) override { + SimpleFile::DefinedAtomRange defined = file.definedAtoms(); std::sort(defined.begin(), defined.end(), DefinedAtom::compareByPosition); + return std::error_code(); } }; @@ -161,10 +41,9 @@ bool CoreLinkingContext::validateImpl(raw_ostream &) { void CoreLinkingContext::addPasses(PassManager &pm) { for (StringRef name : _passNames) { - if (name.equals("order")) - pm.add(std::unique_ptr(new OrderPass())); - else - llvm_unreachable("bad pass name"); + (void)name; + assert(name == "order" && "bad pass name"); + pm.add(llvm::make_unique()); } } -- cgit v1.3