xref: /openbsd-src/libexec/ld.so/hppa/SYS.h (revision 04459484ef65b24eeb35e1d5ee05aa2e814916db)
1 /*	$OpenBSD: SYS.h,v 1.3 2023/12/11 22:29:24 deraadt Exp $	*/
2 
3 /*
4  * Copyright (c) 2004 Michael Shalayeff
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
20  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22  * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
25  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
26  * THE POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #include <sys/syscall.h>
30 #include <machine/asm.h>
31 #define _LOCORE
32 #include <machine/frame.h>
33 #include <machine/vmparam.h>
34 #undef  _LOCORE
35 
36 #define PINSYSCALL(sysno, label)				\
37 	.pushsection .openbsd.syscalls,"",@progbits		!\
38 	.p2align 2						!\
39 	.long label						!\
40 	.long sysno						!\
41 	.popsection
42 
43 #define	DL_SYSCALL(x)						\
44 ENTRY(__CONCAT(_dl_,x),0)					!\
45 	stw	rp, HPPA_FRAME_ERP(sr0,sp)			!\
46 	ldil	L%SYSCALLGATE, r1				!\
47 99:	ble	4(sr7, r1)					!\
48 	PINSYSCALL(__CONCAT(SYS_,x), 99b)			!\
49 	 ldi	__CONCAT(SYS_,x), t1				!\
50 	comb,<>	r0, t1, _dl_sysexit				!\
51 	ldw	HPPA_FRAME_ERP(sr0,sp), rp			!\
52 	bv	r0(rp)						!\
53 	nop							!\
54 _dl_sysexit							!\
55 	bv	r0(rp)						!\
56 	sub	r0, ret0, ret0					!\
57 EXIT(__CONCAT(_dl_,x))
58