Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Oct 2019 20:05:27 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r353739 - in head/contrib/llvm/tools/clang/lib/Driver/ToolChains: . Arch
Message-ID:  <201910182005.x9IK5RGH065202@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Fri Oct 18 20:05:27 2019
New Revision: 353739
URL: https://svnweb.freebsd.org/changeset/base/353739

Log:
  Pull in r374154 from upstream clang trunk (by Simon Atanasyan):
  
    [mips] Set default float ABI to "soft" on FreeBSD
  
    Initial patch by Kyle Evans.
  
    Fix PR43596
  
  Requested by:	kevans
  MFC after:	1 month
  X-MFC-With:	r353358

Modified:
  head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.cpp
  head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.h
  head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp
  head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp

Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.cpp	Fri Oct 18 20:02:46 2019	(r353738)
+++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.cpp	Fri Oct 18 20:05:27 2019	(r353739)
@@ -149,7 +149,8 @@ StringRef mips::getGnuCompatibleMipsABIName(StringRef 
 
 // Select the MIPS float ABI as determined by -msoft-float, -mhard-float,
 // and -mfloat-abi=.
-mips::FloatABI mips::getMipsFloatABI(const Driver &D, const ArgList &Args) {
+mips::FloatABI mips::getMipsFloatABI(const Driver &D, const ArgList &Args,
+                                     const llvm::Triple &Triple) {
   mips::FloatABI ABI = mips::FloatABI::Invalid;
   if (Arg *A =
           Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float,
@@ -172,10 +173,15 @@ mips::FloatABI mips::getMipsFloatABI(const Driver &D, 
 
   // If unspecified, choose the default based on the platform.
   if (ABI == mips::FloatABI::Invalid) {
-    // Assume "hard", because it's a default value used by gcc.
-    // When we start to recognize specific target MIPS processors,
-    // we will be able to select the default more correctly.
-    ABI = mips::FloatABI::Hard;
+    if (Triple.isOSFreeBSD()) {
+      // For FreeBSD, assume "soft" on all flavors of MIPS.
+      ABI = mips::FloatABI::Soft;
+    } else {
+      // Assume "hard", because it's a default value used by gcc.
+      // When we start to recognize specific target MIPS processors,
+      // we will be able to select the default more correctly.
+      ABI = mips::FloatABI::Hard;
+    }
   }
 
   assert(ABI != mips::FloatABI::Invalid && "must select an ABI");
@@ -267,7 +273,7 @@ void mips::getMIPSTargetFeatures(const Driver &D, cons
       D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1);
   }
 
-  mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args);
+  mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args, Triple);
   if (FloatABI == mips::FloatABI::Soft) {
     // FIXME: Note, this is a hack. We need to pass the selected float
     // mode to the MipsTargetInfoBase to define appropriate macros there.

Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.h
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.h	Fri Oct 18 20:02:46 2019	(r353738)
+++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.h	Fri Oct 18 20:05:27 2019	(r353739)
@@ -38,7 +38,8 @@ void getMIPSTargetFeatures(const Driver &D, const llvm
                            const llvm::opt::ArgList &Args,
                            std::vector<StringRef> &Features);
 StringRef getGnuCompatibleMipsABIName(StringRef ABI);
-mips::FloatABI getMipsFloatABI(const Driver &D, const llvm::opt::ArgList &Args);
+mips::FloatABI getMipsFloatABI(const Driver &D, const llvm::opt::ArgList &Args,
+                               const llvm::Triple &Triple);
 std::string getMipsABILibSuffix(const llvm::opt::ArgList &Args,
                                 const llvm::Triple &Triple);
 bool hasMipsAbiArg(const llvm::opt::ArgList &Args, const char *Value);

Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp	Fri Oct 18 20:02:46 2019	(r353738)
+++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp	Fri Oct 18 20:05:27 2019	(r353739)
@@ -1646,7 +1646,7 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args,
   CmdArgs.push_back("-target-abi");
   CmdArgs.push_back(ABIName.data());
 
-  mips::FloatABI ABI = mips::getMipsFloatABI(D, Args);
+  mips::FloatABI ABI = mips::getMipsFloatABI(D, Args, Triple);
   if (ABI == mips::FloatABI::Soft) {
     // Floating point operations and argument passing are soft.
     CmdArgs.push_back("-msoft-float");

Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp	Fri Oct 18 20:02:46 2019	(r353738)
+++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp	Fri Oct 18 20:05:27 2019	(r353739)
@@ -819,7 +819,8 @@ void tools::gnutools::Assembler::ConstructJob(Compilat
       A->render(Args, CmdArgs);
     } else if (mips::shouldUseFPXX(
                    Args, getToolChain().getTriple(), CPUName, ABIName,
-                   mips::getMipsFloatABI(getToolChain().getDriver(), Args)))
+                   mips::getMipsFloatABI(getToolChain().getDriver(), Args,
+                                         getToolChain().getTriple())))
       CmdArgs.push_back("-mfpxx");
 
     // Pass on -mmips16 or -mno-mips16. However, the assembler equivalent of



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201910182005.x9IK5RGH065202>