From: "Randy.Dunlap" <rddunlap@osdl.org>

- sys_brk() is used in a few places but does not yet live in syscalls.h
  or unistd.h.

- sys_mmap():  need to check on these

- sys_execve():  need to check/rationalize/sanitize

- still some sys_wait4() cleanups to be done



---

 25-akpm/arch/alpha/kernel/osf_sys.c     |    1 -
 25-akpm/arch/h8300/kernel/signal.c      |    3 +--
 25-akpm/arch/ia64/ia32/sys_ia32.c       |    6 +-----
 25-akpm/arch/m68k/kernel/signal.c       |    1 +
 25-akpm/arch/m68knommu/kernel/signal.c  |    3 +--
 25-akpm/arch/parisc/hpux/sys_hpux.c     |    2 --
 25-akpm/arch/sparc/kernel/sys_sparc.c   |    3 +--
 25-akpm/arch/sparc64/kernel/sys_sparc.c |    2 --
 25-akpm/arch/um/include/kern_util.h     |    1 -
 25-akpm/arch/um/kernel/sys_call_table.c |    3 ++-
 25-akpm/include/asm-alpha/unistd.h      |    4 ++++
 25-akpm/include/asm-arm/unistd.h        |   12 +++++++++---
 25-akpm/include/asm-arm26/unistd.h      |   12 +++++++++---
 25-akpm/include/asm-cris/unistd.h       |   15 +++++++++++++++
 25-akpm/include/asm-h8300/unistd.h      |    5 +++++
 25-akpm/include/asm-i386/unistd.h       |   10 ++++++++++
 25-akpm/include/asm-ia64/unistd.h       |   14 +++++++++++---
 25-akpm/include/asm-m68k/unistd.h       |    6 ++++++
 25-akpm/include/asm-m68knommu/unistd.h  |    4 ++++
 25-akpm/include/asm-mips/unistd.h       |   10 +++++++++-
 25-akpm/include/asm-parisc/unistd.h     |   10 +++++++++-
 25-akpm/include/asm-ppc/unistd.h        |   21 ++++++++++++++++++---
 25-akpm/include/asm-ppc64/unistd.h      |   18 +++++++++++++++---
 25-akpm/include/asm-s390/unistd.h       |    8 ++++++++
 25-akpm/include/asm-sh/unistd.h         |   21 +++++++++++++++++++++
 25-akpm/include/asm-sparc/unistd.h      |    6 +++++-
 25-akpm/include/asm-um/unistd.h         |    9 +++++++++
 25-akpm/include/asm-v850/unistd.h       |   11 ++++++++---
 25-akpm/include/asm-x86_64/unistd.h     |   14 +++++++++-----
 25-akpm/include/linux/sched.h           |    2 --
 25-akpm/include/linux/syscalls.h        |   20 +-------------------
 25-akpm/init/main.c                     |    2 ++
 25-akpm/kernel/kmod.c                   |    1 +
 33 files changed, 195 insertions(+), 65 deletions(-)

diff -puN arch/alpha/kernel/osf_sys.c~add-syscalls_h-6 arch/alpha/kernel/osf_sys.c
--- 25/arch/alpha/kernel/osf_sys.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/alpha/kernel/osf_sys.c	Thu Feb 19 15:16:37 2004
@@ -47,7 +47,6 @@
 #include <asm/processor.h>
 
 extern int do_pipe(int *);
