Skip to content

Commit efe1b31

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 09c76ac commit efe1b31

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

526-
LibDir = "lib";
527526
Loader = HF ? "ld-linux-armhf.so.3" : "ld-linux.so.3";
527+
LibDir = "lib32";
528+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
529+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
530+
LibDir = "lib";
531+
}
528532
break;
529533
}
530534
case llvm::Triple::loongarch32: {
@@ -578,11 +582,19 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
578582
LibDir = "lib64";
579583
Loader =
580584
(tools::ppc::hasPPCAbiArg(Args, "elfv2")) ? "ld64.so.2" : "ld64.so.1";
585+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
586+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
587+
LibDir = "lib";
588+
}
581589
break;
582590
case llvm::Triple::ppc64le:
583591
LibDir = "lib64";
584592
Loader =
585593
(tools::ppc::hasPPCAbiArg(Args, "elfv1")) ? "ld64.so.1" : "ld64.so.2";
594+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
595+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
596+
LibDir = "lib";
597+
}
586598
break;
587599
case llvm::Triple::riscv32:
588600
case llvm::Triple::riscv64: {
@@ -600,6 +612,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
600612
case llvm::Triple::sparcv9:
601613
LibDir = "lib64";
602614
Loader = "ld-linux.so.2";
615+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
616+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
617+
LibDir = "lib";
618+
}
603619
break;
604620
case llvm::Triple::systemz:
605621
LibDir = "lib";
@@ -614,6 +630,10 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
614630

615631
LibDir = X32 ? "libx32" : "lib64";
616632
Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2";
633+
if (!getVFS().exists(getDriver().SysRoot + "/" + LibDir + "/" + Loader) &&
634+
getVFS().exists(getDriver().SysRoot + "/lib/" + Loader)) {
635+
LibDir = "lib";
636+
}
617637
break;
618638
}
619639
case llvm::Triple::ve:

0 commit comments

Comments
 (0)