diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 7fe4e105a68e..e1ec723e623e 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -240,6 +240,14 @@ static uint64_t getDefaultImageBase() { } void LinkerDriver::link(llvm::ArrayRef ArgsArr) { + // 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 (ArgsArr.size() > 1 && StringRef(ArgsArr[1]).equals_lower("/lib")) { + if (llvm::libDriverMain(ArgsArr.slice(1)) != 0) + error("lib failed"); + return; + } + // Needed for LTO. llvm::InitializeAllTargetInfos(); llvm::InitializeAllTargets(); @@ -248,12 +256,6 @@ void LinkerDriver::link(llvm::ArrayRef ArgsArr) { 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 (ArgsArr.size() > 1 && StringRef(ArgsArr[1]).equals_lower("/lib")) - if (llvm::libDriverMain(ArgsArr.slice(1)) != 0) - error("lib failed"); - // Parse command line options. llvm::opt::InputArgList Args = Parser.parseLINK(ArgsArr.slice(1));