date and time created 82/12/04 16:14:28 by mckusick
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Sun, 5 Dec 1982 08:14:28 +0000 (00:14 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Sun, 5 Dec 1982 08:14:28 +0000 (00:14 -0800)
SCCS-vsn: lib/libc/vax/sys/Ovfork.s 4.1

usr/src/lib/libc/vax/sys/Ovfork.s [new file with mode: 0644]

diff --git a/usr/src/lib/libc/vax/sys/Ovfork.s b/usr/src/lib/libc/vax/sys/Ovfork.s
new file mode 100644 (file)
index 0000000..425e59e
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * @(#)vfork.s 4.1 (Berkeley) 12/21/80
+ * C library -- vfork
+ */
+
+/*
+ * pid = vfork();
+ *
+ * r1 == 0 in parent process, r1 == 1 in child process.
+ * r0 == pid of child in parent, r0 == pid of parent in child.
+ *
+ * trickery here, due to keith sklower, uses ret to clear the stack,
+ * and then returns with a jump indirect, since only one person can return
+ * with a ret off this stack... we do the ret before we vfork!
+ */
+
+       .set    vfork,66
+.globl _vfork
+
+_vfork:
+       .word   0x0000
+       movl    16(fp),r2
+       movab   here,16(fp)
+       ret
+here:
+       chmk    $vfork
+       bcc     vforkok
+       jmp     verror
+vforkok:
+       tstl    r1              # child process ?
+       bneq    child   # yes
+       bcc     parent          # if c-bit not set, fork ok
+.globl _errno
+verror:
+       movl    r0,_errno
+       mnegl   $1,r0
+       jmp     (r2)
+child:
+       clrl    r0
+parent:
+       jmp     (r2)