summaryrefslogtreecommitdiffstats
path: root/recipes-devtools/clang/clang/0001-clang-driver-Add-musl-ldso-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-devtools/clang/clang/0001-clang-driver-Add-musl-ldso-support.patch')
-rw-r--r--recipes-devtools/clang/clang/0001-clang-driver-Add-musl-ldso-support.patch83
1 files changed, 83 insertions, 0 deletions
diff --git a/recipes-devtools/clang/clang/0001-clang-driver-Add-musl-ldso-support.patch b/recipes-devtools/clang/clang/0001-clang-driver-Add-musl-ldso-support.patch
new file mode 100644
index 0000000..6747c24
--- /dev/null
+++ b/recipes-devtools/clang/clang/0001-clang-driver-Add-musl-ldso-support.patch
@@ -0,0 +1,83 @@
1From 21cb1801f0da97918ce5a567cd1f60413b4de726 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Wed, 30 Mar 2016 19:56:10 -0700
4Subject: [PATCH 1/4] clang: driver: Add musl ldso support
5
6Linux/musl libc implementation has different ldso
7this needs to take effect when target arch is detected
8as a musl based Linux platform
9
10Signed-off-by: Khem Raj <raj.khem@gmail.com>
11---
12 lib/Driver/Tools.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++------
13 1 file changed, 42 insertions(+), 6 deletions(-)
14
15diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
16index 8a1cb54..0ce548c 100644
17--- a/lib/Driver/Tools.cpp
18+++ b/lib/Driver/Tools.cpp
19@@ -8994,6 +8994,47 @@ static std::string getLinuxDynamicLinker(const ArgList &Args,
20 return "/system/bin/linker64";
21 else
22 return "/system/bin/linker";
23+ } else if (ToolChain.getTriple().isLinuxMuslEnvironment()) {
24+ switch (Arch) {
25+ case llvm::Triple::x86:
26+ return "/lib/ld-musl-i386.so.1";
27+ case llvm::Triple::x86_64:
28+ if (ToolChain.getTriple().getEnvironment() == llvm::Triple::MUSLX32)
29+ return "/lib/ld-musl-x32.so.1";
30+ else
31+ return "/lib/ld-musl-x86_64.so.1";
32+ case llvm::Triple::aarch64:
33+ return "/lib/ld-musl-aarch64.so.1";
34+ case llvm::Triple::aarch64_be:
35+ return "/lib/ld-musl-aarch64_be.so.1";
36+ case llvm::Triple::ppc:
37+ return "/lib/ld-musl-powerpc.so.1";
38+ case llvm::Triple::ppc64:
39+ return "/lib/ld-musl-powerpc64.so.1";
40+ case llvm::Triple::arm:
41+ case llvm::Triple::thumb:
42+ if(arm::getARMFloatABI(ToolChain, Args) == arm::FloatABI::Hard)
43+ return "/lib/ld-musl-armhf.so.1";
44+ else
45+ return "/lib/ld-musl-arm.so.1";
46+ case llvm::Triple::armeb:
47+ case llvm::Triple::thumbeb:
48+ if(arm::getARMFloatABI(ToolChain, Args) == arm::FloatABI::Hard)
49+ return "/lib/ld-musl-armebhf.so.1";
50+ else
51+ return "/lib/ld-musl-armeb.so.1";
52+ case llvm::Triple::mips:
53+ return "/lib/ld-musl-mips.so.1";
54+ case llvm::Triple::mipsel:
55+ return "/lib/ld-musl-mipsel.so.1";
56+ case llvm::Triple::mips64:
57+ return "/lib/ld-musl-mips64.so.1";
58+ case llvm::Triple::mips64el:
59+ return "/lib/ld-musl-mipsel64el.so.1";
60+ default:
61+ llvm_unreachable("unsupported musl architecture");
62+ break;
63+ }
64 } else if (Arch == llvm::Triple::x86 || Arch == llvm::Triple::sparc ||
65 Arch == llvm::Triple::sparcel)
66 return "/lib/ld-linux.so.2";
67@@ -9021,12 +9062,7 @@ static std::string getLinuxDynamicLinker(const ArgList &Args,
68 bool IsNaN2008 = mips::isNaN2008(Args, Triple);
69 if (mips::isUCLibc(Args))
70 LibName = IsNaN2008 ? "ld-uClibc-mipsn8.so.0" : "ld-uClibc.so.0";
71- else if (!Triple.hasEnvironment() &&
72- Triple.getVendor() == llvm::Triple::VendorType::MipsTechnologies) {
73- bool LE = (Triple.getArch() == llvm::Triple::mipsel) ||
74- (Triple.getArch() == llvm::Triple::mips64el);
75- LibName = LE ? "ld-musl-mipsel.so.1" : "ld-musl-mips.so.1";
76- } else
77+ else
78 LibName = IsNaN2008 ? "ld-linux-mipsn8.so.1" : "ld.so.1";
79
80 return (LibDir + "/" + LibName).str();
81--
822.8.2
83