|
|
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.