diff options
author | Martin Ebourne <martin@ebourne.me.uk> | 2006-02-11 02:42:50 +0000 |
---|---|---|
committer | Martin Ebourne <martin@ebourne.me.uk> | 2006-02-11 02:42:50 +0000 |
commit | 2ff11bad690de020cfc74acd4d665bfce0782a2c (patch) | |
tree | c7517639d6bc6854f590de4f21e5429b66f24860 | |
parent | 61494e43ae5a9b505b7e9e2b62f30e6462e450e8 (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.ac | 11 | ||||
-rw-r--r-- | lib/raidfile/RaidFileWrite.cpp | 3 |
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]; |