|
From: <sv...@va...> - 2010-01-04 01:01:12
|
Author: sewardj
Date: 2010-01-04 01:01:02 +0000 (Mon, 04 Jan 2010)
New Revision: 11006
Log:
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.
Modified:
trunk/coregrind/m_scheduler/scheduler.c
trunk/coregrind/pub_core_clreq.h
trunk/include/valgrind.h
Modified: trunk/coregrind/m_scheduler/scheduler.c
===================================================================
--- trunk/coregrind/m_scheduler/scheduler.c 2010-01-04 00:59:05 UTC (rev 11005)
+++ trunk/coregrind/m_scheduler/scheduler.c 2010-01-04 01:01:02 UTC (rev 11006)
@@ -1408,15 +1408,27 @@
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 @@
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 );
Modified: trunk/coregrind/pub_core_clreq.h
===================================================================
--- trunk/coregrind/pub_core_clreq.h 2010-01-04 00:59:05 UTC (rev 11005)
+++ trunk/coregrind/pub_core_clreq.h 2010-01-04 01:01:02 UTC (rev 11006)
@@ -64,13 +64,16 @@
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;
}
Modified: trunk/include/valgrind.h
===================================================================
--- trunk/include/valgrind.h 2010-01-04 00:59:05 UTC (rev 11005)
+++ trunk/include/valgrind.h 2010-01-04 01:01:02 UTC (rev 11006)
@@ -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;
}
|