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