1: /*
   2:  * Copyright (c) 1983 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  */
   6: 
   7: #ifdef SYSLIBC_SCCS
   8: _sccsid:.asciz  "@(#)Ovfork.c	5.3 (Berkeley) 3/9/86"
   9: #endif SYSLIBC_SCCS
  10: 
  11: /*
  12:  * @(#)vfork.s	4.1 (Berkeley) 12/21/80
  13:  * C library -- vfork
  14:  */
  15: 
  16: /*
  17:  * pid = vfork();
  18:  *
  19:  * r1 == 0 in parent process, r1 == 1 in child process.
  20:  * r0 == pid of child in parent, r0 == pid of parent in child.
  21:  *
  22:  * trickery here, due to keith sklower, uses ret to clear the stack,
  23:  * and then returns with a jump indirect, since only one person can return
  24:  * with a ret off this stack... we do the ret before we vfork!
  25:  */
  26: 
  27:     .set    vfork,66
  28: .globl  _vfork
  29: 
  30: _vfork:
  31:     .word   0x0000
  32:     movl    16(fp),r2
  33:     movab   here,16(fp)
  34:     ret
  35: here:
  36:     chmk    $vfork
  37:     bcc vforkok
  38:     jmp verror
  39: vforkok:
  40:     tstl    r1      # child process ?
  41:     bneq    child   # yes
  42:     bcc     parent      # if c-bit not set, fork ok
  43: .globl  _errno
  44: verror:
  45:     movl    r0,_errno
  46:     mnegl   $1,r0
  47:     jmp (r2)
  48: child:
  49:     clrl    r0
  50: parent:
  51:     jmp (r2)

Defined functions

jmp defined in line 8; used 2 times
Last modified: 1986-03-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 596
Valid CSS Valid XHTML 1.0 Strict