Skip to content

Commit d387e97

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 6a6ef73 commit d387e97

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

519-
LibDir = "lib";
520519
Loader = HF ? "ld-linux-armhf.so.3" : "ld-linux.so.3";
520+
LibDir = "lib32";
521+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
522+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
523+
LibDir = "lib";
524+
}
521525
break;
522526
}
523527
case llvm::Triple::loongarch32: {
@@ -571,11 +575,19 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
571575
LibDir = "lib64";
572576
Loader =
573577
(tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
578+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
579+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
580+
LibDir = "lib";
581+
}
574582
break;
575583
case llvm::Triple::ppc64le:
576584
LibDir = "lib64";
577585
Loader =
578586
(tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2";
587+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
588+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
589+
LibDir = "lib";
590+
}
579591
break;
580592
case llvm::Triple::riscv32:
581593
case llvm::Triple::riscv64: {
@@ -593,6 +605,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
593605
case llvm::Triple::sparcv9:
594606
LibDir = "lib64";
595607
Loader = "ld-linux.so.2";
608+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
609+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
610+
LibDir = "lib";
611+
}
596612
break;
597613
case llvm::Triple::systemz:
598614
LibDir = "lib";
@@ -607,6 +623,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
607623

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

0 commit comments

Comments
 (0)