From b1d28891098dc4dc5066aede6e20d4e5bd58bed5 Mon Sep 17 00:00:00 2001 From: Jun Yuan Tan Date: Tue, 9 Nov 2021 10:07:13 +0800 Subject: [PATCH 06/34] 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. Rebased to LLVM 14.0.0 by Jun Yuan Tan Signed-off-by: Dan McGregor Signed-off-by: Khem Raj Signed-off-by: Jun Yuan Tan --- 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 a80b8ad4e7ed..b7165be9a7a6 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -480,11 +480,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); @@ -506,6 +514,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"; @@ -520,6 +532,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; } case llvm::Triple::ve: -- 2.33.1