summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2016-06-24 21:35:06 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2016-06-24 21:35:06 +0000
commit0fa668072f4c7e1c9d9ff870f742058ce1e2dc14 (patch)
tree664b3a776b934402727bdb2095a653c7bce67716 /clang/lib
parent5a52856cc89830b14c398e4599d44967d6e805fc (diff)
downloadbcm5719-llvm-0fa668072f4c7e1c9d9ff870f742058ce1e2dc14.tar.gz
bcm5719-llvm-0fa668072f4c7e1c9d9ff870f742058ce1e2dc14.zip
Add support for musl-libc on ARM Linux.
Patch by Lei Zhang! llvm-svn: 273735
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Basic/Targets.cpp2
-rw-r--r--clang/lib/CodeGen/TargetInfo.cpp4
-rw-r--r--clang/lib/Driver/ToolChains.cpp19
-rw-r--r--clang/lib/Driver/Tools.cpp4
4 files changed, 27 insertions, 2 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 626c5af8fdc..0292e1dd526 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -4876,6 +4876,8 @@ public:
case llvm::Triple::Android:
case llvm::Triple::GNUEABI:
case llvm::Triple::GNUEABIHF:
+ case llvm::Triple::MuslEABI:
+ case llvm::Triple::MuslEABIHF:
setABI("aapcs-linux");
break;
case llvm::Triple::EABIHF:
diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp
index 52bc6bb34d6..bbe98df77c9 100644
--- a/clang/lib/CodeGen/TargetInfo.cpp
+++ b/clang/lib/CodeGen/TargetInfo.cpp
@@ -4963,6 +4963,8 @@ public:
case llvm::Triple::EABIHF:
case llvm::Triple::GNUEABI:
case llvm::Triple::GNUEABIHF:
+ case llvm::Triple::MuslEABI:
+ case llvm::Triple::MuslEABIHF:
return true;
default:
return false;
@@ -4973,6 +4975,7 @@ public:
switch (getTarget().getTriple().getEnvironment()) {
case llvm::Triple::EABIHF:
case llvm::Triple::GNUEABIHF:
+ case llvm::Triple::MuslEABIHF:
return true;
default:
return false;
@@ -7933,6 +7936,7 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
else if (CodeGenOpts.FloatABI == "hard" ||
(CodeGenOpts.FloatABI != "soft" &&
(Triple.getEnvironment() == llvm::Triple::GNUEABIHF ||
+ Triple.getEnvironment() == llvm::Triple::MuslEABIHF ||
Triple.getEnvironment() == llvm::Triple::EABIHF)))
Kind = ARMABIInfo::AAPCS_VFP;
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index dec791c9358..7884c402eb2 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -4157,8 +4157,23 @@ std::string Linux::getDynamicLinker(const ArgList &Args) const {
if (Triple.isAndroid())
return Triple.isArch64Bit() ? "/system/bin/linker64" : "/system/bin/linker";
- else if (Triple.getEnvironment() == llvm::Triple::Musl)
- return "/lib/ld-musl-" + Triple.getArchName().str() + ".so.1";
+ else if (Triple.isMusl()) {
+ std::string ArchName;
+ switch (Arch) {
+ case llvm::Triple::thumb:
+ ArchName = "arm";
+ break;
+ case llvm::Triple::thumbeb:
+ ArchName = "armeb";
+ break;
+ default:
+ ArchName = Triple.getArchName().str();
+ }
+ if (Triple.getEnvironment() == llvm::Triple::MuslEABIHF)
+ ArchName += "hf";
+
+ return "/lib/ld-musl-" + ArchName + ".so.1";
+ }
std::string LibDir;
std::string Loader;
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 9e3aa46291d..c4ac773edee 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -803,10 +803,12 @@ arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, const ArgList &Args) {
default:
switch (Triple.getEnvironment()) {
case llvm::Triple::GNUEABIHF:
+ case llvm::Triple::MuslEABIHF:
case llvm::Triple::EABIHF:
ABI = FloatABI::Hard;
break;
case llvm::Triple::GNUEABI:
+ case llvm::Triple::MuslEABI:
case llvm::Triple::EABI:
// EABI is always AAPCS, and if it was not marked 'hard', it's softfp
ABI = FloatABI::SoftFP;
@@ -1052,6 +1054,8 @@ void Clang::AddARMTargetArgs(const llvm::Triple &Triple, const ArgList &Args,
case llvm::Triple::Android:
case llvm::Triple::GNUEABI:
case llvm::Triple::GNUEABIHF:
+ case llvm::Triple::MuslEABI:
+ case llvm::Triple::MuslEABIHF:
ABIName = "aapcs-linux";
break;
case llvm::Triple::EABIHF:
OpenPOWER on IntegriCloud