1181624Skmacy/*	$OpenBSD: sigprocmask.S,v 1.8 2023/12/10 16:45:51 deraadt Exp $ */
2181624Skmacy/*-
3181624Skmacy * Copyright (c) 1991, 1993
4181624Skmacy *	The Regents of the University of California.  All rights reserved.
5181624Skmacy *
6181624Skmacy * This code is derived from software contributed to Berkeley by
7181624Skmacy * Ralph Campbell.
8181624Skmacy *
9181624Skmacy * Redistribution and use in source and binary forms, with or without
10181624Skmacy * modification, are permitted provided that the following conditions
11181624Skmacy * are met:
12181624Skmacy * 1. Redistributions of source code must retain the above copyright
13181624Skmacy *    notice, this list of conditions and the following disclaimer.
14181624Skmacy * 2. Redistributions in binary form must reproduce the above copyright
15181624Skmacy *    notice, this list of conditions and the following disclaimer in the
16181624Skmacy *    documentation and/or other materials provided with the distribution.
17181624Skmacy * 3. Neither the name of the University nor the names of its contributors
18181624Skmacy *    may be used to endorse or promote products derived from this software
19181624Skmacy *    without specific prior written permission.
20181624Skmacy *
21181624Skmacy * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22181624Skmacy * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23181624Skmacy * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24181624Skmacy * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25181624Skmacy * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26181624Skmacy * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27181624Skmacy * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28181624Skmacy * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29181624Skmacy * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30181624Skmacy * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31181624Skmacy * SUCH DAMAGE.
32181624Skmacy */
33181624Skmacy
34181624Skmacy#include "SYS.h"
35181624Skmacy
36181624SkmacyFRAMESZ= MKFSIZ(1,1)
37181624SkmacyGPOFF= FRAMESZ-2*REGSZ
38181624Skmacy
39214077SgibbsSYSLEAF_HIDDEN(sigprocmask, FRAMESZ)
40214077Sgibbs	PTR_SUBU sp, FRAMESZ
41214077Sgibbs	SETUP_GP64(GPOFF, _HIDDEN(sigprocmask))
42181624Skmacy	.set	reorder
43181624Skmacy	bne	a1, zero, .Lgotptr	# if new sigset pointer not null
44181624Skmacy	li	a0, 1			# how = SIG_BLOCK
45181624Skmacy	b	.Ldoit			# mask = zero
46181624Skmacy.Lgotptr:
47181624Skmacy	lw	a1, 0(a1)		# indirect to new mask arg
48181624Skmacy.Ldoit:
49181624Skmacy	li	v0, SYS_sigprocmask
50181624Skmacy99:	syscall
51181624Skmacy	PINSYSCALL(SYS_sigprocmask, 99b)
52181624Skmacy	bne	a3, zero, .Lerr
53181624Skmacy	beq	a2, zero, .Lout		# test if old mask requested
54181624Skmacy	sw	v0, 0(a2)		# store old mask
55214077Sgibbs.Lout:
56214077Sgibbs	move	v0, zero
57214077Sgibbs	RESTORE_GP64
58181624Skmacy	PTR_ADDU sp, FRAMESZ
59181624Skmacy	j	ra
60181624Skmacy.Lerr:
61181624Skmacy	LA	t9, CERROR
62181624Skmacy	RESTORE_GP64
63181624Skmacy	PTR_ADDU sp, FRAMESZ
64181624Skmacy	jr	t9
65214077SgibbsSYSCALL_END_HIDDEN(sigprocmask)
66214077Sgibbs