1/* Copyright (C) 2011-2018 Free Software Foundation, Inc.
2
3   The GNU C Library is free software; you can redistribute it and/or
4   modify it under the terms of the GNU Lesser General Public
5   License as published by the Free Software Foundation; either
6   version 2.1 of the License, or (at your option) any later version.
7
8   The GNU C Library is distributed in the hope that it will be useful,
9   but WITHOUT ANY WARRANTY; without even the implied warranty of
10   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11   Lesser General Public License for more details.
12
13   You should have received a copy of the GNU Lesser General Public
14   License along with the GNU C Library.  If not, see
15   <http://www.gnu.org/licenses/>.  */
16
17#include <sysdep.h>
18#define __ASSEMBLY__  /* for kernel headers */
19#include <linux/sched.h>
20#include <asm/signal.h>
21
22/* Clone the calling process, but without copying the whole address space.
23   The calling process is suspended until the new process exits or is
24   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
25   and the process ID of the new process to the old process.  */
26
27	.text
28ENTRY (__vfork)
29	{
30	 moveli r0, CLONE_VFORK | CLONE_VM | SIGCHLD
31	 move r1, zero
32	}
33	{
34	 move r2, zero
35	 move r3, zero
36	}
37	moveli TREG_SYSCALL_NR_NAME, __NR_clone
38	swint1
39
40	bnez r1, 0f
41	jrp lr
42PSEUDO_END (__vfork)
43libc_hidden_def (vfork)
44
45weak_alias (__vfork, vfork)
46