|
|
1.1 root 1: //////////
2: / libc/sys/i386/wait.s
3: / wait(), waitpid().
4: / Both are system call #7.
5: / waitpid() is designated by setting all of PSW flags ZF, PF, SF, and OF.
6: //////////
7:
8: .text
9: .globl wait
10: .globl waitpid
11: .globl .cerror
12:
13: .set WPMASK,0x8C4 / set (ZF|PF|SF|OF) for waitpid()
14:
15: //////////
16: / int
17: / wait(int * stat_loc)
18: //////////
19:
20: wait:
21: pushfl / get psw
22: popl %eax
23: andl $~WPMASK,%eax / set PSW for wait()
24: pushl %eax
25: popfl
26: movl $7,%eax / system call # to %eax
27: lcall $7,$0
28: jc .cerror
29: movl 4(%esp),%ecx / get statloc to %ecx
30: jmp done / and do wrap-up
31:
32: //////////
33: / int
34: / waitpid(pid_t pid, int * stat_loc, int options)
35: //////////
36:
37: waitpid:
38: pushfl / get psw
39: popl %eax
40: orl $WPMASK,%eax / set PSW for waitpid()
41: pushl %eax
42: popfl
43: movl $7,%eax / system call # to %eax
44: lcall $7,$0
45: jc .cerror
46: movl 8(%esp),%ecx / get statloc to %ecx
47: done:
48: orl %ecx,%ecx / is statloc null?
49: jz ?L0 / if null, return
50: movl %edx,(%ecx) / if non-null, store thru the pointer
51: ?L0:
52: ret
53:
54: / end of libc/sys/i386/wait.s
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.