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