Deleted Added
full compact
vfork.S (13545) vfork.S (15634)
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 *
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 $
36 * $Id: Ovfork.S,v 1.3 1996/01/22 00:00:56 julian Exp $
37 */
38
39#if defined(SYSLIBC_RCS) && !defined(lint)
40 .text
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 $"
41 .asciz "$Id: Ovfork.S,v 1.3 1996/01/22 00:00:56 julian Exp $"
42#endif /* SYSLIBC_RCS and not lint */
43
42#endif /* SYSLIBC_RCS and not lint */
43
44#include "DEFS.h"
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 */
45#include "SYS.h"
46
47/*
48 * pid = vfork();
49 *
50 * %edx == 0 in parent process, %edx == 1 in child process.
51 * %eax == pid of child in parent, %eax == pid of parent in child.
52 *
53 */
53 .set vfork,66
54.globl _vfork
55.type _vfork,@function
56
54
57_vfork:
55ENTRY(vfork)
58 popl %ecx /* my rta into ecx */
56 popl %ecx /* my rta into ecx */
59 movl $vfork, %eax
60 LCALL(7,0)
57 lea SYS_vfork,%eax
58 KERNCALL
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 */
59 jb verror
60vforkok:
61 cmpl $0,%edx /* child process? */
62 jne child /* yes */
63 jmp parent
64#ifdef _THREAD_SAFE
65 /*
66 * Threaded version using __error().
67 */
70 .globl ___error
71 .type ___error,@function
68 .globl CNAME(__error)
69 .type CNAME(__error),@function
72verror:
73 pushl %eax
74#ifdef PIC
70verror:
71 pushl %eax
72#ifdef PIC
75 call PIC_PLT(___error)
73 call PIC_PLT(CNAME(__error))
76#else
74#else
77 call ___error
75 call CNAME(__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 */
76#endif
77 popl %ecx
78 movl %ecx,(%eax)
79 movl $-1,%eax
80 movl $-1,%edx
81#else /* !_THREAD_SAFE */
82 /*
83 * Non-threaded version using global errno.
84 */
87 .globl _errno
85 .globl CNAME(errno)
88verror:
89#ifdef PIC
90 PIC_PROLOGUE
86verror:
87#ifdef PIC
88 PIC_PROLOGUE
91 movl PIC_GOT(_errno), %edx
89 movl PIC_GOT(CNAME(errno)), %edx
92 movl %eax,(%edx)
93 PIC_EPILOGUE
94#else
90 movl %eax,(%edx)
91 PIC_EPILOGUE
92#else
95 movl %eax,_errno
93 movl %eax,CNAME(errno)
96#endif
97 movl $-1,%eax
98#endif /* !_THREAD_SAFE */
99 jmp %ecx
100child:
101 movl $0,%eax
102parent:
103 jmp %ecx
94#endif
95 movl $-1,%eax
96#endif /* !_THREAD_SAFE */
97 jmp %ecx
98child:
99 movl $0,%eax
100parent:
101 jmp %ecx