Skip to content

Commit dd76448

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 <dan.mcgregor@usask.ca> Signed-off-by: Khem Raj <raj.khem@gmail.com>
1 parent 544c494 commit dd76448

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
@@ -515,8 +515,12 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
515515
Triple.getEnvironment() == llvm::Triple::GNUEABIHFT64 ||
516516
tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard;
517517

518-
LibDir = "lib";
519518
Loader = HF ? "ld-linux-armhf.so.3" : "ld-linux.so.3";
519+
LibDir = "lib32";
520+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
521+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
522+
LibDir = "lib";
523+
}
520524
break;
521525
}
522526
case llvm::Triple::loongarch32: {
@@ -570,11 +574,19 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
570574
LibDir = "lib64";
571575
Loader =
572576
(tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
577+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
578+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
579+
LibDir = "lib";
580+
}
573581
break;
574582
case llvm::Triple::ppc64le:
575583
LibDir = "lib64";
576584
Loader =
577585
(tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2";
586+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
587+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
588+
LibDir = "lib";
589+
}
578590
break;
579591
case llvm::Triple::riscv32:
580592
case llvm::Triple::riscv64: {
@@ -592,6 +604,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
592604
case llvm::Triple::sparcv9:
593605
LibDir = "lib64";
594606
Loader = "ld-linux.so.2";
607+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
608+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
609+
LibDir = "lib";
610+
}
595611
break;
596612
case llvm::Triple::systemz:
597613
LibDir = "lib";
@@ -606,6 +622,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
606622

607623
LibDir = X32 ? "libx32" : "lib64";
608624
Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2";
625+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
626+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
627+
LibDir = "lib";
628+
}
609629
break;
610630
}
611631
case llvm::Triple::ve:

0 commit comments

Comments
 (0)