As in the summary: on some architectures (ppc for example) the code:
va_list a;
va_list b;
b = a;
will fail. After a quick googling I've found a solution: __va_copy(b,a); is the proper code - on some architectures va_list is defined differently and the simple substitution will fail. On such architectures the xds build fails with:
xds.c: In function `xds_vencode':
xds.c:386: error: incompatible types in assignment
xds.c:391: warning: passing arg 6 of pointer to function from incompatible pointer type
xds.c: In function `xds_vdecode':
xds.c:486: warning: passing arg 6 of pointer to function from incompatible pointer type
make: *** [xds.lo] Error 1
the warnings are fixed with (va_list *) in front of the argument in question - I checked and it seems that the argument is proper anyways...