1From 7ff4f134a5e5e1f6ffe31637a474cf118ae0079b Mon Sep 17 00:00:00 2001
2From: Dan McGregor <dan.mcgregor@usask.ca>
3Date: Wed, 26 Apr 2017 20:29:41 -0600
4Subject: [PATCH] clang: driver: Check sysroot for ldso path
5
6OE does not necessarily follow the default path for the dynamic linker,
7therefore adjust it for OE. Check for the default path, and if it isn't
8there, check /lib.
9
10Signed-off-by: Dan McGregor <dan.mcgregor@usask.ca>
11Signed-off-by: Khem Raj <raj.khem@gmail.com>
12---
13 clang/lib/Driver/ToolChains/Linux.cpp | 16 ++++++++++++++++
14 1 file changed, 16 insertions(+)
15
16diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp
17index f85c04df4f6c..97e987c37e4a 100644
18--- a/clang/lib/Driver/ToolChains/Linux.cpp
19+++ b/clang/lib/Driver/ToolChains/Linux.cpp
20@@ -493,11 +493,19 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
21     LibDir = "lib64";
22     Loader =
23         (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
24+    if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
25+         getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
26+        LibDir = "lib";
27+    }
28     break;
29   case llvm::Triple::ppc64le:
30     LibDir = "lib64";
31     Loader =
32         (tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2";
33+    if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
34+         getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
35+        LibDir = "lib";
36+    }
37     break;
38   case llvm::Triple::riscv32: {
39     StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple);
40@@ -519,6 +527,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
41   case llvm::Triple::sparcv9:
42     LibDir = "lib64";
43     Loader = "ld-linux.so.2";
44+    if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
45+         getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
46+        LibDir = "lib";
47+    }
48     break;
49   case llvm::Triple::systemz:
50     LibDir = "lib";
51@@ -533,6 +545,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
52
53     LibDir = X32 ? "libx32" : "lib64";
54     Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2";
55+    if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
56+         getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
57+        LibDir = "lib";
58+    }
59     break;
60   }
61   case llvm::Triple::ve:
62