summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Ebourne <martin@ebourne.me.uk>2006-02-11 02:42:50 +0000
committerMartin Ebourne <martin@ebourne.me.uk>2006-02-11 02:42:50 +0000
commit2ff11bad690de020cfc74acd4d665bfce0782a2c (patch)
treec7517639d6bc6854f590de4f21e5429b66f24860
parent61494e43ae5a9b505b7e9e2b62f30e6462e450e8 (diff)
Added workaround option for GCC on the PPC platform. This is a manually invoked option because I do not know under what circumstances (eg. versions etc) the problem occurs.
If the raidfile test fails in release mode but passes in debug mode then try this option and see if it fixes it.
-rw-r--r--configure.ac11
-rw-r--r--lib/raidfile/RaidFileWrite.cpp3
2 files changed, 14 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 4239b821..2c375a6f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10,6 +10,17 @@ touch install-sh
AC_CANONICAL_SYSTEM
test -s install-sh || rm install-sh
+
+### Temporary hacks
+AC_ARG_ENABLE(
+ [ppc-workaround],
+ [AC_HELP_STRING([--enable-ppc-workaround],
+ [Enable a workaround for a compiler bug in GCC on PPC platforms (raidfile tests fail).])])
+if test "x$enable_ppc_workaround" = "xyes"; then
+ AC_DEFINE([HAVE_PPC_WORKAROUND], 1, [Define to 1 to workaround a GCC compiler bug on PPC])
+fi
+
+
### Checks for programs.
AC_LANG([C++])
diff --git a/lib/raidfile/RaidFileWrite.cpp b/lib/raidfile/RaidFileWrite.cpp
index 8341943d..c9963f05 100644
--- a/lib/raidfile/RaidFileWrite.cpp
+++ b/lib/raidfile/RaidFileWrite.cpp
@@ -462,6 +462,9 @@ void RaidFileWrite::TransformToRaidStorage()
ASSERT(sizeof(RaidFileRead::FileSizeType) >= sizeof(off_t));
int sizePos = (blockSize/sizeof(unsigned int)) - 2;
RaidFileRead::FileSizeType sw = box_hton64(writeFileStat.st_size);
+#ifdef HAVE_PPC_WORKAROUND
+ static RaidFileRead::FileSizeType ppcWorkaround = sw;
+#endif
unsigned int *psize = (unsigned int *)(&sw);
pparity[sizePos+0] = pstripe1[sizePos+0] ^ psize[0];
pparity[sizePos+1] = pstripe1[sizePos+1] ^ psize[1];