xref: /original-bsd/lib/libc/gen/signal.c (revision 81ad5cae)
1 /*	signal.c	4.2	85/01/15	*/
2 /*
3  * Almost backwards compatible signal.
4  *	int (*signal(s, a))() int s, (*a)();
5  */
6 #include <syscall.h>
7 #include "DEFS.h"
8 
9 ENTRY(signal, 0)
10 	subl2	$24,sp			# struct sigvec osv, sv;
11 	movl	8(ap),-24(fp)		# sv.sv_handler = a;
12 	clrq	-20(fp)			# sv.sv_mask = sv.sv_onstack = 0;
13 	pushal	-12(fp)			# &osv
14 	pushal	-24(fp)			# &sv
15 	pushl	4(ap)			# s
16 	moval	-4(sp),ap
17 	chmk	$SYS_sigvec		# sigvec(s, &sv, &osv)
18 	jcs	err
19 	movl	-12(fp),r0		# return osv.sv_handler;
20 	ret
21 err:
22 	.globl	_errno
23 	movl	r0,_errno
24 	mnegl	$1,r0
25 	ret
26