/* The algorithm specified in the ELF ABI is as
--- elfutils-0.94/libelf/gelf_xlate.c.orig 2003-12-25 19:42:38.000000000 +0100
-+++ elfutils-0.94/libelf/gelf_xlate.c 2004-04-01 18:28:55.347212632 +0200
-@@ -67,20 +67,19 @@
- #define INLINE2(Bytes, FName, TName) \
- INLINE3 (Bytes, FName, TName)
- #define INLINE3(Bytes, FName, TName) \
-- static void FName (void *dest, const void *ptr, size_t len, int encode) \
-+ static void FName (word##Bytes##_t *dest, const word##Bytes##_t *ptr, size_t len, int encode) \
++++ elfutils-0.94/libelf/gelf_xlate.c 2004-04-01 22:22:51.450400608 +0200
+@@ -71,12 +71,15 @@
{ \
size_t n = len / sizeof (TName); \
if (dest < ptr) \
- while (n-- > 0) \
-- { \
+- while (n-- > 0) \
++ { \
++ word##Bytes##_t *tdest = (word##Bytes##_t *)dest, \
++ *tptr = (word##Bytes##_t *)ptr; \
++ while (n-- > 0) \
+ { \
- *((word##Bytes##_t *) dest)++ = \
- LEN##Bytes##_SWAP ((word##Bytes##_t *) ptr); \
- ((word##Bytes##_t *) ptr)++; \
-- } \
-+ { \
-+ *dest++ = LEN##Bytes##_SWAP(ptr); \
-+ ++ptr; \
++ *tdest++ = LEN##Bytes##_SWAP (tptr); \
++ ++tptr; \
+ } \
+ } \
else \
{ \
-- word##Bytes##_t *tdest = (word##Bytes##_t *) dest + n; \
-- const word##Bytes##_t *tptr = (const word##Bytes##_t *) ptr + n; \
-+ word##Bytes##_t *tdest = dest + n; \
-+ const word##Bytes##_t *tptr = ptr + n; \
- while (n-- > 0) \
- { \
- --tptr; \
+ word##Bytes##_t *tdest = (word##Bytes##_t *) dest + n; \