1/*
2 * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com)
3 *
4 * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
5 */
6
7#include <sys/syscall.h>
8#include <sysdep.h>
9
10/* No legacy syscall ABI means NR_vfork is not available at all, use clone */
11#define _SIGNAL_H
12#include <bits/signum.h>       /* For SIGCHLD */
13
14#define CLONE_VM		0x00000100
15#define CLONE_VFORK		0x00004000
16#define CLONE_FLAGS_FOR_VFORK	(CLONE_VM|CLONE_VFORK|SIGCHLD)
17
18ENTRY(__vfork)
19	mov	r0, CLONE_FLAGS_FOR_VFORK
20	mov_s	r1, sp
21	mov	r8, __NR_clone
22	ARC_TRAP_INSN
23
24	cmp	r0, 0
25	jge	[blink]	; pid >=0 return, else detour via tailcall to errno
26
27	b   __syscall_error
28END(__vfork)
29
30weak_alias(__vfork,vfork)
31libc_hidden_def(vfork)
32