Index: sys/amd64/linux/linux.h =================================================================== --- sys/amd64/linux/linux.h +++ sys/amd64/linux/linux.h @@ -32,6 +32,8 @@ #ifndef _AMD64_LINUX_H_ #define _AMD64_LINUX_H_ +#include + #include #include @@ -39,14 +41,6 @@ #define LINUX_DTRACE linuxulator -#define PTRIN(v) (void *)(v) -#define PTROUT(v) (uintptr_t)(v) - -#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) -#define CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0) -#define PTRIN_CP(src,dst,fld) \ - do { (dst).fld = PTRIN((src).fld); } while (0) - /* * Provide a separate set of types for the Linux types. */ Index: sys/amd64/linux32/linux.h =================================================================== --- sys/amd64/linux32/linux.h +++ sys/amd64/linux32/linux.h @@ -35,6 +35,8 @@ #ifndef _AMD64_LINUX_H_ #define _AMD64_LINUX_H_ +#include + #include #include @@ -52,14 +54,6 @@ #define LINUX32_MAXSSIZ (64 * 1024 * 1024) /* 64MB */ #define LINUX32_MAXVMEM 0 /* Unlimited */ -#define PTRIN(v) (void *)(uintptr_t)(v) -#define PTROUT(v) (l_uintptr_t)(uintptr_t)(v) - -#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) -#define CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0) -#define PTRIN_CP(src,dst,fld) \ - do { (dst).fld = PTRIN((src).fld); } while (0) - /* * Provide a separate set of types for the Linux types. */ Index: sys/arm64/linux/linux.h =================================================================== --- sys/arm64/linux/linux.h +++ sys/arm64/linux/linux.h @@ -31,19 +31,13 @@ #ifndef _ARM64_LINUX_H_ #define _ARM64_LINUX_H_ +#include + #include #include #define LINUX_DTRACE linuxulator -#define PTRIN(v) (void *)(v) -#define PTROUT(v) (uintptr_t)(v) - -#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) -#define CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0) -#define PTRIN_CP(src,dst,fld) \ - do { (dst).fld = PTRIN((src).fld); } while (0) - /* Provide a separate set of types for the Linux types */ typedef int32_t l_int; typedef int64_t l_long; Index: sys/compat/freebsd32/freebsd32.h =================================================================== --- sys/compat/freebsd32/freebsd32.h +++ sys/compat/freebsd32/freebsd32.h @@ -31,19 +31,11 @@ #ifndef _COMPAT_FREEBSD32_FREEBSD32_H_ #define _COMPAT_FREEBSD32_FREEBSD32_H_ +#include #include #include #include -#define PTRIN(v) (void *)(uintptr_t) (v) -#define PTROUT(v) (u_int32_t)(uintptr_t) (v) - -#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) -#define PTRIN_CP(src,dst,fld) \ - do { (dst).fld = PTRIN((src).fld); } while (0) -#define PTROUT_CP(src,dst,fld) \ - do { (dst).fld = PTROUT((src).fld); } while (0) - /* * i386 is the only arch with a 32-bit time_t */ @@ -57,37 +49,21 @@ time32_t tv_sec; int32_t tv_usec; }; -#define TV_CP(src,dst,fld) do { \ - CP((src).fld,(dst).fld,tv_sec); \ - CP((src).fld,(dst).fld,tv_usec); \ -} while (0) struct timespec32 { time32_t tv_sec; int32_t tv_nsec; }; -#define TS_CP(src,dst,fld) do { \ - CP((src).fld,(dst).fld,tv_sec); \ - CP((src).fld,(dst).fld,tv_nsec); \ -} while (0) struct itimerspec32 { struct timespec32 it_interval; struct timespec32 it_value; }; -#define ITS_CP(src, dst) do { \ - TS_CP((src), (dst), it_interval); \ - TS_CP((src), (dst), it_value); \ -} while (0) struct bintime32 { time32_t sec; uint32_t frac[2]; }; -#define BT_CP(src, dst, fld) do { \ - CP((src).fld, (dst).fld, sec); \ - *(uint64_t *)&(dst).fld.frac[0] = (src).fld.frac; \ -} while (0) struct rusage32 { struct timeval32 ru_utime; Index: sys/compat/linux/linux_ioctl.c =================================================================== --- sys/compat/linux/linux_ioctl.c +++ sys/compat/linux/linux_ioctl.c @@ -34,6 +34,9 @@ #include #include #include +#ifdef COMPAT_LINUX32 +#include +#endif #include #include #include @@ -2543,12 +2546,6 @@ } #ifdef COMPAT_LINUX32 -#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) -#define PTRIN_CP(src,dst,fld) \ - do { (dst).fld = PTRIN((src).fld); } while (0) -#define PTROUT_CP(src,dst,fld) \ - do { (dst).fld = PTROUT((src).fld); } while (0) - static int linux_ioctl_sg_io(struct thread *td, struct linux_ioctl_args *args) { Index: sys/compat/linux/linux_timer.h =================================================================== --- sys/compat/linux/linux_timer.h +++ sys/compat/linux/linux_timer.h @@ -33,6 +33,8 @@ #ifndef _LINUX_TIMER_H #define _LINUX_TIMER_H +#include + #ifndef __LINUX_ARCH_SIGEV_PREAMBLE_SIZE #define __LINUX_ARCH_SIGEV_PREAMBLE_SIZE \ (sizeof(l_int) * 2 + sizeof(l_sigval_t)) @@ -79,16 +81,6 @@ #define L_SIGEV_THREAD 2 #define L_SIGEV_THREAD_ID 4 -#define TS_CP(src,dst,fld) do { \ - CP((src).fld,(dst).fld,tv_sec); \ - CP((src).fld,(dst).fld,tv_nsec); \ -} while (0) - -#define ITS_CP(src, dst) do { \ - TS_CP((src), (dst), it_interval); \ - TS_CP((src), (dst), it_value); \ -} while (0) - struct l_sigevent { l_sigval_t sigev_value; l_int sigev_signo; Index: sys/dev/ipmi/ipmi.c =================================================================== --- sys/dev/ipmi/ipmi.c +++ sys/dev/ipmi/ipmi.c @@ -55,6 +55,10 @@ #include #endif +#ifdef IPMICTL_SEND_COMMAND_32 +#include +#endif + /* * Driver request structures are allocated on the stack via alloca() to * avoid calling malloc(), especially for the watchdog handler. @@ -315,11 +319,6 @@ } #endif -#ifdef IPMICTL_SEND_COMMAND_32 -#define PTRIN(p) ((void *)(uintptr_t)(p)) -#define PTROUT(p) ((uintptr_t)(p)) -#endif - static int ipmi_ioctl(struct cdev *cdev, u_long cmd, caddr_t data, int flags, struct thread *td) Index: sys/dev/mpr/mpr_user.c =================================================================== --- sys/dev/mpr/mpr_user.c +++ sys/dev/mpr/mpr_user.c @@ -74,6 +74,9 @@ #include #include #include +#ifdef COMPAT_FREEBSD32 +#include +#endif #include #include #include @@ -178,16 +181,6 @@ static MALLOC_DEFINE(M_MPRUSER, "mpr_user", "Buffers for mpr(4) ioctls"); -/* Macros from compat/freebsd32/freebsd32.h */ -#define PTRIN(v) (void *)(uintptr_t)(v) -#define PTROUT(v) (uint32_t)(uintptr_t)(v) - -#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) -#define PTRIN_CP(src,dst,fld) \ - do { (dst).fld = PTRIN((src).fld); } while (0) -#define PTROUT_CP(src,dst,fld) \ - do { (dst).fld = PTROUT((src).fld); } while (0) - /* * MPI functions that support IEEE SGLs for SAS3. */ Index: sys/dev/mps/mps_user.c =================================================================== --- sys/dev/mps/mps_user.c +++ sys/dev/mps/mps_user.c @@ -75,6 +75,9 @@ #include #include #include +#ifdef COMPAT_FREEBSD32 +#include +#endif #include #include #include @@ -180,16 +183,6 @@ MALLOC_DEFINE(M_MPSUSER, "mps_user", "Buffers for mps(4) ioctls"); -/* Macros from compat/freebsd32/freebsd32.h */ -#define PTRIN(v) (void *)(uintptr_t)(v) -#define PTROUT(v) (uint32_t)(uintptr_t)(v) - -#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) -#define PTRIN_CP(src,dst,fld) \ - do { (dst).fld = PTRIN((src).fld); } while (0) -#define PTROUT_CP(src,dst,fld) \ - do { (dst).fld = PTROUT((src).fld); } while (0) - int mps_attach_user(struct mps_softc *sc) { Index: sys/dev/mpt/mpt_user.c =================================================================== --- sys/dev/mpt/mpt_user.c +++ sys/dev/mpt/mpt_user.c @@ -36,6 +36,9 @@ __FBSDID("$FreeBSD$"); #include +#ifdef __amd64__ +#include +#endif #include #include #include @@ -588,11 +591,6 @@ return (0); } -#ifdef __amd64__ -#define PTRIN(p) ((void *)(uintptr_t)(p)) -#define PTROUT(v) ((u_int32_t)(uintptr_t)(v)) -#endif - static int mpt_ioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td) { Index: sys/i386/linux/linux.h =================================================================== --- sys/i386/linux/linux.h +++ sys/i386/linux/linux.h @@ -30,6 +30,7 @@ #ifndef _I386_LINUX_H_ #define _I386_LINUX_H_ +#include #include /* for sigval union */ #include @@ -42,14 +43,6 @@ #define LINUX_SHAREDPAGE (VM_MAXUSER_ADDRESS - PAGE_SIZE) #define LINUX_USRSTACK LINUX_SHAREDPAGE -#define PTRIN(v) (void *)(v) -#define PTROUT(v) (l_uintptr_t)(v) - -#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) -#define CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0) -#define PTRIN_CP(src,dst,fld) \ - do { (dst).fld = PTRIN((src).fld); } while (0) - /* * Provide a separate set of types for the Linux types. */ Index: sys/kern/sysv_sem.c =================================================================== --- sys/kern/sysv_sem.c +++ sys/kern/sysv_sem.c @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -1752,10 +1753,6 @@ return (error); } -#ifndef CP -#define CP(src, dst, fld) do { (dst).fld = (src).fld; } while (0) -#endif - #ifndef _SYS_SYSPROTO_H_ struct freebsd7___semctl_args { int semid; Index: sys/kern/sysv_shm.c =================================================================== --- sys/kern/sysv_shm.c +++ sys/kern/sysv_shm.c @@ -75,6 +75,7 @@ #include #include +#include #include #include #include @@ -1593,10 +1594,6 @@ #if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \ defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7) -#ifndef CP -#define CP(src, dst, fld) do { (dst).fld = (src).fld; } while (0) -#endif - #ifndef _SYS_SYSPROTO_H_ struct freebsd7_shmctl_args { int shmid; Index: sys/sys/compat.h =================================================================== --- /dev/null +++ sys/sys/compat.h @@ -0,0 +1,68 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2001 Doug Rabson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _COMPAT_H_ +#define _COMPAT_H_ + +/* + * Helper macros for translating objects between different ABIs. + */ + +#define PTRIN(v) (void *)(uintptr_t) (v) +#define PTROUT(v) (uintptr_t) (v) + +#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) +#define CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0) +#define PTRIN_CP(src,dst,fld) \ + do { (dst).fld = PTRIN((src).fld); } while (0) +#define PTROUT_CP(src,dst,fld) \ + do { (dst).fld = PTROUT((src).fld); } while (0) + +#define TV_CP(src,dst,fld) do { \ + CP((src).fld,(dst).fld,tv_sec); \ + CP((src).fld,(dst).fld,tv_usec); \ +} while (0) + +#define TS_CP(src,dst,fld) do { \ + CP((src).fld,(dst).fld,tv_sec); \ + CP((src).fld,(dst).fld,tv_nsec); \ +} while (0) + +#define ITS_CP(src, dst) do { \ + TS_CP((src), (dst), it_interval); \ + TS_CP((src), (dst), it_value); \ +} while (0) + +#define BT_CP(src, dst, fld) do { \ + CP((src).fld, (dst).fld, sec); \ + *(uint64_t *)&(dst).fld.frac[0] = (src).fld.frac; \ +} while (0) + +#endif /* !_COMPAT_H_ */