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__