xref: /openbsd-src/lib/libc/arch/amd64/sys/sigprocmask.S (revision 39b8558c7ed42088504f32a89aaec359144031a7)
1*39b8558cSmortimer/*	$OpenBSD: sigprocmask.S,v 1.10 2023/01/11 01:55:17 mortimer Exp $	*/
2118f6189Smickey/*	$NetBSD: sigprocmask.S,v 1.1 2001/06/19 00:25:06 fvdl Exp $	*/
3118f6189Smickey
4118f6189Smickey/*-
5118f6189Smickey * Copyright (c) 1990 The Regents of the University of California.
6118f6189Smickey * All rights reserved.
7118f6189Smickey *
8118f6189Smickey * This code is derived from software contributed to Berkeley by
9118f6189Smickey * William Jolitz.
10118f6189Smickey *
11118f6189Smickey * Redistribution and use in source and binary forms, with or without
12118f6189Smickey * modification, are permitted provided that the following conditions
13118f6189Smickey * are met:
14118f6189Smickey * 1. Redistributions of source code must retain the above copyright
15118f6189Smickey *    notice, this list of conditions and the following disclaimer.
16118f6189Smickey * 2. Redistributions in binary form must reproduce the above copyright
17118f6189Smickey *    notice, this list of conditions and the following disclaimer in the
18118f6189Smickey *    documentation and/or other materials provided with the distribution.
1924fdaee6Sjsg * 3. Neither the name of the University nor the names of its contributors
20118f6189Smickey *    may be used to endorse or promote products derived from this software
21118f6189Smickey *    without specific prior written permission.
22118f6189Smickey *
23118f6189Smickey * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24118f6189Smickey * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25118f6189Smickey * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26118f6189Smickey * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27118f6189Smickey * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28118f6189Smickey * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29118f6189Smickey * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30118f6189Smickey * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31118f6189Smickey * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32118f6189Smickey * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33118f6189Smickey * SUCH DAMAGE.
34118f6189Smickey *
35118f6189Smickey *	from: @(#)sigprocmask.s	5.2 (Berkeley) 12/17/90
36118f6189Smickey */
37118f6189Smickey
38118f6189Smickey#include <machine/asm.h>
39118f6189Smickey
40118f6189Smickey#include "SYS.h"
41118f6189Smickey
425aed4d28SguentherSYSENTRY_HIDDEN(sigprocmask)
43*39b8558cSmortimer	RETGUARD_SETUP(_thread_sys_sigprocmask, r11);
44*39b8558cSmortimer	RETGUARD_PUSH(r11);
45118f6189Smickey	testq	%rsi,%rsi		# check new sigset pointer
46118f6189Smickey	jnz	1f			# if not null, indirect
47118f6189Smickey	movl	$1,%edi			# SIG_BLOCK
48118f6189Smickey	jmp	2f
49118f6189Smickey1:	movl	(%rsi),%esi		# fetch indirect  ...
50118f6189Smickey2:	SYSTRAP(sigprocmask)
51aa797096Sguenther	jc	1f
52118f6189Smickey	testq	%rdx,%rdx		# test if old mask requested
53fe38b55cSguenther	jz	3f
54c94a7489Sderaadt	movl	%eax,(%rdx)		# store old mask
55fe38b55cSguenther3:
56118f6189Smickey	xorl	%eax,%eax
57*39b8558cSmortimer	jmp	2f
58aa797096Sguenther1:
59fe38b55cSguenther	SET_ERRNO
60*39b8558cSmortimer2:
61*39b8558cSmortimer	RETGUARD_POP(r11);
62*39b8558cSmortimer	RETGUARD_CHECK(_thread_sys_sigprocmask, r11);
63fe38b55cSguenther	ret
645aed4d28SguentherSYSCALL_END_HIDDEN(sigprocmask)
65