It does indeed. In fact, some of the stdarg.h headers (e.g. powerpc)
take this approach. Here is a diff for the remaining headers.
Regards,
Tim
Index: sys/arch/alpha/include/stdarg.h
===================================================================
RCS file: /cvs/src/sys/arch/alpha/include/stdarg.h,v
retrieving revision 1.11
diff -u sys/arch/alpha/include/stdarg.h
--- sys/arch/alpha/include/stdarg.h 23 Oct 2008 21:25:07 -0000 1.11
+++ sys/arch/alpha/include/stdarg.h 29 Dec 2010 15:34:10 -0000
@@ -45,6 +45,7 @@
#ifdef lint
#define va_start(ap,lastarg) ((ap) = (ap))
+#define __va_copy(dst, src) ((dst) = (src))
#else
#define va_start(ap, last) \
(__builtin_next_arg(last), (ap) = *(va_list *)__builtin_saveregs(), (ap).pad = 0)
Index: sys/arch/amd64/include/stdarg.h
===================================================================
RCS file: /cvs/src/sys/arch/amd64/include/stdarg.h,v
retrieving revision 1.6
diff -u sys/arch/amd64/include/stdarg.h
--- sys/arch/amd64/include/stdarg.h 23 Oct 2008 21:25:07 -0000 1.6
+++ sys/arch/amd64/include/stdarg.h 29 Dec 2010 15:34:10 -0000
@@ -49,6 +49,7 @@
#ifdef lint
#define va_start(ap,lastarg) ((ap) = (ap))
+#define __va_copy(dst, src) ((dst) = (src))
#else
#define va_start(ap, last) \
((ap) = (va_list)&(last) + __va_size(last))
Index: sys/arch/hppa/include/stdarg.h
===================================================================
RCS file: /cvs/src/sys/arch/hppa/include/stdarg.h,v
retrieving revision 1.9
diff -u sys/arch/hppa/include/stdarg.h
--- sys/arch/hppa/include/stdarg.h 23 Oct 2008 21:25:07 -0000 1.9
+++ sys/arch/hppa/include/stdarg.h 29 Dec 2010 15:34:10 -0000
@@ -41,6 +41,7 @@
#ifdef lint
#define va_start(ap,lastarg) ((ap) = (ap))
+#define __va_copy(dst, src) ((dst) = (src))
#else
#define va_start(ap,lastarg) ((ap) = (va_list)__builtin_saveregs())
#endif /* lint */
Index: sys/arch/hppa64/include/stdarg.h
===================================================================
RCS file: ...