svn commit: r356112 - in head/contrib/llvm-project: clang/lib/Basic/Targets llvm/lib/Target/PowerPC

Justin Hibbits jhibbits at FreeBSD.org
Fri Dec 27 04:00:05 UTC 2019


Author: jhibbits
Date: Fri Dec 27 04:00:04 2019
New Revision: 356112
URL: https://svnweb.freebsd.org/changeset/base/356112

Log:
  [PowerPC64] Starting from FreeBSD 13.0, default to ELFv2 ABI
  
  This changes the LLVM default powerpc64 ABI to ELFv2, if target OS is
  FreeBSD >= 13.0
  
  This will also be sent upstream.
  
  Submitted by:	alfredo.junior_eldorado.org.br
  Reviewed by:	dim, luporl
  Relnotes:	YES
  Differential Revision:	https://reviews.freebsd.org/D20383

Modified:
  head/contrib/llvm-project/clang/lib/Basic/Targets/PPC.h
  head/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp

Modified: head/contrib/llvm-project/clang/lib/Basic/Targets/PPC.h
==============================================================================
--- head/contrib/llvm-project/clang/lib/Basic/Targets/PPC.h	Fri Dec 27 03:54:27 2019	(r356111)
+++ head/contrib/llvm-project/clang/lib/Basic/Targets/PPC.h	Fri Dec 27 04:00:04 2019	(r356112)
@@ -375,12 +375,29 @@ class LLVM_LIBRARY_VISIBILITY PPC64TargetInfo : public
     IntMaxType = SignedLong;
     Int64Type = SignedLong;
 
+    if (Triple.getEnvironment() != llvm::Triple::UnknownEnvironment) {
+      switch (Triple.getEnvironment()){
+        case llvm::Triple::ELFv1:
+          ABI = "elfv1";
+          break;
+	default:
+          ABI = "elfv2";
+	break;
+      }
+    } else {
+      if ((Triple.getOS() == llvm::Triple::FreeBSD) &&
+	      (Triple.getOSMajorVersion() < 13)) {
+        ABI = "elfv1";
+      } else {
+        ABI = "elfv2";
+      }
+    }
+
+
     if ((Triple.getArch() == llvm::Triple::ppc64le)) {
       resetDataLayout("e-m:e-i64:64-n32:64");
-      ABI = "elfv2";
     } else {
       resetDataLayout("E-m:e-i64:64-n32:64");
-      ABI = Triple.getEnvironment() == llvm::Triple::ELFv2 ? "elfv2" : "elfv1";
     }
 
     if (Triple.getOS() == llvm::Triple::AIX)

Modified: head/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
==============================================================================
--- head/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp	Fri Dec 27 03:54:27 2019	(r356111)
+++ head/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp	Fri Dec 27 04:00:04 2019	(r356112)
@@ -209,6 +209,20 @@ static PPCTargetMachine::PPCABI computeTargetABI(const
   if (TT.isMacOSX())
     return PPCTargetMachine::PPC_ABI_UNKNOWN;
 
+  if (TT.isOSFreeBSD()) {
+    switch (TT.getArch()) {
+    case Triple::ppc64le:
+    case Triple::ppc64:
+      if (TT.getOSMajorVersion() >= 13)
+        return PPCTargetMachine::PPC_ABI_ELFv2;
+      else
+        return PPCTargetMachine::PPC_ABI_ELFv1;
+    case Triple::ppc:
+    default:
+      return PPCTargetMachine::PPC_ABI_UNKNOWN;
+    }
+  }
+
   switch (TT.getArch()) {
   case Triple::ppc64le:
     return PPCTargetMachine::PPC_ABI_ELFv2;


More information about the svn-src-all mailing list