-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsignal.s
89 lines (84 loc) · 1.35 KB
/
signal.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/ C library -- signal
/ signal(n, 0); /* default action on signal(n) */
/ signal(n, odd); /* ignore signal(n) */
/ signal(n, label); /* goto label on signal(n) */
/ returns old label, only one level.
rtt = 6
signal = 48.
.globl _signal, cerror
_signal:
mov r5,-(sp)
mov sp,r5
mov 4(r5),r1
cmp r1,$NSIG
bhis 2f
mov 6(r5),r0
mov r1,0f
asl r1
mov dvect(r1),-(sp)
mov r0,dvect(r1)
mov r0,0f+2
beq 1f
bit $1,r0
bne 1f
asl r1
add $tvect,r1
mov r1,0f+2
1:
sys 0; 9f
bes 3f
bit $1,r0
beq 1f
mov r0,(sp)
1:
mov (sp)+,r0
mov (sp)+,r5
rts pc
2:
mov $22.,r0 / EINVAL
3:
jmp cerror
NSIG = 0
tvect:
jsr r0,1f; NSIG=NSIG+1
jsr r0,1f; NSIG=NSIG+1
jsr r0,1f; NSIG=NSIG+1
jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
/ jsr r0,1f; NSIG=NSIG+1
1:
mov r1,-(sp)
mov r2,-(sp)
mov r3,-(sp)
mov r4,-(sp)
sub $tvect+4,r0
asr r0
mov r0,-(sp)
asr (sp)
jsr pc,*dvect(r0)
tst (sp)+
mov (sp)+,r4
mov (sp)+,r3
mov (sp)+,r2
mov (sp)+,r1
mov (sp)+,r0
rtt
.data
9:
sys signal; 0:..; ..
.bss
dvect: .=.+[NSIG*2]