Index: lld/trunk/MinGW/Driver.cpp =================================================================== --- lld/trunk/MinGW/Driver.cpp +++ lld/trunk/MinGW/Driver.cpp @@ -172,11 +172,24 @@ for (auto *A : Args.filtered(OPT_L)) SearchPaths.push_back(A->getValue()); - for (auto *A : Args.filtered(OPT_INPUT, OPT_l)) { - if (A->getOption().getUnaliasedOption().getID() == OPT_INPUT) - Add(A->getValue()); - else - Add(searchLibrary(A->getValue(), SearchPaths, Args.hasArg(OPT_Bstatic))); + StringRef Prefix = ""; + for (auto *A : Args.filtered(OPT_INPUT, OPT_l, OPT_whole_archive, + OPT_no_whole_archive)) { + switch (A->getOption().getID()) { + case OPT_INPUT: + Add(Prefix + StringRef(A->getValue())); + break; + case OPT_l: + Add(Prefix + + searchLibrary(A->getValue(), SearchPaths, Args.hasArg(OPT_Bstatic))); + break; + case OPT_whole_archive: + Prefix = "-wholearchive:"; + break; + case OPT_no_whole_archive: + Prefix = ""; + break; + } } if (Args.hasArg(OPT_verbose)) Index: lld/trunk/MinGW/Options.td =================================================================== --- lld/trunk/MinGW/Options.td +++ lld/trunk/MinGW/Options.td @@ -12,12 +12,16 @@ HelpText<"Root name of library to use">; def m: JoinedOrSeparate<["-"], "m">, HelpText<"Set target emulation">; def mllvm: S<"mllvm">; +def no_whole_archive: F<"no-whole-archive">, + HelpText<"No longer include all object files for following archives">; def o: JoinedOrSeparate<["-"], "o">, MetaVarName<"">, HelpText<"Path to file to write output">; def out_implib: Separate<["--"], "out-implib">, HelpText<"Import library name">; def shared: F<"shared">, HelpText<"Build a shared object">; def subs: Separate<["--"], "subsystem">, HelpText<"Specify subsystem">; def stack: Separate<["--"], "stack">; +def whole_archive: F<"whole-archive">, + HelpText<"Include all object files for following archives">; def verbose: F<"verbose">, HelpText<"Verbose mode">; // LLD specific options Index: lld/trunk/test/MinGW/driver.test =================================================================== --- lld/trunk/test/MinGW/driver.test +++ lld/trunk/test/MinGW/driver.test @@ -47,3 +47,6 @@ RUN: ld.lld -### -shared -m i386pe -e _DllMainCRTStartup@12 foo.o | FileCheck -check-prefix I386-ENTRY %s I386-ENTRY: -entry:DllMainCRTStartup@12 + +RUN: ld.lld -### -m i386pep foo.o --whole-archive bar.a --no-whole-archive baz.a | FileCheck -check-prefix WHOLE-ARCHIVE %s +WHOLE-ARCHIVE: foo.o -wholearchive:bar.a baz.a