From b083bb57f5cae6b1fa3fd756a2720a3de806da2b Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Thu, 26 May 2011 02:46:41 +0200 Subject: [PATCH] libc: Fix prctl() declaration. This change fixes the prctl() declaration to match GLibc, and allow us to build gcc-4.6 for Android (among other things). Note that this does not change the source and binary interfaces. Change-Id: I3900c957f0da8b3548cbe9da8c41d50099dc19d6 --- libc/SYSCALLS.TXT | 2 ++ libc/include/sys/prctl.h | 9 +++++++-- libc/include/unistd.h | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libc/SYSCALLS.TXT b/libc/SYSCALLS.TXT index 5653c3cad..356f69b2c 100644 --- a/libc/SYSCALLS.TXT +++ b/libc/SYSCALLS.TXT @@ -76,6 +76,8 @@ int setpgid(pid_t, pid_t) 57 pid_t vfork(void) 190,-1,190 int setregid:setregid32(gid_t, gid_t) 204 int chroot(const char *) 61 +# IMPORTANT: Even though declares prctl(int,...), the syscall stub must take 6 arguments +# to match the kernel implementation. int prctl(int option, unsigned int arg2, unsigned int arg3, unsigned int arg4, unsigned int arg5) 172 int capget(cap_user_header_t header, cap_user_data_t data) 184 int capset(cap_user_header_t header, const cap_user_data_t data) 185 diff --git a/libc/include/sys/prctl.h b/libc/include/sys/prctl.h index ce85bf7e0..359d684f3 100644 --- a/libc/include/sys/prctl.h +++ b/libc/include/sys/prctl.h @@ -32,8 +32,13 @@ __BEGIN_DECLS -extern int prctl(int option, unsigned long arg2, unsigned long arg3 , unsigned - long arg4, unsigned long arg5); +/* IMPORTANT NOTE: This function is declared as taking a variable number + * of arguments to match the GLibc definition. However + * its declaration inside SYSCALLS.TXT *must* make it + * take 6 arguments to ensure consistency with the kernel + * implementation. + */ +extern int prctl(int option, ...); __END_DECLS diff --git a/libc/include/unistd.h b/libc/include/unistd.h index 4534fb9c1..d92549fb3 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -70,8 +70,9 @@ extern int execlp(const char *, const char *, ...); extern int execle(const char *, const char *, ...); extern int capget(cap_user_header_t hdrp, cap_user_data_t datap); extern int capset(cap_user_header_t hdrp, const cap_user_data_t datap); -extern int prctl(int option, unsigned long arg2, unsigned long arg3, - unsigned long arg4, unsigned long arg5); + +/* IMPORTANT: See comment under about this declaration */ +extern int prctl(int option, ...); extern int nice(int);