|
|
1.1 root 1: /*
2: * @(#)vfork.s 4.1 (Berkeley) 12/21/80
3: * C library -- vfork
4: */
5:
6: /*
7: * pid = vfork();
8: *
9: * r1 == 0 in parent process, r1 == 1 in child process.
10: * r0 == pid of child in parent, r0 == pid of parent in child.
11: *
12: * trickery here, due to keith sklower, uses ret to clear the stack,
13: * and then returns with a jump indirect, since only one person can return
14: * with a ret off this stack... we do the ret before we vfork!
15: */
16:
17: .set vfork,66
18: .globl _vfork
19:
20: _vfork:
21: .word 0x0000
22: movl 16(fp),r2
23: movab here,16(fp)
24: ret
25: here:
26: chmk $vfork
27: bcc vforkok
28: jmp verror
29: vforkok:
30: tstl r1 # child process ?
31: bneq child # yes
32: bcc parent # if c-bit not set, fork ok
33: .globl _errno
34: verror:
35: movl r0,_errno
36: mnegl $1,r0
37: jmp (r2)
38: child:
39: clrl r0
40: parent:
41: jmp (r2)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.