diff options
author | Haavard Skinnemoen <hskinnemoen@atmel.com> | 2006-10-02 05:18:46 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 10:57:24 -0400 |
commit | c5f2420a063fcc5a4cd6610c3ef6934827853001 (patch) | |
tree | 2fe3b65e20ea176f23cdb6954d8c958d10e43c1d /arch/avr32 | |
parent | 135ab6ec8fdad6f61aabe53f456821baf4a4aa0e (diff) |
[PATCH] AVR32: Implement kernel_execve
Move execve() into arch/avr32/kernel/sys_avr32.c, rename it to
kernel_execve() and return the syscall return value directly without
setting errno.
This also gets rid of the __KERNEL_SYSCALLS__ stuff from unistd.h and
expands #ifdef __KERNEL__ to cover everything in unistd.h except the
__NR_foo definitions.
Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/avr32')
-rw-r--r-- | arch/avr32/kernel/sys_avr32.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/avr32/kernel/sys_avr32.c b/arch/avr32/kernel/sys_avr32.c index 6ec5693da448..8deb6003ee62 100644 --- a/arch/avr32/kernel/sys_avr32.c +++ b/arch/avr32/kernel/sys_avr32.c | |||
@@ -49,3 +49,17 @@ asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, | |||
49 | fput(file); | 49 | fput(file); |
50 | return error; | 50 | return error; |
51 | } | 51 | } |
52 | |||
53 | int kernel_execve(const char *file, char **argv, char **envp) | ||
54 | { | ||
55 | register long scno asm("r8") = __NR_execve; | ||
56 | register long sc1 asm("r12") = (long)file; | ||
57 | register long sc2 asm("r11") = (long)argv; | ||
58 | register long sc3 asm("r10") = (long)envp; | ||
59 | |||
60 | asm volatile("scall" | ||
61 | : "=r"(sc1) | ||
62 | : "r"(scno), "0"(sc1), "r"(sc2), "r"(sc3) | ||
63 | : "cc", "memory"); | ||
64 | return sc1; | ||
65 | } | ||