1129202Scognet/* $NetBSD: Ovfork.S,v 1.6 2003/08/07 16:42:03 agc Exp $ */ 2129202Scognet 3129202Scognet/*- 4129202Scognet * Copyright (c) 1990 The Regents of the University of California. 5129202Scognet * All rights reserved. 6129202Scognet * 7129202Scognet * Redistribution and use in source and binary forms, with or without 8129202Scognet * modification, are permitted provided that the following conditions 9129202Scognet * are met: 10129202Scognet * 1. Redistributions of source code must retain the above copyright 11129202Scognet * notice, this list of conditions and the following disclaimer. 12129202Scognet * 2. Redistributions in binary form must reproduce the above copyright 13129202Scognet * notice, this list of conditions and the following disclaimer in the 14129202Scognet * documentation and/or other materials provided with the distribution. 15129202Scognet * 3. Neither the name of the University nor the names of its contributors 16129202Scognet * may be used to endorse or promote products derived from this software 17129202Scognet * without specific prior written permission. 18129202Scognet * 19129202Scognet * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20129202Scognet * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21129202Scognet * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22129202Scognet * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23129202Scognet * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24129202Scognet * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25129202Scognet * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26129202Scognet * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27129202Scognet * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28129202Scognet * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29129202Scognet * SUCH DAMAGE. 30129202Scognet * 31129202Scognet * from: @(#)Ovfork.s 5.1 (Berkeley) 4/23/90 32129202Scognet */ 33129202Scognet 34129202Scognet#include <machine/asm.h> 35129202Scognet__FBSDID("$FreeBSD$"); 36129202Scognet#include "SYS.h" 37129202Scognet 38129202Scognet/* 39129202Scognet * pid = vfork(); 40129202Scognet * 41129202Scognet * On return from the SWI: 42129202Scognet * r1 == 0 in parent process, r1 == 1 in child process. 43129202Scognet * r0 == pid of child in parent, r0 == pid of parent in child. 44129202Scognet */ 45129202Scognet .text 46129202Scognet .align 0 47129202Scognet 48129202ScognetENTRY(vfork) 49129202Scognet mov r2, r14 50129202Scognet SYSTRAP(vfork) 51129202Scognet bcs PIC_SYM(CERROR, PLT) 52129202Scognet sub r1, r1, #1 /* r1 == 0xffffffff if parent, 0 if child */ 53129202Scognet and r0, r0, r1 /* r0 == 0 if child, else unchanged */ 54129202Scognet mov r15, r2 55271337SianEND(vfork) 56