summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2015-06-09 21:52:48 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2015-06-09 21:52:48 +0000
commitbd1cb792d32c28e887387611fc0aba8638a32756 (patch)
treed326713e4ab7cbbcb12a15cb1aa982c20fa545e0
parent75589ffcc28258f2d9ff3143e5b2f8351e0848ff (diff)
downloadbcm5719-llvm-bd1cb792d32c28e887387611fc0aba8638a32756.tar.gz
bcm5719-llvm-bd1cb792d32c28e887387611fc0aba8638a32756.zip
COFF: Implement /lib using LibDriver.
Differential Revision: http://reviews.llvm.org/D10347 llvm-svn: 239436
-rw-r--r--lld/COFF/CMakeLists.txt1
-rw-r--r--lld/COFF/Driver.cpp6
2 files changed, 7 insertions, 0 deletions
diff --git a/lld/COFF/CMakeLists.txt b/lld/COFF/CMakeLists.txt
index 790e7941476..984044ac4ef 100644
--- a/lld/COFF/CMakeLists.txt
+++ b/lld/COFF/CMakeLists.txt
@@ -16,6 +16,7 @@ add_llvm_library(lldCOFF
${LLVM_TARGETS_TO_BUILD}
Core
LTO
+ LibDriver
MC
MCDisassembler
Support
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index 1cc635be18f..63f680c1481 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -16,6 +16,7 @@
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringSwitch.h"
+#include "llvm/LibDriver/LibDriver.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/ArgList.h"
#include "llvm/Option/Option.h"
@@ -185,6 +186,11 @@ bool LinkerDriver::link(int Argc, const char *Argv[]) {
llvm::InitializeAllAsmPrinters();
llvm::InitializeAllDisassemblers();
+ // If the first command line argument is "/lib", link.exe acts like lib.exe.
+ // We call our own implementation of lib.exe that understands bitcode files.
+ if (Argc > 1 && StringRef(Argv[1]).equals_lower("/lib"))
+ return llvm::libDriverMain(Argc - 1, Argv + 1) == 0;
+
// Parse command line options.
auto ArgsOrErr = Parser.parse(Argc, Argv);
if (auto EC = ArgsOrErr.getError()) {
OpenPOWER on IntegriCloud