From 1ce5b0090e18f1cf717e90b403ee875b7e16060e Mon Sep 17 00:00:00 2001 From: Daniel McGregor Date: Mon, 7 Jan 2019 18:31:56 -0600 Subject: clang: Search for dynamic linker. Use the sysroot for a hint as to where to find the dynamic linker. This allows multilib distros to use the appropriate runtime linker path. Signed-off-by: Daniel McGregor --- ...-clang-driver-Check-sysroot-for-ldso-path.patch | 60 ++++++++++++++++++++++ .../0010-clang-driver-Use-lib-for-ldso-on-OE.patch | 60 ---------------------- recipes-devtools/clang/common.inc | 2 +- 3 files changed, 61 insertions(+), 61 deletions(-) create mode 100644 recipes-devtools/clang/clang/0010-clang-driver-Check-sysroot-for-ldso-path.patch delete mode 100644 recipes-devtools/clang/clang/0010-clang-driver-Use-lib-for-ldso-on-OE.patch (limited to 'recipes-devtools') diff --git a/recipes-devtools/clang/clang/0010-clang-driver-Check-sysroot-for-ldso-path.patch b/recipes-devtools/clang/clang/0010-clang-driver-Check-sysroot-for-ldso-path.patch new file mode 100644 index 0000000..bbbc020 --- /dev/null +++ b/recipes-devtools/clang/clang/0010-clang-driver-Check-sysroot-for-ldso-path.patch @@ -0,0 +1,60 @@ +From dad564a1081f62fe1957175e2b060ca1778ff72b Mon Sep 17 00:00:00 2001 +From: Dan McGregor +Date: Wed, 26 Apr 2017 20:29:41 -0600 +Subject: [PATCH] clang: driver: Check sysroot for ldso path + +OE does not necessarily follow the default path for the dynamic linker, +therefore adjust it for OE. Check for the default path, and if it isn't +there, check /lib. + +Signed-off-by: Dan McGregor +--- + clang/lib/Driver/ToolChains/Linux.cpp | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index ed907549929..6adf581a882 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -596,11 +596,19 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { + LibDir = "lib64"; + Loader = + (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1"; ++ if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) && ++ getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) { ++ LibDir = "lib"; ++ } + break; + case llvm::Triple::ppc64le: + LibDir = "lib64"; + Loader = + (tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2"; ++ if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) && ++ getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) { ++ LibDir = "lib"; ++ } + break; + case llvm::Triple::riscv32: { + StringRef ABIName = tools::riscv::getRISCVABI(Args, Triple); +@@ -622,6 +630,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { + case llvm::Triple::sparcv9: + LibDir = "lib64"; + Loader = "ld-linux.so.2"; ++ if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) && ++ getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) { ++ LibDir = "lib"; ++ } + break; + case llvm::Triple::systemz: + LibDir = "lib"; +@@ -636,6 +648,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { + + LibDir = X32 ? "libx32" : "lib64"; + Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2"; ++ if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) && ++ getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) { ++ LibDir = "lib"; ++ } + break; + } + } diff --git a/recipes-devtools/clang/clang/0010-clang-driver-Use-lib-for-ldso-on-OE.patch b/recipes-devtools/clang/clang/0010-clang-driver-Use-lib-for-ldso-on-OE.patch deleted file mode 100644 index 80cf185..0000000 --- a/recipes-devtools/clang/clang/0010-clang-driver-Use-lib-for-ldso-on-OE.patch +++ /dev/null @@ -1,60 +0,0 @@ -From c4954f2b9126edccbffa76d860aebf858c80bc4d Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sat, 21 May 2016 21:52:36 -0700 -Subject: [PATCH] clang: driver: Use /lib for ldso on OE - -OE does not follow the default base_libdir -that clang has, therefore adjust it for OE -it wont be able to support multilib since -in multilib case OE switches the base libdir -for 64bit to /lib64 instead of /lib - -Make sure that the change only happens for cross -compilation on x86_64 architecture - -Signed-off-by: Khem Raj ---- - clang/lib/Driver/ToolChains/Linux.cpp | 12 +++++++----- - 1 file changed, 7 insertions(+), 5 deletions(-) - -diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp -index ed907549929..8cee2490cc7 100644 ---- a/clang/lib/Driver/ToolChains/Linux.cpp -+++ b/clang/lib/Driver/ToolChains/Linux.cpp -@@ -593,12 +593,12 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { - Loader = "ld.so.1"; - break; - case llvm::Triple::ppc64: -- LibDir = "lib64"; -+ LibDir = "lib"; - Loader = - (tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1"; - break; - case llvm::Triple::ppc64le: -- LibDir = "lib64"; -+ LibDir = "lib"; - Loader = - (tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2"; - break; -@@ -620,7 +620,7 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { - Loader = "ld-linux.so.2"; - break; - case llvm::Triple::sparcv9: -- LibDir = "lib64"; -+ LibDir = "lib"; - Loader = "ld-linux.so.2"; - break; - case llvm::Triple::systemz: -@@ -633,8 +633,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const { - break; - case llvm::Triple::x86_64: { - bool X32 = Triple.getEnvironment() == llvm::Triple::GNUX32; -- -- LibDir = X32 ? "libx32" : "lib64"; -+ if (Triple.getEnvironment() == llvm::Triple::GNU) -+ LibDir = X32 ? "libx32" : "lib64"; -+ else -+ LibDir = "lib"; - Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2"; - break; - } diff --git a/recipes-devtools/clang/common.inc b/recipes-devtools/clang/common.inc index 6a976de..3333b34 100644 --- a/recipes-devtools/clang/common.inc +++ b/recipes-devtools/clang/common.inc @@ -17,7 +17,7 @@ SRC_URI = "\ file://0007-llvm-allow-env-override-of-exe-path.patch \ file://0008-llvm-Enhance-path-prefix-mapping.patch \ file://0009-clang-Enable-SSP-and-PIE-by-default.patch \ - file://0010-clang-driver-Use-lib-for-ldso-on-OE.patch \ + file://0010-clang-driver-Check-sysroot-for-ldso-path.patch \ file://0011-clang-Driver-tools.cpp-Add-lssp_nonshared-on-musl.patch \ file://0012-clang-musl-ppc-does-not-support-128-bit-long-double.patch \ file://0013-clang-Prepend-trailing-to-sysroot.patch \ -- cgit v1.2.3-54-g00ecf