xref: /freebsd/sys/compat/freebsd32/freebsd32_util.h (revision 99b331a982bbd7035c23f5029ea597fe3b9ff97c)
13ebc1248SPeter Wemm /*-
23ebc1248SPeter Wemm  * Copyright (c) 1998-1999 Andrew Gallatin
33ebc1248SPeter Wemm  * All rights reserved.
43ebc1248SPeter Wemm  *
53ebc1248SPeter Wemm  * Redistribution and use in source and binary forms, with or without
63ebc1248SPeter Wemm  * modification, are permitted provided that the following conditions
73ebc1248SPeter Wemm  * are met:
83ebc1248SPeter Wemm  * 1. Redistributions of source code must retain the above copyright
93ebc1248SPeter Wemm  *    notice, this list of conditions and the following disclaimer
103ebc1248SPeter Wemm  *    in this position and unchanged.
113ebc1248SPeter Wemm  * 2. Redistributions in binary form must reproduce the above copyright
123ebc1248SPeter Wemm  *    notice, this list of conditions and the following disclaimer in the
133ebc1248SPeter Wemm  *    documentation and/or other materials provided with the distribution.
143ebc1248SPeter Wemm  * 3. The name of the author may not be used to endorse or promote products
153ebc1248SPeter Wemm  *    derived from this software withough specific prior written permission
163ebc1248SPeter Wemm  *
173ebc1248SPeter Wemm  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
183ebc1248SPeter Wemm  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
193ebc1248SPeter Wemm  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
203ebc1248SPeter Wemm  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
213ebc1248SPeter Wemm  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
223ebc1248SPeter Wemm  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
233ebc1248SPeter Wemm  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
243ebc1248SPeter Wemm  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
253ebc1248SPeter Wemm  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
263ebc1248SPeter Wemm  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
273ebc1248SPeter Wemm  *
283ebc1248SPeter Wemm  * $FreeBSD$
293ebc1248SPeter Wemm  */
303ebc1248SPeter Wemm 
31d47faadcSJohn Baldwin #ifndef _COMPAT_FREEBSD32_FREEBSD32_UTIL_H_
32d47faadcSJohn Baldwin #define _COMPAT_FREEBSD32_FREEBSD32_UTIL_H_
33d47faadcSJohn Baldwin 
34d47faadcSJohn Baldwin #include <sys/cdefs.h>
35d47faadcSJohn Baldwin #include <sys/exec.h>
36d47faadcSJohn Baldwin #include <sys/sysent.h>
37d47faadcSJohn Baldwin 
383ebc1248SPeter Wemm #include <vm/vm.h>
393ebc1248SPeter Wemm #include <vm/vm_param.h>
403ebc1248SPeter Wemm #include <vm/pmap.h>
413ebc1248SPeter Wemm 
421c7abef7SPeter Wemm struct freebsd32_ps_strings {
433ebc1248SPeter Wemm 	u_int32_t ps_argvstr;	/* first of 0 or more argument strings */
443ebc1248SPeter Wemm 	int	ps_nargvstr;	/* the number of argument strings */
453ebc1248SPeter Wemm 	u_int32_t ps_envstr;	/* first of 0 or more environment strings */
463ebc1248SPeter Wemm 	int	ps_nenvstr;	/* the number of environment strings */
473ebc1248SPeter Wemm };
483ebc1248SPeter Wemm 
4946159d1fSPeter Wemm #if defined(__amd64__) || defined(__ia64__)
5046159d1fSPeter Wemm #include <compat/ia32/ia32_util.h>
5146159d1fSPeter Wemm #endif
5246159d1fSPeter Wemm 
531c7abef7SPeter Wemm #define FREEBSD32_PS_STRINGS	\
541c7abef7SPeter Wemm 	(FREEBSD32_USRSTACK - sizeof(struct freebsd32_ps_strings))
55d47faadcSJohn Baldwin 
5688ac915aSJohn Baldwin extern struct sysent freebsd32_sysent[];
5788ac915aSJohn Baldwin 
5888ac915aSJohn Baldwin #define SYSCALL32_MODULE(name, offset, new_sysent, evh, arg)   \
5988ac915aSJohn Baldwin static struct syscall_module_data name##_syscall32_mod = {     \
6088ac915aSJohn Baldwin        evh, arg, offset, new_sysent, { 0, NULL }               \
6188ac915aSJohn Baldwin };                                                             \
6288ac915aSJohn Baldwin                                                                \
6388ac915aSJohn Baldwin static moduledata_t name##32_mod = {                           \
6499b331a9SKonstantin Belousov        "sys32/" #name,                                         \
6588ac915aSJohn Baldwin        syscall32_module_handler,                               \
6688ac915aSJohn Baldwin        &name##_syscall32_mod                                   \
6788ac915aSJohn Baldwin };                                                             \
6888ac915aSJohn Baldwin DECLARE_MODULE(name##32, name##32_mod, SI_SUB_SYSCALLS, SI_ORDER_MIDDLE)
6988ac915aSJohn Baldwin 
7088ac915aSJohn Baldwin #define SYSCALL32_MODULE_HELPER(syscallname)            \
7188ac915aSJohn Baldwin static int syscallname##_syscall32 = FREEBSD32_SYS_##syscallname; \
7288ac915aSJohn Baldwin static struct sysent syscallname##_sysent32 = {         \
7388ac915aSJohn Baldwin     (sizeof(struct syscallname ## _args )               \
7488ac915aSJohn Baldwin      / sizeof(register_t)),                             \
7588ac915aSJohn Baldwin     (sy_call_t *)& syscallname                          \
7688ac915aSJohn Baldwin };                                                      \
7788ac915aSJohn Baldwin SYSCALL32_MODULE(syscallname,                           \
7888ac915aSJohn Baldwin     & syscallname##_syscall32, & syscallname##_sysent32,\
7988ac915aSJohn Baldwin     NULL, NULL);
8088ac915aSJohn Baldwin 
8188ac915aSJohn Baldwin int    syscall32_register(int *offset, struct sysent *new_sysent,
8288ac915aSJohn Baldwin 	    struct sysent *old_sysent);
8388ac915aSJohn Baldwin int    syscall32_deregister(int *offset, struct sysent *old_sysent);
8488ac915aSJohn Baldwin int    syscall32_module_handler(struct module *mod, int what, void *arg);
8588ac915aSJohn Baldwin 
86841c0c7eSNathan Whitehorn register_t *freebsd32_copyout_strings(struct image_params *imgp);
87c5e4763dSKonstantin Belousov struct iovec32;
88c5e4763dSKonstantin Belousov int	freebsd32_copyiniov(struct iovec32 *iovp, u_int iovcnt,
89c5e4763dSKonstantin Belousov 	    struct iovec **iov, int error);
90841c0c7eSNathan Whitehorn 
91d47faadcSJohn Baldwin #endif /* !_COMPAT_FREEBSD32_FREEBSD32_UTIL_H_ */
92