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