1
/* Copyright (C) 1999, 2002 Free Software Foundation, Inc.
2
This file is part of the GNU C Library.
4
The GNU C Library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Lesser General Public
6
License as published by the Free Software Foundation; either
7
version 2.1 of the License, or (at your option) any later version.
9
The GNU C Library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
Lesser General Public License for more details.
14
You should have received a copy of the GNU Lesser General Public
15
License along with the GNU C Library; if not, write to the Free
16
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21
/* Clone the calling process, but without copying the whole address space.
22
The calling process is suspended until the new process exits or is
23
replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
24
and the process ID of the new process to the old process. */
28
/* Pop the return PC value into ESI. */
30
cfi_adjust_cfa_offset(-8)
32
/* Perform the system call. */
34
jb L(error) /* Branch forward if it failed. */
36
/* In the parent process, %rdx == 0, %rax == child pid. */
37
/* In the child process, %rdx == 1, %rax == parent pid. */
39
/* Change %rax to be 0 in the child process. */
43
/* Jump to the return PC. */
47
/* Push back the return PC. */
49
cfi_adjust_cfa_offset(8)
51
/* Branch to the error handler, hidden in PSEUDO_END. */
52
jmp SYSCALL_ERROR_LABEL
56
libc_hidden_def (__vfork)
58
weak_alias (__vfork, vfork)