xref: /netbsd-src/lib/libc/compat/arch/powerpc/sys/compat_sigprocmask13.S (revision cf88c3890b9a2e310adacd2c695f42a55ca4e79a)
1*cf88c389Smatt/*	$NetBSD: compat_sigprocmask13.S,v 1.2 2011/01/15 07:31:13 matt Exp $	*/
2bfb62ce4Smatt
3bfb62ce4Smatt#include "SYS.h"
4*cf88c389Smatt#include "assym.h"
5*cf88c389Smatt
6*cf88c389Smatt#if defined(LIBC_SCCS)
7*cf88c389Smatt__RCSID("$NetBSD: compat_sigprocmask13.S,v 1.2 2011/01/15 07:31:13 matt Exp $")
8*cf88c389Smatt#endif
9bfb62ce4Smatt
10bfb62ce4SmattWARN_REFERENCES(sigprocmask, \
11bfb62ce4Smatt    "warning: reference to compatibility sigprocmask(); include <signal.h> for correct reference")
12bfb62ce4Smatt
13bfb62ce4Smatt/*
14bfb62ce4Smatt * sigprocmask(int how, sigset_t *set, sigset_t *oset)
15bfb62ce4Smatt */
16bfb62ce4SmattENTRY(sigprocmask)
17bfb62ce4Smatt	or.	%r4,%r4,%r4	# set == NULL?
18*cf88c389Smatt	li	%r6,SIG_BLOCK
19bfb62ce4Smatt	beq	1f
20bfb62ce4Smatt	lwz	%r4,0(%r4)	# if not, replace it in r4 with *set
21bfb62ce4Smatt	mr	%r6,%r3
22bfb62ce4Smatt1:
23bfb62ce4Smatt	mr	%r3,%r6		# ... using sigprocmask(SIG_BLOCK)
24*cf88c389Smatt	_DOSYSCALL(compat_13_sigprocmask13)
25bfb62ce4Smatt	bso	3f
26bfb62ce4Smatt	or.	%r5,%r5,%r5	# check to see of oset requested
27bfb62ce4Smatt	beq	2f		# if oset != NULL,
28bfb62ce4Smatt	stw	%r3,0(%r5)	#    *oset = oldmask
29bfb62ce4Smatt2:
30bfb62ce4Smatt	li	%r3,0
31bfb62ce4Smatt	blr			# in any case, return 0
32bfb62ce4Smatt3:
33*cf88c389Smatt	b	_C_LABEL(__cerror)
34*cf88c389SmattEND(sigprocmask)
35