linux/arch/um/kernel/syscall.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
   3 * Licensed under the GPL
   4 */
   5
   6#include "linux/file.h"
   7#include "linux/fs.h"
   8#include "linux/mm.h"
   9#include "linux/sched.h"
  10#include "linux/utsname.h"
  11#include "linux/syscalls.h"
  12#include "asm/current.h"
  13#include "asm/mman.h"
  14#include "asm/uaccess.h"
  15#include "asm/unistd.h"
  16#include "internal.h"
  17
  18long sys_fork(void)
  19{
  20        long ret;
  21
  22        current->thread.forking = 1;
  23        ret = do_fork(SIGCHLD, UPT_SP(&current->thread.regs.regs),
  24                      &current->thread.regs, 0, NULL, NULL);
  25        current->thread.forking = 0;
  26        return ret;
  27}
  28
  29long sys_vfork(void)
  30{
  31        long ret;
  32
  33        current->thread.forking = 1;
  34        ret = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD,
  35                      UPT_SP(&current->thread.regs.regs),
  36                      &current->thread.regs, 0, NULL, NULL);
  37        current->thread.forking = 0;
  38        return ret;
  39}
  40
  41long old_mmap(unsigned long addr, unsigned long len,
  42              unsigned long prot, unsigned long flags,
  43              unsigned long fd, unsigned long offset)
  44{
  45        long err = -EINVAL;
  46        if (offset & ~PAGE_MASK)
  47                goto out;
  48
  49        err = sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT);
  50 out:
  51        return err;
  52}
  53
  54int kernel_execve(const char *filename,
  55                  const char *const argv[],
  56                  const char *const envp[])
  57{
  58        mm_segment_t fs;
  59        int ret;
  60
  61        fs = get_fs();
  62        set_fs(KERNEL_DS);
  63        ret = um_execve(filename, (const char __user *const __user *)argv,
  64                        (const char __user *const __user *) envp);
  65        set_fs(fs);
  66
  67        return ret;
  68}
  69