Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

/*	$NetBSD: compat_sigprocmask13.S,v 1.2 2011/01/15 07:31:13 matt Exp $	*/

#include "SYS.h"
#include "assym.h"

#if defined(LIBC_SCCS)
__RCSID("$NetBSD: compat_sigprocmask13.S,v 1.2 2011/01/15 07:31:13 matt Exp $")
#endif

WARN_REFERENCES(sigprocmask, \
    "warning: reference to compatibility sigprocmask(); include <signal.h> for correct reference")

/*
 * sigprocmask(int how, sigset_t *set, sigset_t *oset)
 */
ENTRY(sigprocmask)
	or.	%r4,%r4,%r4	# set == NULL?
	li	%r6,SIG_BLOCK
	beq	1f
	lwz	%r4,0(%r4)	# if not, replace it in r4 with *set
	mr	%r6,%r3
1:
	mr	%r3,%r6		# ... using sigprocmask(SIG_BLOCK)
	_DOSYSCALL(compat_13_sigprocmask13)
	bso	3f
	or.	%r5,%r5,%r5	# check to see of oset requested
	beq	2f		# if oset != NULL,
	stw	%r3,0(%r5)	#    *oset = oldmask
2:
	li	%r3,0
	blr			# in any case, return 0
3:
	b	_C_LABEL(__cerror)
END(sigprocmask)