-extern asmlinkage unsigned long sys_brk(unsigned long);
 
 /*
  * Brk needs to return an error.  Still support Linux's brk(0) query idiom,
diff -puN arch/h8300/kernel/signal.c~add-syscalls_h-6 arch/h8300/kernel/signal.c
--- 25/arch/h8300/kernel/signal.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/h8300/kernel/signal.c	Thu Feb 19 15:16:37 2004
@@ -28,6 +28,7 @@
 #include <linux/mm.h>
 #include <linux/kernel.h>
 #include <linux/signal.h>
+#include <linux/syscalls.h>
 #include <linux/errno.h>
 #include <linux/wait.h>
 #include <linux/ptrace.h>
@@ -46,8 +47,6 @@
 
 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 
-asmlinkage long sys_wait4(pid_t pid, unsigned int * stat_addr, int options,
-			struct rusage * ru);
 asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs);
 
 /*
diff -puN arch/ia64/ia32/sys_ia32.c~add-syscalls_h-6 arch/ia64/ia32/sys_ia32.c
--- 25/arch/ia64/ia32/sys_ia32.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/ia64/ia32/sys_ia32.c	Thu Feb 19 15:16:37 2004
@@ -56,6 +56,7 @@
 #include <asm/semaphore.h>
 #include <asm/types.h>
 #include <asm/uaccess.h>
+#include <asm/unistd.h>
 
 #include "ia32priv.h"
 
@@ -82,14 +83,9 @@
 #define high2lowuid(uid) ((uid) > 65535 ? 65534 : (uid))
 #define high2lowgid(gid) ((gid) > 65535 ? 65534 : (gid))
 
-extern asmlinkage long sys_execve (char *, char **, char **, struct pt_regs *);
 extern unsigned long arch_get_unmapped_area (struct file *, unsigned long, unsigned long,
 					     unsigned long, unsigned long);
 
-/* forward declaration: */
-asmlinkage long sys32_mprotect (unsigned int, unsigned int, int);
-asmlinkage unsigned long sys_brk(unsigned long);
-
 /*
  * Anything that modifies or inspects ia32 user virtual memory must hold this semaphore
  * while doing so.
diff -puN arch/m68k/kernel/signal.c~add-syscalls_h-6 arch/m68k/kernel/signal.c
--- 25/arch/m68k/kernel/signal.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/m68k/kernel/signal.c	Thu Feb 19 15:16:37 2004
@@ -32,6 +32,7 @@
 #include <linux/mm.h>
 #include <linux/kernel.h>
 #include <linux/signal.h>
+#include <linux/syscalls.h>
 #include <linux/errno.h>
 #include <linux/wait.h>
 #include <linux/ptrace.h>
diff -puN arch/m68knommu/kernel/signal.c~add-syscalls_h-6 arch/m68knommu/kernel/signal.c
--- 25/arch/m68knommu/kernel/signal.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/m68knommu/kernel/signal.c	Thu Feb 19 15:16:37 2004
@@ -32,6 +32,7 @@
 #include <linux/mm.h>
 #include <linux/kernel.h>
 #include <linux/signal.h>
+#include <linux/syscalls.h>
 #include <linux/errno.h>
 #include <linux/wait.h>
 #include <linux/ptrace.h>
@@ -50,8 +51,6 @@
 
 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
 
-asmlinkage long sys_wait4(pid_t pid, unsigned int * stat_addr, int options,
-			struct rusage * ru);
 asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs);
 
 /*
diff -puN arch/parisc/hpux/sys_hpux.c~add-syscalls_h-6 arch/parisc/hpux/sys_hpux.c
--- 25/arch/parisc/hpux/sys_hpux.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/parisc/hpux/sys_hpux.c	Thu Feb 19 15:16:37 2004
@@ -35,8 +35,6 @@
 #include <asm/pgalloc.h>
 #include <asm/uaccess.h>
 
-unsigned long sys_brk(unsigned long addr);
- 
 unsigned long hpux_brk(unsigned long addr)
 {
 	/* Sigh.  Looks like HP/UX libc relies on kernel bugs. */
diff -puN arch/sparc64/kernel/sys_sparc.c~add-syscalls_h-6 arch/sparc64/kernel/sys_sparc.c
--- 25/arch/sparc64/kernel/sys_sparc.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/sparc64/kernel/sys_sparc.c	Thu Feb 19 15:16:37 2004
@@ -162,8 +162,6 @@ unsigned long get_fb_unmapped_area(struc
 	return addr;
 }
 
-extern asmlinkage unsigned long sys_brk(unsigned long brk);
-
 asmlinkage unsigned long sparc_brk(unsigned long brk)
 {
 	/* People could try to be nasty and use ta 0x6d in 32bit programs */
diff -puN arch/sparc/kernel/sys_sparc.c~add-syscalls_h-6 arch/sparc/kernel/sys_sparc.c
--- 25/arch/sparc/kernel/sys_sparc.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/sparc/kernel/sys_sparc.c	Thu Feb 19 15:16:37 2004
@@ -16,6 +16,7 @@
 #include <linux/msg.h>
 #include <linux/shm.h>
 #include <linux/stat.h>
+#include <linux/syscalls.h>
 #include <linux/mman.h>
 #include <linux/utsname.h>
 #include <linux/smp.h>
@@ -78,8 +79,6 @@ unsigned long arch_get_unmapped_area(str
 	}
 }
 
