1 Pull in r201662 from upstream clang trunk:
3 Add FreeBSD ARM EABI hard-float support
5 Patch by Andrew Turner.
7 Introduced here: http://svnweb.freebsd.org/changeset/base/263619
9 Index: tools/clang/lib/Driver/ToolChains.cpp
10 ===================================================================
11 --- tools/clang/lib/Driver/ToolChains.cpp
12 +++ tools/clang/lib/Driver/ToolChains.cpp
14 bool FreeBSD::UseSjLjExceptions() const {
15 // FreeBSD uses SjLj exceptions on ARM oabi.
16 switch (getTriple().getEnvironment()) {
17 + case llvm::Triple::GNUEABIHF:
18 case llvm::Triple::GNUEABI:
19 case llvm::Triple::EABI:
21 Index: tools/clang/lib/Driver/Tools.cpp
22 ===================================================================
23 --- tools/clang/lib/Driver/Tools.cpp
24 +++ tools/clang/lib/Driver/Tools.cpp
28 case llvm::Triple::FreeBSD:
29 - // FreeBSD defaults to soft float
31 + switch(Triple.getEnvironment()) {
32 + case llvm::Triple::GNUEABIHF:
36 + // FreeBSD defaults to soft float
43 @@ -5776,8 +5783,18 @@
45 } else if (getToolChain().getArch() == llvm::Triple::arm ||
46 getToolChain().getArch() == llvm::Triple::thumb) {
47 - CmdArgs.push_back("-mfpu=softvfp");
48 + const Driver &D = getToolChain().getDriver();
49 + llvm::Triple Triple = getToolChain().getTriple();
50 + StringRef FloatABI = getARMFloatABI(D, Args, Triple);
52 + if (FloatABI == "hard") {
53 + CmdArgs.push_back("-mfpu=vfp");
55 + CmdArgs.push_back("-mfpu=softvfp");
58 switch(getToolChain().getTriple().getEnvironment()) {
59 + case llvm::Triple::GNUEABIHF:
60 case llvm::Triple::GNUEABI:
61 case llvm::Triple::EABI:
62 CmdArgs.push_back("-meabi=5");
63 Index: tools/clang/test/Driver/freebsd.c
64 ===================================================================
65 --- tools/clang/test/Driver/freebsd.c
66 +++ tools/clang/test/Driver/freebsd.c
68 // RUN: | FileCheck --check-prefix=CHECK-ARM %s
69 // CHECK-ARM: clang{{.*}}" "-cc1"{{.*}}" "-fsjlj-exceptions"
70 // CHECK-ARM: as{{.*}}" "-mfpu=softvfp"{{.*}}"-matpcs"
71 +// CHECK-ARM-EABI-NOT: as{{.*}}" "-mfpu=vfp"
73 // RUN: %clang %s -### -target arm-gnueabi-freebsd10.0 2>&1 \
74 // RUN: | FileCheck --check-prefix=CHECK-ARM-EABI %s
75 // CHECK-ARM-EABI-NOT: clang{{.*}}" "-cc1"{{.*}}" "-fsjlj-exceptions"
76 // CHECK-ARM-EABI: as{{.*}}" "-mfpu=softvfp" "-meabi=5"
77 +// CHECK-ARM-EABI-NOT: as{{.*}}" "-mfpu=vfp"
78 // CHECK-ARM-EABI-NOT: as{{.*}}" "-matpcs"
80 +// RUN: %clang %s -### -o %t.o -target arm-gnueabihf-freebsd10.0 -no-integrated-as 2>&1 \
81 +// RUN: | FileCheck --check-prefix=CHECK-ARM-EABIHF %s
82 +// CHECK-ARM-EABIHF-NOT: clang{{.*}}" "-cc1"{{.*}}" "-fsjlj-exceptions"
83 +// CHECK-ARM-EABIHF: as{{.*}}" "-mfpu=vfp" "-meabi=5"
84 +// CHECK-ARM-EABIHF-NOT: as{{.*}}" "-mfpu=softvfp"
85 +// CHECK-ARM-EABIHF-NOT: as{{.*}}" "-matpcs"
87 // RUN: %clang -target x86_64-pc-freebsd8 %s -### -flto -o %t.o 2>&1 \
88 // RUN: | FileCheck --check-prefix=CHECK-LTO %s
89 // CHECK-LTO: ld{{.*}}" "-plugin{{.*}}LLVMgold.so