Author: rafael Date: Fri Jun 24 16:35:06 2016 New Revision: 273735 URL: http://llvm.org/viewvc/llvm-project?rev=273735&view=rev Log: Add support for musl-libc on ARM Linux.
Patch by Lei Zhang! Modified: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/lib/Driver/ToolChains.cpp cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/test/CodeGen/arm-cc.c cfe/trunk/test/CodeGen/arm-eabi.c cfe/trunk/test/Driver/arm-abi.c cfe/trunk/test/Driver/arm-mfpu.c cfe/trunk/test/Driver/linux-ld.c Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Fri Jun 24 16:35:06 2016 @@ -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: Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Fri Jun 24 16:35:06 2016 @@ -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:: 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; Modified: cfe/trunk/lib/Driver/ToolChains.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/lib/Driver/ToolChains.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains.cpp Fri Jun 24 16:35:06 2016 @@ -4157,8 +4157,23 @@ std::string Linux::getDynamicLinker(cons 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; Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Fri Jun 24 16:35:06 2016 @@ -803,10 +803,12 @@ arm::FloatABI arm::getARMFloatABI(const 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: 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: Modified: cfe/trunk/test/CodeGen/arm-cc.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm-cc.c?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/arm-cc.c (original) +++ cfe/trunk/test/CodeGen/arm-cc.c Fri Jun 24 16:35:06 2016 @@ -3,6 +3,8 @@ // RUN: %clang_cc1 -triple armv7-apple-darwin9 -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=DARWIN-AAPCS %s // RUN: %clang_cc1 -triple arm-none-linux-gnueabi -target-abi apcs-gnu -emit-llvm -w -o - %s | FileCheck -check-prefix=LINUX-APCS %s // RUN: %clang_cc1 -triple arm-none-linux-gnueabi -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=LINUX-AAPCS %s +// RUN: %clang_cc1 -triple arm-none-linux-musleabi -target-abi apcs-gnu -emit-llvm -w -o - %s | FileCheck -check-prefix=LINUX-APCS %s +// RUN: %clang_cc1 -triple arm-none-linux-musleabi -target-abi aapcs -emit-llvm -w -o - %s | FileCheck -check-prefix=LINUX-AAPCS %s // RUN: %clang_cc1 -triple armv7-none-eabihf -target-abi aapcs-vfp -emit-llvm -w -o - %s | FileCheck -check-prefix=BAREMETAL-AAPCS_VFP %s Modified: cfe/trunk/test/CodeGen/arm-eabi.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm-eabi.c?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/arm-eabi.c (original) +++ cfe/trunk/test/CodeGen/arm-eabi.c Fri Jun 24 16:35:06 2016 @@ -7,6 +7,14 @@ // RUN: %clang -target arm-none-gnueabi -S -meabi 5 -o - %s | FileCheck -check-prefix=CHECK-EABI %s // RUN: %clang -target arm-none-gnueabihf -S -o - %s | FileCheck -check-prefix=CHECK-GNUEABI %s // RUN: %clang -target arm-none-gnueabihf -S -meabi 5 -o - %s | FileCheck -check-prefix=CHECK-EABI %s +// RUN: %clang -target arm-none-musleabi -S -o - %s \ +// RUN: | FileCheck -check-prefix=CHECK-GNUEABI %s +// RUN: %clang -target arm-none-musleabi -S -o - %s -meabi 5 \ +// RUN: | FileCheck -check-prefix=CHECK-EABI %s +// RUN: %clang -target arm-none-musleabihf -S -o - %s \ +// RUN: | FileCheck -check-prefix=CHECK-GNUEABI %s +// RUN: %clang -target arm-none-musleabihf -S -o - %s -meabi 5 \ +// RUN: | FileCheck -check-prefix=CHECK-EABI %s struct my_s { unsigned long a[18]; Modified: cfe/trunk/test/Driver/arm-abi.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-abi.c?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/test/Driver/arm-abi.c (original) +++ cfe/trunk/test/Driver/arm-abi.c Fri Jun 24 16:35:06 2016 @@ -28,13 +28,17 @@ // RUN: %clang -target arm--netbsd-eabihf %s -### -o %t.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-AAPCS %s -// Otherwise, ABI is celected based on environment +// Otherwise, ABI is selected based on environment // RUN: %clang -target arm---android %s -### -o %t.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s // RUN: %clang -target arm---gnueabi %s -### -o %t.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s // RUN: %clang -target arm---gnueabihf %s -### -o %t.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s +// RUN: %clang -target arm---musleabi %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s +// RUN: %clang -target arm---musleabihf %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s // RUN: %clang -target arm---eabi %s -### -o %t.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-AAPCS %s // RUN: %clang -target arm---eabihf %s -### -o %t.o 2>&1 \ Modified: cfe/trunk/test/Driver/arm-mfpu.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-mfpu.c?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/test/Driver/arm-mfpu.c (original) +++ cfe/trunk/test/Driver/arm-mfpu.c Fri Jun 24 16:35:06 2016 @@ -207,6 +207,8 @@ // RUN: %clang -target arm-linux-gnueabihf %s -### 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-HF %s +// RUN: %clang -target arm-linux-musleabihf %s -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-HF %s // CHECK-HF: "-target-cpu" "arm1176jzf-s" // RUN: %clang -target armv7-apple-darwin -x assembler %s -### -c 2>&1 \ Modified: cfe/trunk/test/Driver/linux-ld.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/linux-ld.c?rev=273735&r1=273734&r2=273735&view=diff ============================================================================== --- cfe/trunk/test/Driver/linux-ld.c (original) +++ cfe/trunk/test/Driver/linux-ld.c Fri Jun 24 16:35:06 2016 @@ -1606,11 +1606,47 @@ // RUN: %clang %s -### -o %t.o 2>&1 \ // RUN: --target=powerpc64-pc-linux-musl \ // RUN: | FileCheck --check-prefix=CHECK-MUSL-PPC64 %s -// CHECK-MUSL-X86: "-dynamic-linker" "/lib/ld-musl-i386.so.1" -// CHECK-MUSL-X86_64: "-dynamic-linker" "/lib/ld-musl-x86_64.so.1" -// CHECK-MUSL-MIPS: "-dynamic-linker" "/lib/ld-musl-mips.so.1" -// CHECK-MUSL-MIPSEL: "-dynamic-linker" "/lib/ld-musl-mipsel.so.1" -// CHECK-MUSL-MIPS64: "-dynamic-linker" "/lib/ld-musl-mips64.so.1" -// CHECK-MUSL-MIPS64EL: "-dynamic-linker" "/lib/ld-musl-mips64el.so.1" -// CHECK-MUSL-PPC: "-dynamic-linker" "/lib/ld-musl-powerpc.so.1" -// CHECK-MUSL-PPC64: "-dynamic-linker" "/lib/ld-musl-powerpc64.so.1" +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=thumb-pc-linux-musleabi \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-ARM %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=thumb-pc-linux-musleabihf \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-ARMHF %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=thumbeb-pc-linux-musleabi \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-ARMEB %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=thumbeb-pc-linux-musleabihf \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-ARMEBHF %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=arm-pc-linux-musleabi \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-ARM %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=arm-pc-linux-musleabihf \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-ARMHF %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=armeb-pc-linux-musleabi \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-ARMEB %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=armeb-pc-linux-musleabihf \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-ARMEBHF %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=aarch64-pc-linux-musleabi \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-AARCH64 %s +// RUN: %clang %s -### -o %t.o 2>&1 \ +// RUN: --target=aarch64_be-pc-linux-musleabi \ +// RUN: | FileCheck --check-prefix=CHECK-MUSL-AARCH64_BE %s +// CHECK-MUSL-X86: "-dynamic-linker" "/lib/ld-musl-i386.so.1" +// CHECK-MUSL-X86_64: "-dynamic-linker" "/lib/ld-musl-x86_64.so.1" +// CHECK-MUSL-MIPS: "-dynamic-linker" "/lib/ld-musl-mips.so.1" +// CHECK-MUSL-MIPSEL: "-dynamic-linker" "/lib/ld-musl-mipsel.so.1" +// CHECK-MUSL-MIPS64: "-dynamic-linker" "/lib/ld-musl-mips64.so.1" +// CHECK-MUSL-MIPS64EL: "-dynamic-linker" "/lib/ld-musl-mips64el.so.1" +// CHECK-MUSL-PPC: "-dynamic-linker" "/lib/ld-musl-powerpc.so.1" +// CHECK-MUSL-PPC64: "-dynamic-linker" "/lib/ld-musl-powerpc64.so.1" +// CHECK-MUSL-ARM: "-dynamic-linker" "/lib/ld-musl-arm.so.1" +// CHECK-MUSL-ARMHF: "-dynamic-linker" "/lib/ld-musl-armhf.so.1" +// CHECK-MUSL-ARMEB: "-dynamic-linker" "/lib/ld-musl-armeb.so.1" +// CHECK-MUSL-ARMEBHF: "-dynamic-linker" "/lib/ld-musl-armebhf.so.1" +// CHECK-MUSL-AARCH64: "-dynamic-linker" "/lib/ld-musl-aarch64.so.1" +// CHECK-MUSL-AARCH64_BE: "-dynamic-linker" "/lib/ld-musl-aarch64_be.so.1" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits