aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 8b20ab7d3aa2..27a337549dab 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1645,6 +1645,49 @@ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
1645} 1645}
1646#endif 1646#endif
1647 1647
1648#ifdef __ARCH_WANT_SYS_FORK
1649SYSCALL_DEFINE0(fork)
1650{
1651#ifdef CONFIG_MMU
1652 return do_fork(SIGCHLD, 0, current_pt_regs(), 0, NULL, NULL);
1653#else
1654 /* can not support in nommu mode */
1655 return(-EINVAL);
1656#endif
1657}
1658#endif
1659
1660#ifdef __ARCH_WANT_SYS_VFORK
1661SYSCALL_DEFINE0(vfork)
1662{
1663 return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 0, current_pt_regs(),
1664 0, NULL, NULL);
1665}
1666#endif
1667
1668#ifdef __ARCH_WANT_SYS_CLONE
1669#ifdef CONFIG_CLONE_BACKWARDS
1670SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
1671 int __user *, parent_tidptr,
1672 int, tls_val,
1673 int __user *, child_tidptr)
1674#elif defined(CONFIG_CLONE_BACKWARDS2)
1675SYSCALL_DEFINE5(clone, unsigned long, newsp, unsigned long, clone_flags,
1676 int __user *, parent_tidptr,
1677 int __user *, child_tidptr,
1678 int, tls_val)
1679#else
1680SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
1681 int __user *, parent_tidptr,
1682 int __user *, child_tidptr,
1683 int, tls_val)
1684#endif
1685{
1686 return do_fork(clone_flags, newsp, current_pt_regs(), 0,
1687 parent_tidptr, child_tidptr);
1688}
1689#endif
1690
1648#ifndef ARCH_MIN_MMSTRUCT_ALIGN 1691#ifndef ARCH_MIN_MMSTRUCT_ALIGN
1649#define ARCH_MIN_MMSTRUCT_ALIGN 0 1692#define ARCH_MIN_MMSTRUCT_ALIGN 0
1650#endif 1693#endif