1 /*- 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3 * 4 * Copyright (c) 2001 Doug Rabson 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 AND CONTRIBUTORS ``AS IS'' AND 17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * 28 * $FreeBSD$ 29 */ 30 31 #ifndef _COMPAT_FREEBSD32_FREEBSD32_H_ 32 #define _COMPAT_FREEBSD32_FREEBSD32_H_ 33 34 #include <sys/procfs.h> 35 #include <sys/socket.h> 36 #include <sys/user.h> 37 38 #define PTRIN(v) (void *)(uintptr_t) (v) 39 #define PTROUT(v) (u_int32_t)(uintptr_t) (v) 40 41 #define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) 42 #define PTRIN_CP(src,dst,fld) \ 43 do { (dst).fld = PTRIN((src).fld); } while (0) 44 #define PTROUT_CP(src,dst,fld) \ 45 do { (dst).fld = PTROUT((src).fld); } while (0) 46 47 /* 48 * i386 is the only arch with a 32-bit time_t 49 */ 50 #ifdef __amd64__ 51 typedef int32_t time32_t; 52 #else 53 typedef int64_t time32_t; 54 #endif 55 56 struct timeval32 { 57 time32_t tv_sec; 58 int32_t tv_usec; 59 }; 60 #define TV_CP(src,dst,fld) do { \ 61 CP((src).fld,(dst).fld,tv_sec); \ 62 CP((src).fld,(dst).fld,tv_usec); \ 63 } while (0) 64 65 struct timespec32 { 66 time32_t tv_sec; 67 int32_t tv_nsec; 68 }; 69 #define TS_CP(src,dst,fld) do { \ 70 CP((src).fld,(dst).fld,tv_sec); \ 71 CP((src).fld,(dst).fld,tv_nsec); \ 72 } while (0) 73 74 struct itimerspec32 { 75 struct timespec32 it_interval; 76 struct timespec32 it_value; 77 }; 78 #define ITS_CP(src, dst) do { \ 79 TS_CP((src), (dst), it_interval); \ 80 TS_CP((src), (dst), it_value); \ 81 } while (0) 82 83 struct bintime32 { 84 time32_t sec; 85 uint32_t frac[2]; 86 }; 87 #define BT_CP(src, dst, fld) do { \ 88 CP((src).fld, (dst).fld, sec); \ 89 *(uint64_t *)&(dst).fld.frac[0] = (src).fld.frac; \ 90 } while (0) 91 92 struct rusage32 { 93 struct timeval32 ru_utime; 94 struct timeval32 ru_stime; 95 int32_t ru_maxrss; 96 int32_t ru_ixrss; 97 int32_t ru_idrss; 98 int32_t ru_isrss; 99 int32_t ru_minflt; 100 int32_t ru_majflt; 101 int32_t ru_nswap; 102 int32_t ru_inblock; 103 int32_t ru_oublock; 104 int32_t ru_msgsnd; 105 int32_t ru_msgrcv; 106 int32_t ru_nsignals; 107 int32_t ru_nvcsw; 108 int32_t ru_nivcsw; 109 }; 110 111 struct wrusage32 { 112 struct rusage32 wru_self; 113 struct rusage32 wru_children; 114 }; 115 116 struct itimerval32 { 117 struct timeval32 it_interval; 118 struct timeval32 it_value; 119 }; 120 121 #define FREEBSD4_MFSNAMELEN 16 122 #define FREEBSD4_MNAMELEN (88 - 2 * sizeof(int32_t)) 123 124 /* 4.x version */ 125 struct statfs32 { 126 int32_t f_spare2; 127 int32_t f_bsize; 128 int32_t f_iosize; 129 int32_t f_blocks; 130 int32_t f_bfree; 131 int32_t f_bavail; 132 int32_t f_files; 133 int32_t f_ffree; 134 fsid_t f_fsid; 135 uid_t f_owner; 136 int32_t f_type; 137 int32_t f_flags; 138 int32_t f_syncwrites; 139 int32_t f_asyncwrites; 140 char f_fstypename[FREEBSD4_MFSNAMELEN]; 141 char f_mntonname[FREEBSD4_MNAMELEN]; 142 int32_t f_syncreads; 143 int32_t f_asyncreads; 144 int16_t f_spares1; 145 char f_mntfromname[FREEBSD4_MNAMELEN]; 146 int16_t f_spares2 __packed; 147 int32_t f_spare[2]; 148 }; 149 150 struct iovec32 { 151 u_int32_t iov_base; 152 int iov_len; 153 }; 154 155 struct msghdr32 { 156 u_int32_t msg_name; 157 socklen_t msg_namelen; 158 u_int32_t msg_iov; 159 int msg_iovlen; 160 u_int32_t msg_control; 161 socklen_t msg_controllen; 162 int msg_flags; 163 }; 164 165 #if defined(__amd64__) 166 #define __STAT32_TIME_T_EXT 1 167 #endif 168 169 struct stat32 { 170 dev_t st_dev; 171 ino_t st_ino; 172 nlink_t st_nlink; 173 mode_t st_mode; 174 u_int16_t st_padding0; 175 uid_t st_uid; 176 gid_t st_gid; 177 u_int32_t st_padding1; 178 dev_t st_rdev; 179 #ifdef __STAT32_TIME_T_EXT 180 __int32_t st_atim_ext; 181 #endif 182 struct timespec32 st_atim; 183 #ifdef __STAT32_TIME_T_EXT 184 __int32_t st_mtim_ext; 185 #endif 186 struct timespec32 st_mtim; 187 #ifdef __STAT32_TIME_T_EXT 188 __int32_t st_ctim_ext; 189 #endif 190 struct timespec32 st_ctim; 191 #ifdef __STAT32_TIME_T_EXT 192 __int32_t st_btim_ext; 193 #endif 194 struct timespec32 st_birthtim; 195 off_t st_size; 196 int64_t st_blocks; 197 u_int32_t st_blksize; 198 u_int32_t st_flags; 199 u_int64_t st_gen; 200 u_int64_t st_spare[10]; 201 }; 202 struct freebsd11_stat32 { 203 u_int32_t st_dev; 204 u_int32_t st_ino; 205 mode_t st_mode; 206 u_int16_t st_nlink; 207 uid_t st_uid; 208 gid_t st_gid; 209 u_int32_t st_rdev; 210 struct timespec32 st_atim; 211 struct timespec32 st_mtim; 212 struct timespec32 st_ctim; 213 off_t st_size; 214 int64_t st_blocks; 215 u_int32_t st_blksize; 216 u_int32_t st_flags; 217 u_int32_t st_gen; 218 int32_t st_lspare; 219 struct timespec32 st_birthtim; 220 unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32)); 221 unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32)); 222 }; 223 224 struct ostat32 { 225 __uint16_t st_dev; 226 __uint32_t st_ino; 227 mode_t st_mode; 228 __uint16_t st_nlink; 229 __uint16_t st_uid; 230 __uint16_t st_gid; 231 __uint16_t st_rdev; 232 __int32_t st_size; 233 struct timespec32 st_atim; 234 struct timespec32 st_mtim; 235 struct timespec32 st_ctim; 236 __int32_t st_blksize; 237 __int32_t st_blocks; 238 u_int32_t st_flags; 239 __uint32_t st_gen; 240 }; 241 242 struct jail32_v0 { 243 u_int32_t version; 244 uint32_t path; 245 uint32_t hostname; 246 u_int32_t ip_number; 247 }; 248 249 struct jail32 { 250 uint32_t version; 251 uint32_t path; 252 uint32_t hostname; 253 uint32_t jailname; 254 uint32_t ip4s; 255 uint32_t ip6s; 256 uint32_t ip4; 257 uint32_t ip6; 258 }; 259 260 struct sigaction32 { 261 u_int32_t sa_u; 262 int sa_flags; 263 sigset_t sa_mask; 264 }; 265 266 struct thr_param32 { 267 uint32_t start_func; 268 uint32_t arg; 269 uint32_t stack_base; 270 uint32_t stack_size; 271 uint32_t tls_base; 272 uint32_t tls_size; 273 uint32_t child_tid; 274 uint32_t parent_tid; 275 int32_t flags; 276 uint32_t rtp; 277 uint32_t spare[3]; 278 }; 279 280 struct i386_ldt_args32 { 281 uint32_t start; 282 uint32_t descs; 283 uint32_t num; 284 }; 285 286 struct mq_attr32 { 287 int mq_flags; 288 int mq_maxmsg; 289 int mq_msgsize; 290 int mq_curmsgs; 291 int __reserved[4]; 292 }; 293 294 struct kinfo_proc32 { 295 int ki_structsize; 296 int ki_layout; 297 uint32_t ki_args; 298 uint32_t ki_paddr; 299 uint32_t ki_addr; 300 uint32_t ki_tracep; 301 uint32_t ki_textvp; 302 uint32_t ki_fd; 303 uint32_t ki_vmspace; 304 uint32_t ki_wchan; 305 pid_t ki_pid; 306 pid_t ki_ppid; 307 pid_t ki_pgid; 308 pid_t ki_tpgid; 309 pid_t ki_sid; 310 pid_t ki_tsid; 311 short ki_jobc; 312 short ki_spare_short1; 313 uint32_t ki_tdev_freebsd11; 314 sigset_t ki_siglist; 315 sigset_t ki_sigmask; 316 sigset_t ki_sigignore; 317 sigset_t ki_sigcatch; 318 uid_t ki_uid; 319 uid_t ki_ruid; 320 uid_t ki_svuid; 321 gid_t ki_rgid; 322 gid_t ki_svgid; 323 short ki_ngroups; 324 short ki_spare_short2; 325 gid_t ki_groups[KI_NGROUPS]; 326 uint32_t ki_size; 327 int32_t ki_rssize; 328 int32_t ki_swrss; 329 int32_t ki_tsize; 330 int32_t ki_dsize; 331 int32_t ki_ssize; 332 u_short ki_xstat; 333 u_short ki_acflag; 334 fixpt_t ki_pctcpu; 335 u_int ki_estcpu; 336 u_int ki_slptime; 337 u_int ki_swtime; 338 u_int ki_cow; 339 u_int64_t ki_runtime; 340 struct timeval32 ki_start; 341 struct timeval32 ki_childtime; 342 int ki_flag; 343 int ki_kiflag; 344 int ki_traceflag; 345 char ki_stat; 346 signed char ki_nice; 347 char ki_lock; 348 char ki_rqindex; 349 u_char ki_oncpu_old; 350 u_char ki_lastcpu_old; 351 char ki_tdname[TDNAMLEN+1]; 352 char ki_wmesg[WMESGLEN+1]; 353 char ki_login[LOGNAMELEN+1]; 354 char ki_lockname[LOCKNAMELEN+1]; 355 char ki_comm[COMMLEN+1]; 356 char ki_emul[KI_EMULNAMELEN+1]; 357 char ki_loginclass[LOGINCLASSLEN+1]; 358 char ki_moretdname[MAXCOMLEN-TDNAMLEN+1]; 359 char ki_sparestrings[46]; 360 int ki_spareints[KI_NSPARE_INT]; 361 uint64_t ki_tdev; 362 int ki_oncpu; 363 int ki_lastcpu; 364 int ki_tracer; 365 int ki_flag2; 366 int ki_fibnum; 367 u_int ki_cr_flags; 368 int ki_jid; 369 int ki_numthreads; 370 lwpid_t ki_tid; 371 struct priority ki_pri; 372 struct rusage32 ki_rusage; 373 struct rusage32 ki_rusage_ch; 374 uint32_t ki_pcb; 375 uint32_t ki_kstack; 376 uint32_t ki_udata; 377 uint32_t ki_tdaddr; 378 uint32_t ki_spareptrs[KI_NSPARE_PTR]; /* spare room for growth */ 379 int ki_sparelongs[KI_NSPARE_LONG]; 380 int ki_sflag; 381 int ki_tdflags; 382 }; 383 384 struct kinfo_sigtramp32 { 385 uint32_t ksigtramp_start; 386 uint32_t ksigtramp_end; 387 uint32_t ksigtramp_spare[4]; 388 }; 389 390 struct kld32_file_stat_1 { 391 int version; /* set to sizeof(struct kld_file_stat_1) */ 392 char name[MAXPATHLEN]; 393 int refs; 394 int id; 395 uint32_t address; /* load address */ 396 uint32_t size; /* size in bytes */ 397 }; 398 399 struct kld32_file_stat { 400 int version; /* set to sizeof(struct kld_file_stat) */ 401 char name[MAXPATHLEN]; 402 int refs; 403 int id; 404 uint32_t address; /* load address */ 405 uint32_t size; /* size in bytes */ 406 char pathname[MAXPATHLEN]; 407 }; 408 409 struct procctl_reaper_pids32 { 410 u_int rp_count; 411 u_int rp_pad0[15]; 412 uint32_t rp_pids; 413 }; 414 415 #endif /* !_COMPAT_FREEBSD32_FREEBSD32_H_ */ 416