xref: /src/sys/compat/freebsd32/freebsd32.h (revision 7c2fc4419db43a8a7d1886b0b8e08aa97bfa31e4)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
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 
29 #ifndef _COMPAT_FREEBSD32_FREEBSD32_H_
30 #define _COMPAT_FREEBSD32_FREEBSD32_H_
31 
32 #include <sys/abi_compat.h>
33 #include <sys/devicestat.h>
34 #include <sys/event.h>
35 #include <sys/mount.h>
36 #include <sys/procfs.h>
37 #include <sys/socket.h>
38 #include <sys/user.h>
39 #include <sys/_ffcounter.h>
40 
41 struct timeval32 {
42 	time32_t tv_sec;
43 	int32_t tv_usec;
44 };
45 
46 struct timespec32 {
47 	time32_t tv_sec;
48 	int32_t tv_nsec;
49 };
50 
51 struct itimerspec32 {
52 	struct timespec32  it_interval;
53 	struct timespec32  it_value;
54 };
55 
56 struct bintime32 {
57 	time32_t sec;
58 	freebsd32_uint64_t frac;
59 };
60 
61 struct ffclock_estimate32 {
62 	struct bintime32 update_time;
63 	freebsd32_uint64_t update_ffcount;
64 	freebsd32_uint64_t leapsec_next;
65 	freebsd32_uint64_t period;
66 	uint32_t errb_abs;
67 	uint32_t errb_rate;
68 	uint32_t status;
69 	int16_t leapsec_total;
70 	int8_t leapsec;
71 	int8_t _pad;
72 };
73 _Static_assert(sizeof(ffcounter) == sizeof(freebsd32_uint64_t),
74     "'ffcounter' size discrepancy'");
75 #if defined(__amd64__) || defined(__i386__)
76 _Static_assert(sizeof(struct ffclock_estimate32) == 52, "ffclock_estimate32 size");
77 #else
78 _Static_assert(sizeof(struct ffclock_estimate32) == 56, "ffclock_estimate32 size");
79 #endif
80 
81 struct rusage32 {
82 	struct timeval32 ru_utime;
83 	struct timeval32 ru_stime;
84 	int32_t	ru_maxrss;
85 	int32_t	ru_ixrss;
86 	int32_t	ru_idrss;
87 	int32_t	ru_isrss;
88 	int32_t	ru_minflt;
89 	int32_t	ru_majflt;
90 	int32_t	ru_nswap;
91 	int32_t	ru_inblock;
92 	int32_t	ru_oublock;
93 	int32_t	ru_msgsnd;
94 	int32_t	ru_msgrcv;
95 	int32_t	ru_nsignals;
96 	int32_t	ru_nvcsw;
97 	int32_t	ru_nivcsw;
98 };
99 
100 struct __wrusage32 {
101 	struct rusage32	wru_self;
102 	struct rusage32 wru_children;
103 };
104 
105 struct itimerval32 {
106 	struct timeval32 it_interval;
107 	struct timeval32 it_value;
108 };
109 
110 struct umtx_time32 {
111 	struct	timespec32	_timeout;
112 	uint32_t		_flags;
113 	uint32_t		_clockid;
114 };
115 
116 struct umtx_robust_lists_params_compat32 {
117 	uint32_t	robust_list_offset;
118 	uint32_t	robust_priv_list_offset;
119 	uint32_t	robust_inact_offset;
120 };
121 
122 struct umutex32 {
123 	volatile __lwpid_t	m_owner;	/* Owner of the mutex */
124 	__uint32_t		m_flags;	/* Flags of the mutex */
125 	__uint32_t		m_ceilings[2];	/* Priority protect ceiling */
126 	__uint32_t		m_rb_lnk;	/* Robust linkage */
127 	__uint32_t		m_pad;
128 	__uint32_t		m_spare[2];
129 };
130 
131 #define FREEBSD4_OMFSNAMELEN	16
132 #define FREEBSD4_OMNAMELEN	(88 - 2 * sizeof(int32_t))
133 
134 /* 4.x version */
135 struct ostatfs32 {
136 	int32_t	f_spare2;
137 	int32_t	f_bsize;
138 	int32_t	f_iosize;
139 	int32_t	f_blocks;
140 	int32_t	f_bfree;
141 	int32_t	f_bavail;
142 	int32_t	f_files;
143 	int32_t	f_ffree;
144 	fsid_t	f_fsid;
145 	uid_t	f_owner;
146 	int32_t	f_type;
147 	int32_t	f_flags;
148 	int32_t	f_syncwrites;
149 	int32_t	f_asyncwrites;
150 	char	f_fstypename[FREEBSD4_OMFSNAMELEN];
151 	char	f_mntonname[FREEBSD4_OMNAMELEN];
152 	int32_t	f_syncreads;
153 	int32_t	f_asyncreads;
154 	int16_t	f_spares1;
155 	char	f_mntfromname[FREEBSD4_OMNAMELEN];
156 	int16_t	f_spares2 __packed;
157 	int32_t f_spare[2];
158 };
159 
160 struct nstat32 {
161 	__uint32_t st_dev;		/* inode's device */
162 	__uint32_t st_ino;		/* inode's number */
163 	__uint32_t st_mode;		/* inode protection mode */
164 	__uint32_t st_nlink;		/* number of hard links */
165 	uid_t	  st_uid;		/* user ID of the file's owner */
166 	gid_t	  st_gid;		/* group ID of the file's group */
167 	__uint32_t st_rdev;		/* device type */
168 	struct	timespec32 st_atim;	/* time of last access */
169 	struct	timespec32 st_mtim;	/* time of last data modification */
170 	struct	timespec32 st_ctim;	/* time of last file status change */
171 	off_t	  st_size;		/* file size, in bytes */
172 	blkcnt_t st_blocks;		/* blocks allocated for file */
173 	blksize_t st_blksize;		/* optimal blocksize for I/O */
174 	fflags_t  st_flags;		/* user defined flags for file */
175 	__uint32_t st_gen;		/* file generation number */
176 	struct timespec32 st_birthtim;	/* time of file creation */
177 	/*
178 	 * See comment in the definition of struct freebsd11_stat
179 	 * in sys/stat.h about the following padding.
180 	 */
181 	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
182 	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
183 };
184 
185 struct iovec32 {
186 	uint32_t iov_base;
187 	int	iov_len;
188 };
189 
190 struct msghdr32 {
191 	uint32_t	 msg_name;
192 	socklen_t	 msg_namelen;
193 	uint32_t	 msg_iov;
194 	int		 msg_iovlen;
195 	uint32_t	 msg_control;
196 	socklen_t	 msg_controllen;
197 	int		 msg_flags;
198 };
199 
200 #if defined(__amd64__)
201 #define	__STAT32_TIME_T_EXT	1
202 #endif
203 
204 struct stat32 {
205 	dev_t st_dev;
206 	ino_t st_ino;
207 	nlink_t st_nlink;
208 	mode_t	st_mode;
209 	uint16_t st_bsdflags;
210 	uid_t	st_uid;
211 	gid_t	st_gid;
212 	uint32_t st_padding1;
213 	dev_t st_rdev;
214 #ifdef	__STAT32_TIME_T_EXT
215 	__int32_t st_atim_ext;
216 #endif
217 	struct timespec32 st_atim;
218 #ifdef	__STAT32_TIME_T_EXT
219 	__int32_t st_mtim_ext;
220 #endif
221 	struct timespec32 st_mtim;
222 #ifdef	__STAT32_TIME_T_EXT
223 	__int32_t st_ctim_ext;
224 #endif
225 	struct timespec32 st_ctim;
226 #ifdef	__STAT32_TIME_T_EXT
227 	__int32_t st_btim_ext;
228 #endif
229 	struct timespec32 st_birthtim;
230 	off_t	st_size;
231 	freebsd32_uint64_t st_blocks;
232 	uint32_t st_blksize;
233 	uint32_t st_flags;
234 	freebsd32_uint64_t st_gen;
235 	freebsd32_uint64_t st_filerev;
236 	freebsd32_uint64_t st_spare[9];
237 };
238 struct freebsd11_stat32 {
239 	uint32_t st_dev;
240 	uint32_t st_ino;
241 	mode_t	st_mode;
242 	uint16_t st_nlink;
243 	uid_t	st_uid;
244 	gid_t	st_gid;
245 	uint32_t st_rdev;
246 	struct timespec32 st_atim;
247 	struct timespec32 st_mtim;
248 	struct timespec32 st_ctim;
249 	off_t	st_size;
250 	freebsd32_uint64_t st_blocks;
251 	uint32_t st_blksize;
252 	uint32_t st_flags;
253 	uint32_t st_gen;
254 	int32_t	st_lspare;
255 	struct timespec32 st_birthtim;
256 	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
257 	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
258 };
259 
260 struct ostat32 {
261 	__uint16_t st_dev;
262 	__uint32_t st_ino;
263 	mode_t	st_mode;
264 	__uint16_t st_nlink;
265 	__uint16_t st_uid;
266 	__uint16_t st_gid;
267 	__uint16_t st_rdev;
268 	__int32_t st_size;
269 	struct timespec32 st_atim;
270 	struct timespec32 st_mtim;
271 	struct timespec32 st_ctim;
272 	__int32_t st_blksize;
273 	__int32_t st_blocks;
274 	uint32_t st_flags;
275 	__uint32_t st_gen;
276 };
277 
278 struct jail32_v0 {
279 	uint32_t	version;
280 	uint32_t	path;
281 	uint32_t	hostname;
282 	uint32_t	ip_number;
283 };
284 
285 struct jail32 {
286 	uint32_t	version;
287 	uint32_t	path;
288 	uint32_t	hostname;
289 	uint32_t	jailname;
290 	uint32_t	ip4s;
291 	uint32_t	ip6s;
292 	uint32_t	ip4;
293 	uint32_t	ip6;
294 };
295 
296 struct sigaction32 {
297 	uint32_t	sa_u;
298 	int		sa_flags;
299 	sigset_t	sa_mask;
300 };
301 
302 struct thr_param32 {
303 	uint32_t start_func;
304 	uint32_t arg;
305 	uint32_t stack_base;
306 	uint32_t stack_size;
307 	uint32_t tls_base;
308 	uint32_t tls_size;
309 	uint32_t child_tid;
310 	uint32_t parent_tid;
311 	int32_t	 flags;
312 	uint32_t rtp;
313 	uint32_t spare[3];
314 };
315 
316 struct i386_ldt_args32 {
317 	uint32_t start;
318 	uint32_t descs;
319 	uint32_t num;
320 };
321 
322 struct mq_attr32 {
323 	int	mq_flags;
324 	int	mq_maxmsg;
325 	int	mq_msgsize;
326 	int	mq_curmsgs;
327 	int	__reserved[4];
328 };
329 
330 struct kinfo_proc32 {
331 	int	ki_structsize;
332 	int	ki_layout;
333 	uint32_t ki_args;
334 	uint32_t ki_paddr;
335 	uint32_t ki_addr;
336 	uint32_t ki_tracep;
337 	uint32_t ki_textvp;
338 	uint32_t ki_fd;
339 	uint32_t ki_vmspace;
340 	uint32_t ki_wchan;
341 	pid_t	ki_pid;
342 	pid_t	ki_ppid;
343 	pid_t	ki_pgid;
344 	pid_t	ki_tpgid;
345 	pid_t	ki_sid;
346 	pid_t	ki_tsid;
347 	short	ki_jobc;
348 	short	ki_spare_short1;
349 	uint32_t ki_tdev_freebsd11;
350 	sigset_t ki_siglist;
351 	sigset_t ki_sigmask;
352 	sigset_t ki_sigignore;
353 	sigset_t ki_sigcatch;
354 	uid_t	ki_uid;
355 	uid_t	ki_ruid;
356 	uid_t	ki_svuid;
357 	gid_t	ki_rgid;
358 	gid_t	ki_svgid;
359 	short	ki_ngroups;
360 	short	ki_spare_short2;
361 	gid_t 	ki_groups[KI_NGROUPS];
362 	uint32_t ki_size;
363 	int32_t ki_rssize;
364 	int32_t ki_swrss;
365 	int32_t ki_tsize;
366 	int32_t ki_dsize;
367 	int32_t ki_ssize;
368 	u_short	ki_xstat;
369 	u_short	ki_acflag;
370 	fixpt_t	ki_pctcpu;
371 	u_int	ki_estcpu;
372 	u_int	ki_slptime;
373 	u_int	ki_swtime;
374 	u_int	ki_cow;
375 	freebsd32_uint64_t ki_runtime;
376 	struct	timeval32 ki_start;
377 	struct	timeval32 ki_childtime;
378 	int	ki_flag;
379 	int	ki_kiflag;
380 	int	ki_traceflag;
381 	char	ki_stat;
382 	signed char ki_nice;
383 	char	ki_lock;
384 	char	ki_rqindex;
385 	u_char	ki_oncpu_old;
386 	u_char	ki_lastcpu_old;
387 	char	ki_tdname[TDNAMLEN+1];
388 	char	ki_wmesg[WMESGLEN+1];
389 	char	ki_login[LOGNAMELEN+1];
390 	char	ki_lockname[LOCKNAMELEN+1];
391 	char	ki_comm[COMMLEN+1];
392 	char	ki_emul[KI_EMULNAMELEN+1];
393 	char	ki_loginclass[LOGINCLASSLEN+1];
394 	char	ki_moretdname[MAXCOMLEN-TDNAMLEN+1];
395 	char	ki_sparestrings[46];
396 	int	ki_spareints[KI_NSPARE_INT];
397 	freebsd32_uint64_t ki_tdev;
398 	int	ki_oncpu;
399 	int	ki_lastcpu;
400 	int	ki_tracer;
401 	int	ki_flag2;
402 	int	ki_fibnum;
403 	u_int	ki_cr_flags;
404 	int	ki_jid;
405 	int	ki_numthreads;
406 	lwpid_t	ki_tid;
407 	struct	priority ki_pri;
408 	struct	rusage32 ki_rusage;
409 	struct	rusage32 ki_rusage_ch;
410 	uint32_t ki_pcb;
411 	uint32_t ki_kstack;
412 	uint32_t ki_udata;
413 	uint32_t ki_tdaddr;
414 	uint32_t ki_pd;
415 	uint32_t ki_uerrmsg;
416 	uint32_t ki_spareptrs[KI_NSPARE_PTR];	/* spare room for growth */
417 	int	ki_sparelongs[KI_NSPARE_LONG];
418 	int	ki_sflag;
419 	int	ki_tdflags;
420 };
421 
422 struct kinfo_sigtramp32 {
423 	uint32_t ksigtramp_start;
424 	uint32_t ksigtramp_end;
425 	uint32_t ksigtramp_spare[4];
426 };
427 
428 struct kinfo_vm_layout32 {
429 	uint32_t	kvm_min_user_addr;
430 	uint32_t	kvm_max_user_addr;
431 	uint32_t	kvm_text_addr;
432 	uint32_t	kvm_text_size;
433 	uint32_t	kvm_data_addr;
434 	uint32_t	kvm_data_size;
435 	uint32_t	kvm_stack_addr;
436 	uint32_t	kvm_stack_size;
437 	int		kvm_map_flags;
438 	uint32_t	kvm_shp_addr;
439 	uint32_t	kvm_shp_size;
440 	uint32_t	kvm_spare[12];
441 };
442 
443 #if defined(_WANT_KEVENT32) || defined(_KERNEL)
444 struct kinfo_knote32 {
445 	int		knt_kq_fd;
446 	struct kevent32	knt_event;
447 	int		knt_status;
448 	int		knt_extdata;
449 	uint32_t	knt_spare0[8];
450 	union {
451 		struct {
452 			int		knt_vnode_type;
453 			freebsd32_uint64_t knt_vnode_fsid;
454 			freebsd32_uint64_t knt_vnode_fileid;
455 			char		knt_vnode_fullpath[PATH_MAX];
456 		} knt_vnode;
457 		struct {
458 			freebsd32_uint64_t knt_pipe_ino;
459 		} knt_pipe;
460 	};
461 };
462 #endif
463 
464 struct kld_file_stat_1_32 {
465 	int	version;	/* set to sizeof(struct kld_file_stat_1) */
466 	char	name[MAXPATHLEN];
467 	int	refs;
468 	int	id;
469 	uint32_t address;	/* load address */
470 	uint32_t size;		/* size in bytes */
471 };
472 
473 struct kld_file_stat32 {
474 	int	version;	/* set to sizeof(struct kld_file_stat) */
475 	char	name[MAXPATHLEN];
476 	int	refs;
477 	int	id;
478 	uint32_t address;	/* load address */
479 	uint32_t size;		/* size in bytes */
480 	char	pathname[MAXPATHLEN];
481 };
482 
483 struct procctl_reaper_pids32 {
484 	u_int	rp_count;
485 	u_int	rp_pad0[15];
486 	uint32_t rp_pids;
487 };
488 
489 struct timex32 {
490 	unsigned int modes;
491 	int32_t	offset;
492 	int32_t	freq;
493 	int32_t	maxerror;
494 	int32_t	esterror;
495 	int	status;
496 	int32_t	constant;
497 	int32_t	precision;
498 	int32_t	tolerance;
499 	int32_t	ppsfreq;
500 	int32_t	jitter;
501 	int	shift;
502 	int32_t	stabil;
503 	int32_t	jitcnt;
504 	int32_t	calcnt;
505 	int32_t	errcnt;
506 	int32_t	stbcnt;
507 };
508 
509 struct ptrace_sc_ret32 {
510 	uint32_t	sr_retval[2];
511 	int		sr_error;
512 };
513 
514 struct ptrace_coredump32 {
515 	int		pc_fd;
516 	uint32_t	pc_flags;
517 	uint32_t	pc_limit1, pc_limit2;
518 };
519 
520 struct ptrace_sc_remote32 {
521 	struct ptrace_sc_ret32 pscr_ret;
522 	u_int		pscr_syscall;
523 	u_int		pscr_nargs;
524 	uint32_t	pscr_args;
525 };
526 
527 struct devstat32 {
528 	u_int			sequence0;
529 	int			allocated;
530 	u_int			start_count;
531 	u_int			end_count;
532 	struct bintime32	busy_from;
533 	struct { u_int32_t stqe_next; } dev_links;
534 	u_int32_t		device_number;
535 	char			device_name[DEVSTAT_NAME_LEN];
536 	int			unit_number;
537 	freebsd32_uint64_t	bytes[DEVSTAT_N_TRANS_FLAGS];
538 	freebsd32_uint64_t	operations[DEVSTAT_N_TRANS_FLAGS];
539 	struct bintime32	duration[DEVSTAT_N_TRANS_FLAGS];
540 	struct bintime32	busy_time;
541 	struct bintime32        creation_time;
542 	u_int32_t		block_size;
543 	freebsd32_uint64_t	tag_types[3];
544 	devstat_support_flags	flags;
545 	devstat_type_flags	device_type;
546 	devstat_priority	priority;
547 	u_int32_t		id;
548 	u_int			sequence1;
549 };
550 
551 #endif /* !_COMPAT_FREEBSD32_FREEBSD32_H_ */
552