Make do_execve() take a const filename pointer
[linux-3.10.git] / arch / x86 / kernel / sys_i386_32.c
1 /*
2  * This file contains various random system calls that
3  * have a non-standard calling sequence on the Linux/i386
4  * platform.
5  */
6
7 #include <linux/errno.h>
8 #include <linux/sched.h>
9 #include <linux/mm.h>
10 #include <linux/fs.h>
11 #include <linux/smp.h>
12 #include <linux/sem.h>
13 #include <linux/msg.h>
14 #include <linux/shm.h>
15 #include <linux/stat.h>
16 #include <linux/syscalls.h>
17 #include <linux/mman.h>
18 #include <linux/file.h>
19 #include <linux/utsname.h>
20 #include <linux/ipc.h>
21
22 #include <linux/uaccess.h>
23 #include <linux/unistd.h>
24
25 #include <asm/syscalls.h>
26
27 /*
28  * Do a system call from kernel instead of calling sys_execve so we
29  * end up with proper pt_regs.
30  */
31 int kernel_execve(const char *filename,
32                   const char *const argv[],
33                   const char *const envp[])
34 {
35         long __res;
36         asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx"
37         : "=a" (__res)
38         : "0" (__NR_execve), "ri" (filename), "c" (argv), "d" (envp) : "memory");
39         return __res;
40 }