From efa0a98d0d77c00993d8c36e52379def849f3ae6 Mon Sep 17 00:00:00 2001 From: Tim Northover <tnorthover@apple.com> Date: Thu, 23 Jan 2014 15:00:01 +0000 Subject: [PATCH] MachO embedded: default to soft float without issuing warning This is a simpler rule, broadly in line with previous Darwin (which chose between "soft" and "softfp") but probably safer. In practice the only real reason for "softfp" is ABI compatibility, not usually an issue on limited chips like these, so anyone who wanted hard-float should already be saying so. That's my story and I'm sticking to it. rdar://problem/15887493 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199896 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Tools.cpp | 4 ++++ test/Driver/darwin-embedded.c | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index acb87a94148..a3a385d1cf1 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -662,6 +662,10 @@ StringRef tools::arm::getARMFloatABI(const Driver &D, const ArgList &Args, // EABI is always AAPCS, and if it was not marked 'hard', it's softfp FloatABI = "softfp"; break; + case llvm::Triple::MachO: { + FloatABI = "soft"; + break; + } case llvm::Triple::Android: { std::string ArchName = arm::getLLVMArchSuffixForARM(arm::getARMTargetCPU(Args, Triple)); diff --git a/test/Driver/darwin-embedded.c b/test/Driver/darwin-embedded.c index 5f545d535f2..66b7bd9fa7f 100644 --- a/test/Driver/darwin-embedded.c +++ b/test/Driver/darwin-embedded.c @@ -12,24 +12,49 @@ // RUN: FileCheck %s < %t // ARMv6m has no float +// CHECK-LABEL: Target: +// CHECK-NOT: warning: unknown platform +// CHECK: "-mfloat-abi" "soft" // CHECK: libclang_rt.soft_static.a // ARMv7em does, but defaults to soft +// CHECK-LABEL: Target: +// CHECK-NOT: warning: unknown platform +// CHECK: "-mfloat-abi" "soft" // CHECK: libclang_rt.soft_static.a // Which can be overridden +// CHECK-LABEL: Target: +// CHECK-NOT: warning: unknown platform +// CHECK: "-mfloat-abi" "hard" // CHECK: libclang_rt.hard_static.a // ARMv7m has no float either +// CHECK-LABEL: Target: +// CHECK-NOT: warning: unknown platform +// CHECK: "-mfloat-abi" "soft" // CHECK: libclang_rt.soft_pic.a // But it can be enabled on ARMv7em +// CHECK-LABEL: Target: +// CHECK-NOT: warning: unknown platform +// CHECK: "-mfloat-abi" "hard" // CHECK: libclang_rt.hard_pic.a // "softfp" must link against a soft-float library since that's what the // callers we're compiling will expect. +// CHECK-LABEL: Target: +// CHECK-NOT: warning: unknown platform +// CHECK: "-mfloat-abi" "soft" // CHECK: libclang_rt.soft_pic.a // -arch "armv7" (== embedded v7a) can be used in a couple of variants: +// CHECK-LABEL: Target: +// CHECK-NOT: warning: unknown platform +// CHECK: "-mfloat-abi" "hard" // CHECK: libclang_rt.hard_static.a + +// CHECK-LABEL: Target: +// CHECK-NOT: warning: unknown platform +// CHECK: "-mfloat-abi" "soft" // CHECK: libclang_rt.soft_pic.a -- GitLab