1*b247cc18Smiod /* $OpenBSD: SYS.h,v 1.27 2023/12/13 09:01:25 miod Exp $ */ 2b66d684dSmickey 3b66d684dSmickey /* 4401ee2a2Smickey * Copyright (c) 1998-2002 Michael Shalayeff 5b66d684dSmickey * All rights reserved. 6b66d684dSmickey * 7b66d684dSmickey * Redistribution and use in source and binary forms, with or without 8b66d684dSmickey * modification, are permitted provided that the following conditions 9b66d684dSmickey * are met: 10b66d684dSmickey * 1. Redistributions of source code must retain the above copyright 11b66d684dSmickey * notice, this list of conditions and the following disclaimer. 12b66d684dSmickey * 2. Redistributions in binary form must reproduce the above copyright 13b66d684dSmickey * notice, this list of conditions and the following disclaimer in the 14b66d684dSmickey * documentation and/or other materials provided with the distribution. 15b66d684dSmickey * 16b66d684dSmickey * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17b66d684dSmickey * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18b66d684dSmickey * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19b66d684dSmickey * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20b66d684dSmickey * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 216c68a1e1Smickey * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF MIND 226c68a1e1Smickey * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23b66d684dSmickey * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24b66d684dSmickey * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25b66d684dSmickey * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26b66d684dSmickey */ 27b66d684dSmickey 28b66d684dSmickey #include <sys/syscall.h> 29*b247cc18Smiod #include "DEFS.h" 306c68a1e1Smickey #undef _LOCORE 316c68a1e1Smickey #define _LOCORE 326c68a1e1Smickey #include <machine/frame.h> 33f86ce26aSmickey #include <machine/vmparam.h> 34401ee2a2Smickey #undef _LOCORE 35b66d684dSmickey 36fe38b55cSguenther /* offsetof(struct tib, tib_errno) - offsetof(struct tib, __tib_tcb) */ 37fe38b55cSguenther #define TCB_OFFSET_ERRNO -8 38fe38b55cSguenther 399b9d2a55Sguenther /* 409b9d2a55Sguenther * For functions implemented in ASM that aren't syscalls. 419b9d2a55Sguenther * EXIT_STRONG(x) Like DEF_STRONG() in C; for standard/reserved C names 429b9d2a55Sguenther * EXIT_WEAK(x) Like DEF_WEAK() in C; for non-ISO C names 439b9d2a55Sguenther */ 44041808feSguenther #define EXIT_STRONG(x) EXIT(x) !\ 45*b247cc18Smiod _HIDDEN_FALIAS(x,x) !\ 46*b247cc18Smiod _END(_HIDDEN(x)) 479b9d2a55Sguenther #define EXIT_WEAK(x) EXIT_STRONG(x) !\ 489b9d2a55Sguenther .weak x 499b9d2a55Sguenther 50dc9d23e8Skettenis #define SYSENTRY(x) !\ 51dc9d23e8Skettenis LEAF_ENTRY(__CONCAT(_thread_sys_,x)) !\ 52eca0a8dbSguenther WEAK_ALIAS(x,__CONCAT(_thread_sys_,x)) 53514a545fSguenther #define SYSENTRY_HIDDEN(x) !\ 54514a545fSguenther LEAF_ENTRY(__CONCAT(_thread_sys_,x)) 55fd68ca0eSmickey #define SYSEXIT(x) !\ 563f373d41Sguenther SYSEXIT_HIDDEN(x) !\ 57*b247cc18Smiod _END(x) 583f373d41Sguenther #define SYSEXIT_HIDDEN(x) !\ 593f373d41Sguenther EXIT(__CONCAT(_thread_sys_,x)) !\ 603f373d41Sguenther _HIDDEN_FALIAS(x,_thread_sys_##x) !\ 61*b247cc18Smiod _END(_HIDDEN(x)) 62b91d3663Smickey 63401ee2a2Smickey #define SYSCALL(x) !\ 646c68a1e1Smickey stw rp, HPPA_FRAME_ERP(sr0,sp) !\ 65b66d684dSmickey ldil L%SYSCALLGATE, r1 !\ 6683762a71Sderaadt 97: ble 4(sr7, r1) !\ 6783762a71Sderaadt PINSYSCALL(__CONCAT(SYS_,x), 97b) !\ 68bebf55ddSmickey ldi __CONCAT(SYS_,x), t1 !\ 69fe38b55cSguenther comb,= 0, t1, 1f !\ 70fe38b55cSguenther ldw HPPA_FRAME_ERP(sr0,sp), rp !\ 71fe38b55cSguenther /* set errno */ \ 72fe38b55cSguenther mfctl cr27, r1 !\ 73fe38b55cSguenther stw t1, TCB_OFFSET_ERRNO(r1) !\ 74fe38b55cSguenther ldi -1, ret0 !\ 75fe38b55cSguenther bv r0(rp) !\ 764c4efc0aSguenther ldi -1, ret1 /* for lseek */ !\ 77fe38b55cSguenther 1: 78bebf55ddSmickey 79401ee2a2Smickey #define PSEUDO(x,y) !\ 80dc9d23e8Skettenis SYSENTRY(x) !\ 81401ee2a2Smickey SYSCALL(y) !\ 82bebf55ddSmickey bv r0(rp) !\ 83bebf55ddSmickey nop !\ 84fd68ca0eSmickey SYSEXIT(x) 85514a545fSguenther #define PSEUDO_HIDDEN(x,y) !\ 86514a545fSguenther SYSENTRY_HIDDEN(x) !\ 87514a545fSguenther SYSCALL(y) !\ 88514a545fSguenther bv r0(rp) !\ 89514a545fSguenther nop !\ 903f373d41Sguenther SYSEXIT_HIDDEN(x) 91b66d684dSmickey 92401ee2a2Smickey #define PSEUDO_NOERROR(x,y) !\ 93dc9d23e8Skettenis SYSENTRY(x) !\ 94f86ce26aSmickey stw rp, HPPA_FRAME_ERP(sr0,sp) !\ 95f86ce26aSmickey ldil L%SYSCALLGATE, r1 !\ 9683762a71Sderaadt 97: ble 4(sr7, r1) !\ 97e8b0e862Sderaadt PINSYSCALL(__CONCAT(SYS_,y), 97b) !\ 98e8b0e862Sderaadt ldi __CONCAT(SYS_,y), t1 !\ 99f86ce26aSmickey ldw HPPA_FRAME_ERP(sr0,sp), rp !\ 100ba8732b6Smillert bv r0(rp) !\ 101ba8732b6Smillert nop !\ 102fd68ca0eSmickey SYSEXIT(x) 103ba8732b6Smillert 104401ee2a2Smickey #define RSYSCALL(x) PSEUDO(x,x) 105514a545fSguenther #define RSYSCALL_HIDDEN(x) PSEUDO_HIDDEN(x,x) 106