diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 7d5b664599b5..96b49ed3850d 100644 --- a/lld/COFF/Config.h +++ b/lld/COFF/Config.h @@ -132,6 +132,7 @@ struct Configuration { bool driverWdm = false; bool showTiming = false; bool showSummary = false; + bool printSearchPaths = false; unsigned debugTypes = static_cast(DebugType::None); llvm::SmallVector mllvmOpts; std::vector natvisFiles; diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 15a14981a36a..5cefdac3395e 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1500,6 +1500,7 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { config->showTiming = true; config->showSummary = args.hasArg(OPT_summary); + config->printSearchPaths = args.hasArg(OPT_print_search_paths); // Handle --version, which is an lld extension. This option is a bit odd // because it doesn't start with "/", but we deliberately chose "--" to @@ -2052,6 +2053,17 @@ void LinkerDriver::linkerMain(ArrayRef argsArr) { } config->wordsize = config->is64() ? 8 : 4; + if (config->printSearchPaths) { + SmallString<256> buffer; + raw_svector_ostream stream(buffer); + stream << "Library search paths:\n"; + + for (StringRef path : searchPaths) + stream << " " << path << "\n"; + + message(buffer); + } + // Process files specified as /defaultlib. These must be processed after // addWinSysRootLibSearchPaths(), which is why they are in a separate loop. for (auto *arg : args.filtered(OPT_defaultlib)) diff --git a/lld/COFF/Options.td b/lld/COFF/Options.td index f7d9eeb7e725..ea4ddb2d8495 100644 --- a/lld/COFF/Options.td +++ b/lld/COFF/Options.td @@ -295,6 +295,7 @@ def lldmap_file : P_priv<"lldmap">; def map : F<"map">; def map_file : P_priv<"map">; def map_info : P<"mapinfo", "Include the specified information in a map file">; +def print_search_paths : F<"print-search-paths">; def show_timing : F<"time">; def summary : F<"summary">; diff --git a/lld/test/COFF/print-search-paths.s b/lld/test/COFF/print-search-paths.s new file mode 100644 index 000000000000..a484ac5b0fb1 --- /dev/null +++ b/lld/test/COFF/print-search-paths.s @@ -0,0 +1,21 @@ +# REQUIRES: x86 +# RUN: llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o %t.obj +# RUN: lld-link -safeseh:no /dll /noentry /winsysroot:%t.dir/sysroot /vctoolsversion:1.1.1.1 /winsdkversion:10.0.1 %t.obj -print-search-paths | FileCheck -DSYSROOT=%t.dir %s +# RUN: llvm-mc -triple i686-windows-msvc %s -filetype=obj -o %t_32.obj +# RUN: lld-link -safeseh:no /dll /noentry /winsysroot:%t.dir/sysroot /vctoolsversion:1.1.1.1 /winsdkversion:10.0.1 %t_32.obj -print-search-paths | FileCheck -DSYSROOT=%t.dir -check-prefix=X86 %s +# CHECK: Library search paths: +# CHECK: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}VC{{[/\\]}}Tools{{[/\\]}}MSVC{{[/\\]}}1.1.1.1{{[/\\]}}lib{{[/\\]}}x64 +# CHECK: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}VC{{[/\\]}}Tools{{[/\\]}}MSVC{{[/\\]}}1.1.1.1{{[/\\]}}atlmfc{{[/\\]}}lib{{[/\\]}}x64 +# CHECK: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}Windows Kits{{[/\\]}}10{{[/\\]}}Lib{{[/\\]}}10.0.1{{[/\\]}}ucrt{{[/\\]}}x64 +# CHECK: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}Windows Kits{{[/\\]}}10{{[/\\]}}Lib{{[/\\]}}10.0.1{{[/\\]}}um{{[/\\]}}x64 +# X86: Library search paths: +# X86: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}VC{{[/\\]}}Tools{{[/\\]}}MSVC{{[/\\]}}1.1.1.1{{[/\\]}}lib{{[/\\]}}x86 +# X86: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}VC{{[/\\]}}Tools{{[/\\]}}MSVC{{[/\\]}}1.1.1.1{{[/\\]}}atlmfc{{[/\\]}}lib{{[/\\]}}x86 +# X86: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}Windows Kits{{[/\\]}}10{{[/\\]}}Lib{{[/\\]}}10.0.1{{[/\\]}}ucrt{{[/\\]}}x86 +# X86: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}Windows Kits{{[/\\]}}10{{[/\\]}}Lib{{[/\\]}}10.0.1{{[/\\]}}um{{[/\\]}}x86 + + + .text + .globl _main +_main: + ret