]> granicus.if.org Git - clang/commitdiff
Set ABIs correctly for OpenBSD/arm; soft float and aapcs-linux.
authorBrad Smith <brad@comstyle.com>
Tue, 28 Feb 2017 03:20:26 +0000 (03:20 +0000)
committerBrad Smith <brad@comstyle.com>
Tue, 28 Feb 2017 03:20:26 +0000 (03:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@296430 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/Targets.cpp
lib/Driver/Arch/ARM.cpp
lib/Driver/Tools.cpp
test/Driver/arm-abi.c
test/Driver/openbsd.c

index 7e373187793453cb9d8c8383b3489fef267b03dd..da37a88d88b3bc3c4624502ea5d12cd5ebaf7896 100644 (file)
@@ -5166,6 +5166,8 @@ public:
       default:
         if (Triple.getOS() == llvm::Triple::NetBSD)
           setABI("apcs-gnu");
+        else if (Triple.getOS() == llvm::Triple::OpenBSD)
+          setABI("aapcs-linux");
         else
           setABI("aapcs");
         break;
index cf4cefb28f605a5ad82140ec8a8a4a7ce8abe2a3..29adbedecf6b3f961e97c80425e1ea262a6e9b63 100644 (file)
@@ -191,6 +191,10 @@ arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, const ArgList &Args) {
       }
       break;
 
+    case llvm::Triple::OpenBSD:
+      ABI = FloatABI::Soft;
+      break;
+
     default:
       switch (Triple.getEnvironment()) {
       case llvm::Triple::GNUEABIHF:
index 01f2efdda506dd793fc0c729474d22cf5c691561..042326f68ad2e6a710da9c9465f7596bf0c99f03 100644 (file)
@@ -787,6 +787,8 @@ void Clang::AddARMTargetArgs(const llvm::Triple &Triple, const ArgList &Args,
     default:
       if (Triple.getOS() == llvm::Triple::NetBSD)
         ABIName = "apcs-gnu";
+      else if (Triple.getOS() == llvm::Triple::OpenBSD)
+        ABIName = "aapcs-linux";
       else
         ABIName = "aapcs";
       break;
index 897c108048d49e1664bffc05f04b27d498e01fe4..ba5c4ba148ce8c762ec29806ac6482f0acb638d2 100644 (file)
 // RUN: %clang -target arm--netbsd-eabihf %s -### -o %t.o 2>&1 \
 // RUN:   | FileCheck -check-prefix=CHECK-AAPCS %s
 
+// OpenBSD defaults to aapcs-linux
+// RUN: %clang -target arm--openbsd- %s -### -o %t.o 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s
+
 // 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
index 4160fbb767abfcaf549c3e7770abb1d7ad28ebb3..b4e2796c5d24933d83d60a499303d23c05aa7c8f 100644 (file)
@@ -96,3 +96,8 @@
 // CHECK-STATIC-PIE: "{{.*}}rcrt0.o"
 // CHECK-STATIC-PIE-NOT: "-nopie"
 // CHECK-NOPIE: "-nopie" "{{.*}}crt0.o"
+
+// Check ARM float ABI
+// RUN: %clang -target arm-unknown-openbsd -### -c %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-ARM-FLOAT-ABI %s
+// CHECK-ARM-FLOAT-ABI: "-mfloat-abi" "soft"