Commit 3db03b4a authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Linus Torvalds

[PATCH] rename the provided execve functions to kernel_execve

Some architectures provide an execve function that does not set errno, but
instead returns the result code directly.  Rename these to kernel_execve to
get the right semantics there.  Moreover, there is no reasone for any of these
architectures to still provide __KERNEL_SYSCALLS__ or _syscallN macros, so
remove these right away.

[akpm@osdl.org: build fix]
[bunk@stusta.de: build fix]
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Cc: Andi Kleen <ak@muc.de>
Acked-by: default avatarPaul Mackerras <paulus@samba.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Ian Molton <spyro@f2s.com>
Cc: Mikael Starvik <starvik@axis.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Hirokazu Takata <takata.hirokazu@renesas.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Kyle McMartin <kyle@mcmartin.ca>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: Kazumoto Kojima <kkojima@rr.iij4u.or.jp>
Cc: Richard Curnow <rc@rc0.org.uk>
Cc: William Lee Irwin III <wli@holomorphy.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Miles Bader <uclinux-v850@lsi.nec.co.jp>
Cc: Chris Zankel <chris@zankel.net>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 67608567
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/vga.h> #include <asm/vga.h>
#define __KERNEL_SYSCALLS__
#include <asm/unistd.h> #include <asm/unistd.h>
extern struct hwrpb_struct *hwrpb; extern struct hwrpb_struct *hwrpb;
...@@ -116,7 +115,7 @@ EXPORT_SYMBOL(sys_dup); ...@@ -116,7 +115,7 @@ EXPORT_SYMBOL(sys_dup);
EXPORT_SYMBOL(sys_exit); EXPORT_SYMBOL(sys_exit);
EXPORT_SYMBOL(sys_write); EXPORT_SYMBOL(sys_write);
EXPORT_SYMBOL(sys_lseek); EXPORT_SYMBOL(sys_lseek);
EXPORT_SYMBOL(execve); EXPORT_SYMBOL(kernel_execve);
EXPORT_SYMBOL(sys_setsid); EXPORT_SYMBOL(sys_setsid);
EXPORT_SYMBOL(sys_wait4); EXPORT_SYMBOL(sys_wait4);
......
...@@ -655,12 +655,12 @@ kernel_thread: ...@@ -655,12 +655,12 @@ kernel_thread:
.end kernel_thread .end kernel_thread
/* /*
* execve(path, argv, envp) * kernel_execve(path, argv, envp)
*/ */
.align 4 .align 4
.globl execve .globl kernel_execve
.ent execve .ent kernel_execve
execve: kernel_execve:
/* We can be called from a module. */ /* We can be called from a module. */
ldgp $gp, 0($27) ldgp $gp, 0($27)
lda $sp, -(32+SIZEOF_PT_REGS+8)($sp) lda $sp, -(32+SIZEOF_PT_REGS+8)($sp)
...@@ -704,7 +704,7 @@ execve: ...@@ -704,7 +704,7 @@ execve:
1: lda $sp, 32+SIZEOF_PT_REGS+8($sp) 1: lda $sp, 32+SIZEOF_PT_REGS+8($sp)
ret ret
.end execve .end kernel_execve
/* /*
......
...@@ -279,7 +279,7 @@ out: ...@@ -279,7 +279,7 @@ out:
return error; return error;
} }
long execve(const char *filename, char **argv, char **envp) int kernel_execve(const char *filename, char *const argv[], char *const envp[])
{ {
struct pt_regs regs; struct pt_regs regs;
int ret; int ret;
...@@ -317,7 +317,7 @@ long execve(const char *filename, char **argv, char **envp) ...@@ -317,7 +317,7 @@ long execve(const char *filename, char **argv, char **envp)
out: out:
return ret; return ret;
} }
EXPORT_SYMBOL(execve); EXPORT_SYMBOL(kernel_execve);
/* /*
* Since loff_t is a 64 bit type we avoid a lot of ABI hastle * Since loff_t is a 64 bit type we avoid a lot of ABI hastle
......
...@@ -283,7 +283,7 @@ out: ...@@ -283,7 +283,7 @@ out:
} }
/* FIXME - see if this is correct for arm26 */ /* FIXME - see if this is correct for arm26 */
long execve(const char *filename, char **argv, char **envp) int kernel_execve(const char *filename, char *const argv[], char *const envp[])
{ {
struct pt_regs regs; struct pt_regs regs;
int ret; int ret;
...@@ -320,4 +320,4 @@ long execve(const char *filename, char **argv, char **envp) ...@@ -320,4 +320,4 @@ long execve(const char *filename, char **argv, char **envp)
return ret; return ret;
} }
EXPORT_SYMBOL(execve); EXPORT_SYMBOL(kernel_execve);
...@@ -492,11 +492,11 @@ GLOBAL_ENTRY(prefetch_stack) ...@@ -492,11 +492,11 @@ GLOBAL_ENTRY(prefetch_stack)
br.ret.sptk.many rp br.ret.sptk.many rp
END(prefetch_stack) END(prefetch_stack)
GLOBAL_ENTRY(execve) GLOBAL_ENTRY(kernel_execve)
mov r15=__NR_execve // put syscall number in place mov r15=__NR_execve // put syscall number in place
break __BREAK_SYSCALL break __BREAK_SYSCALL
br.ret.sptk.many rp br.ret.sptk.many rp
END(execve) END(kernel_execve)
GLOBAL_ENTRY(clone) GLOBAL_ENTRY(clone)
mov r15=__NR_clone // put syscall number in place mov r15=__NR_clone // put syscall number in place
......
...@@ -368,7 +368,14 @@ out: ...@@ -368,7 +368,14 @@ out:
return error; return error;
} }
unsigned long extern int __execve(const char *filename, char *const argv[],
char *const envp[], struct task_struct *task);
int kernel_execve(const char *filename, char *const argv[], char *const envp[])
{
return __execve(filename, argv, envp, current);
}
unsigned long
get_wchan(struct task_struct *p) get_wchan(struct task_struct *p)
{ {
struct unwind_frame_info info; struct unwind_frame_info info;
......
...@@ -843,7 +843,7 @@ _GLOBAL(kernel_thread) ...@@ -843,7 +843,7 @@ _GLOBAL(kernel_thread)
addi r1,r1,16 addi r1,r1,16
blr blr
_GLOBAL(execve) _GLOBAL(kernel_execve)
li r0,__NR_execve li r0,__NR_execve
sc sc
bnslr bnslr
......
...@@ -556,7 +556,7 @@ _GLOBAL(giveup_altivec) ...@@ -556,7 +556,7 @@ _GLOBAL(giveup_altivec)
#endif /* CONFIG_ALTIVEC */ #endif /* CONFIG_ALTIVEC */
_GLOBAL(execve) _GLOBAL(kernel_execve)
li r0,__NR_execve li r0,__NR_execve
sc sc
bnslr bnslr
......
...@@ -164,3 +164,16 @@ int next_syscall_index(int limit) ...@@ -164,3 +164,16 @@ int next_syscall_index(int limit)
spin_unlock(&syscall_lock); spin_unlock(&syscall_lock);
return(ret); return(ret);
} }
int kernel_execve(const char *filename, char *const argv[], char *const envp[])
{
mm_segment_t fs;
int ret;
fs = get_fs();
set_fs(KERNEL_DS);
ret = um_execve(filename, argv, envp);
set_fs(fs);
return ret;
}
...@@ -1023,7 +1023,7 @@ ENDPROC(child_rip) ...@@ -1023,7 +1023,7 @@ ENDPROC(child_rip)
* do_sys_execve asm fallback arguments: * do_sys_execve asm fallback arguments:
* rdi: name, rsi: argv, rdx: envp, fake frame on the stack * rdi: name, rsi: argv, rdx: envp, fake frame on the stack
*/ */
ENTRY(execve) ENTRY(kernel_execve)
CFI_STARTPROC CFI_STARTPROC
FAKE_STACK_FRAME $0 FAKE_STACK_FRAME $0
SAVE_ALL SAVE_ALL
...@@ -1036,7 +1036,7 @@ ENTRY(execve) ...@@ -1036,7 +1036,7 @@ ENTRY(execve)
UNFAKE_STACK_FRAME UNFAKE_STACK_FRAME
ret ret
CFI_ENDPROC CFI_ENDPROC
ENDPROC(execve) ENDPROC(kernel_execve)
KPROBE_ENTRY(page_fault) KPROBE_ENTRY(page_fault)
errorentry do_page_fault errorentry do_page_fault
......
...@@ -4,9 +4,6 @@ ...@@ -4,9 +4,6 @@
* Copyright (C) 2001 David S. Miller (davem@redhat.com) * Copyright (C) 2001 David S. Miller (davem@redhat.com)
*/ */
#define __KERNEL_SYSCALLS__
static int errno;
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/sched.h> #include <linux/sched.h>
...@@ -200,7 +197,7 @@ static void do_envctrl_shutdown(struct bbc_cpu_temperature *tp) ...@@ -200,7 +197,7 @@ static void do_envctrl_shutdown(struct bbc_cpu_temperature *tp)
printk(KERN_CRIT "kenvctrld: Shutting down the system now.\n"); printk(KERN_CRIT "kenvctrld: Shutting down the system now.\n");
shutting_down = 1; shutting_down = 1;
if (execve("/sbin/shutdown", argv, envp) < 0) if (kernel_execve("/sbin/shutdown", argv, envp) < 0)
printk(KERN_CRIT "envctrl: shutdown execution failed\n"); printk(KERN_CRIT "envctrl: shutdown execution failed\n");
} }
......
...@@ -19,9 +19,6 @@ ...@@ -19,9 +19,6 @@
* Daniele Bellucci <bellucda@tiscali.it> * Daniele Bellucci <bellucda@tiscali.it>
*/ */
#define __KERNEL_SYSCALLS__
static int errno;
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/kthread.h> #include <linux/kthread.h>
...@@ -976,13 +973,15 @@ static void envctrl_do_shutdown(void) ...@@ -976,13 +973,15 @@ static void envctrl_do_shutdown(void)
"HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
char *argv[] = { char *argv[] = {
"/sbin/shutdown", "-h", "now", NULL }; "/sbin/shutdown", "-h", "now", NULL };
int ret;
if (inprog != 0) if (inprog != 0)
return; return;
inprog = 1; inprog = 1;
printk(KERN_CRIT "kenvctrld: WARNING: Shutting down the system now.\n"); printk(KERN_CRIT "kenvctrld: WARNING: Shutting down the system now.\n");
if (0 > execve("/sbin/shutdown", argv, envp)) { ret = kernel_execve("/sbin/shutdown", argv, envp);
if (ret < 0) {
printk(KERN_CRIT "kenvctrld: WARNING: system shutdown failed!\n"); printk(KERN_CRIT "kenvctrld: WARNING: system shutdown failed!\n");
inprog = 0; /* unlikely to succeed, but we could try again */ inprog = 0; /* unlikely to succeed, but we could try again */
} }
......
...@@ -580,75 +580,6 @@ type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6)\ ...@@ -580,75 +580,6 @@ type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6)\
#define __ARCH_WANT_SYS_OLDUMOUNT #define __ARCH_WANT_SYS_OLDUMOUNT
#define __ARCH_WANT_SYS_SIGPENDING #define __ARCH_WANT_SYS_SIGPENDING
#ifdef __KERNEL_SYSCALLS__
#include <linux/compiler.h>
#include <linux/types.h>
#include <linux/string.h>
#include <linux/signal.h>
#include <linux/syscalls.h>
#include <asm/ptrace.h>
static inline long open(const char * name, int mode, int flags)
{
return sys_open(name, mode, flags);
}
static inline long dup(int fd)
{
return sys_dup(fd);
}
static inline long close(int fd)
{
return sys_close(fd);
}
static inline off_t lseek(int fd, off_t off, int whence)
{
return sys_lseek(fd, off, whence);
}
static inline void _exit(int value)
{
sys_exit(value);
}
#define exit(x) _exit(x)
static inline long write(int fd, const char * buf, size_t nr)
{
return sys_write(fd, buf, nr);
}
static inline long read(int fd, char * buf, size_t nr)
{
return sys_read(fd, buf, nr);
}
extern int execve(char *, char **, char **);
static inline long setsid(void)
{
return sys_setsid();
}
static inline pid_t waitpid(int pid, int * wait_stat, int flags)
{
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);
asmlinkage long sys_rt_sigaction(int sig,
const struct sigaction __user *act,
struct sigaction __user *oact,
size_t sigsetsize,
void *restorer);
#endif /* __KERNEL_SYSCALLS__ */
/* "Conditional" syscalls. What we want is /* "Conditional" syscalls. What we want is
__attribute__((weak,alias("sys_ni_syscall"))) __attribute__((weak,alias("sys_ni_syscall")))
......
...@@ -549,30 +549,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6 ...@@ -549,30 +549,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6
#define __ARCH_WANT_SYS_SOCKETCALL #define __ARCH_WANT_SYS_SOCKETCALL
#endif #endif
#ifdef __KERNEL_SYSCALLS__
#include <linux/compiler.h>
#include <linux/types.h>
#include <linux/syscalls.h>
extern long execve(const char *file, char **argv, char **envp);
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);
asmlinkage int sys_pipe(unsigned long *fildes);
struct sigaction;
asmlinkage long sys_rt_sigaction(int sig,
const struct sigaction __user *act,
struct sigaction __user *oact,
size_t sigsetsize);
#endif /* __KERNEL_SYSCALLS__ */
/* /*
* "Conditional" syscalls * "Conditional" syscalls
* *
......
...@@ -464,30 +464,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6 ...@@ -464,30 +464,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6
#define __ARCH_WANT_SYS_SIGPROCMASK #define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_RT_SIGACTION #define __ARCH_WANT_SYS_RT_SIGACTION
#ifdef __KERNEL_SYSCALLS__
#include <linux/compiler.h>
#include <linux/types.h>
#include <linux/syscalls.h>
extern long execve(const char *file, char **argv, char **envp);
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);
asmlinkage int sys_pipe(unsigned long *fildes);
struct sigaction;
asmlinkage long sys_rt_sigaction(int sig,
const struct sigaction __user *act,
struct sigaction __user *oact,
size_t sigsetsize);
#endif /* __KERNEL_SYSCALLS__ */
/* /*
* "Conditional" syscalls * "Conditional" syscalls
* *
......
...@@ -319,78 +319,6 @@ ...@@ -319,78 +319,6 @@
extern long __ia64_syscall (long a0, long a1, long a2, long a3, long a4, long nr); extern long __ia64_syscall (long a0, long a1, long a2, long a3, long a4, long nr);
#ifdef __KERNEL_SYSCALLS__
#include <linux/compiler.h>
#include <linux/string.h>
#include <linux/signal.h>
#include <asm/ptrace.h>
#include <linux/stringify.h>
#include <linux/syscalls.h>
static inline long
open (const char * name, int mode, int flags)
{
return sys_open(name, mode, flags);
}
static inline long
dup (int fd)
{
return sys_dup(fd);
}
static inline long
close (int fd)
{
return sys_close(fd);
}
static inline off_t
lseek (int fd, off_t off, int whence)
{
return sys_lseek(fd, off, whence);
}
static inline void
_exit (int value)
{
sys_exit(value);
}
#define exit(x) _exit(x)
static inline long
write (int fd, const char * buf, size_t nr)
{
return sys_write(fd, buf, nr);
}
static inline long
read (int fd, char * buf, size_t nr)
{
return sys_read(fd, buf, nr);
}
static inline long
setsid (void)
{
return sys_setsid();
}
static inline pid_t
waitpid (int pid, int * wait_stat, int flags)
{
return sys_wait4(pid, wait_stat, flags, NULL);
}
extern int execve (const char *filename, char *const av[], char *const ep[]);
extern pid_t clone (unsigned long flags, void *sp);
#endif /* __KERNEL_SYSCALLS__ */
asmlinkage unsigned long sys_mmap( asmlinkage unsigned long sys_mmap(
unsigned long addr, unsigned long len, unsigned long addr, unsigned long len,
int prot, int flags, int prot, int flags,
......
...@@ -952,92 +952,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ ...@@ -952,92 +952,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
#define __ARCH_WANT_SYS_SIGPROCMASK #define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_RT_SIGACTION #define __ARCH_WANT_SYS_RT_SIGACTION
/* mmap & mmap2 take 6 arguments */
#define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \
type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) \
{ \
return K_INLINE_SYSCALL(name, 6, arg1, arg2, arg3, arg4, arg5, arg6); \
}
#ifdef __KERNEL_SYSCALLS__
#include <asm/current.h>
#include <linux/compiler.h>
#include <linux/types.h>
#include <linux/syscalls.h>
static inline pid_t setsid(void)
{
return sys_setsid();
}
static inline int write(int fd, const char *buf, off_t count)
{
return sys_write(fd, buf, count);
}
static inline int read(int fd, char *buf, off_t count)
{
return sys_read(fd, buf, count);
}
static inline off_t lseek(int fd, off_t offset, int count)
{
return sys_lseek(fd, offset, count);
}
static inline int dup(int fd)
{
return sys_dup(fd);
}
static inline int execve(char *filename, char * argv [],
char * envp[])
{
extern int __execve(char *, char **, char **, struct task_struct *);
return __execve(filename, argv, envp, current);
}
static inline int open(const char *file, int flag, int mode)
{
return sys_open(file, flag, mode);
}
static inline int close(int fd)
{
return sys_close(fd);
}
static inline void _exit(int exitcode)
{
sys_exit(exitcode);
}
static inline pid_t waitpid(pid_t pid, int *wait_stat, int options)
{
return sys_wait4(pid, wait_stat, options, NULL);
}
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);
int sys_pipe(int *fildes);
struct sigaction;
asmlinkage long sys_rt_sigaction(int sig,
const struct sigaction __user *act,
struct sigaction __user *oact,
size_t sigsetsize);
#endif /* __KERNEL_SYSCALLS__ */
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#undef STR #undef STR
......
...@@ -478,13 +478,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6 ...@@ -478,13 +478,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6
#define __ARCH_WANT_SYS_NEWFSTATAT #define __ARCH_WANT_SYS_NEWFSTATAT
#endif #endif
/*
* System call prototypes.
*/
#ifdef __KERNEL_SYSCALLS__
extern int execve(const char *file, char **argv, char **envp);
#endif /* __KERNEL_SYSCALLS__ */
/* /*
* "Conditional" syscalls * "Conditional" syscalls
* *
......
...@@ -37,34 +37,6 @@ extern int um_execve(const char *file, char *const argv[], char *const env[]); ...@@ -37,34 +37,6 @@ extern int um_execve(const char *file, char *const argv[], char *const env[]);
#define __ARCH_WANT_SYS_RT_SIGSUSPEND #define __ARCH_WANT_SYS_RT_SIGSUSPEND
#endif #endif
#ifdef __KERNEL_SYSCALLS__
#include <linux/compiler.h>
#include <linux/types.h>
static inline int execve(const char *filename, char *const argv[],
char *const envp[])
{
mm_segment_t fs;
int ret;
fs = get_fs();
set_fs(KERNEL_DS);
ret = um_execve(filename, argv, envp);
set_fs(fs);
if (ret >= 0)
return ret;
errno = -(long)ret;
return -1;
}
int sys_execve(char *file, char **argv, char **env);
#endif /* __KERNEL_SYSCALLS__ */
#undef __KERNEL_SYSCALLS__
#include "asm/arch/unistd.h" #include "asm/arch/unistd.h"
#endif /* _UM_UNISTD_H_*/ #endif /* _UM_UNISTD_H_*/
...@@ -620,10 +620,11 @@ __SYSCALL(__NR_vmsplice, sys_vmsplice) ...@@ -620,10 +620,11 @@ __SYSCALL(__NR_vmsplice, sys_vmsplice)
#define __NR_move_pages 279 #define __NR_move_pages 279
__SYSCALL(__NR_move_pages, sys_move_pages) __SYSCALL(__NR_move_pages, sys_move_pages)
#ifdef __KERNEL__
#define __NR_syscall_max __NR_move_pages #define __NR_syscall_max __NR_move_pages
#ifdef __KERNEL__
#include <linux/err.h> #include <linux/err.h>
#endif
#ifndef __NO_STUBS #ifndef __NO_STUBS
...@@ -663,8 +664,6 @@ do { \ ...@@ -663,8 +664,6 @@ do { \
#define __ARCH_WANT_SYS_TIME #define __ARCH_WANT_SYS_TIME
#define __ARCH_WANT_COMPAT_SYS_TIME #define __ARCH_WANT_COMPAT_SYS_TIME
#ifndef __KERNEL_SYSCALLS__
#define __syscall "syscall" #define __syscall "syscall"
#define _syscall0(type,name) \ #define _syscall0(type,name) \
...@@ -746,83 +745,7 @@ __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; movq %7,%%r9 ; " __syscall \ ...@@ -746,83 +745,7 @@ __asm__ volatile ("movq %5,%%r10 ; movq %6,%%r8 ; movq %7,%%r9 ; " __syscall \
__syscall_return(type,__res); \ __syscall_return(type,__res); \
} }
#else /* __KERNEL_SYSCALLS__ */ #ifdef __KERNEL__
#include <linux/syscalls.h>
#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
* is no problem, but for the stack. This is handled by not letting
* main() use the stack at all after fork(). Thus, no function
* calls - which means inline code for fork too, as otherwise we
* would use the stack upon exit from 'fork()'.
*
* Actually only pause and fork are needed inline, so that there
* won't be any messing with the stack from main(), but we define
* some others too.
*/
#define __NR__exit __NR_exit
static inline pid_t setsid(void)
{
return sys_setsid();
}
static inline ssize_t write(unsigned int fd, char * buf, size_t count)
{
return sys_write(fd, buf, count);
}
static inline ssize_t read(unsigned int fd, char * buf, size_t count)
{
return sys_read(fd, buf, count);
}
static inline off_t lseek(unsigned int fd, off_t offset, unsigned int origin)
{
return sys_lseek(fd, offset, origin);
}
static inline long dup(unsigned int fd)
{
return sys_dup(fd);
}
/* implemented in asm in arch/x86_64/kernel/entry.S */
extern int execve(const char *, char * const *, char * const *);
static inline long open(const char * filename, int flags, int mode)
{
return sys_open(filename, flags, mode);
}
static inline long close(unsigned int fd)
{
return sys_close(fd);
}
static inline pid_t waitpid(int pid, int * wait_stat, int flags)
{
return sys_wait4(pid, wait_stat, flags, NULL);
}
extern long sys_mmap(unsigned long addr, unsigned long len,
unsigned long prot, unsigned long flags,
unsigned long fd, unsigned long off);
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);
asmlinkage long sys_pipe(int *fildes);
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <linux/linkage.h> #include <linux/linkage.h>
...@@ -839,8 +762,8 @@ asmlinkage long sys_rt_sigaction(int sig, ...@@ -839,8 +762,8 @@ asmlinkage long sys_rt_sigaction(int sig,
size_t sigsetsize); size_t sigsetsize);
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#endif /* __KERNEL__ */
#endif /* __KERNEL_SYSCALLS__ */ #endif /* __NO_STUBS */
/* /*
* "Conditional" syscalls * "Conditional" syscalls
...@@ -850,8 +773,4 @@ asmlinkage long sys_rt_sigaction(int sig, ...@@ -850,8 +773,4 @@ asmlinkage long sys_rt_sigaction(int sig,
*/ */
#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall") #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall")
#endif /* __NO_STUBS */
#endif /* __KERNEL__ */
#endif /* _ASM_X86_64_UNISTD_H_ */ #endif /* _ASM_X86_64_UNISTD_H_ */
...@@ -599,4 +599,6 @@ asmlinkage long sys_set_robust_list(struct robust_list_head __user *head, ...@@ -599,4 +599,6 @@ asmlinkage long sys_set_robust_list(struct robust_list_head __user *head,
size_t len); size_t len);
asmlinkage long sys_getcpu(unsigned __user *cpu, unsigned __user *node, struct getcpu_cache __user *cache); asmlinkage long sys_getcpu(unsigned __user *cpu, unsigned __user *node, struct getcpu_cache __user *cache);
int kernel_execve(const char *filename, char *const argv[], char *const envp[]);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment