]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/llvm/patches/patch-r263619-clang-r201662-arm-gnueabihf.diff
MFC r282115, r282152, r282201
[FreeBSD/stable/10.git] / contrib / llvm / patches / patch-r263619-clang-r201662-arm-gnueabihf.diff
1 Pull in r201662 from upstream clang trunk:
2
3   Add FreeBSD ARM EABI hard-float support
4
5   Patch by Andrew Turner.
6
7 Introduced here: http://svnweb.freebsd.org/changeset/base/263619
8
9 Index: tools/clang/lib/Driver/ToolChains.cpp
10 ===================================================================
11 --- tools/clang/lib/Driver/ToolChains.cpp
12 +++ tools/clang/lib/Driver/ToolChains.cpp
13 @@ -2034,6 +2034,7 @@
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:
20      return false;
21 Index: tools/clang/lib/Driver/Tools.cpp
22 ===================================================================
23 --- tools/clang/lib/Driver/Tools.cpp
24 +++ tools/clang/lib/Driver/Tools.cpp
25 @@ -737,8 +737,15 @@
26      }
27  
28      case llvm::Triple::FreeBSD:
29 -      // FreeBSD defaults to soft float
30 -      FloatABI = "soft";
31 +      switch(Triple.getEnvironment()) {
32 +      case llvm::Triple::GNUEABIHF:
33 +        FloatABI = "hard";
34 +        break;
35 +      default:
36 +        // FreeBSD defaults to soft float
37 +        FloatABI = "soft";
38 +        break;
39 +      }
40        break;
41  
42      default:
43 @@ -5776,8 +5783,18 @@
44      }
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);
51 +
52 +    if (FloatABI == "hard") {
53 +      CmdArgs.push_back("-mfpu=vfp");
54 +    } else {
55 +      CmdArgs.push_back("-mfpu=softvfp");
56 +    }
57 +
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
67 @@ -101,13 +101,22 @@
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"
72  
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"
79  
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"
86 +
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