-ENTRY(signal, 0)
- subl2 $24,sp # struct sigvec osv, sv;
- movl 8(ap),-24(fp) # sv.sv_handler = a;
- clrq -20(fp) # sv.sv_mask = sv.sv_onstack = 0;
- pushal -12(fp) # &osv
- pushal -24(fp) # &sv
- pushl 4(ap) # s
- moval -4(sp),ap
- chmk $SYS_sigvec # sigvec(s, &sv, &osv)
- jcs err
- movl -12(fp),r0 # return osv.sv_handler;
- ret
-err:
- .globl _errno
- movl r0,_errno
- mnegl $1,r0
- ret
+ sv.sv_handler = a;
+ sv.sv_mask = mask[s];
+ sv.sv_flags = flags[s];
+ if (sigvec(s, &sv, &osv) < 0)
+ return (BADSIG);
+ if (sv.sv_mask != osv.sv_mask || sv.sv_flags != osv.sv_flags) {
+ mask[s] = sv.sv_mask = osv.sv_mask;
+ flags[s] = sv.sv_flags = osv.sv_flags;
+ if (sigvec(s, &sv, 0) < 0)
+ return (BADSIG);
+ }
+ return (osv.sv_handler);
+}