Deleted Added
sdiff udiff text old ( 13545 ) new ( 15634 )
full compact
1/*-
2 * Copyright (c) 1990 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * William Jolitz.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 19 unchanged lines hidden (view full) ---

28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * $Id: Ovfork.S,v 1.2 1995/01/23 01:29:37 davidg Exp $
37 */
38
39#if defined(SYSLIBC_RCS) && !defined(lint)
40 .text
41 .asciz "$Id: Ovfork.S,v 1.2 1995/01/23 01:29:37 davidg Exp $"
42#endif /* SYSLIBC_RCS and not lint */
43
44#include "SYS.h"
45
46/*
47 * pid = vfork();
48 *
49 * %edx == 0 in parent process, %edx == 1 in child process.
50 * %eax == pid of child in parent, %eax == pid of parent in child.
51 *
52 */
53 .set vfork,66
54.globl _vfork
55.type _vfork,@function
56
57_vfork:
58 popl %ecx /* my rta into ecx */
59 movl $vfork, %eax
60 LCALL(7,0)
61 jb verror
62vforkok:
63 cmpl $0,%edx /* child process? */
64 jne child /* yes */
65 jmp parent
66#ifdef _THREAD_SAFE
67 /*
68 * Threaded version using __error().
69 */
70 .globl ___error
71 .type ___error,@function
72verror:
73 pushl %eax
74#ifdef PIC
75 call PIC_PLT(___error)
76#else
77 call ___error
78#endif
79 popl %ecx
80 movl %ecx,(%eax)
81 movl $-1,%eax
82 movl $-1,%edx
83#else /* !_THREAD_SAFE */
84 /*
85 * Non-threaded version using global errno.
86 */
87 .globl _errno
88verror:
89#ifdef PIC
90 PIC_PROLOGUE
91 movl PIC_GOT(_errno), %edx
92 movl %eax,(%edx)
93 PIC_EPILOGUE
94#else
95 movl %eax,_errno
96#endif
97 movl $-1,%eax
98#endif /* !_THREAD_SAFE */
99 jmp %ecx
100child:
101 movl $0,%eax
102parent:
103 jmp %ecx