Home | History | Annotate | Line # | Download | only in sys
      1 /*	$NetBSD: compat_sigprocmask13.S,v 1.2 2011/01/15 07:31:13 matt Exp $	*/
      2 
      3 #include "SYS.h"
      4 #include "assym.h"
      5 
      6 #if defined(LIBC_SCCS)
      7 __RCSID("$NetBSD: compat_sigprocmask13.S,v 1.2 2011/01/15 07:31:13 matt Exp $")
      8 #endif
      9 
     10 WARN_REFERENCES(sigprocmask, \
     11     "warning: reference to compatibility sigprocmask(); include <signal.h> for correct reference")
     12 
     13 /*
     14  * sigprocmask(int how, sigset_t *set, sigset_t *oset)
     15  */
     16 ENTRY(sigprocmask)
     17 	or.	%r4,%r4,%r4	# set == NULL?
     18 	li	%r6,SIG_BLOCK
     19 	beq	1f
     20 	lwz	%r4,0(%r4)	# if not, replace it in r4 with *set
     21 	mr	%r6,%r3
     22 1:
     23 	mr	%r3,%r6		# ... using sigprocmask(SIG_BLOCK)
     24 	_DOSYSCALL(compat_13_sigprocmask13)
     25 	bso	3f
     26 	or.	%r5,%r5,%r5	# check to see of oset requested
     27 	beq	2f		# if oset != NULL,
     28 	stw	%r3,0(%r5)	#    *oset = oldmask
     29 2:
     30 	li	%r3,0
     31 	blr			# in any case, return 0
     32 3:
     33 	b	_C_LABEL(__cerror)
     34 END(sigprocmask)
     35