//===- lib/ReaderWriter/CoreLinkingContext.cpp ----------------------------===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "lld/Core/DefinedAtom.h" #include "lld/Core/File.h" #include "lld/Core/Pass.h" #include "lld/Core/PassManager.h" #include "lld/Core/Simple.h" #include "lld/ReaderWriter/CoreLinkingContext.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/STLExtras.h" using namespace lld; namespace { class OrderPass : public Pass { public: /// Sorts atoms by position std::error_code perform(SimpleFile &file) override { SimpleFile::DefinedAtomRange defined = file.definedAtoms(); std::sort(defined.begin(), defined.end(), DefinedAtom::compareByPosition); return std::error_code(); } }; } // anonymous namespace CoreLinkingContext::CoreLinkingContext() {} bool CoreLinkingContext::validateImpl(raw_ostream &) { _writer = createWriterYAML(*this); return true; } void CoreLinkingContext::addPasses(PassManager &pm) { for (StringRef name : _passNames) { (void)name; assert(name == "order" && "bad pass name"); pm.add(llvm::make_unique()); } } Writer &CoreLinkingContext::writer() const { return *_writer; }