summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/DriverUtils.cpp13
-rw-r--r--lld/test/ELF/libsearch.s6
2 files changed, 15 insertions, 4 deletions
diff --git a/lld/ELF/DriverUtils.cpp b/lld/ELF/DriverUtils.cpp
index 4c3bd813c2b..c32429e900f 100644
--- a/lld/ELF/DriverUtils.cpp
+++ b/lld/ELF/DriverUtils.cpp
@@ -244,12 +244,17 @@ std::string elf::findFromSearchPaths(StringRef Path) {
std::string elf::searchLibrary(StringRef Path) {
if (Path.startswith(":"))
return findFromSearchPaths(Path.substr(1));
- if (!Config->Static) {
- std::string S = findFromSearchPaths(("lib" + Path + ".so").str());
- if (!S.empty())
+ for (StringRef Dir : Config->SearchPaths) {
+ if (!Config->Static) {
+ std::string S = buildSysrootedPath(Dir, ("lib" + Path + ".so").str());
+ if (fs::exists(S))
+ return S;
+ }
+ std::string S = buildSysrootedPath(Dir, ("lib" + Path + ".a").str());
+ if (fs::exists(S))
return S;
}
- return findFromSearchPaths(("lib" + Path + ".a").str());
+ return "";
}
// Makes a path by concatenating Dir and File.
diff --git a/lld/test/ELF/libsearch.s b/lld/test/ELF/libsearch.s
index 75ad0fb43aa..782d755f734 100644
--- a/lld/test/ELF/libsearch.s
+++ b/lld/test/ELF/libsearch.s
@@ -44,6 +44,12 @@
// RUN: ld.lld -o %t3 %t.o -L%t.dir -lls
// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=DYNAMIC %s
+// Check for library search order
+// RUN: mkdir -p %t.dir2
+// RUN: cp %t.dir/libls.a %t.dir2
+// RUN: ld.lld -o %t3 %t.o -L%t.dir2 -L%t.dir -lls
+// RUN: llvm-readobj --symbols %t3 | FileCheck --check-prefix=STATIC %s
+
// -L can be placed after -l
// RUN: ld.lld -o %t3 %t.o -lls -L%t.dir
OpenPOWER on IntegriCloud