xref: /titanic_52/usr/src/lib/libc/i386/sys/forkx.s (revision 9a70fc3be3b1e966bf78825cdb8d509963a6f0a1)
1657b1f3dSraf/*
2657b1f3dSraf * CDDL HEADER START
3657b1f3dSraf *
4657b1f3dSraf * The contents of this file are subject to the terms of the
5657b1f3dSraf * Common Development and Distribution License (the "License").
6657b1f3dSraf * You may not use this file except in compliance with the License.
7657b1f3dSraf *
8657b1f3dSraf * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9657b1f3dSraf * or http://www.opensolaris.org/os/licensing.
10657b1f3dSraf * See the License for the specific language governing permissions
11657b1f3dSraf * and limitations under the License.
12657b1f3dSraf *
13657b1f3dSraf * When distributing Covered Code, include this CDDL HEADER in each
14657b1f3dSraf * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15657b1f3dSraf * If applicable, add the following below this CDDL HEADER, with the
16657b1f3dSraf * fields enclosed by brackets "[]" replaced with your own identifying
17657b1f3dSraf * information: Portions Copyright [yyyy] [name of copyright owner]
18657b1f3dSraf *
19657b1f3dSraf * CDDL HEADER END
20657b1f3dSraf */
21657b1f3dSraf
22657b1f3dSraf/*
23657b1f3dSraf * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24657b1f3dSraf * Use is subject to license terms.
25657b1f3dSraf */
26657b1f3dSraf
27*9a70fc3bSMark J. Nelson	.file	"forkx.s"
28657b1f3dSraf
29657b1f3dSraf#include "SYS.h"
30657b1f3dSraf
31657b1f3dSraf/*
32657b1f3dSraf * pid = __forkx(flags);
33657b1f3dSraf *
34657b1f3dSraf * syscall trap: forksys(0, flags)
35657b1f3dSraf *
36657b1f3dSraf * From the syscall:
37657b1f3dSraf * %edx == 0 in parent process, %edx = 1 in child process.
38657b1f3dSraf * %eax == pid of child in parent, %eax == pid of parent in child.
39657b1f3dSraf *
40657b1f3dSraf * The child gets a zero return value.
41657b1f3dSraf * The parent gets the pid of the child.
42657b1f3dSraf */
43657b1f3dSraf
44657b1f3dSraf	ENTRY(__forkx)
45657b1f3dSraf	popl	%ecx
46657b1f3dSraf	pushl	$0
47657b1f3dSraf	pushl	%ecx
48657b1f3dSraf	SYSTRAP_2RVALS(forksys)
49657b1f3dSraf	popl	%ecx
50657b1f3dSraf	movl	%ecx, 0(%esp)
51657b1f3dSraf	SYSCERROR
52657b1f3dSraf	testl	%edx, %edx
53657b1f3dSraf	jz	1f		/* jump if parent */
54657b1f3dSraf	xorl	%eax, %eax	/* child, return (0) */
55657b1f3dSraf1:
56657b1f3dSraf	RET
57657b1f3dSraf	SET_SIZE(__forkx)
58