Skip to content

Commit 4e9440a

Browse files
dankmkraj
authored andcommitted
clang: driver: Check sysroot for ldso path
when we build multilib the ldso has different paths than clangs defaults, every distro kind of does that so OE is not the only one, it happens especially on ppc64, where 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. Upstream-Status: Pending Signed-off-by: Dan McGregor <[email protected]> Signed-off-by: Khem Raj <[email protected]>
1 parent 172bacd commit 4e9440a

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

clang/lib/Driver/ToolChains/Linux.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,8 +617,12 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
617617
Triple.getEnvironment() == llvm::Triple::GNUEABIHFT64 ||
618618
tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard;
619619

620-
LibDir = "lib";
621620
Loader = HF ? "ld-linux-armhf.so.3" : "ld-linux.so.3";
621+
LibDir = "lib32";
622+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
623+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
624+
LibDir = "lib";
625+
}
622626
break;
623627
}
624628
case llvm::Triple::loongarch32: {
@@ -672,11 +676,19 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
672676
LibDir = "lib64";
673677
Loader =
674678
(tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
679+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
680+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
681+
LibDir = "lib";
682+
}
675683
break;
676684
case llvm::Triple::ppc64le:
677685
LibDir = "lib64";
678686
Loader =
679687
(tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2";
688+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
689+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
690+
LibDir = "lib";
691+
}
680692
break;
681693
case llvm::Triple::riscv32:
682694
case llvm::Triple::riscv64: {
@@ -694,6 +706,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
694706
case llvm::Triple::sparcv9:
695707
LibDir = "lib64";
696708
Loader = "ld-linux.so.2";
709+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
710+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
711+
LibDir = "lib";
712+
}
697713
break;
698714
case llvm::Triple::systemz:
699715
LibDir = "lib";
@@ -708,6 +724,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
708724

709725
LibDir = X32 ? "libx32" : "lib64";
710726
Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2";
727+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
728+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
729+
LibDir = "lib";
730+
}
711731
break;
712732
}
713733
case llvm::Triple::ve:

0 commit comments

Comments
 (0)