mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 15:02:32 +00:00
fix varargs handling of the prctl syscall
SVN-Revision: 19740
This commit is contained in:
parent
bd4f4a9204
commit
a49f5f7376
@ -0,0 +1,68 @@
|
|||||||
|
From 2b69e9906e5087a796b3a15e9aabcd102c705b19 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
|
||||||
|
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 <hans-christian.egtvedt@atmel.com>
|
||||||
|
---
|
||||||
|
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
|
Loading…
Reference in New Issue
Block a user