xref: /qemu/bsd-user/freebsd/target_os_user.h (revision b55e4b9c0525560577384adfc6d30eb0daa8d7be)
125fb5d38SWarner Losh /*
225fb5d38SWarner Losh  *  sys/user.h definitions
325fb5d38SWarner Losh  *
425fb5d38SWarner Losh  *  Copyright (c) 2015 Stacey D. Son (sson at FreeBSD)
525fb5d38SWarner Losh  *
625fb5d38SWarner Losh  *  This program is free software; you can redistribute it and/or modify
725fb5d38SWarner Losh  *  it under the terms of the GNU General Public License as published by
825fb5d38SWarner Losh  *  the Free Software Foundation; either version 2 of the License, or
925fb5d38SWarner Losh  *  (at your option) any later version.
1025fb5d38SWarner Losh  *
1125fb5d38SWarner Losh  *  This program is distributed in the hope that it will be useful,
1225fb5d38SWarner Losh  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
1325fb5d38SWarner Losh  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1425fb5d38SWarner Losh  *  GNU General Public License for more details.
1525fb5d38SWarner Losh  *
1625fb5d38SWarner Losh  *  You should have received a copy of the GNU General Public License
1725fb5d38SWarner Losh  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
1825fb5d38SWarner Losh  */
1925fb5d38SWarner Losh 
209c092804SMarkus Armbruster #ifndef TARGET_OS_USER_H
219c092804SMarkus Armbruster #define TARGET_OS_USER_H
2225fb5d38SWarner Losh 
2325fb5d38SWarner Losh /*
2425fb5d38SWarner Losh  * from sys/priority.h
2525fb5d38SWarner Losh  */
2625fb5d38SWarner Losh struct target_priority {
2725fb5d38SWarner Losh     uint8_t     pri_class;      /* Scheduling class. */
2825fb5d38SWarner Losh     uint8_t     pri_level;      /* Normal priority level. */
29*944399ffSMichael Tokarev     uint8_t     pri_native;     /* Priority before propagation. */
3025fb5d38SWarner Losh     uint8_t     pri_user;       /* User priority based on p_cpu and p_nice. */
3125fb5d38SWarner Losh };
3225fb5d38SWarner Losh 
3325fb5d38SWarner Losh /*
3425fb5d38SWarner Losh  * sys/caprights.h
3525fb5d38SWarner Losh  */
3625fb5d38SWarner Losh #define TARGET_CAP_RIGHTS_VERSION  0
3725fb5d38SWarner Losh 
3825fb5d38SWarner Losh typedef struct target_cap_rights {
3925fb5d38SWarner Losh     uint64_t    cr_rights[TARGET_CAP_RIGHTS_VERSION + 2];
4025fb5d38SWarner Losh } target_cap_rights_t;
4125fb5d38SWarner Losh 
4225fb5d38SWarner Losh /*
4325fb5d38SWarner Losh  * From sys/_socketaddr_storage.h
4425fb5d38SWarner Losh  *
4525fb5d38SWarner Losh  */
4625fb5d38SWarner Losh #define TARGET_SS_MAXSIZE     128U
4725fb5d38SWarner Losh #define TARGET_SS_ALIGNSIZE   (sizeof(__int64_t))
4825fb5d38SWarner Losh #define TARGET_SS_PAD1SIZE    (TARGET_SS_ALIGNSIZE - sizeof(unsigned char) - \
4925fb5d38SWarner Losh         sizeof(uint8_t))
5025fb5d38SWarner Losh #define TARGET_SS_PAD2SIZE    (TARGET_SS_MAXSIZE - sizeof(unsigned char) - \
5125fb5d38SWarner Losh         sizeof(uint8_t) - TARGET_SS_PAD1SIZE - TARGET_SS_ALIGNSIZE)
5225fb5d38SWarner Losh 
5325fb5d38SWarner Losh struct target_sockaddr_storage {
5425fb5d38SWarner Losh     unsigned char   ss_len;         /* address length */
5525fb5d38SWarner Losh     uint8_t         ss_family;      /* address family */
5625fb5d38SWarner Losh     char            __ss_pad1[TARGET_SS_PAD1SIZE];
5725fb5d38SWarner Losh     __int64_t       __ss_align;     /* force desired struct alignment */
5825fb5d38SWarner Losh     char            __ss_pad2[TARGET_SS_PAD2SIZE];
5925fb5d38SWarner Losh };
6025fb5d38SWarner Losh 
6125fb5d38SWarner Losh /*
6225fb5d38SWarner Losh  * from sys/user.h
6325fb5d38SWarner Losh  */
6425fb5d38SWarner Losh #define TARGET_KI_NSPARE_INT        2
6525fb5d38SWarner Losh #define TARGET_KI_NSPARE_LONG       12
6625fb5d38SWarner Losh #define TARGET_KI_NSPARE_PTR        6
6725fb5d38SWarner Losh 
6825fb5d38SWarner Losh #define TARGET_WMESGLEN             8
6925fb5d38SWarner Losh #define TARGET_LOCKNAMELEN          8
7025fb5d38SWarner Losh #define TARGET_TDNAMLEN             16
7125fb5d38SWarner Losh #define TARGET_COMMLEN              19
7225fb5d38SWarner Losh #define TARGET_KI_EMULNAMELEN       16
7325fb5d38SWarner Losh #define TARGET_KI_NGROUPS           16
7425fb5d38SWarner Losh #define TARGET_LOGNAMELEN           17
7525fb5d38SWarner Losh #define TARGET_LOGINCLASSLEN        17
7625fb5d38SWarner Losh 
7725fb5d38SWarner Losh #define TARGET_KF_TYPE_NONE         0
7825fb5d38SWarner Losh #define TARGET_KF_TYPE_VNODE        1
7925fb5d38SWarner Losh #define TARGET_KF_TYPE_SOCKET       2
8025fb5d38SWarner Losh #define TARGET_KF_TYPE_PIPE         3
8125fb5d38SWarner Losh #define TARGET_KF_TYPE_FIFO         4
8225fb5d38SWarner Losh #define TARGET_KF_TYPE_KQUEUE       5
8325fb5d38SWarner Losh #define TARGET_KF_TYPE_CRYPTO       6
8425fb5d38SWarner Losh #define TARGET_KF_TYPE_MQUEUE       7
8525fb5d38SWarner Losh #define TARGET_KF_TYPE_SHM          8
8625fb5d38SWarner Losh #define TARGET_KF_TYPE_SEM          9
8725fb5d38SWarner Losh #define TARGET_KF_TYPE_PTS          10
8825fb5d38SWarner Losh #define TARGET_KF_TYPE_PROCDESC     11
8925fb5d38SWarner Losh #define TARGET_KF_TYPE_DEV          12
9025fb5d38SWarner Losh #define TARGET_KF_TYPE_UNKNOWN      255
9125fb5d38SWarner Losh 
9225fb5d38SWarner Losh struct target_kinfo_proc {
9325fb5d38SWarner Losh     int32_t     ki_structsize;      /* size of this structure */
9425fb5d38SWarner Losh     int32_t     ki_layout;          /* reserved: layout identifier */
9525fb5d38SWarner Losh     abi_ulong   ki_args;            /* address of command arguments */
9625fb5d38SWarner Losh     abi_ulong   ki_paddr;           /* address of proc */
9725fb5d38SWarner Losh     abi_ulong   ki_addr;            /* kernel virtual addr of u-area */
9825fb5d38SWarner Losh     abi_ulong   ki_tracep;          /* pointer to trace file */
9925fb5d38SWarner Losh     abi_ulong   ki_textvp;          /* pointer to executable file */
10025fb5d38SWarner Losh     abi_ulong   ki_fd;              /* pointer to open file info */
10125fb5d38SWarner Losh     abi_ulong   ki_vmspace;         /* pointer to kernel vmspace struct */
10225fb5d38SWarner Losh     abi_ulong   ki_wchan;           /* sleep address */
10325fb5d38SWarner Losh     int32_t     ki_pid;             /* Process identifier */
10425fb5d38SWarner Losh     int32_t     ki_ppid;            /* parent process id */
10525fb5d38SWarner Losh     int32_t     ki_pgid;            /* process group id */
10625fb5d38SWarner Losh     int32_t     ki_tpgid;           /* tty process group id */
10725fb5d38SWarner Losh     int32_t     ki_sid;             /* Process session ID */
10825fb5d38SWarner Losh     int32_t     ki_tsid;            /* Terminal session ID */
10925fb5d38SWarner Losh     int16_t     ki_jobc;            /* job control counter */
11025fb5d38SWarner Losh     int16_t     ki_spare_short1;    /* unused (just here for alignment) */
11125fb5d38SWarner Losh     int32_t     ki_tdev__freebsd11; /* controlling tty dev */
11225fb5d38SWarner Losh     target_sigset_t ki_siglist;     /* Signals arrived but not delivered */
11325fb5d38SWarner Losh     target_sigset_t ki_sigmask;     /* Current signal mask */
11425fb5d38SWarner Losh     target_sigset_t ki_sigignore;   /* Signals being ignored */
11525fb5d38SWarner Losh     target_sigset_t ki_sigcatch;    /* Signals being caught by user */
11625fb5d38SWarner Losh 
11725fb5d38SWarner Losh     int32_t     ki_uid;             /* effective user id */
11825fb5d38SWarner Losh     int32_t     ki_ruid;            /* Real user id */
11925fb5d38SWarner Losh     int32_t     ki_svuid;           /* Saved effective user id */
12025fb5d38SWarner Losh     int32_t     ki_rgid;            /* Real group id */
12125fb5d38SWarner Losh     int32_t     ki_svgid;           /* Saved effective group id */
12225fb5d38SWarner Losh     int16_t     ki_ngroups;         /* number of groups */
12325fb5d38SWarner Losh     int16_t     ki_spare_short2;    /* unused (just here for alignment) */
12425fb5d38SWarner Losh     int32_t     ki_groups[TARGET_KI_NGROUPS];  /* groups */
12525fb5d38SWarner Losh 
12625fb5d38SWarner Losh     abi_long    ki_size;            /* virtual size */
12725fb5d38SWarner Losh 
12825fb5d38SWarner Losh     abi_long    ki_rssize;          /* current resident set size in pages */
12925fb5d38SWarner Losh     abi_long    ki_swrss;           /* resident set size before last swap */
13025fb5d38SWarner Losh     abi_long    ki_tsize;           /* text size (pages) XXX */
13125fb5d38SWarner Losh     abi_long    ki_dsize;           /* data size (pages) XXX */
13225fb5d38SWarner Losh     abi_long    ki_ssize;           /* stack size (pages) */
13325fb5d38SWarner Losh 
13425fb5d38SWarner Losh     uint16_t    ki_xstat;           /* Exit status for wait & stop signal */
13525fb5d38SWarner Losh     uint16_t    ki_acflag;          /* Accounting flags */
13625fb5d38SWarner Losh 
13725fb5d38SWarner Losh     uint32_t    ki_pctcpu;          /* %cpu for process during ki_swtime */
13825fb5d38SWarner Losh 
13925fb5d38SWarner Losh     uint32_t    ki_estcpu;          /* Time averaged value of ki_cpticks */
14025fb5d38SWarner Losh     uint32_t    ki_slptime;         /* Time since last blocked */
14125fb5d38SWarner Losh     uint32_t    ki_swtime;          /* Time swapped in or out */
14225fb5d38SWarner Losh     uint32_t    ki_cow;             /* number of copy-on-write faults */
14325fb5d38SWarner Losh     uint64_t    ki_runtime;         /* Real time in microsec */
14425fb5d38SWarner Losh 
14525fb5d38SWarner Losh     struct  target_freebsd_timeval ki_start;  /* starting time */
14625fb5d38SWarner Losh     struct  target_freebsd_timeval ki_childtime; /* time used by process children */
14725fb5d38SWarner Losh 
14825fb5d38SWarner Losh     abi_long    ki_flag;            /* P_* flags */
14925fb5d38SWarner Losh     abi_long    ki_kiflag;          /* KI_* flags (below) */
15025fb5d38SWarner Losh     int32_t     ki_traceflag;       /* Kernel trace points */
15125fb5d38SWarner Losh     char        ki_stat;            /* S* process status */
15225fb5d38SWarner Losh     int8_t      ki_nice;            /* Process "nice" value */
15325fb5d38SWarner Losh     char        ki_lock;            /* Process lock (prevent swap) count */
15425fb5d38SWarner Losh     char        ki_rqindex;         /* Run queue index */
15525fb5d38SWarner Losh     u_char      ki_oncpu_old;       /* Which cpu we are on (legacy) */
15625fb5d38SWarner Losh     u_char      ki_lastcpu_old;     /* Last cpu we were on (legacy) */
15725fb5d38SWarner Losh     char        ki_tdname[TARGET_TDNAMLEN + 1];  /* thread name */
15825fb5d38SWarner Losh     char        ki_wmesg[TARGET_WMESGLEN + 1];   /* wchan message */
15925fb5d38SWarner Losh     char        ki_login[TARGET_LOGNAMELEN + 1]; /* setlogin name */
16025fb5d38SWarner Losh     char        ki_lockname[TARGET_LOCKNAMELEN + 1]; /* lock name */
16125fb5d38SWarner Losh     char        ki_comm[TARGET_COMMLEN + 1];     /* command name */
16225fb5d38SWarner Losh     char        ki_emul[TARGET_KI_EMULNAMELEN + 1];  /* emulation name */
16325fb5d38SWarner Losh     char        ki_loginclass[TARGET_LOGINCLASSLEN + 1]; /* login class */
16425fb5d38SWarner Losh 
16525fb5d38SWarner Losh     char        ki_sparestrings[50];    /* spare string space */
16625fb5d38SWarner Losh     int32_t     ki_spareints[TARGET_KI_NSPARE_INT]; /* spare room for growth */
16725fb5d38SWarner Losh     uint64_t ki_tdev;  /* controlling tty dev */
16825fb5d38SWarner Losh     int32_t     ki_oncpu;           /* Which cpu we are on */
16925fb5d38SWarner Losh     int32_t     ki_lastcpu;         /* Last cpu we were on */
17025fb5d38SWarner Losh     int32_t     ki_tracer;          /* Pid of tracing process */
17125fb5d38SWarner Losh     int32_t     ki_flag2;           /* P2_* flags */
17225fb5d38SWarner Losh     int32_t     ki_fibnum;          /* Default FIB number */
17325fb5d38SWarner Losh     uint32_t    ki_cr_flags;        /* Credential flags */
17425fb5d38SWarner Losh     int32_t     ki_jid;             /* Process jail ID */
17525fb5d38SWarner Losh     int32_t     ki_numthreads;      /* XXXKSE number of threads in total */
17625fb5d38SWarner Losh 
17725fb5d38SWarner Losh     int32_t     ki_tid;             /* XXXKSE thread id */
17825fb5d38SWarner Losh 
17925fb5d38SWarner Losh     struct  target_priority ki_pri; /* process priority */
18025fb5d38SWarner Losh     struct  target_freebsd_rusage ki_rusage;  /* process rusage statistics */
18125fb5d38SWarner Losh         /* XXX - most fields in ki_rusage_ch are not (yet) filled in */
18225fb5d38SWarner Losh     struct  target_freebsd_rusage ki_rusage_ch; /* rusage of children processes */
18325fb5d38SWarner Losh 
18425fb5d38SWarner Losh 
18525fb5d38SWarner Losh     abi_ulong   ki_pcb;             /* kernel virtual addr of pcb */
18625fb5d38SWarner Losh     abi_ulong   ki_kstack;          /* kernel virtual addr of stack */
18725fb5d38SWarner Losh     abi_ulong   ki_udata;           /* User convenience pointer */
18825fb5d38SWarner Losh     abi_ulong   ki_tdaddr;          /* address of thread */
18925fb5d38SWarner Losh 
19025fb5d38SWarner Losh     abi_ulong   ki_spareptrs[TARGET_KI_NSPARE_PTR];  /* spare room for growth */
19125fb5d38SWarner Losh     abi_long    ki_sparelongs[TARGET_KI_NSPARE_LONG];/* spare room for growth */
19225fb5d38SWarner Losh     abi_long    ki_sflag;           /* PS_* flags */
19325fb5d38SWarner Losh     abi_long    ki_tdflags;         /* XXXKSE kthread flag */
19425fb5d38SWarner Losh };
19525fb5d38SWarner Losh 
19625fb5d38SWarner Losh struct target_kinfo_file {
19725fb5d38SWarner Losh     int32_t  kf_structsize;  /* Variable size of record. */
19825fb5d38SWarner Losh     int32_t  kf_type;  /* Descriptor type. */
19925fb5d38SWarner Losh     int32_t  kf_fd;   /* Array index. */
20025fb5d38SWarner Losh     int32_t  kf_ref_count;  /* Reference count. */
20125fb5d38SWarner Losh     int32_t  kf_flags;  /* Flags. */
20225fb5d38SWarner Losh     int32_t  kf_pad0;  /* Round to 64 bit alignment. */
20325fb5d38SWarner Losh     int64_t  kf_offset;  /* Seek location. */
20425fb5d38SWarner Losh     union {
20525fb5d38SWarner Losh         struct {
20625fb5d38SWarner Losh             uint32_t kf_spareint;
20725fb5d38SWarner Losh             /* Socket domain. */
20825fb5d38SWarner Losh             int  kf_sock_domain0;
20925fb5d38SWarner Losh             /* Socket type. */
21025fb5d38SWarner Losh             int  kf_sock_type0;
21125fb5d38SWarner Losh             /* Socket protocol. */
21225fb5d38SWarner Losh             int  kf_sock_protocol0;
21325fb5d38SWarner Losh             /* Socket address. */
21425fb5d38SWarner Losh             struct sockaddr_storage kf_sa_local;
21525fb5d38SWarner Losh             /* Peer address. */
21625fb5d38SWarner Losh             struct sockaddr_storage kf_sa_peer;
21725fb5d38SWarner Losh             /* Address of so_pcb. */
21825fb5d38SWarner Losh             uint64_t kf_sock_pcb;
21925fb5d38SWarner Losh             /* Address of inp_ppcb. */
22025fb5d38SWarner Losh             uint64_t kf_sock_inpcb;
22125fb5d38SWarner Losh             /* Address of unp_conn. */
22225fb5d38SWarner Losh             uint64_t kf_sock_unpconn;
22325fb5d38SWarner Losh             /* Send buffer state. */
22425fb5d38SWarner Losh             uint16_t kf_sock_snd_sb_state;
22525fb5d38SWarner Losh             /* Receive buffer state. */
22625fb5d38SWarner Losh             uint16_t kf_sock_rcv_sb_state;
22725fb5d38SWarner Losh             /* Round to 64 bit alignment. */
22825fb5d38SWarner Losh             uint32_t kf_sock_pad0;
22925fb5d38SWarner Losh         } kf_sock;
23025fb5d38SWarner Losh         struct {
23125fb5d38SWarner Losh             /* Vnode type. */
23225fb5d38SWarner Losh             int  kf_file_type;
23325fb5d38SWarner Losh             /* Space for future use */
23425fb5d38SWarner Losh             int  kf_spareint[3];
23525fb5d38SWarner Losh             uint64_t kf_spareint64[30];
23625fb5d38SWarner Losh             /* Vnode filesystem id. */
23725fb5d38SWarner Losh             uint64_t kf_file_fsid;
23825fb5d38SWarner Losh             /* File device. */
23925fb5d38SWarner Losh             uint64_t kf_file_rdev;
24025fb5d38SWarner Losh             /* Global file id. */
24125fb5d38SWarner Losh             uint64_t kf_file_fileid;
24225fb5d38SWarner Losh             /* File size. */
24325fb5d38SWarner Losh             uint64_t kf_file_size;
24425fb5d38SWarner Losh             /* Vnode filesystem id, FreeBSD 11 compat. */
24525fb5d38SWarner Losh             uint32_t kf_file_fsid_freebsd11;
24625fb5d38SWarner Losh             /* File device, FreeBSD 11 compat. */
24725fb5d38SWarner Losh             uint32_t kf_file_rdev_freebsd11;
24825fb5d38SWarner Losh             /* File mode. */
24925fb5d38SWarner Losh             uint16_t kf_file_mode;
25025fb5d38SWarner Losh             /* Round to 64 bit alignment. */
25125fb5d38SWarner Losh             uint16_t kf_file_pad0;
25225fb5d38SWarner Losh             uint32_t kf_file_pad1;
25325fb5d38SWarner Losh         } kf_file;
25425fb5d38SWarner Losh         struct {
25525fb5d38SWarner Losh             uint32_t kf_spareint[4];
25625fb5d38SWarner Losh             uint64_t kf_spareint64[32];
25725fb5d38SWarner Losh             uint32_t kf_sem_value;
25825fb5d38SWarner Losh             uint16_t kf_sem_mode;
25925fb5d38SWarner Losh         } kf_sem;
26025fb5d38SWarner Losh         struct {
26125fb5d38SWarner Losh             uint32_t kf_spareint[4];
26225fb5d38SWarner Losh             uint64_t kf_spareint64[32];
26325fb5d38SWarner Losh             uint64_t kf_pipe_addr;
26425fb5d38SWarner Losh             uint64_t kf_pipe_peer;
26525fb5d38SWarner Losh             uint32_t kf_pipe_buffer_cnt;
26625fb5d38SWarner Losh             /* Round to 64 bit alignment. */
26725fb5d38SWarner Losh             uint32_t kf_pipe_pad0[3];
26825fb5d38SWarner Losh         } kf_pipe;
26925fb5d38SWarner Losh         struct {
27025fb5d38SWarner Losh             uint32_t kf_spareint[4];
27125fb5d38SWarner Losh             uint64_t kf_spareint64[32];
27225fb5d38SWarner Losh             uint32_t kf_pts_dev_freebsd11;
27325fb5d38SWarner Losh             uint32_t kf_pts_pad0;
27425fb5d38SWarner Losh             uint64_t kf_pts_dev;
27525fb5d38SWarner Losh             /* Round to 64 bit alignment. */
27625fb5d38SWarner Losh             uint32_t kf_pts_pad1[4];
27725fb5d38SWarner Losh         } kf_pts;
27825fb5d38SWarner Losh         struct {
27925fb5d38SWarner Losh             uint32_t kf_spareint[4];
28025fb5d38SWarner Losh             uint64_t kf_spareint64[32];
28125fb5d38SWarner Losh             int32_t  kf_pid;
28225fb5d38SWarner Losh         } kf_proc;
28325fb5d38SWarner Losh     } kf_un;
28425fb5d38SWarner Losh     uint16_t kf_status;  /* Status flags. */
28525fb5d38SWarner Losh     uint16_t kf_pad1;  /* Round to 32 bit alignment. */
28625fb5d38SWarner Losh     int32_t  _kf_ispare0;  /* Space for more stuff. */
28725fb5d38SWarner Losh     target_cap_rights_t kf_cap_rights; /* Capability rights. */
28825fb5d38SWarner Losh     uint64_t _kf_cap_spare; /* Space for future cap_rights_t. */
28925fb5d38SWarner Losh     /* Truncated before copyout in sysctl */
29025fb5d38SWarner Losh     char  kf_path[PATH_MAX]; /* Path to file, if any. */
29125fb5d38SWarner Losh };
29225fb5d38SWarner Losh 
29325fb5d38SWarner Losh struct target_kinfo_vmentry {
29425fb5d38SWarner Losh     int32_t  kve_structsize;  /* Variable size of record. */
29525fb5d38SWarner Losh     int32_t  kve_type;   /* Type of map entry. */
29625fb5d38SWarner Losh     uint64_t kve_start;   /* Starting address. */
29725fb5d38SWarner Losh     uint64_t kve_end;   /* Finishing address. */
29825fb5d38SWarner Losh     uint64_t kve_offset;   /* Mapping offset in object */
29925fb5d38SWarner Losh     uint64_t kve_vn_fileid;   /* inode number if vnode */
30025fb5d38SWarner Losh     uint32_t kve_vn_fsid_freebsd11;  /* dev_t of vnode location */
30125fb5d38SWarner Losh     int32_t  kve_flags;   /* Flags on map entry. */
30225fb5d38SWarner Losh     int32_t  kve_resident;   /* Number of resident pages. */
30325fb5d38SWarner Losh     int32_t  kve_private_resident;  /* Number of private pages. */
30425fb5d38SWarner Losh     int32_t  kve_protection;  /* Protection bitmask. */
30525fb5d38SWarner Losh     int32_t  kve_ref_count;   /* VM obj ref count. */
30625fb5d38SWarner Losh     int32_t  kve_shadow_count;  /* VM obj shadow count. */
30725fb5d38SWarner Losh     int32_t  kve_vn_type;   /* Vnode type. */
30825fb5d38SWarner Losh     uint64_t kve_vn_size;   /* File size. */
30925fb5d38SWarner Losh     uint32_t kve_vn_rdev_freebsd11;  /* Device id if device. */
31025fb5d38SWarner Losh     uint16_t kve_vn_mode;   /* File mode. */
31125fb5d38SWarner Losh     uint16_t kve_status;   /* Status flags. */
31225fb5d38SWarner Losh #if (__FreeBSD_version >= 1300501 && __FreeBSD_version < 1400000) ||    \
31325fb5d38SWarner Losh     __FreeBSD_version >= 1400009
31425fb5d38SWarner Losh     union {
31525fb5d38SWarner Losh         uint64_t _kve_vn_fsid;  /* dev_t of vnode location */
31625fb5d38SWarner Losh         uint64_t _kve_obj;  /* handle of anon obj */
31725fb5d38SWarner Losh     } kve_type_spec;
31825fb5d38SWarner Losh #define kve_vn_fsid kve_type_spec._kve_vn_fsid
31925fb5d38SWarner Losh #define kve_obj  kve_type_spec._kve_obj
32025fb5d38SWarner Losh #else
32125fb5d38SWarner Losh     uint64_t kve_vn_fsid;   /* dev_t of vnode location */
32225fb5d38SWarner Losh #endif
32325fb5d38SWarner Losh     uint64_t kve_vn_rdev;   /* Device id if device. */
32425fb5d38SWarner Losh     int  _kve_ispare[8];  /* Space for more stuff. */
32525fb5d38SWarner Losh     /* Truncated before copyout in sysctl */
32625fb5d38SWarner Losh     char  kve_path[PATH_MAX];  /* Path to VM obj, if any. */
32725fb5d38SWarner Losh };
32825fb5d38SWarner Losh 
3299c092804SMarkus Armbruster #endif /* TARGET_OS_USER_H */
330