-extern asmlinkage unsigned long sys_brk(unsigned long brk);
-
 asmlinkage unsigned long sparc_brk(unsigned long brk)
 {
 	if(ARCH_SUN4C_SUN4) {
diff -puN arch/um/include/kern_util.h~add-syscalls_h-6 arch/um/include/kern_util.h
--- 25/arch/um/include/kern_util.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/um/include/kern_util.h	Thu Feb 19 15:16:37 2004
@@ -45,7 +45,6 @@ extern int page_mask(void);
 extern int need_finish_fork(void);
 extern void free_stack(unsigned long stack, int order);
 extern void add_input_request(int op, void (*proc)(int), void *arg);
-extern int sys_execve(char *file, char **argv, char **env);
 extern char *current_cmd(void);
 extern void timer_handler(int sig, union uml_pt_regs *regs);
 extern int set_signals(int enable);
diff -puN arch/um/kernel/sys_call_table.c~add-syscalls_h-6 arch/um/kernel/sys_call_table.c
--- 25/arch/um/kernel/sys_call_table.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/arch/um/kernel/sys_call_table.c	Thu Feb 19 15:16:37 2004
@@ -8,6 +8,7 @@
 #include "linux/version.h"
 #include "linux/sys.h"
 #include "linux/swap.h"
+#include "linux/syscalls.h"
 #include "linux/sysctl.h"
 #include "asm/signal.h"
 #include "sysdep/syscalls.h"
@@ -268,9 +269,9 @@ syscall_handler_t *sys_call_table[] = {
 	[ __NR_creat ] = sys_creat,
 	[ __NR_link ] = sys_link,
 	[ __NR_unlink ] = sys_unlink,
+	[ __NR_execve ] = (syscall_handler_t *) sys_execve,
 
 	/* declared differently in kern_util.h */
-	[ __NR_execve ] = (syscall_handler_t *) sys_execve,
 	[ __NR_chdir ] = sys_chdir,
 	[ __NR_time ] = um_time,
 	[ __NR_mknod ] = sys_mknod,
diff -puN include/asm-alpha/unistd.h~add-syscalls_h-6 include/asm-alpha/unistd.h
--- 25/include/asm-alpha/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-alpha/unistd.h	Thu Feb 19 15:16:37 2004
@@ -600,6 +600,10 @@ static inline pid_t waitpid(int pid, int
 	return sys_wait4(pid, wait_stat, flags, NULL);
 }
 
+asmlinkage int sys_execve(char *ufilename, char **argv, char **envp,
+			unsigned long a3, unsigned long a4, unsigned long a5,
+			struct pt_regs regs);
+
 #endif /* __KERNEL_SYSCALLS__ */
 
 /*
diff -puN include/asm-arm26/unistd.h~add-syscalls_h-6 include/asm-arm26/unistd.h
--- 25/include/asm-arm26/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-arm26/unistd.h	Thu Feb 19 15:16:37 2004
@@ -14,7 +14,6 @@
 #define __ASM_ARM_UNISTD_H
 
 #include <linux/linkage.h>
-#include <linux/syscalls.h>
 
 #define __NR_SYSCALL_BASE	0x900000
 
@@ -378,8 +377,7 @@ type name(type1 arg1, type2 arg2, type3 
 
 #ifdef __KERNEL_SYSCALLS__
 
-struct rusage;
-asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru);
+#include <linux/syscalls.h>
 
 static inline long idle(void)
 {
@@ -452,6 +450,14 @@ static inline pid_t wait(int * wait_stat
 	return sys_wait4(-1, wait_stat, 0, NULL);
 }
 
+struct pt_regs;
+asmlinkage int sys_execve(char *filenamei, char **argv, char **envp,
+			struct pt_regs *regs);
+asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp,
+			struct pt_regs *regs);
+asmlinkage int sys_fork(struct pt_regs *regs);
+asmlinkage int sys_vfork(struct pt_regs *regs);
+
 /*
  * The following two can't be eliminated yet - they rely on
  * specific conditions.
diff -puN include/asm-arm/unistd.h~add-syscalls_h-6 include/asm-arm/unistd.h
--- 25/include/asm-arm/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-arm/unistd.h	Thu Feb 19 15:16:37 2004
@@ -14,7 +14,6 @@
 #define __ASM_ARM_UNISTD_H
 
 #include <linux/linkage.h>
-#include <linux/syscalls.h>
 
 #if defined(__thumb__)
 #define __NR_SYSCALL_BASE	0
@@ -451,8 +450,7 @@ type name(type1 arg1, type2 arg2, type3 
 
 #ifdef __KERNEL_SYSCALLS__
 
-struct rusage;
-asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru);
+#include <linux/syscalls.h>
 
 static inline pid_t setsid(void)
 {
@@ -499,6 +497,14 @@ static inline pid_t waitpid(pid_t pid, i
 	return sys_wait4((int)pid, wait_stat, options, NULL);
 }
 
+struct pt_regs;
+asmlinkage int sys_execve(char *filenamei, char **argv, char **envp,
+			struct pt_regs *regs);
+asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp,
+			struct pt_regs *regs);
+asmlinkage int sys_fork(struct pt_regs *regs);
+asmlinkage int sys_vfork(struct pt_regs *regs);
+
 /*
  * The following two can't be eliminated yet - they rely on
  * specific conditions.
diff -puN include/asm-cris/unistd.h~add-syscalls_h-6 include/asm-cris/unistd.h
--- 25/include/asm-cris/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-cris/unistd.h	Thu Feb 19 15:16:37 2004
@@ -305,6 +305,21 @@ extern inline _syscall3(int,execve,const
 extern inline _syscall3(int,open,const char *,file,int,flag,int,mode)
 extern inline _syscall1(int,close,int,fd)
 
+asmlinkage long sys_mmap2(
+			unsigned long addr, unsigned long len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+struct pt_regs;
+asmlinkage int sys_execve(const char *fname, char **argv, char **envp,
+			long r13, long mof, long srp, struct pt_regs *regs);
+asmlinkage int sys_clone(unsigned long newusp, unsigned long flags,
+			int* parent_tid, int* child_tid, long mof, long srp,
+			struct pt_regs *regs);
+asmlinkage int sys_fork(long r10, long r11, long r12, long r13,
+			long mof, long srp, struct pt_regs *regs);
+asmlinkage int sys_vfork(long r10, long r11, long r12, long r13,
+			long mof, long srp, struct pt_regs *regs);
+
 /*
  * Since we define it "external", it collides with the built-in
  * definition, which has the "noreturn" attribute and will cause
diff -puN include/asm-h8300/unistd.h~add-syscalls_h-6 include/asm-h8300/unistd.h
--- 25/include/asm-h8300/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-h8300/unistd.h	Thu Feb 19 15:16:37 2004
@@ -479,6 +479,11 @@ static inline pid_t wait(int * wait_stat
 {
 	return waitpid(-1,wait_stat,0);
 }
+asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+asmlinkage int sys_execve(char *name, char **argv, char **envp,
+			int dummy, ...);
 
 #endif
 
diff -puN include/asm-i386/unistd.h~add-syscalls_h-6 include/asm-i386/unistd.h
--- 25/include/asm-i386/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-i386/unistd.h	Thu Feb 19 15:16:37 2004
@@ -373,6 +373,8 @@ __syscall_return(type,__res); \
 
 #ifdef __KERNEL_SYSCALLS__
 
+#include <asm/ptrace.h>
+
 /*
  * we need this inline - forking from kernel space will result
  * in NO COPY ON WRITE (!!!), until an execve is executed. This
@@ -396,6 +398,14 @@ static inline _syscall1(int,close,int,fd
 static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 
 asmlinkage int sys_modify_ldt(int func, void __user *ptr, unsigned long bytecount);
+asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+asmlinkage int sys_execve(struct pt_regs regs);
+asmlinkage int sys_clone(struct pt_regs regs);
+asmlinkage int sys_fork(struct pt_regs regs);
+asmlinkage int sys_vfork(struct pt_regs regs);
+
 #endif
 
 /*
diff -puN include/asm-ia64/unistd.h~add-syscalls_h-6 include/asm-ia64/unistd.h
--- 25/include/asm-ia64/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-ia64/unistd.h	Thu Feb 19 15:16:37 2004
@@ -8,6 +8,7 @@
  *	David Mosberger-Tang <davidm@hpl.hp.com>
  */
 
+#include <linux/linkage.h>
 #include <asm/break.h>
 
 #define __BREAK_SYSCALL			__IA64_BREAK_SYSCALL
@@ -326,12 +327,19 @@ waitpid (int pid, int * wait_stat, int f
 extern int execve (const char *filename, char *const av[], char *const ep[]);
 extern pid_t clone (unsigned long flags, void *sp);
 
-extern asmlinkage unsigned long sys_mmap(
+#endif /* __KERNEL_SYSCALLS__ */
+
+asmlinkage unsigned long sys_mmap(
 				unsigned long addr, unsigned long len,
 				int prot, int flags,
 				int fd, long off);
-
-#endif /* __KERNEL_SYSCALLS__ */
+asmlinkage unsigned long sys_mmap2(
+				unsigned long addr, unsigned long len,
+				int prot, int flags,
+				int fd, long pgoff);
+struct pt_regs;
+asmlinkage long sys_execve(char *filename, char **argv, char **envp,
+				struct pt_regs *regs);
 
 /*
  * "Conditional" syscalls
diff -puN include/asm-m68knommu/unistd.h~add-syscalls_h-6 include/asm-m68knommu/unistd.h
--- 25/include/asm-m68knommu/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-m68knommu/unistd.h	Thu Feb 19 15:16:37 2004
@@ -406,6 +406,10 @@ static inline pid_t wait(int * wait_stat
 {
 	return waitpid(-1,wait_stat,0);
 }
+asmlinkage long sys_mmap2(unsigned long addr, unsigned long len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+asmlinkage int sys_execve(char *name, char **argv, char **envp);
 
 #endif
 
diff -puN include/asm-m68k/unistd.h~add-syscalls_h-6 include/asm-m68k/unistd.h
--- 25/include/asm-m68k/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-m68k/unistd.h	Thu Feb 19 15:16:37 2004
@@ -363,6 +363,12 @@ static inline _syscall1(int,close,int,fd
 static inline _syscall1(int,_exit,int,exitcode)
 static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 
+asmlinkage long sys_mmap2(
+			unsigned long addr, unsigned long len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+asmlinkage int sys_execve(char *name, char **argv, char **envp);
+
 #endif
 
 /*
diff -puN include/asm-mips/unistd.h~add-syscalls_h-6 include/asm-mips/unistd.h
--- 25/include/asm-mips/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-mips/unistd.h	Thu Feb 19 15:16:37 2004
@@ -1047,6 +1047,9 @@ type name (atype a,btype b,ctype c,dtype
 
 #ifdef __KERNEL_SYSCALLS__
 
+#include <asm/ptrace.h>
+#include <asm/sim.h>
+
 /*
  * we need this inline - forking from kernel space will result
  * in NO COPY ON WRITE (!!!), until an execve is executed. This
@@ -1075,10 +1078,15 @@ static inline pid_t waitpid(int pid, int
 	return wait4(pid, wait_stat, flags, NULL);
 }
 
-extern asmlinkage unsigned long sys_mmap(
+asmlinkage unsigned long sys_mmap(
 				unsigned long addr, size_t len,
 				int prot, int flags,
 				int fd, off_t offset);
+asmlinkage long sys_mmap2(
+			unsigned long addr, unsigned long len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs);
 
 #endif /* __KERNEL_SYSCALLS__ */
 #endif /* !__ASSEMBLY__ */
diff -puN include/asm-parisc/unistd.h~add-syscalls_h-6 include/asm-parisc/unistd.h
--- 25/include/asm-parisc/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-parisc/unistd.h	Thu Feb 19 15:16:37 2004
@@ -894,9 +894,17 @@ static inline pid_t waitpid(pid_t pid, i
 	return sys_wait4(pid, wait_stat, options, NULL);
 }
 
-extern asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len,
+asmlinkage unsigned long sys_mmap(unsigned long addr, unsigned long len,
 				unsigned long prot, unsigned long flags,
 				unsigned long fd, unsigned long offset);
+asmlinkage unsigned long sys_mmap2(unsigned long addr, unsigned long len,
+				unsigned long prot, unsigned long flags,
+				unsigned long fd, unsigned long pgoff);
+struct pt_regs;
+asmlinkage int sys_execve(struct pt_regs *regs);
+int sys_clone(unsigned long clone_flags, unsigned long usp,
+		struct pt_regs *regs);
+int sys_vfork(struct pt_regs *regs);
 
 #endif	/* __KERNEL_SYSCALLS__ */
 
diff -puN include/asm-ppc64/unistd.h~add-syscalls_h-6 include/asm-ppc64/unistd.h
--- 25/include/asm-ppc64/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-ppc64/unistd.h	Thu Feb 19 15:16:37 2004
@@ -410,9 +410,21 @@ extern pid_t waitpid(pid_t pid, int *wai
 #endif /* __KERNEL_SYSCALLS__ */
 
 asmlinkage unsigned long sys_mmap(unsigned long addr, size_t len,
-			      unsigned long prot, unsigned long flags,
-			      unsigned long fd, off_t offset);
-
+				unsigned long prot, unsigned long flags,
+				unsigned long fd, off_t offset);
+struct pt_regs;
+int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
+		unsigned long a3, unsigned long a4, unsigned long a5,
+		struct pt_regs *regs);
+int sys_clone(unsigned long clone_flags, unsigned long p2, unsigned long p3,
+		unsigned long p4, unsigned long p5, unsigned long p6,
+		struct pt_regs *regs);
+int sys_fork(unsigned long p1, unsigned long p2, unsigned long p3,
+		unsigned long p4, unsigned long p5, unsigned long p6,
+		struct pt_regs *regs);
+int sys_vfork(unsigned long p1, unsigned long p2, unsigned long p3,
+		unsigned long p4, unsigned long p5, unsigned long p6,
+		struct pt_regs *regs);
 
 /*
  * "Conditional" syscalls
diff -puN include/asm-ppc/unistd.h~add-syscalls_h-6 include/asm-ppc/unistd.h
--- 25/include/asm-ppc/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-ppc/unistd.h	Thu Feb 19 15:16:37 2004
@@ -390,9 +390,24 @@ extern int open(const char *file, int fl
 extern int close(int fd);
 extern pid_t waitpid(pid_t pid, int *wait_stat, int options);
 
-extern unsigned long sys_mmap(unsigned long addr, size_t len,
-				unsigned long prot, unsigned long flags,
-				unsigned long fd, off_t offset);
+unsigned long sys_mmap(unsigned long addr, size_t len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, off_t offset);
+unsigned long sys_mmap2(unsigned long addr, size_t len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+struct pt_regs;
+int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
+		unsigned long a3, unsigned long a4, unsigned long a5,
+		struct pt_regs *regs);
+int sys_clone(unsigned long clone_flags, unsigned long usp,
+	      int __user *parent_tidp, void __user *child_threadptr,
+	      int __user *child_tidp, int p6,
+	      struct pt_regs *regs);
+int sys_fork(int p1, int p2, int p3, int p4, int p5, int p6,
+		struct pt_regs *regs);
+int sys_vfork(int p1, int p2, int p3, int p4, int p5, int p6,
+		struct pt_regs *regs);
 
 #endif /* __KERNEL_SYSCALLS__ */
 
diff -puN include/asm-s390/unistd.h~add-syscalls_h-6 include/asm-s390/unistd.h
--- 25/include/asm-s390/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-s390/unistd.h	Thu Feb 19 15:16:37 2004
@@ -505,6 +505,7 @@ type name(type1 arg1, type2 arg2, type3 
 
 #ifdef __KERNEL_SYSCALLS__
 
+#include <asm/ptrace.h>
 #include <asm/stat.h>
 #include <linux/syscalls.h>
 
@@ -536,6 +537,13 @@ static inline pid_t waitpid(int pid, int
 {
 	return sys_wait4(pid, wait_stat, flags, NULL);
 }
+struct mmap_arg_struct;
+asmlinkage long sys_mmap2(struct mmap_arg_struct *arg);
+
+asmlinkage int sys_execve(struct pt_regs regs);
+asmlinkage int sys_clone(struct pt_regs regs);
+asmlinkage int sys_fork(struct pt_regs regs);
+asmlinkage int sys_vfork(struct pt_regs regs);
 
 #endif
 
diff -puN include/asm-sh/unistd.h~add-syscalls_h-6 include/asm-sh/unistd.h
--- 25/include/asm-sh/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-sh/unistd.h	Thu Feb 19 15:16:37 2004
@@ -402,6 +402,8 @@ __syscall_return(type,__sc0); \
 
 #ifdef __KERNEL_SYSCALLS__
 
+#include <asm/ptrace.h>
+
 /*
  * we need this inline - forking from kernel space will result
  * in NO COPY ON WRITE (!!!), until an execve is executed. This
@@ -433,6 +435,25 @@ static __inline__ pid_t wait(int * wait_
 {
 	return waitpid(-1,wait_stat,0);
 }
+
+asmlinkage long sys_mmap2(
+			unsigned long addr, unsigned long len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+asmlinkage int sys_execve(char *ufilename, char **uargv,
+			char **uenvp, unsigned long r7,
+			struct pt_regs regs);
+asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp,
+			unsigned long parent_tidptr,
+			unsigned long child_tidptr,
+			struct pt_regs regs);
+asmlinkage int sys_fork(unsigned long r4, unsigned long r5,
+			unsigned long r6, unsigned long r7,
+			struct pt_regs regs);
+asmlinkage int sys_vfork(unsigned long r4, unsigned long r5,
+			unsigned long r6, unsigned long r7,
+			struct pt_regs regs);
+
 #endif
 
 /*
diff -puN include/asm-sparc/unistd.h~add-syscalls_h-6 include/asm-sparc/unistd.h
--- 25/include/asm-sparc/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-sparc/unistd.h	Thu Feb 19 15:16:37 2004
@@ -450,10 +450,14 @@ static __inline__ _syscall1(int,close,in
 static __inline__ _syscall1(int,_exit,int,exitcode)
 static __inline__ _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
 
-extern asmlinkage unsigned long sys_mmap(
+asmlinkage unsigned long sys_mmap(
 				unsigned long addr, unsigned long len,
 				unsigned long prot, unsigned long flags,
 				unsigned long fd, unsigned long off);
+asmlinkage unsigned long sys_mmap2(
+				unsigned long addr, unsigned long len,
+				unsigned long prot, unsigned long flags,
+				unsigned long fd, unsigned long pgoff);
 
 #endif /* __KERNEL_SYSCALLS__ */
 
diff -puN include/asm-um/unistd.h~add-syscalls_h-6 include/asm-um/unistd.h
--- 25/include/asm-um/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-um/unistd.h	Thu Feb 19 15:16:37 2004
@@ -68,6 +68,15 @@ static inline int write(unsigned int fd,
 	KERNEL_CALL(int, sys_write, fd, buf, len)
 }
 
+long sys_mmap2(unsigned long addr, unsigned long len,
+		unsigned long prot, unsigned long flags,
+		unsigned long fd, unsigned long pgoff);
+int sys_execve(char *file, char **argv, char **env);
+long sys_clone(unsigned long clone_flags, unsigned long newsp,
+		int *parent_tid, int *child_tid);
+long sys_fork(void);
+long sys_vfork(void);
+
 #endif
 
 /* Save the value of __KERNEL_SYSCALLS__, undefine it, include the underlying
diff -puN include/asm-v850/unistd.h~add-syscalls_h-6 include/asm-v850/unistd.h
--- 25/include/asm-v850/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-v850/unistd.h	Thu Feb 19 15:16:37 2004
@@ -417,9 +417,14 @@ extern inline pid_t wait(int * wait_stat
 	return waitpid (-1, wait_stat, 0);
 }
 
-extern unsigned long sys_mmap(unsigned long addr, size_t len,
-				unsigned long prot, unsigned long flags,
-				unsigned long fd, off_t offset);
+unsigned long sys_mmap(unsigned long addr, size_t len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, off_t offset);
+unsigned long sys_mmap2(unsigned long addr, size_t len,
+			unsigned long prot, unsigned long flags,
+			unsigned long fd, unsigned long pgoff);
+struct pt_regs;
+int sys_execve (char *name, char **argv, char **envp, struct pt_regs *regs);
 
 #endif
 
diff -puN include/asm-x86_64/unistd.h~add-syscalls_h-6 include/asm-x86_64/unistd.h
--- 25/include/asm-x86_64/unistd.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/asm-x86_64/unistd.h	Thu Feb 19 15:16:37 2004
@@ -637,6 +637,7 @@ __syscall_return(type,__res); \
 #else /* __KERNEL_SYSCALLS__ */
 
 #include <linux/syscalls.h>
+#include <asm/ptrace.h>
 
 /*
  * we need this inline - forking from kernel space will result
@@ -690,11 +691,6 @@ static inline long close(unsigned int fd
 	return sys_close(fd);
 }
 
-static inline void exit(int error_code)
-{
-	sys_exit(error_code);
-}
-
 static inline pid_t waitpid(int pid, int * wait_stat, int flags)
 {
 	return sys_wait4(pid, wait_stat, flags, NULL);
@@ -706,6 +702,14 @@ extern long sys_mmap(unsigned long addr,
 
 extern int sys_modify_ldt(int func, void *ptr, unsigned long bytecount);
 
+asmlinkage long sys_execve(char *name, char **argv, char **envp,
+			struct pt_regs regs);
+asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp,
+			void *parent_tid, void *child_tid,
+			struct pt_regs regs);
+asmlinkage long sys_fork(struct pt_regs regs);
+asmlinkage long sys_vfork(struct pt_regs regs);
+
 #endif /* __KERNEL_SYSCALLS__ */
 
 #endif /* __NO_STUBS */
diff -puN include/linux/sched.h~add-syscalls_h-6 include/linux/sched.h
--- 25/include/linux/sched.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/linux/sched.h	Thu Feb 19 15:16:37 2004
@@ -710,8 +710,6 @@ extern void FASTCALL(wake_up_forked_proc
 extern void FASTCALL(sched_fork(task_t * p));
 extern void FASTCALL(sched_exit(task_t * p));
 
-asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru);
-
 extern int in_group_p(gid_t);
 extern int in_egroup_p(gid_t);
 
diff -puN include/linux/syscalls.h~add-syscalls_h-6 include/linux/syscalls.h
--- 25/include/linux/syscalls.h~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/include/linux/syscalls.h	Thu Feb 19 15:16:37 2004
@@ -66,9 +66,7 @@ asmlinkage long sys_times(struct tms __u
 
 asmlinkage long sys_gettid(void);
 asmlinkage long sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp);
-#if !defined(__alpha__) && !defined(__ia64__)
 asmlinkage unsigned long sys_alarm(unsigned int seconds);
-#endif
 asmlinkage long sys_getpid(void);
 asmlinkage long sys_getppid(void);
 asmlinkage long sys_getuid(void);
@@ -102,10 +100,8 @@ asmlinkage long sys_capset(cap_user_head
 asmlinkage long sys_personality(u_long personality);
 
 asmlinkage long sys_sigpending(old_sigset_t __user *set);
-#if !defined(__alpha__)
 asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set,
 				old_sigset_t __user *oset);
-#endif
 asmlinkage long sys_getitimer(int which, struct itimerval __user *value);
 asmlinkage long sys_setitimer(int which,
 				struct itimerval __user *value,
@@ -127,9 +123,7 @@ asmlinkage long sys_clock_nanosleep(cloc
 				const struct timespec __user *rqtp,
 				struct timespec __user *rmtp);
 
-#ifndef __alpha__
 asmlinkage long sys_nice(int increment);
-#endif
 asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
 					struct sched_param __user *param);
 asmlinkage long sys_sched_setparam(pid_t pid,
@@ -158,9 +152,7 @@ asmlinkage long sys_exit(int error_code)
 asmlinkage void sys_exit_group(int error_code);
 asmlinkage long sys_wait4(pid_t pid, unsigned int *stat_addr,
 				int options, struct rusage *ru);
-#if !defined(__alpha__) && !defined(__ia64__) && !defined(__arm__)
 asmlinkage long sys_waitpid(pid_t pid, unsigned int *stat_addr, int options);
-#endif
 asmlinkage long sys_set_tid_address(int __user *tidptr);
 asmlinkage long sys_futex(u32 __user *uaddr, int op, int val,
 			struct timespec __user *utime, u32 __user *uaddr2);
@@ -185,23 +177,14 @@ asmlinkage long sys_kill(int pid, int si
 asmlinkage long sys_tgkill(int tgid, int pid, int sig);
 asmlinkage long sys_tkill(int pid, int sig);
 asmlinkage long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo);
-#ifndef __sparc__
 asmlinkage long sys_rt_sigaction(int sig,
 				const struct sigaction __user *act,
 				struct sigaction __user *oact,
 				size_t sigsetsize);
-#endif
-#if !defined(__alpha__) && !defined(__ia64__) && !defined(__arm__)
 asmlinkage long sys_sgetmask(void);
 asmlinkage long sys_ssetmask(int newmask);
-#endif
-#if !defined(__alpha__) && !defined(__ia64__) && !defined(__mips__) && \
-    !defined(__arm__)
 asmlinkage unsigned long sys_signal(int sig, __sighandler_t handler);
-#endif
-#ifndef HAVE_ARCH_SYS_PAUSE
 asmlinkage long sys_pause(void);
-#endif
 
 asmlinkage long sys_sync(void);
 asmlinkage long sys_fsync(unsigned int fd);
@@ -258,6 +241,7 @@ asmlinkage long sys_removexattr(char __u
 asmlinkage long sys_lremovexattr(char __user *path, char __user *name);
 asmlinkage long sys_fremovexattr(int fd, char __user *name);
 
+asmlinkage unsigned long sys_brk(unsigned long brk);
 asmlinkage long sys_mprotect(unsigned long start, size_t len,
 				unsigned long prot);
 asmlinkage unsigned long sys_mremap(unsigned long addr,
@@ -348,11 +332,9 @@ asmlinkage long sys_utimes(char __user *
 				struct timeval __user *utimes);
 asmlinkage off_t sys_lseek(unsigned int fd, off_t offset,
 				unsigned int origin);
-#if !defined(__alpha__)
 asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high,
 			unsigned long offset_low, loff_t __user *result,
 			unsigned int origin);
-#endif
 asmlinkage ssize_t sys_read(unsigned int fd, char __user *buf,
 				size_t count);
 asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count);
diff -puN init/main.c~add-syscalls_h-6 init/main.c
--- 25/init/main.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/init/main.c	Thu Feb 19 15:16:37 2004
@@ -12,10 +12,12 @@
 #define __KERNEL_SYSCALLS__
 
 #include <linux/config.h>
+#include <linux/types.h>
 #include <linux/module.h>
 #include <linux/proc_fs.h>
 #include <linux/devfs_fs_kernel.h>
 #include <linux/kernel.h>
+#include <linux/syscalls.h>
 #include <linux/unistd.h>
 #include <linux/string.h>
 #include <linux/ctype.h>
diff -puN kernel/kmod.c~add-syscalls_h-6 kernel/kmod.c
--- 25/kernel/kmod.c~add-syscalls_h-6	Thu Feb 19 15:16:37 2004
+++ 25-akpm/kernel/kmod.c	Thu Feb 19 15:16:37 2004
@@ -23,6 +23,7 @@
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/sched.h>
+#include <linux/syscalls.h>
 #include <linux/unistd.h>
 #include <linux/kmod.h>
 #include <linux/smp_lock.h>

_