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