From: Paolo 'Blaisorblade' Giarrusso GCC 2.95 uses __va_copy instead of va_copy. Handle it inside compiler.h instead of in a casual file, and avoid the risk that this breaks with a newer compiler (which it could do). Signed-off-by: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Andrew Morton --- arch/um/kernel/skas/uaccess.c | 4 ++-- include/linux/compiler-gcc2.h | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff -puN arch/um/kernel/skas/uaccess.c~uml-move-va_copy-conditional-def arch/um/kernel/skas/uaccess.c --- 25/arch/um/kernel/skas/uaccess.c~uml-move-va_copy-conditional-def 2005-04-26 04:18:16.905497000 -0700 +++ 25-akpm/arch/um/kernel/skas/uaccess.c 2005-04-26 04:18:16.910496240 -0700 @@ -3,6 +3,7 @@ * Licensed under the GPL */ +#include "linux/compiler.h" #include "linux/stddef.h" #include "linux/kernel.h" #include "linux/string.h" @@ -61,8 +62,7 @@ static void do_buffer_op(void *jmpbuf, v void *arg; int *res; - /* Some old gccs recognize __va_copy, but not va_copy */ - __va_copy(args, *(va_list *)arg_ptr); + va_copy(args, *(va_list *)arg_ptr); addr = va_arg(args, unsigned long); len = va_arg(args, int); is_write = va_arg(args, int); diff -puN include/linux/compiler-gcc2.h~uml-move-va_copy-conditional-def include/linux/compiler-gcc2.h --- 25/include/linux/compiler-gcc2.h~uml-move-va_copy-conditional-def 2005-04-26 04:18:16.906496848 -0700 +++ 25-akpm/include/linux/compiler-gcc2.h 2005-04-26 04:18:16.911496088 -0700 @@ -22,3 +22,8 @@ # define __attribute_pure__ __attribute__((pure)) # define __attribute_const__ __attribute__((__const__)) #endif + +/* GCC 2.95.x/2.96 recognize __va_copy, but not va_copy. Actually later GCC's + * define both va_copy and __va_copy, but the latter may go away, so limit this + * to this header */ +#define va_copy __va_copy _