From e6e29e4248bd05f19273f16cdc424b88f547402d Mon Sep 17 00:00:00 2001 From: Oliver Stannard Date: Thu, 28 Aug 2014 12:15:49 +0000 Subject: [PATCH] [ARM] Change default ABI for AArch32 to be "aapcs" (was "apcs-gnu") The current default abi when no environment is given is "apcs-gnu", which is obsolete. This patch changes the default to "aapcs". "aapcs" has both hard- and soft-float variants, so the -mhard-float, -msoft-float and -mfloat-abi= options now all behave as expected when no environment is specified in the triple. While writing this I also noticed that a preprocessor test claims to be checking darwin, but is actually checking the defaults, which are different for darwin. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216662 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Tools.cpp | 3 +-- test/Driver/arm-abi.c | 45 ++++++++++++++++++++++++++++++++++++++++ test/Preprocessor/init.c | 9 ++++---- 3 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 test/Driver/arm-abi.c diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 3af94ca323..de64d934f9 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -755,10 +755,9 @@ void Clang::AddARMTargetArgs(const ArgList &Args, break; case llvm::Triple::EABIHF: case llvm::Triple::EABI: + default: ABIName = "aapcs"; break; - default: - ABIName = "apcs-gnu"; } } CmdArgs.push_back("-target-abi"); diff --git a/test/Driver/arm-abi.c b/test/Driver/arm-abi.c new file mode 100644 index 0000000000..1186316ad5 --- /dev/null +++ b/test/Driver/arm-abi.c @@ -0,0 +1,45 @@ +// The default ABI is aapcs +// RUN: %clang -target arm--- %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS %s +// RUN: %clang -target armeb--- %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS %s +// RUN: %clang -target thumb--- %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS %s +// RUN: %clang -target thumbeb--- %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS %s + +// MachO targets default to apcs-gnu, except for m-class processors +// RUN: %clang -target arm--darwin- -arch armv7s %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-APCS-GNU %s +// RUN: %clang -target thumb--darwin- -arch armv7s %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-APCS-GNU %s +// RUN: %clang -target thumb--darwin- -arch armv7m %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS %s + +// Windows targets default to AAPCS, regardless of environment +// RUN: %clang -target arm--windows-gnueabi %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS %s + +// Otherwise, ABI is celected 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---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 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS %s + +// ABI can be overridden by the -mabi= option +// RUN: %clang -target arm---eabi -mabi=apcs-gnu %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-APCS-GNU %s +// RUN: %clang -target arm---gnueabi -mabi=aapcs %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS %s +// RUN: %clang -target arm---eabi -mabi=aapcs-linux %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s + +// CHECK-APCS-GNU: "-target-abi" "apcs-gnu" +// CHECK-AAPCS: "-target-abi" "aapcs" +// CHECK-AAPCS-LINUX: "-target-abi" "aapcs-linux" diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index 67ed838e4a..b45c2c944a 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -1764,12 +1764,13 @@ // ARM-NETBSD:#define __arm 1 // ARM-NETBSD:#define __arm__ 1 -// RUN: %clang -target arm -arch armv7s -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-NO-EABI %s -// RUN: %clang -target arm -arch armv6m -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-NO-EABI %s -// RUN: %clang -target arm -arch armv7m -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-NO-EABI %s -// RUN: %clang -target arm -arch armv7em -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-NO-EABI %s +// RUN: %clang -target arm-apple-darwin-eabi -arch armv7s -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-NO-EABI %s +// RUN: %clang -target arm-apple-darwin-eabi -arch armv6m -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-EABI %s +// RUN: %clang -target arm-apple-darwin-eabi -arch armv7m -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-EABI %s +// RUN: %clang -target arm-apple-darwin-eabi -arch armv7em -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-EABI %s // RUN: %clang -target thumbv7-apple-darwin-eabi -arch armv7 -x c -E -dM %s -o - | FileCheck --check-prefix=ARM-DARWIN-NO-EABI %s // ARM-DARWIN-NO-EABI-NOT: #define __ARM_EABI__ 1 +// ARM-DARWIN-EABI: #define __ARM_EABI__ 1 // Check that -mhwdiv works properly for targets which don't have the hwdiv feature enabled by default. -- 2.50.1