Package: cbmc
Version: 4.9.4-4
Severity: normal
Tags: patch

This patch adds initial support for ppc64el, fixing a lot of test failures that
is happening on buildd right now.

Thank you,
Breno
+--- src/util/config.cpp
++++ src/util/config.cpp
+@@ -336,8 +336,12 @@ void configt::ansi_ct::set_arch_spec_pow
+   else // ppc64
+     set_LP64();
+ 
++  if(subarch=="ppc64le")
++    endianness=IS_LITTLE_ENDIAN;
++  else
++    endianness=IS_BIG_ENDIAN;
++
+   arch=ARCH_POWER;
+-  endianness=IS_BIG_ENDIAN;
+   long_double_width=16*8;
+   char_is_unsigned=true;
+ 
+@@ -345,10 +349,13 @@ void configt::ansi_ct::set_arch_spec_pow
+   {
+   case MODE_GCC_C:
+   case MODE_GCC_CPP:
+-    defines.push_back("__powerpc");
+-    defines.push_back("__powerpc__");
+-    defines.push_back("__POWERPC__");
+-    defines.push_back("__ppc__");
++    if(subarch=="powerpc")
++    {
++      defines.push_back("__powerpc");
++      defines.push_back("__powerpc__");
++      defines.push_back("__POWERPC__");
++      defines.push_back("__ppc__");
++    }
+     if(os==OS_MACOS)
+       defines.push_back("__BIG_ENDIAN__");
+     break;
+@@ -1072,9 +1079,15 @@ irep_idt configt::this_architecture()
+   #elif __mips__
+   this_arch="mips";
+   #elif __powerpc__
+-  this_arch="powerpc";
+-  #elif __ppc64__
+-  this_arch="ppc64";
++    #if defined(__ppc64__) || defined(__PPC64__) || defined(__powerpc64__) || 
defined(__POWERPC64__)
++      #ifdef __LITTLE_ENDIAN__
++        this_arch="ppc64le";
++      #else
++        this_arch="ppc64";
++      #endif
++    #else
++      this_arch="powerpc";
++    #endif
+   #elif __sparc__
+   this_arch="sparc";
+   #elif __ia64__
+
--- cbmc-4.9.orig/src/util/config.cpp
+++ cbmc-4.9/src/util/config.cpp
@@ -338,8 +338,12 @@ void configt::ansi_ct::set_arch_spec_pow
   else // ppc64
     set_LP64();
 
+  if(subarch=="ppc64le")
+    endianness=IS_LITTLE_ENDIAN;
+  else
+    endianness=IS_BIG_ENDIAN;
+
   arch=ARCH_POWER;
-  endianness=IS_BIG_ENDIAN;
   long_double_width=16*8;
   char_is_unsigned=true;
   NULL_is_zero=true;
@@ -348,10 +352,13 @@ void configt::ansi_ct::set_arch_spec_pow
   {
   case MODE_GCC_C:
   case MODE_GCC_CPP:
-    defines.push_back("__powerpc");
-    defines.push_back("__powerpc__");
-    defines.push_back("__POWERPC__");
-    defines.push_back("__ppc__");
+    if(subarch=="powerpc")
+    {
+      defines.push_back("__powerpc");
+      defines.push_back("__powerpc__");
+      defines.push_back("__POWERPC__");
+      defines.push_back("__ppc__");
+    }
     if(os==OS_MACOS)
       defines.push_back("__BIG_ENDIAN__");
     break;
@@ -1145,9 +1152,15 @@ irep_idt configt::this_architecture()
     this_arch="mips64";
     #endif
   #elif __powerpc__
-  this_arch="powerpc";
-  #elif __ppc64__
-  this_arch="ppc64";
+    #if defined(__ppc64__) || defined(__PPC64__) || defined(__powerpc64__) || 
defined(__POWERPC64__)
+      #ifdef __LITTLE_ENDIAN__
+        this_arch="ppc64le";
+      #else
+        this_arch="ppc64";
+      #endif
+    #else
+      this_arch="powerpc";
+    #endif
   #elif __sparc__
   this_arch="sparc";
   #elif __ia64__

Reply via email to