87 lines
1.9 KiB
ArmAsm
87 lines
1.9 KiB
ArmAsm
/ 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
|
|
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
|
|
clr -(sp)
|
|
3:
|
|
tst (sp)+
|
|
jmp cerror
|
|
|
|
NSIG = 0
|
|
tvect:
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
mov r0,-(sp); mov dvect+[NSIG*2],r0; br 1f; NSIG=NSIG+1
|
|
1:
|
|
mov r1,-(sp)
|
|
mov r2,-(sp)
|
|
mov r3,-(sp)
|
|
mov r4,-(sp)
|
|
jsr pc,(r0)
|
|
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]
|