13ebc1248SPeter Wemm /*- 27f2d13d6SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 37f2d13d6SPedro F. Giffuni * 43ebc1248SPeter Wemm * Copyright (c) 1998-1999 Andrew Gallatin 53ebc1248SPeter Wemm * All rights reserved. 63ebc1248SPeter Wemm * 73ebc1248SPeter Wemm * Redistribution and use in source and binary forms, with or without 83ebc1248SPeter Wemm * modification, are permitted provided that the following conditions 93ebc1248SPeter Wemm * are met: 103ebc1248SPeter Wemm * 1. Redistributions of source code must retain the above copyright 113ebc1248SPeter Wemm * notice, this list of conditions and the following disclaimer 123ebc1248SPeter Wemm * in this position and unchanged. 133ebc1248SPeter Wemm * 2. Redistributions in binary form must reproduce the above copyright 143ebc1248SPeter Wemm * notice, this list of conditions and the following disclaimer in the 153ebc1248SPeter Wemm * documentation and/or other materials provided with the distribution. 163ebc1248SPeter Wemm * 3. The name of the author may not be used to endorse or promote products 173ebc1248SPeter Wemm * derived from this software withough specific prior written permission 183ebc1248SPeter Wemm * 193ebc1248SPeter Wemm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 203ebc1248SPeter Wemm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 213ebc1248SPeter Wemm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 223ebc1248SPeter Wemm * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 233ebc1248SPeter Wemm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 243ebc1248SPeter Wemm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 253ebc1248SPeter Wemm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 263ebc1248SPeter Wemm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 273ebc1248SPeter Wemm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 283ebc1248SPeter Wemm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 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> 37a9c9e80bSKonstantin Belousov #include <sys/uio.h> 38d47faadcSJohn Baldwin 393ebc1248SPeter Wemm #include <vm/vm.h> 403ebc1248SPeter Wemm #include <vm/vm_param.h> 413ebc1248SPeter Wemm #include <vm/pmap.h> 423ebc1248SPeter Wemm 431c7abef7SPeter Wemm struct freebsd32_ps_strings { 44cc5aa0a4SJohn Baldwin uint32_t ps_argvstr; /* first of 0 or more argument strings */ 453ebc1248SPeter Wemm int ps_nargvstr; /* the number of argument strings */ 46cc5aa0a4SJohn Baldwin uint32_t ps_envstr; /* first of 0 or more environment strings */ 473ebc1248SPeter Wemm int ps_nenvstr; /* the number of environment strings */ 483ebc1248SPeter Wemm }; 493ebc1248SPeter Wemm 50e7d939bdSMarcel Moolenaar #if defined(__amd64__) 5146159d1fSPeter Wemm #include <compat/ia32/ia32_util.h> 5246159d1fSPeter Wemm #endif 5346159d1fSPeter Wemm 541c7abef7SPeter Wemm #define FREEBSD32_PS_STRINGS \ 551c7abef7SPeter Wemm (FREEBSD32_USRSTACK - sizeof(struct freebsd32_ps_strings)) 56d47faadcSJohn Baldwin 5788ac915aSJohn Baldwin extern struct sysent freebsd32_sysent[]; 5888ac915aSJohn Baldwin 5988ac915aSJohn Baldwin #define SYSCALL32_MODULE(name, offset, new_sysent, evh, arg) \ 6088ac915aSJohn Baldwin static struct syscall_module_data name##_syscall32_mod = { \ 6188ac915aSJohn Baldwin evh, arg, offset, new_sysent, { 0, NULL } \ 6288ac915aSJohn Baldwin }; \ 6388ac915aSJohn Baldwin \ 6488ac915aSJohn Baldwin static moduledata_t name##32_mod = { \ 6599b331a9SKonstantin Belousov "sys32/" #name, \ 6688ac915aSJohn Baldwin syscall32_module_handler, \ 6788ac915aSJohn Baldwin &name##_syscall32_mod \ 6888ac915aSJohn Baldwin }; \ 6988ac915aSJohn Baldwin DECLARE_MODULE(name##32, name##32_mod, SI_SUB_SYSCALLS, SI_ORDER_MIDDLE) 7088ac915aSJohn Baldwin 7188ac915aSJohn Baldwin #define SYSCALL32_MODULE_HELPER(syscallname) \ 7288ac915aSJohn Baldwin static int syscallname##_syscall32 = FREEBSD32_SYS_##syscallname; \ 7388ac915aSJohn Baldwin static struct sysent syscallname##_sysent32 = { \ 7488ac915aSJohn Baldwin (sizeof(struct syscallname ## _args ) \ 7588ac915aSJohn Baldwin / sizeof(register_t)), \ 7688ac915aSJohn Baldwin (sy_call_t *)& syscallname \ 7788ac915aSJohn Baldwin }; \ 7888ac915aSJohn Baldwin SYSCALL32_MODULE(syscallname, \ 7988ac915aSJohn Baldwin & syscallname##_syscall32, & syscallname##_sysent32,\ 8088ac915aSJohn Baldwin NULL, NULL); 8188ac915aSJohn Baldwin 825cead591SKonstantin Belousov #define SYSCALL32_INIT_HELPER_F(syscallname, flags) { \ 830687ba3eSKonstantin Belousov .new_sysent = { \ 840687ba3eSKonstantin Belousov .sy_narg = (sizeof(struct syscallname ## _args ) \ 850687ba3eSKonstantin Belousov / sizeof(register_t)), \ 860687ba3eSKonstantin Belousov .sy_call = (sy_call_t *)& syscallname, \ 875cead591SKonstantin Belousov .sy_flags = (flags) \ 880687ba3eSKonstantin Belousov }, \ 890687ba3eSKonstantin Belousov .syscall_no = FREEBSD32_SYS_##syscallname \ 900687ba3eSKonstantin Belousov } 910687ba3eSKonstantin Belousov 925cead591SKonstantin Belousov #define SYSCALL32_INIT_HELPER_COMPAT_F(syscallname, flags) { \ 938451d0ddSKip Macy .new_sysent = { \ 948451d0ddSKip Macy .sy_narg = (sizeof(struct syscallname ## _args ) \ 958451d0ddSKip Macy / sizeof(register_t)), \ 968451d0ddSKip Macy .sy_call = (sy_call_t *)& sys_ ## syscallname, \ 975cead591SKonstantin Belousov .sy_flags = (flags) \ 988451d0ddSKip Macy }, \ 998451d0ddSKip Macy .syscall_no = FREEBSD32_SYS_##syscallname \ 1008451d0ddSKip Macy } 1018451d0ddSKip Macy 1025cead591SKonstantin Belousov #define SYSCALL32_INIT_HELPER(syscallname) \ 1035cead591SKonstantin Belousov SYSCALL32_INIT_HELPER_F(syscallname, 0) 1045cead591SKonstantin Belousov #define SYSCALL32_INIT_HELPER_COMPAT(syscallname) \ 1055cead591SKonstantin Belousov SYSCALL32_INIT_HELPER_COMPAT_F(syscallname, 0) 1065cead591SKonstantin Belousov 10788ac915aSJohn Baldwin int syscall32_module_handler(struct module *mod, int what, void *arg); 108e015b1abSMateusz Guzik int syscall32_helper_register(struct syscall_helper_data *sd, int flags); 1090687ba3eSKonstantin Belousov int syscall32_helper_unregister(struct syscall_helper_data *sd); 11088ac915aSJohn Baldwin 111c5e4763dSKonstantin Belousov struct iovec32; 1129847e91bSKonstantin Belousov struct rusage32; 11303b0d68cSJohn Baldwin int freebsd32_copyout_strings(struct image_params *imgp, 11431174518SJohn Baldwin uintptr_t *stack_base); 115c5e4763dSKonstantin Belousov int freebsd32_copyiniov(struct iovec32 *iovp, u_int iovcnt, 116c5e4763dSKonstantin Belousov struct iovec **iov, int error); 117694ef157SBrooks Davis int freebsd32_copyinuio(const struct iovec32 *iovp, u_int iovcnt, 118022ca2fcSAlan Somers struct uio **uiop); 1199847e91bSKonstantin Belousov void freebsd32_rusage_out(const struct rusage *s, struct rusage32 *s32); 1209847e91bSKonstantin Belousov 1210b53d156SKonstantin Belousov struct image_args; 12212e69f96SBrooks Davis int freebsd32_exec_copyin_args(struct image_args *args, const char *fname, 123*15581af7SWuyang Chung uint32_t *argv, uint32_t *envv); 124841c0c7eSNathan Whitehorn 125fa8fdd80SKonstantin Belousov struct kinfo_knote; 126fa8fdd80SKonstantin Belousov struct kinfo_knote32; 127fa8fdd80SKonstantin Belousov void freebsd32_kinfo_knote_to_32(const struct kinfo_knote *kin, 128fa8fdd80SKonstantin Belousov struct kinfo_knote32 *kin32); 129fa8fdd80SKonstantin Belousov 1305a2bbaceSKonstantin Belousov extern int compat_freebsd_32bit; 1315a2bbaceSKonstantin Belousov 132d47faadcSJohn Baldwin #endif /* !_COMPAT_FREEBSD32_FREEBSD32_UTIL_H_ */ 133