svn commit: r255061 - projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver

Andrew Turner andrew at FreeBSD.org
Fri Aug 30 08:25:08 UTC 2013


Author: andrew
Date: Fri Aug 30 08:25:07 2013
New Revision: 255061
URL: http://svnweb.freebsd.org/changeset/base/255061

Log:
  Start supporting the ARM EABI Hard-Float ABI in clang

Modified:
  projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp
  projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver/Tools.cpp

Modified: projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp
==============================================================================
--- projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp	Fri Aug 30 07:59:49 2013	(r255060)
+++ projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver/ToolChains.cpp	Fri Aug 30 08:25:07 2013	(r255061)
@@ -1841,6 +1841,7 @@ Tool *FreeBSD::buildLinker() const {
 bool FreeBSD::UseSjLjExceptions() const {
   // FreeBSD uses SjLj exceptions on ARM oabi.
   switch (getTriple().getEnvironment()) {
+  case llvm::Triple::GNUEABIHF:
   case llvm::Triple::GNUEABI:
   case llvm::Triple::EABI:
     return false;

Modified: projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver/Tools.cpp
==============================================================================
--- projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver/Tools.cpp	Fri Aug 30 07:59:49 2013	(r255060)
+++ projects/arm_eabi_vfp/contrib/llvm/tools/clang/lib/Driver/Tools.cpp	Fri Aug 30 08:25:07 2013	(r255061)
@@ -660,8 +660,15 @@ static StringRef getARMFloatABI(const Dr
     }
 
     case llvm::Triple::FreeBSD:
-      // FreeBSD defaults to soft float
-      FloatABI = "soft";
+      switch(Triple.getEnvironment()) {
+      case llvm::Triple::GNUEABIHF:
+        FloatABI = "hard";
+         break;
+      default:
+        // FreeBSD defaults to soft float
+        FloatABI = "soft";
+        break;
+      }
       break;
 
     default:
@@ -5401,8 +5408,18 @@ void freebsd::Assemble::ConstructJob(Com
     }
   } else if (getToolChain().getArch() == llvm::Triple::arm ||
              getToolChain().getArch() == llvm::Triple::thumb) {
-    CmdArgs.push_back("-mfpu=softvfp");
+    const Driver &D = getToolChain().getDriver();
+    llvm::Triple Triple = getToolChain().getTriple();
+    StringRef FloatABI = getARMFloatABI(D, Args, Triple);
+
+    if (FloatABI == "hard") {
+      CmdArgs.push_back("-mfpu=vfp");
+    } else {
+      CmdArgs.push_back("-mfpu=softvfp");
+    }
+
     switch(getToolChain().getTriple().getEnvironment()) {
+    case llvm::Triple::GNUEABIHF:
     case llvm::Triple::GNUEABI:
     case llvm::Triple::EABI:
       CmdArgs.push_back("-meabi=5");


More information about the svn-src-projects mailing list