diff options
author | Martin Storsjö <martin@martin.st> | 2024-01-15 22:52:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-15 22:52:57 +0200 |
commit | 92126ca62e5764f9267524c18f78fe0b8c5751c0 (patch) | |
tree | 349de12d6e20b23c758e0d43dd11401ac4c7f4e3 | |
parent | 4fcefbd3a41d77b2471c78c5b2e50d058ee46b97 (diff) | |
download | llvm-92126ca62e5764f9267524c18f78fe0b8c5751c0.zip llvm-92126ca62e5764f9267524c18f78fe0b8c5751c0.tar.gz llvm-92126ca62e5764f9267524c18f78fe0b8c5751c0.tar.bz2 |
[LLD] [COFF] Prefer paths specified with -libpath: over toolchain paths (#78039)
The main reason for adding the toolchain paths early was to prefer
libraries from the toolchain over ones from MSVC (primarily for
compiler-rt builtins). But if the user specifies a directory explicitly
with the -libpath: option, that should be preferred over the built-in
default paths.
This fixes an issue raised at
https://discourse.llvm.org/t/lld-prefers-system-llvm-libraries-to-user-provided-ones-on-windows/76148.
-rw-r--r-- | lld/COFF/Driver.cpp | 6 | ||||
-rw-r--r-- | lld/test/COFF/print-search-paths.s | 3 |
2 files changed, 4 insertions, 5 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index cd2985b..cfcf738 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1548,15 +1548,13 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) { { llvm::TimeTraceScope timeScope2("Search paths"); searchPaths.emplace_back(""); + for (auto *arg : args.filtered(OPT_libpath)) + searchPaths.push_back(arg->getValue()); if (!config->mingw) { // Prefer the Clang provided builtins over the ones bundled with MSVC. // In MinGW mode, the compiler driver passes the necessary libpath // options explicitly. addClangLibSearchPaths(argsArr[0]); - } - for (auto *arg : args.filtered(OPT_libpath)) - searchPaths.push_back(arg->getValue()); - if (!config->mingw) { // Don't automatically deduce the lib path from the environment or MSVC // installations when operating in mingw mode. (This also makes LLD ignore // winsysroot and vctoolsdir arguments.) diff --git a/lld/test/COFF/print-search-paths.s b/lld/test/COFF/print-search-paths.s index 463cc55..8c4df16 100644 --- a/lld/test/COFF/print-search-paths.s +++ b/lld/test/COFF/print-search-paths.s @@ -1,10 +1,11 @@ # 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: lld-link -safeseh:no /dll /noentry /winsysroot:%t.dir/sysroot /vctoolsversion:1.1.1.1 /winsdkversion:10.0.1 /libpath:custom-dir %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-NEXT: (cwd) +# CHECK-NEXT: custom-dir # CHECK-NEXT: [[CPATH:.*]]lib{{[/\\]}}clang{{[/\\]}}{{[0-9]+}}{{[/\\]}}lib{{[/\\]}}windows # CHECK-NEXT: [[CPATH]]lib{{[/\\]}}clang{{[/\\]}}{{[0-9]+}}{{[/\\]}}lib # CHECK-NEXT: [[CPATH]]lib |