diff options
author | Tobias Hieta <tobias.hieta@ubisoft.com> | 2023-07-12 09:22:06 +0200 |
---|---|---|
committer | Tobias Hieta <tobias.hieta@ubisoft.com> | 2023-07-13 10:52:57 +0200 |
commit | 33f93425dd1b8028bf2db43fb23abd0244cd7467 (patch) | |
tree | ddcd0f14398025d860fea3dadbaebfb0e1072dec /lld | |
parent | 85c6d57eb304482264964778d89fd0554df07592 (diff) | |
download | llvm-33f93425dd1b8028bf2db43fb23abd0244cd7467.zip llvm-33f93425dd1b8028bf2db43fb23abd0244cd7467.tar.gz llvm-33f93425dd1b8028bf2db43fb23abd0244cd7467.tar.bz2 |
[lld][COFF] Add -print-search-paths for debugging.
While working on adding more implicit search paths to the
lld COFF driver, it was helpful to have a way to print all
the search paths, both for debugging and for testing without
having to create very complicated test cases.
This is a simple arg that just prints the search paths and exits.
Related to the efforts in #63827
Differential Revision: https://reviews.llvm.org/D155047
Diffstat (limited to 'lld')
-rw-r--r-- | lld/COFF/Config.h | 1 | ||||
-rw-r--r-- | lld/COFF/Driver.cpp | 12 | ||||
-rw-r--r-- | lld/COFF/Options.td | 1 | ||||
-rw-r--r-- | lld/test/COFF/print-search-paths.s | 21 |
4 files changed, 35 insertions, 0 deletions
diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 7d5b6645..96b49ed 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<unsigned>(DebugType::None); llvm::SmallVector<llvm::StringRef, 0> mllvmOpts; std::vector<std::string> natvisFiles; diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index 15a1498..5cefdac 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1500,6 +1500,7 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> 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<const char *> 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 f7d9eeb..ea4ddb2 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 0000000..a484ac5 --- /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 |