]> sourceware.org Git - glibc.git/blame - sysdeps/unix/bsd/sun/m68k/vfork.S
Update.
[glibc.git] / sysdeps / unix / bsd / sun / m68k / vfork.S
CommitLineData
ae1025be
UD
1/* Copyright (C) 1991, 92, 93, 94, 95, 97 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
6408bdde 3
ae1025be
UD
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
6408bdde 8
ae1025be
UD
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 Library General Public License for more details.
6408bdde 13
ae1025be
UD
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. */
6408bdde
RM
18
19#include <sysdep.h>
20
21#ifndef SYS_vfork
22#define SYS_vfork 66
23#endif
24
25/* Clone the calling process, but without copying the whole address space.
3081378b 26 The calling process is suspended until the the new process exits or is
6408bdde
RM
27 replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
28 and the process ID of the new process to the old process. */
29.globl ___vfork
30___vfork:
31 /* Pop the return PC value into A0. */
32 movel sp@+, a0
33
34 /* Push the syscall number and trap into the kernel. */
35 movel #SYS_vfork, sp@-
36 trap #0
37 bcs error /* Branch forward if it failed. */
38
39 /* It succeeded. See which fork we're in. D1 is now 0 for the
40 parent and 1 for the child. Decrement it to make it -1 (all
41 bits set) for the parent, and 0 (no bits set) for the child.
42 Then AND it with D0, so the parent gets D0&-1==R0, and the child
43 gets D0&0==0. */
7176f4e4 44 subql #1, d1
6408bdde
RM
45 andl d1, d0
46
47 /* Jump to the return PC. */
48 jmp a0@
49
50error:
51 movel d0, _errno
52 moveq #-1, d0
53 jmp a0@
54
55weak_alias (__vfork, vfork)
This page took 0.0817290000000001 seconds and 5 git commands to generate.