diff --git a/mach/m68k2/libsys/signal.s b/mach/m68k2/libsys/signal.s index 8f18c1f81..90acbc54e 100644 --- a/mach/m68k2/libsys/signal.s +++ b/mach/m68k2/libsys/signal.s @@ -1,9 +1,10 @@ + .define _signal .extern _signal NSIG=32 _signal: move.w 4(sp), d0 - ext.l d0 + ext.l d0 cmp.l #NSIG,d0 bcc 1f move.l 6(sp),d1 @@ -16,7 +17,9 @@ _signal: beq 2f btst #0,d1 bne 2f - move.l #enter,d1 + move.l #jmptab,d1 + add.l d0,d1 + add.l d0,d1 2: move.l d0,a0 move.w #0x30,d0 @@ -26,16 +29,52 @@ _signal: bne 4f move.l a1,d0 4: + clr.l d1 rts 1: move.l #22,d0 3: jmp cerror +jmptab: bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter + bsr enter enter: movem.l d0/d1/a0/a1,-(sp) - move.l 16(sp),a0 - move.l a0,-(sp) + move.l 16(sp),d0 + sub.l #jmptab+2,d0 + asr.l #1,d0 + move.l d0,-(sp) + move.l d0,a0 add.l a0,a0 add.l a0,a0 add.l #dvect,a0