Don't assume that va_list can be casted to an unsigned word.  Fixes
the build on arm-linux with gcc-4.4 or later.  Patch from Dmitry
Zhurikhin.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11006 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/include/valgrind.h b/include/valgrind.h
index fc46465..e311f66 100644
--- a/include/valgrind.h
+++ b/include/valgrind.h
@@ -4183,12 +4183,16 @@
 VALGRIND_PRINTF(const char *format, ...)
 {
    unsigned long _qzz_res;
-   va_list vargs;
-   va_start(vargs, format);
+   union {
+      va_list vargs;
+      unsigned long ul;
+   } args;
+   va_start(args.vargs, format);
    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, VG_USERREQ__PRINTF,
-                              (unsigned long)format, (unsigned long)vargs, 
+                              (unsigned long)format,
+                              (unsigned long)(args.ul),
                               0, 0, 0);
-   va_end(vargs);
+   va_end(args.vargs);
    return (int)_qzz_res;
 }
 
@@ -4198,12 +4202,16 @@
 VALGRIND_PRINTF_BACKTRACE(const char *format, ...)
 {
    unsigned long _qzz_res;
-   va_list vargs;
-   va_start(vargs, format);
+   union {
+      va_list vargs;
+      unsigned long ul;
+   } args;
+   va_start(args.vargs, format);
    VALGRIND_DO_CLIENT_REQUEST(_qzz_res, 0, VG_USERREQ__PRINTF_BACKTRACE,
-                              (unsigned long)format, (unsigned long)vargs, 
+                              (unsigned long)format,
+                              (unsigned long)(args.ul),
                               0, 0, 0);
-   va_end(vargs);
+   va_end(args.vargs);
    return (int)_qzz_res;
 }