| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- From 2b69e9906e5087a796b3a15e9aabcd102c705b19 Mon Sep 17 00:00:00 2001
- From: Hans-Christian Egtvedt <[email protected]>
- Date: Wed, 16 Dec 2009 12:16:08 +0000
- Subject: 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 <[email protected]>
- ---
- 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
- --- a/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
- --
- cgit v0.8.2.1
|