summaryrefslogtreecommitdiffstats
path: root/lld/lib/Driver/Driver.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-12-10 00:33:00 +0000
committerRui Ueyama <ruiu@google.com>2014-12-10 00:33:00 +0000
commit00eb257f2e908e5ec81bbe00aeeb42ea4aa4fd79 (patch)
treeecd3def36561bcc8ade871e50674266fa47c7611 /lld/lib/Driver/Driver.cpp
parentf3108ce3e8fa2f6440810512d53d84ed869569fb (diff)
downloadbcm5719-llvm-00eb257f2e908e5ec81bbe00aeeb42ea4aa4fd79.tar.gz
bcm5719-llvm-00eb257f2e908e5ec81bbe00aeeb42ea4aa4fd79.zip
Re-commit r223330: Rewrite InputGraph's Group
llvm-svn: 223867
Diffstat (limited to 'lld/lib/Driver/Driver.cpp')
-rw-r--r--lld/lib/Driver/Driver.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/lld/lib/Driver/Driver.cpp b/lld/lib/Driver/Driver.cpp
index 148d1003218..b26ab251659 100644
--- a/lld/lib/Driver/Driver.cpp
+++ b/lld/lib/Driver/Driver.cpp
@@ -62,9 +62,6 @@ bool Driver::link(LinkingContext &context, raw_ostream &diagnostics) {
if (std::error_code ec = ie->parse(context, stream)) {
if (FileNode *fileNode = dyn_cast<FileNode>(ie.get()))
stream << fileNode->errStr(ec) << "\n";
- else if (dyn_cast<Group>(ie.get()))
- // FIXME: We need a better diagnostics here
- stream << "Cannot parse group input element\n";
else
llvm_unreachable("Unknown type of input element");
fail = true;
@@ -83,21 +80,24 @@ bool Driver::link(LinkingContext &context, raw_ostream &diagnostics) {
if (fail)
return false;
- std::unique_ptr<SimpleFileNode> fileNode(
- new SimpleFileNode("Internal Files"));
-
InputGraph::FileVectorT internalFiles;
context.createInternalFiles(internalFiles);
-
- if (internalFiles.size())
- fileNode->addFiles(std::move(internalFiles));
+ for (auto i = internalFiles.rbegin(), e = internalFiles.rend(); i != e; ++i) {
+ context.getInputGraph().addInputElementFront(
+ llvm::make_unique<SimpleFileNode>("internal", std::move(*i)));
+ }
// Give target a chance to add files.
InputGraph::FileVectorT implicitFiles;
context.createImplicitFiles(implicitFiles);
- if (implicitFiles.size())
- fileNode->addFiles(std::move(implicitFiles));
- context.getInputGraph().addInputElementFront(std::move(fileNode));
+ for (auto i = implicitFiles.rbegin(), e = implicitFiles.rend(); i != e; ++i) {
+ context.getInputGraph().addInputElementFront(
+ llvm::make_unique<SimpleFileNode>("implicit", std::move(*i)));
+ }
+
+ // Give target a chance to sort the input files.
+ // Mach-O uses this chance to move all object files before library files.
+ context.maybeSortInputFiles();
// Do core linking.
ScopedTask resolveTask(getDefaultDomain(), "Resolve");
OpenPOWER on IntegriCloud