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.3 1996/01/22 00:00:56 julian Exp $ |
37 */ 38 39#if defined(SYSLIBC_RCS) && !defined(lint) 40 .text |
41 .asciz "$Id: Ovfork.S,v 1.3 1996/01/22 00:00:56 julian Exp $" |
42#endif /* SYSLIBC_RCS and not lint */ 43 |
44#include "DEFS.h" |
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 */ |
54 |
55ENTRY(vfork) |
56 popl %ecx /* my rta into ecx */ |
57 lea SYS_vfork,%eax 58 KERNCALL |
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 */ |
68 .globl CNAME(__error) 69 .type CNAME(__error),@function |
70verror: 71 pushl %eax 72#ifdef PIC |
73 call PIC_PLT(CNAME(__error)) |
74#else |
75 call CNAME(__error) |
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 */ |
85 .globl CNAME(errno) |
86verror: 87#ifdef PIC 88 PIC_PROLOGUE |
89 movl PIC_GOT(CNAME(errno)), %edx |
90 movl %eax,(%edx) 91 PIC_EPILOGUE 92#else |
93 movl %eax,CNAME(errno) |
94#endif 95 movl $-1,%eax 96#endif /* !_THREAD_SAFE */ 97 jmp %ecx 98child: 99 movl $0,%eax 100parent: 101 jmp %ecx |