aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2024-01-15 22:52:57 +0200
committerGitHub <noreply@github.com>2024-01-15 22:52:57 +0200
commit92126ca62e5764f9267524c18f78fe0b8c5751c0 (patch)
tree349de12d6e20b23c758e0d43dd11401ac4c7f4e3
parent4fcefbd3a41d77b2471c78c5b2e50d058ee46b97 (diff)
downloadllvm-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.cpp6
-rw-r--r--lld/test/COFF/print-search-paths.s3
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