1*83762a71Sderaadt/* $OpenBSD: sigprocmask.S,v 1.8 2023/12/10 16:45:51 deraadt Exp $ */ 20eea0d08Spefo/*- 30eea0d08Spefo * Copyright (c) 1991, 1993 40eea0d08Spefo * The Regents of the University of California. All rights reserved. 50eea0d08Spefo * 60eea0d08Spefo * This code is derived from software contributed to Berkeley by 70eea0d08Spefo * Ralph Campbell. 80eea0d08Spefo * 90eea0d08Spefo * Redistribution and use in source and binary forms, with or without 100eea0d08Spefo * modification, are permitted provided that the following conditions 110eea0d08Spefo * are met: 120eea0d08Spefo * 1. Redistributions of source code must retain the above copyright 130eea0d08Spefo * notice, this list of conditions and the following disclaimer. 140eea0d08Spefo * 2. Redistributions in binary form must reproduce the above copyright 150eea0d08Spefo * notice, this list of conditions and the following disclaimer in the 160eea0d08Spefo * documentation and/or other materials provided with the distribution. 170eea0d08Spefo * 3. Neither the name of the University nor the names of its contributors 180eea0d08Spefo * may be used to endorse or promote products derived from this software 190eea0d08Spefo * without specific prior written permission. 200eea0d08Spefo * 210eea0d08Spefo * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 220eea0d08Spefo * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 230eea0d08Spefo * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 240eea0d08Spefo * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 250eea0d08Spefo * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 260eea0d08Spefo * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 270eea0d08Spefo * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 280eea0d08Spefo * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 290eea0d08Spefo * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 300eea0d08Spefo * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 310eea0d08Spefo * SUCH DAMAGE. 320eea0d08Spefo */ 330eea0d08Spefo 340eea0d08Spefo#include "SYS.h" 350eea0d08Spefo 365738bc62SpefoFRAMESZ= MKFSIZ(1,1) 375738bc62SpefoGPOFF= FRAMESZ-2*REGSZ 385738bc62Spefo 395aed4d28SguentherSYSLEAF_HIDDEN(sigprocmask, FRAMESZ) 405738bc62Spefo PTR_SUBU sp, FRAMESZ 415aed4d28Sguenther SETUP_GP64(GPOFF, _HIDDEN(sigprocmask)) 420eea0d08Spefo .set reorder 43aa797096Sguenther bne a1, zero, .Lgotptr # if new sigset pointer not null 440eea0d08Spefo li a0, 1 # how = SIG_BLOCK 45aa797096Sguenther b .Ldoit # mask = zero 46aa797096Sguenther.Lgotptr: 470eea0d08Spefo lw a1, 0(a1) # indirect to new mask arg 48aa797096Sguenther.Ldoit: 490eea0d08Spefo li v0, SYS_sigprocmask 50*83762a71Sderaadt99: syscall 51*83762a71Sderaadt PINSYSCALL(SYS_sigprocmask, 99b) 52aa797096Sguenther bne a3, zero, .Lerr 53aa797096Sguenther beq a2, zero, .Lout # test if old mask requested 540eea0d08Spefo sw v0, 0(a2) # store old mask 55aa797096Sguenther.Lout: 560eea0d08Spefo move v0, zero 575738bc62Spefo RESTORE_GP64 585738bc62Spefo PTR_ADDU sp, FRAMESZ 590eea0d08Spefo j ra 60aa797096Sguenther.Lerr: 619372e0f0Sguenther LA t9, CERROR 625738bc62Spefo RESTORE_GP64 635738bc62Spefo PTR_ADDU sp, FRAMESZ 640eea0d08Spefo jr t9 655aed4d28SguentherSYSCALL_END_HIDDEN(sigprocmask) 66