[PATCH] D80421: [Mips] use correct ld.so for musl soft float
joewholden created this revision. Herald added subscribers: cfe-commits, atanasyan, arichardson, sdardis. Herald added a project: clang. This patch attempts to fix the dynamic linker path for mips64-sf, I'm not entirely familiar with the llvm structure so I am unsure if this is the best way but I'd appreciate some feedback if not Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D80421 Files: clang/lib/Driver/ToolChains/Linux.cpp Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -519,6 +519,7 @@ if (Triple.isMusl()) { std::string ArchName; bool IsArm = false; +bool IsMips = false; switch (Arch) { case llvm::Triple::arm: @@ -531,6 +532,16 @@ ArchName = "armeb"; IsArm = true; break; +case llvm::Triple::mips: +case llvm::Triple::mipsel: + ArchName = "mips"; + IsMips = true; + break; +case llvm::Triple::mips64: +case llvm::Triple::mips64el: + ArchName = "mips64"; + IsMips = true; + break; default: ArchName = Triple.getArchName().str(); } @@ -538,6 +549,8 @@ (Triple.getEnvironment() == llvm::Triple::MuslEABIHF || tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard)) ArchName += "hf"; +if (IsMips && tools::mips::getMipsFloatABI(getDriver(), Args, getTriple()) == tools::mips::FloatABI::Soft) + ArchName += "-sf"; return "/lib/ld-musl-" + ArchName + ".so.1"; } Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -519,6 +519,7 @@ if (Triple.isMusl()) { std::string ArchName; bool IsArm = false; +bool IsMips = false; switch (Arch) { case llvm::Triple::arm: @@ -531,6 +532,16 @@ ArchName = "armeb"; IsArm = true; break; +case llvm::Triple::mips: +case llvm::Triple::mipsel: + ArchName = "mips"; + IsMips = true; + break; +case llvm::Triple::mips64: +case llvm::Triple::mips64el: + ArchName = "mips64"; + IsMips = true; + break; default: ArchName = Triple.getArchName().str(); } @@ -538,6 +549,8 @@ (Triple.getEnvironment() == llvm::Triple::MuslEABIHF || tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard)) ArchName += "hf"; +if (IsMips && tools::mips::getMipsFloatABI(getDriver(), Args, getTriple()) == tools::mips::FloatABI::Soft) + ArchName += "-sf"; return "/lib/ld-musl-" + ArchName + ".so.1"; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D80421: [Mips] use correct ld.so for musl soft float
joewholden added a comment. This is actually wrong anyway Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D80421/new/ https://reviews.llvm.org/D80421 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D80421: [Mips] use correct ld.so for musl soft float
joewholden updated this revision to Diff 318343. joewholden added a comment. I think this is better (we've been using it for a while successfully), I haven't had time to understand the tests enough to add some yet, but I'll take a look as soon as I can CHANGES SINCE LAST ACTION https://reviews.llvm.org/D80421/new/ https://reviews.llvm.org/D80421 Files: clang/lib/Driver/ToolChains/Linux.cpp Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -519,6 +519,7 @@ if (Triple.isMusl()) { std::string ArchName; bool IsArm = false; +bool IsMips = false; switch (Arch) { case llvm::Triple::arm: @@ -531,14 +532,25 @@ ArchName = "armeb"; IsArm = true; break; +case llvm::Triple::mips: +case llvm::Triple::mipsel: +case llvm::Triple::mips64: +case llvm::Triple::mips64el: + IsMips = true; + ArchName = Triple.getArchName().str(); + break; default: ArchName = Triple.getArchName().str(); } + if (IsArm && (Triple.getEnvironment() == llvm::Triple::MuslEABIHF || tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard)) ArchName += "hf"; +if (IsMips && tools::mips::getMipsFloatABI(getDriver(), Args, getTriple()) == tools::mips::FloatABI::Soft) + ArchName += "-sf"; + return "/lib/ld-musl-" + ArchName + ".so.1"; } Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -519,6 +519,7 @@ if (Triple.isMusl()) { std::string ArchName; bool IsArm = false; +bool IsMips = false; switch (Arch) { case llvm::Triple::arm: @@ -531,14 +532,25 @@ ArchName = "armeb"; IsArm = true; break; +case llvm::Triple::mips: +case llvm::Triple::mipsel: +case llvm::Triple::mips64: +case llvm::Triple::mips64el: + IsMips = true; + ArchName = Triple.getArchName().str(); + break; default: ArchName = Triple.getArchName().str(); } + if (IsArm && (Triple.getEnvironment() == llvm::Triple::MuslEABIHF || tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard)) ArchName += "hf"; +if (IsMips && tools::mips::getMipsFloatABI(getDriver(), Args, getTriple()) == tools::mips::FloatABI::Soft) + ArchName += "-sf"; + return "/lib/ld-musl-" + ArchName + ".so.1"; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D80421: [Mips] use correct ld.so for musl soft float
joewholden updated this revision to Diff 318346. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D80421/new/ https://reviews.llvm.org/D80421 Files: clang/lib/Driver/ToolChains/Linux.cpp Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -426,6 +426,7 @@ if (Triple.isMusl()) { std::string ArchName; bool IsArm = false; +bool IsMips = false; switch (Arch) { case llvm::Triple::arm: @@ -438,14 +439,25 @@ ArchName = "armeb"; IsArm = true; break; +case llvm::Triple::mips: +case llvm::Triple::mipsel: +case llvm::Triple::mips64: +case llvm::Triple::mips64el: + IsMips = true; + ArchName = Triple.getArchName().str(); + break; default: ArchName = Triple.getArchName().str(); } + if (IsArm && (Triple.getEnvironment() == llvm::Triple::MuslEABIHF || tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard)) ArchName += "hf"; +if (IsMips && tools::mips::getMipsFloatABI(getDriver(), Args, getTriple()) == tools::mips::FloatABI::Soft) + ArchName += "-sf"; + return "/lib/ld-musl-" + ArchName + ".so.1"; } Index: clang/lib/Driver/ToolChains/Linux.cpp === --- clang/lib/Driver/ToolChains/Linux.cpp +++ clang/lib/Driver/ToolChains/Linux.cpp @@ -426,6 +426,7 @@ if (Triple.isMusl()) { std::string ArchName; bool IsArm = false; +bool IsMips = false; switch (Arch) { case llvm::Triple::arm: @@ -438,14 +439,25 @@ ArchName = "armeb"; IsArm = true; break; +case llvm::Triple::mips: +case llvm::Triple::mipsel: +case llvm::Triple::mips64: +case llvm::Triple::mips64el: + IsMips = true; + ArchName = Triple.getArchName().str(); + break; default: ArchName = Triple.getArchName().str(); } + if (IsArm && (Triple.getEnvironment() == llvm::Triple::MuslEABIHF || tools::arm::getARMFloatABI(*this, Args) == tools::arm::FloatABI::Hard)) ArchName += "hf"; +if (IsMips && tools::mips::getMipsFloatABI(getDriver(), Args, getTriple()) == tools::mips::FloatABI::Soft) + ArchName += "-sf"; + return "/lib/ld-musl-" + ArchName + ".so.1"; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits