xref: /openbsd-src/lib/libc/arch/powerpc/sys/sigprocmask.S (revision 83762a71f74848f4d09174ce350838b4204957c5)
1*83762a71Sderaadt/* $OpenBSD: sigprocmask.S,v 1.15 2023/12/10 16:45:51 deraadt Exp $ */
22352eb10Sdrahn
32352eb10Sdrahn/*
42352eb10Sdrahn * Copyright (c) 1996 Dale Rahn
52352eb10Sdrahn *
62352eb10Sdrahn * Redistribution and use in source and binary forms, with or without
72352eb10Sdrahn * modification, are permitted provided that the following conditions
82352eb10Sdrahn * are met:
92352eb10Sdrahn * 1. Redistributions of source code must retain the above copyright
102352eb10Sdrahn *    notice, this list of conditions and the following disclaimer.
112352eb10Sdrahn * 2. Redistributions in binary form must reproduce the above copyright
122352eb10Sdrahn *    notice, this list of conditions and the following disclaimer in the
132352eb10Sdrahn *    documentation and/or other materials provided with the distribution.
142352eb10Sdrahn *
152352eb10Sdrahn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
162352eb10Sdrahn * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
172352eb10Sdrahn * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
182352eb10Sdrahn * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
192352eb10Sdrahn * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
202352eb10Sdrahn * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
212352eb10Sdrahn * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
222352eb10Sdrahn * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
232352eb10Sdrahn * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
242352eb10Sdrahn * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
252352eb10Sdrahn * SUCH DAMAGE.
262352eb10Sdrahn */
272352eb10Sdrahn
28a4afd6daSrahnds/* sigprocmask(int how, const sigset_t *set, sigset_t *oset); */
29a4afd6daSrahnds
30a4afd6daSrahnds#include "SYS.h"
31a4afd6daSrahnds
32a4afd6daSrahnds	.text
33d2c5a474SgkoehlerSYSENTRY_HIDDEN(sigprocmask)
3415572fcfSgkoehler	RETGUARD_SETUP(sigprocmask, %r11, %r12)
359b77f0e1Spefo	stwu	1, -16(1)
369b77f0e1Spefo	stw	5, 12(1)
37a4afd6daSrahnds
38a4afd6daSrahnds	/* check set (new mask value) for null, in which case
39a4afd6daSrahnds	   fiddle arguments */
40a4afd6daSrahnds	cmpwi	4, 0
4145330cbfSrahnds	bne+	.L_load_set
42a4afd6daSrahnds	addi	3, 0, 1	/* how = SIG_BLOCK, new mask already 0 */
4345330cbfSrahnds	b .L_do_call
4445330cbfSrahnds.L_load_set:
45a4afd6daSrahnds	lwz	4, 0(4)	/* get new mask */
4645330cbfSrahnds.L_do_call:
47a4afd6daSrahnds
48d2c5a474Sgkoehler	li	0, SYS_sigprocmask
49*83762a71Sderaadt99:	sc
50*83762a71Sderaadt	PINSYSCALL(SYS_sigprocmask, 99b)
51a4afd6daSrahnds
52a4afd6daSrahnds	/* didnt work? */
53a4afd6daSrahnds	cmpwi	0, 0
5445330cbfSrahnds	beq+	.L_sigprocmask_ok
555e1df623Sguenther	stw	0, R2_OFFSET_ERRNO(2)
565e1df623Sguenther	li	3, -1
57d2c5a474Sgkoehler	b	.L_end
58a4afd6daSrahnds
5945330cbfSrahnds.L_sigprocmask_ok:
609b77f0e1Spefo	lwz	5, 12(1)
61a4afd6daSrahnds	cmpwi	5, 0
6245330cbfSrahnds	beq+	.L_sigprocmask_done
639b77f0e1Spefo	stw	3, 0(5)
6445330cbfSrahnds.L_sigprocmask_done:
653c0f1bd8Sdrahn	li	3, 0
669b77f0e1Spefo	addi	1, 1, 16
67d2c5a474Sgkoehler.L_end:
6815572fcfSgkoehler	RETGUARD_CHECK(sigprocmask, %r11, %r12)
69a4afd6daSrahnds	blr
705aed4d28SguentherSYSCALL_END_HIDDEN(sigprocmask)
71