summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Ebourne <martin@ebourne.me.uk>2006-02-12 03:16:57 +0000
committerMartin Ebourne <martin@ebourne.me.uk>2006-02-12 03:16:57 +0000
commit9ff0d883fcc564ad91221953049a47e0937063fa (patch)
tree1294b812684844684ee476d4a1023be4e2d7a579
parentdc24ad5027955df1e3555beacf00b77e382e6d2e (diff)
This ppc problem is clearly a common big-endian platform issue.
Remove ppc hack and configure option. Replace dubious casts with clearer use of memcpy to make this work on all platforms all of the time. Note that there isn't really a call to memcpy, the compiler inlines it as 2 int copies which is an insignificant overhead (even true with -O0).
-rw-r--r--configure.ac11
-rw-r--r--lib/raidfile/RaidFileWrite.cpp6
2 files changed, 2 insertions, 15 deletions
diff --git a/configure.ac b/configure.ac
index 2c375a6f..4239b821 100644
--- a/configure.ac
+++ b/configure.ac
@@ -10,17 +10,6 @@ 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 c9963f05..285dbbc3 100644
--- a/lib/raidfile/RaidFileWrite.cpp
+++ b/lib/raidfile/RaidFileWrite.cpp
@@ -462,10 +462,8 @@ 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);
+ unsigned int psize[2];
+ ::memcpy(psize, &sw, sizeof(RaidFileRead::FileSizeType));
pparity[sizePos+0] = pstripe1[sizePos+0] ^ psize[0];
pparity[sizePos+1] = pstripe1[sizePos+1] ^ psize[1];
}