diff options
Diffstat (limited to 'arch/x86/kernel/sys_i386_32.c')
-rw-r--r-- | arch/x86/kernel/sys_i386_32.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/arch/x86/kernel/sys_i386_32.c b/arch/x86/kernel/sys_i386_32.c new file mode 100644 index 00000000..0b0cb5fe --- /dev/null +++ b/arch/x86/kernel/sys_i386_32.c @@ -0,0 +1,40 @@ +/* + * This file contains various random system calls that + * have a non-standard calling sequence on the Linux/i386 + * platform. + */ + +#include <linux/errno.h> +#include <linux/sched.h> +#include <linux/mm.h> +#include <linux/fs.h> +#include <linux/smp.h> +#include <linux/sem.h> +#include <linux/msg.h> +#include <linux/shm.h> +#include <linux/stat.h> +#include <linux/syscalls.h> +#include <linux/mman.h> +#include <linux/file.h> +#include <linux/utsname.h> +#include <linux/ipc.h> + +#include <linux/uaccess.h> +#include <linux/unistd.h> + +#include <asm/syscalls.h> + +/* + * Do a system call from kernel instead of calling sys_execve so we + * end up with proper pt_regs. + */ +int kernel_execve(const char *filename, + const char *const argv[], + const char *const envp[]) +{ + long __res; + asm volatile ("int $0x80" + : "=a" (__res) + : "0" (__NR_execve), "b" (filename), "c" (argv), "d" (envp) : "memory"); + return __res; +} |