]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Don't assume that va_list can be casted to an unsigned word. Fixes
authorJulian Seward <jseward@acm.org>
Mon, 4 Jan 2010 01:01:02 +0000 (01:01 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 4 Jan 2010 01:01:02 +0000 (01:01 +0000)
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

coregrind/m_scheduler/scheduler.c
coregrind/pub_core_clreq.h
include/valgrind.h

index 63d38a18369b983be2497a1a12b881a6fae01f24..67fb7bf0e3e954d462633febef282eb3d1e632cb 100644 (file)
@@ -1408,15 +1408,27 @@ void do_client_request ( ThreadId tid )
          break;
 
       case VG_USERREQ__PRINTF: {
-         Int count = 
-            VG_(vmessage)( Vg_ClientMsg, (char *)arg[1], (void*)arg[2] );
+         union {
+            va_list vargs;
+            unsigned long ul;
+         } args;
+         Int count;
+         args.ul = (unsigned long)arg[2];
+         count =
+            VG_(vmessage)( Vg_ClientMsg, (char *)arg[1], args.vargs );
             VG_(message_flush)();
             SET_CLREQ_RETVAL( tid, count );
          break; }
 
       case VG_USERREQ__INTERNAL_PRINTF: {
-         Int count = 
-            VG_(vmessage)( Vg_DebugMsg, (char *)arg[1], (void*)arg[2] );
+         union {
+            va_list vargs;
+            unsigned long ul;
+         } args;
+         Int count;
+         args.ul = (unsigned long)arg[2];
+         count =
+            VG_(vmessage)( Vg_DebugMsg, (char *)arg[1], args.vargs );
             VG_(message_flush)();
             SET_CLREQ_RETVAL( tid, count );
          break; }
@@ -1427,8 +1439,14 @@ void do_client_request ( ThreadId tid )
          break; }
 
       case VG_USERREQ__PRINTF_BACKTRACE: {
-         Int count =
-            VG_(vmessage)( Vg_ClientMsg, (char *)arg[1], (void*)arg[2] );
+         union {
+            va_list vargs;
+            unsigned long ul;
+         } args;
+         Int count;
+         args.ul = (unsigned long)arg[2];
+         count =
+            VG_(vmessage)( Vg_ClientMsg, (char *)arg[1], args.vargs );
             VG_(message_flush)();
             VG_(get_and_pp_StackTrace)( tid, VG_(clo_backtrace_size) );
             SET_CLREQ_RETVAL( tid, count );
index 412f89e1cf9db86b71f20c8d865109d78ba46595..d99802188f4a043f74b5086f0efaed11df4e582c 100644 (file)
@@ -64,13 +64,16 @@ static int VALGRIND_INTERNAL_PRINTF(const char *format, ...)
 static int VALGRIND_INTERNAL_PRINTF(const char *format, ...)
 {
    unsigned long _qzz_res = 0;
-   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__INTERNAL_PRINTF,
-      (unsigned long)format, (unsigned long)vargs, 0, 0, 0
+      (unsigned long)format, (unsigned long)(args.ul), 0, 0, 0
    );
-   va_end(vargs);
+   va_end(args.vargs);
    return _qzz_res;
 }
 
index fc46465e6134ab461d93f3237d86908396176a59..e311f66acdb2c5ad2632c22d56c35e7f5a645246 100644 (file)
@@ -4183,12 +4183,16 @@ static int
 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 @@ static int
 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;
 }