|
|
1.1 ! root 1: / ! 2: / C interface routines for the signal system call. ! 3: / This is not just a direct call, but must save ! 4: / and restore user state before and after processing ! 5: / user signal code. ! 6: / ! 7: / int (*signal(signo, function))() int signo; int (*function)(); ! 8: / ! 9: ! 10: NSIG = 16 ! 11: ! 12: .globl signal_ ! 13: .globl _fpac_ ! 14: ! 15: signal_: ! 16: mov bx,sp / get stack base pointer ! 17: mov cx,02(bx) / get signo ! 18: cmp cx,$NSIG ! 19: ja 0f / > NSIG illegal ! 20: ! 21: cmp 04(bx),$1 / function ! 22: jbe 0f / 0 or 1 (SIG_DFL or SIG_IGN) ! 23: ! 24: mov ax,$sigsave ! 25: push ax / user function changed to sigsave ! 26: push cx / signo ! 27: push bx / and junk word where pc would be ! 28: sys 060 / 48 ! 29: pop bx / pop args ! 30: pop cx ! 31: pop cx ! 32: jmp 1f / return value ! 33: ! 34: 0: sys 060 / 48 ! 35: 1: cmp ax,$-1 ! 36: je 1f / error return ! 37: ! 38: mov cx,04(bx) / new user function ! 39: mov bx,02(bx) / signo ! 40: add bx,bx / check old signal setting ! 41: cmp sigtable-2(bx),$-1 / in sigtable[signo-1] ! 42: je 0f / unknown: yield syscall return ! 43: ! 44: mov ax,sigtable-2(bx) / else yield old user function ! 45: 0: mov sigtable-2(bx),cx / and save new one in table ! 46: 1: ret ! 47: ! 48: sigsave: ! 49: push _fpac_+6 / save pseudo-regs ! 50: push _fpac_+4 ! 51: push _fpac_+2 ! 52: push _fpac_ ! 53: push ax / save regs ! 54: push cx ! 55: push dx ! 56: push bx ! 57: push bp ! 58: ! 59: mov bp,sp ! 60: mov bx,2*9(bp) / get signo (pushed by system) ! 61: push bx / pass to user function ! 62: add bx,bx ! 63: icall sigtable-2(bx) / (*sigtable[signo-1])(signo); ! 64: pop bx ! 65: ! 66: mov bx,2*10(bp) / swap return address ! 67: mov cx,2*11(bp) / and flags ! 68: mov 2*11(bp),bx / to facilitate return ! 69: mov 2*10(bp),cx ! 70: ! 71: pop bp / restore regs ! 72: pop bx ! 73: pop dx ! 74: pop cx ! 75: pop ax ! 76: pop _fpac_ / restore pseudo-regs ! 77: pop _fpac_+2 ! 78: pop _fpac_+4 ! 79: pop _fpac_+6 ! 80: add sp,$2 / discard signo ! 81: popf / get flags ! 82: ret ! 83: ! 84: .prvd ! 85: sigtable: ! 86: .word -1 ! 87: .word -1 ! 88: .word -1 ! 89: .word -1 ! 90: .word -1 ! 91: .word -1 ! 92: .word -1 ! 93: .word -1 ! 94: .word -1 ! 95: .word -1 ! 96: .word -1 ! 97: .word -1 ! 98: .word -1 ! 99: .word -1 ! 100: .word -1 ! 101: .word -1 ! 102: .word -1 ! 103: .word -1 ! 104: .word -1 ! 105: .word -1
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.