|
@@ -1645,6 +1645,49 @@ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+#ifdef __ARCH_WANT_SYS_FORK
|
|
|
+SYSCALL_DEFINE0(fork)
|
|
|
+{
|
|
|
+#ifdef CONFIG_MMU
|
|
|
+ return do_fork(SIGCHLD, 0, current_pt_regs(), 0, NULL, NULL);
|
|
|
+#else
|
|
|
+ /* can not support in nommu mode */
|
|
|
+ return(-EINVAL);
|
|
|
+#endif
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef __ARCH_WANT_SYS_VFORK
|
|
|
+SYSCALL_DEFINE0(vfork)
|
|
|
+{
|
|
|
+ return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, 0, current_pt_regs(),
|
|
|
+ 0, NULL, NULL);
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+#ifdef __ARCH_WANT_SYS_CLONE
|
|
|
+#ifdef CONFIG_CLONE_BACKWARDS
|
|
|
+SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
|
|
|
+ int __user *, parent_tidptr,
|
|
|
+ int, tls_val,
|
|
|
+ int __user *, child_tidptr)
|
|
|
+#elif defined(CONFIG_CLONE_BACKWARDS2)
|
|
|
+SYSCALL_DEFINE5(clone, unsigned long, newsp, unsigned long, clone_flags,
|
|
|
+ int __user *, parent_tidptr,
|
|
|
+ int __user *, child_tidptr,
|
|
|
+ int, tls_val)
|
|
|
+#else
|
|
|
+SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp,
|
|
|
+ int __user *, parent_tidptr,
|
|
|
+ int __user *, child_tidptr,
|
|
|
+ int, tls_val)
|
|
|
+#endif
|
|
|
+{
|
|
|
+ return do_fork(clone_flags, newsp, current_pt_regs(), 0,
|
|
|
+ parent_tidptr, child_tidptr);
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
#ifndef ARCH_MIN_MMSTRUCT_ALIGN
|
|
|
#define ARCH_MIN_MMSTRUCT_ALIGN 0
|
|
|
#endif
|