yann@1819: From 85bc04d5436ca6c8a30a1ad28862260a04b8b3d5 Mon Sep 17 00:00:00 2001 yann@1819: From: Hans-Christian Egtvedt yann@1819: Date: Wed, 16 Dec 2009 13:16:08 +0100 yann@1819: Subject: [PATCH 02/15] avr32: add varargs handling of prctl syscall yann@1819: yann@1819: prctl is defined to use varargs in the header file, hence it needs varargs yann@1819: specific handling in the source. This patch properly handles the variodic yann@1819: argument before the syscall is passed to the kernel for the AVR32 architecture. yann@1819: yann@1819: Signed-off-by: Hans-Christian Egtvedt yann@1819: --- yann@1819: libc/sysdeps/linux/avr32/Makefile.arch | 2 +- yann@1819: libc/sysdeps/linux/avr32/prctl.c | 36 ++++++++++++++++++++++++++++++++ yann@1819: 2 files changed, 37 insertions(+), 1 deletions(-) yann@1819: create mode 100644 libc/sysdeps/linux/avr32/prctl.c yann@1819: yann@1819: diff --git a/libc/sysdeps/linux/avr32/Makefile.arch b/libc/sysdeps/linux/avr32/Makefile.arch yann@1819: index bc5f625..98b85a7 100644 yann@1819: --- a/libc/sysdeps/linux/avr32/Makefile.arch yann@1819: +++ b/libc/sysdeps/linux/avr32/Makefile.arch yann@1819: @@ -5,7 +5,7 @@ yann@1819: # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. yann@1819: # yann@1819: yann@1819: -CSRC := brk.c clone.c mmap.c sigaction.c yann@1819: +CSRC := brk.c clone.c mmap.c prctl.c sigaction.c yann@1819: yann@1819: SSRC := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ yann@1819: sigrestorer.S syscall.S vfork.S yann@1819: diff --git a/libc/sysdeps/linux/avr32/prctl.c b/libc/sysdeps/linux/avr32/prctl.c yann@1819: new file mode 100644 yann@1819: index 0000000..4e146e3 yann@1819: --- /dev/null yann@1819: +++ b/libc/sysdeps/linux/avr32/prctl.c yann@1819: @@ -0,0 +1,36 @@ yann@1819: +/* yann@1819: + * prctl syscall for AVR32 Linux. yann@1819: + * yann@1819: + * Copyright (C) 2010 Atmel Corporation yann@1819: + * yann@1819: + * This file is subject to the terms and conditions of the GNU Lesser General yann@1819: + * Public License. See the file "COPYING.LIB" in the main directory of this yann@1819: + * archive for more details. yann@1819: + */ yann@1819: +#include yann@1819: +#include yann@1819: +#include yann@1819: + yann@1819: +#ifdef __NR_prctl yann@1819: +#define __NR___syscall_prctl __NR_prctl yann@1819: +static inline _syscall5(int, __syscall_prctl, int, option, long, arg2, yann@1819: + long, arg3, long, arg4, long, arg5); yann@1819: + yann@1819: +int prctl(int __option, ...) yann@1819: +{ yann@1819: + long arg2; yann@1819: + long arg3; yann@1819: + long arg4; yann@1819: + long arg5; yann@1819: + va_list ap; yann@1819: + yann@1819: + va_start(ap, __option); yann@1819: + arg2 = va_arg(ap, long); yann@1819: + arg3 = va_arg(ap, long); yann@1819: + arg4 = va_arg(ap, long); yann@1819: + arg5 = va_arg(ap, long); yann@1819: + va_end(ap); yann@1819: + yann@1819: + return INLINE_SYSCALL(prctl, 5, __option, arg2, arg3, arg4, arg5); yann@1819: +} yann@1819: +#endif yann@1819: -- yann@1819: 1.6.6.1 yann@1819: