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