1/* 2 * Copyright (c) 1983 Regents of the University of California. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms are permitted 6 * provided that the above copyright notice and this paragraph are 7 * duplicated in all such forms and that any documentation, 8 * advertising materials, and other materials related to such 9 * distribution and use acknowledge that the software was developed 10 * by the University of California, Berkeley. The name of the 11 * University may not be used to endorse or promote products derived 12 * from this software without specific prior written permission. 13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 16 */ 17 18#if defined(SYSLIBC_SCCS) && !defined(lint) 19 .asciz "@(#)Ovfork.s 5.5 (Berkeley) 06/27/88" 20#endif /* SYSLIBC_SCCS and not lint */ 21 22/* 23 * @(#)vfork.s 4.1 (Berkeley) 12/21/80 24 * C library -- vfork 25 */ 26 27/* 28 * pid = vfork(); 29 * 30 * r1 == 0 in parent process, r1 == 1 in child process. 31 * r0 == pid of child in parent, r0 == pid of parent in child. 32 * 33 * trickery here, due to keith sklower, uses ret to clear the stack, 34 * and then returns with a jump indirect, since only one person can return 35 * with a ret off this stack... we do the ret before we vfork! 36 */ 37 38 .set vfork,66 39.globl _vfork 40 41_vfork: 42 .word 0x0000 43 movl 16(fp),r2 44 movab here,16(fp) 45 ret 46here: 47 chmk $vfork 48 bcc vforkok 49 jmp verror 50vforkok: 51 tstl r1 # child process ? 52 bneq child # yes 53 bcc parent # if c-bit not set, fork ok 54.globl _errno 55verror: 56 movl r0,_errno 57 mnegl $1,r0 58 jmp (r2) 59child: 60 clrl r0 61parent: 62 jmp (r2) 63