1/* vfork for ARC Linux.
2   Copyright (C) 2020-2022 Free Software Foundation, Inc.
3   This file is part of the GNU C Library.
4
5   The GNU C Library is free software; you can redistribute it and/or
6   modify it under the terms of the GNU Lesser General Public
7   License as published by the Free Software Foundation; either
8   version 2.1 of the License, or (at your option) any later version.
9
10   The GNU C Library is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   Lesser General Public License for more details.
14
15   You should have received a copy of the GNU Lesser General Public
16   License along with the GNU C Library; if not, see
17   <https://www.gnu.org/licenses/>.  */
18
19#include <sys/syscall.h>
20#include <sysdep.h>
21#include <tcb-offsets.h>
22#define _SIGNAL_H
23#include <bits/signum-arch.h>       /* For SIGCHLD */
24
25#define CLONE_VM		0x00000100
26#define CLONE_VFORK		0x00004000
27#define CLONE_FLAGS_FOR_VFORK	(CLONE_VM|CLONE_VFORK|SIGCHLD)
28
29ENTRY (__vfork)
30	mov	r0, CLONE_FLAGS_FOR_VFORK
31	mov_s	r1, sp
32	mov	r8, __NR_clone
33	ARC_TRAP_INSN
34
35	cmp	r0, 0
36	jge	[blink]	; child continues
37
38	b   __syscall_error
39PSEUDO_END (__vfork)
40libc_hidden_def (__vfork)
41
42weak_alias (__vfork, vfork)
43