From b144ec9ca3df9c19a8ae93bd6601e56fc417f211 Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Tue, 28 Feb 2017 03:20:26 +0000 Subject: [PATCH] Set ABIs correctly for OpenBSD/arm; soft float and aapcs-linux. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@296430 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 2 ++ lib/Driver/Arch/ARM.cpp | 4 ++++ lib/Driver/Tools.cpp | 2 ++ test/Driver/arm-abi.c | 4 ++++ test/Driver/openbsd.c | 5 +++++ 5 files changed, 17 insertions(+) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 7e37318779..da37a88d88 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -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; diff --git a/lib/Driver/Arch/ARM.cpp b/lib/Driver/Arch/ARM.cpp index cf4cefb28f..29adbedecf 100644 --- a/lib/Driver/Arch/ARM.cpp +++ b/lib/Driver/Arch/ARM.cpp @@ -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: diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 01f2efdda5..042326f68a 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -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; diff --git a/test/Driver/arm-abi.c b/test/Driver/arm-abi.c index 897c108048..ba5c4ba148 100644 --- a/test/Driver/arm-abi.c +++ b/test/Driver/arm-abi.c @@ -28,6 +28,10 @@ // 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 diff --git a/test/Driver/openbsd.c b/test/Driver/openbsd.c index 4160fbb767..b4e2796c5d 100644 --- a/test/Driver/openbsd.c +++ b/test/Driver/openbsd.c @@ -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" -- 2.40.0