From 00eb257f2e908e5ec81bbe00aeeb42ea4aa4fd79 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 10 Dec 2014 00:33:00 +0000 Subject: Re-commit r223330: Rewrite InputGraph's Group llvm-svn: 223867 --- lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp') diff --git a/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp b/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp index ae236f475ba..7dc64d3fd5e 100644 --- a/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp +++ b/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp @@ -87,6 +87,23 @@ std::unique_ptr PECOFFLinkingContext::createUndefinedSymbolFile() const { ""); } +void PECOFFLinkingContext::addLibraryFile(std::unique_ptr file) { + GroupEnd *currentGroupEnd; + int pos = -1; + std::vector> &elements + = getInputGraph().inputElements(); + for (int i = 0, e = elements.size(); i < e; ++i) { + if ((currentGroupEnd = dyn_cast(elements[i].get()))) { + pos = i; + break; + } + } + assert(pos >= 0); + elements.insert(elements.begin() + pos, std::move(file)); + elements[pos + 1] = llvm::make_unique( + currentGroupEnd->getSize() + 1); +} + bool PECOFFLinkingContext::createImplicitFiles( std::vector> &) { // Create a file for __ImageBase. @@ -109,7 +126,7 @@ bool PECOFFLinkingContext::createImplicitFiles( auto exportNode = llvm::make_unique(""); exportNode->appendInputFile( llvm::make_unique(*this, syms)); - getLibraryGroup()->addFile(std::move(exportNode)); + addLibraryFile(std::move(exportNode)); // Create a file for the entry point function. getEntryNode()->appendInputFile( -- cgit v1.2.3