qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

target_os_user.h (13961B)


      1 /*
      2  *  sys/user.h definitions
      3  *
      4  *  Copyright (c) 2015 Stacey D. Son (sson at FreeBSD)
      5  *
      6  *  This program is free software; you can redistribute it and/or modify
      7  *  it under the terms of the GNU General Public License as published by
      8  *  the Free Software Foundation; either version 2 of the License, or
      9  *  (at your option) any later version.
     10  *
     11  *  This program is distributed in the hope that it will be useful,
     12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14  *  GNU General Public License for more details.
     15  *
     16  *  You should have received a copy of the GNU General Public License
     17  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
     18  */
     19 
     20 #ifndef TARGET_OS_USER_H
     21 #define TARGET_OS_USER_H
     22 
     23 /*
     24  * from sys/priority.h
     25  */
     26 struct target_priority {
     27     uint8_t     pri_class;      /* Scheduling class. */
     28     uint8_t     pri_level;      /* Normal priority level. */
     29     uint8_t     pri_native;     /* Priority before propogation. */
     30     uint8_t     pri_user;       /* User priority based on p_cpu and p_nice. */
     31 };
     32 
     33 /*
     34  * sys/caprights.h
     35  */
     36 #define TARGET_CAP_RIGHTS_VERSION  0
     37 
     38 typedef struct target_cap_rights {
     39     uint64_t    cr_rights[TARGET_CAP_RIGHTS_VERSION + 2];
     40 } target_cap_rights_t;
     41 
     42 /*
     43  * From sys/_socketaddr_storage.h
     44  *
     45  */
     46 #define TARGET_SS_MAXSIZE     128U
     47 #define TARGET_SS_ALIGNSIZE   (sizeof(__int64_t))
     48 #define TARGET_SS_PAD1SIZE    (TARGET_SS_ALIGNSIZE - sizeof(unsigned char) - \
     49         sizeof(uint8_t))
     50 #define TARGET_SS_PAD2SIZE    (TARGET_SS_MAXSIZE - sizeof(unsigned char) - \
     51         sizeof(uint8_t) - TARGET_SS_PAD1SIZE - TARGET_SS_ALIGNSIZE)
     52 
     53 struct target_sockaddr_storage {
     54     unsigned char   ss_len;         /* address length */
     55     uint8_t         ss_family;      /* address family */
     56     char            __ss_pad1[TARGET_SS_PAD1SIZE];
     57     __int64_t       __ss_align;     /* force desired struct alignment */
     58     char            __ss_pad2[TARGET_SS_PAD2SIZE];
     59 };
     60 
     61 /*
     62  * from sys/user.h
     63  */
     64 #define TARGET_KI_NSPARE_INT        2
     65 #define TARGET_KI_NSPARE_LONG       12
     66 #define TARGET_KI_NSPARE_PTR        6
     67 
     68 #define TARGET_WMESGLEN             8
     69 #define TARGET_LOCKNAMELEN          8
     70 #define TARGET_TDNAMLEN             16
     71 #define TARGET_COMMLEN              19
     72 #define TARGET_KI_EMULNAMELEN       16
     73 #define TARGET_KI_NGROUPS           16
     74 #define TARGET_LOGNAMELEN           17
     75 #define TARGET_LOGINCLASSLEN        17
     76 
     77 #define TARGET_KF_TYPE_NONE         0
     78 #define TARGET_KF_TYPE_VNODE        1
     79 #define TARGET_KF_TYPE_SOCKET       2
     80 #define TARGET_KF_TYPE_PIPE         3
     81 #define TARGET_KF_TYPE_FIFO         4
     82 #define TARGET_KF_TYPE_KQUEUE       5
     83 #define TARGET_KF_TYPE_CRYPTO       6
     84 #define TARGET_KF_TYPE_MQUEUE       7
     85 #define TARGET_KF_TYPE_SHM          8
     86 #define TARGET_KF_TYPE_SEM          9
     87 #define TARGET_KF_TYPE_PTS          10
     88 #define TARGET_KF_TYPE_PROCDESC     11
     89 #define TARGET_KF_TYPE_DEV          12
     90 #define TARGET_KF_TYPE_UNKNOWN      255
     91 
     92 struct target_kinfo_proc {
     93     int32_t     ki_structsize;      /* size of this structure */
     94     int32_t     ki_layout;          /* reserved: layout identifier */
     95     abi_ulong   ki_args;            /* address of command arguments */
     96     abi_ulong   ki_paddr;           /* address of proc */
     97     abi_ulong   ki_addr;            /* kernel virtual addr of u-area */
     98     abi_ulong   ki_tracep;          /* pointer to trace file */
     99     abi_ulong   ki_textvp;          /* pointer to executable file */
    100     abi_ulong   ki_fd;              /* pointer to open file info */
    101     abi_ulong   ki_vmspace;         /* pointer to kernel vmspace struct */
    102     abi_ulong   ki_wchan;           /* sleep address */
    103     int32_t     ki_pid;             /* Process identifier */
    104     int32_t     ki_ppid;            /* parent process id */
    105     int32_t     ki_pgid;            /* process group id */
    106     int32_t     ki_tpgid;           /* tty process group id */
    107     int32_t     ki_sid;             /* Process session ID */
    108     int32_t     ki_tsid;            /* Terminal session ID */
    109     int16_t     ki_jobc;            /* job control counter */
    110     int16_t     ki_spare_short1;    /* unused (just here for alignment) */
    111     int32_t     ki_tdev__freebsd11; /* controlling tty dev */
    112     target_sigset_t ki_siglist;     /* Signals arrived but not delivered */
    113     target_sigset_t ki_sigmask;     /* Current signal mask */
    114     target_sigset_t ki_sigignore;   /* Signals being ignored */
    115     target_sigset_t ki_sigcatch;    /* Signals being caught by user */
    116 
    117     int32_t     ki_uid;             /* effective user id */
    118     int32_t     ki_ruid;            /* Real user id */
    119     int32_t     ki_svuid;           /* Saved effective user id */
    120     int32_t     ki_rgid;            /* Real group id */
    121     int32_t     ki_svgid;           /* Saved effective group id */
    122     int16_t     ki_ngroups;         /* number of groups */
    123     int16_t     ki_spare_short2;    /* unused (just here for alignment) */
    124     int32_t     ki_groups[TARGET_KI_NGROUPS];  /* groups */
    125 
    126     abi_long    ki_size;            /* virtual size */
    127 
    128     abi_long    ki_rssize;          /* current resident set size in pages */
    129     abi_long    ki_swrss;           /* resident set size before last swap */
    130     abi_long    ki_tsize;           /* text size (pages) XXX */
    131     abi_long    ki_dsize;           /* data size (pages) XXX */
    132     abi_long    ki_ssize;           /* stack size (pages) */
    133 
    134     uint16_t    ki_xstat;           /* Exit status for wait & stop signal */
    135     uint16_t    ki_acflag;          /* Accounting flags */
    136 
    137     uint32_t    ki_pctcpu;          /* %cpu for process during ki_swtime */
    138 
    139     uint32_t    ki_estcpu;          /* Time averaged value of ki_cpticks */
    140     uint32_t    ki_slptime;         /* Time since last blocked */
    141     uint32_t    ki_swtime;          /* Time swapped in or out */
    142     uint32_t    ki_cow;             /* number of copy-on-write faults */
    143     uint64_t    ki_runtime;         /* Real time in microsec */
    144 
    145     struct  target_freebsd_timeval ki_start;  /* starting time */
    146     struct  target_freebsd_timeval ki_childtime; /* time used by process children */
    147 
    148     abi_long    ki_flag;            /* P_* flags */
    149     abi_long    ki_kiflag;          /* KI_* flags (below) */
    150     int32_t     ki_traceflag;       /* Kernel trace points */
    151     char        ki_stat;            /* S* process status */
    152     int8_t      ki_nice;            /* Process "nice" value */
    153     char        ki_lock;            /* Process lock (prevent swap) count */
    154     char        ki_rqindex;         /* Run queue index */
    155     u_char      ki_oncpu_old;       /* Which cpu we are on (legacy) */
    156     u_char      ki_lastcpu_old;     /* Last cpu we were on (legacy) */
    157     char        ki_tdname[TARGET_TDNAMLEN + 1];  /* thread name */
    158     char        ki_wmesg[TARGET_WMESGLEN + 1];   /* wchan message */
    159     char        ki_login[TARGET_LOGNAMELEN + 1]; /* setlogin name */
    160     char        ki_lockname[TARGET_LOCKNAMELEN + 1]; /* lock name */
    161     char        ki_comm[TARGET_COMMLEN + 1];     /* command name */
    162     char        ki_emul[TARGET_KI_EMULNAMELEN + 1];  /* emulation name */
    163     char        ki_loginclass[TARGET_LOGINCLASSLEN + 1]; /* login class */
    164 
    165     char        ki_sparestrings[50];    /* spare string space */
    166     int32_t     ki_spareints[TARGET_KI_NSPARE_INT]; /* spare room for growth */
    167     uint64_t ki_tdev;  /* controlling tty dev */
    168     int32_t     ki_oncpu;           /* Which cpu we are on */
    169     int32_t     ki_lastcpu;         /* Last cpu we were on */
    170     int32_t     ki_tracer;          /* Pid of tracing process */
    171     int32_t     ki_flag2;           /* P2_* flags */
    172     int32_t     ki_fibnum;          /* Default FIB number */
    173     uint32_t    ki_cr_flags;        /* Credential flags */
    174     int32_t     ki_jid;             /* Process jail ID */
    175     int32_t     ki_numthreads;      /* XXXKSE number of threads in total */
    176 
    177     int32_t     ki_tid;             /* XXXKSE thread id */
    178 
    179     struct  target_priority ki_pri; /* process priority */
    180     struct  target_freebsd_rusage ki_rusage;  /* process rusage statistics */
    181         /* XXX - most fields in ki_rusage_ch are not (yet) filled in */
    182     struct  target_freebsd_rusage ki_rusage_ch; /* rusage of children processes */
    183 
    184 
    185     abi_ulong   ki_pcb;             /* kernel virtual addr of pcb */
    186     abi_ulong   ki_kstack;          /* kernel virtual addr of stack */
    187     abi_ulong   ki_udata;           /* User convenience pointer */
    188     abi_ulong   ki_tdaddr;          /* address of thread */
    189 
    190     abi_ulong   ki_spareptrs[TARGET_KI_NSPARE_PTR];  /* spare room for growth */
    191     abi_long    ki_sparelongs[TARGET_KI_NSPARE_LONG];/* spare room for growth */
    192     abi_long    ki_sflag;           /* PS_* flags */
    193     abi_long    ki_tdflags;         /* XXXKSE kthread flag */
    194 };
    195 
    196 struct target_kinfo_file {
    197     int32_t  kf_structsize;  /* Variable size of record. */
    198     int32_t  kf_type;  /* Descriptor type. */
    199     int32_t  kf_fd;   /* Array index. */
    200     int32_t  kf_ref_count;  /* Reference count. */
    201     int32_t  kf_flags;  /* Flags. */
    202     int32_t  kf_pad0;  /* Round to 64 bit alignment. */
    203     int64_t  kf_offset;  /* Seek location. */
    204     union {
    205         struct {
    206             uint32_t kf_spareint;
    207             /* Socket domain. */
    208             int  kf_sock_domain0;
    209             /* Socket type. */
    210             int  kf_sock_type0;
    211             /* Socket protocol. */
    212             int  kf_sock_protocol0;
    213             /* Socket address. */
    214             struct sockaddr_storage kf_sa_local;
    215             /* Peer address. */
    216             struct sockaddr_storage kf_sa_peer;
    217             /* Address of so_pcb. */
    218             uint64_t kf_sock_pcb;
    219             /* Address of inp_ppcb. */
    220             uint64_t kf_sock_inpcb;
    221             /* Address of unp_conn. */
    222             uint64_t kf_sock_unpconn;
    223             /* Send buffer state. */
    224             uint16_t kf_sock_snd_sb_state;
    225             /* Receive buffer state. */
    226             uint16_t kf_sock_rcv_sb_state;
    227             /* Round to 64 bit alignment. */
    228             uint32_t kf_sock_pad0;
    229         } kf_sock;
    230         struct {
    231             /* Vnode type. */
    232             int  kf_file_type;
    233             /* Space for future use */
    234             int  kf_spareint[3];
    235             uint64_t kf_spareint64[30];
    236             /* Vnode filesystem id. */
    237             uint64_t kf_file_fsid;
    238             /* File device. */
    239             uint64_t kf_file_rdev;
    240             /* Global file id. */
    241             uint64_t kf_file_fileid;
    242             /* File size. */
    243             uint64_t kf_file_size;
    244             /* Vnode filesystem id, FreeBSD 11 compat. */
    245             uint32_t kf_file_fsid_freebsd11;
    246             /* File device, FreeBSD 11 compat. */
    247             uint32_t kf_file_rdev_freebsd11;
    248             /* File mode. */
    249             uint16_t kf_file_mode;
    250             /* Round to 64 bit alignment. */
    251             uint16_t kf_file_pad0;
    252             uint32_t kf_file_pad1;
    253         } kf_file;
    254         struct {
    255             uint32_t kf_spareint[4];
    256             uint64_t kf_spareint64[32];
    257             uint32_t kf_sem_value;
    258             uint16_t kf_sem_mode;
    259         } kf_sem;
    260         struct {
    261             uint32_t kf_spareint[4];
    262             uint64_t kf_spareint64[32];
    263             uint64_t kf_pipe_addr;
    264             uint64_t kf_pipe_peer;
    265             uint32_t kf_pipe_buffer_cnt;
    266             /* Round to 64 bit alignment. */
    267             uint32_t kf_pipe_pad0[3];
    268         } kf_pipe;
    269         struct {
    270             uint32_t kf_spareint[4];
    271             uint64_t kf_spareint64[32];
    272             uint32_t kf_pts_dev_freebsd11;
    273             uint32_t kf_pts_pad0;
    274             uint64_t kf_pts_dev;
    275             /* Round to 64 bit alignment. */
    276             uint32_t kf_pts_pad1[4];
    277         } kf_pts;
    278         struct {
    279             uint32_t kf_spareint[4];
    280             uint64_t kf_spareint64[32];
    281             int32_t  kf_pid;
    282         } kf_proc;
    283     } kf_un;
    284     uint16_t kf_status;  /* Status flags. */
    285     uint16_t kf_pad1;  /* Round to 32 bit alignment. */
    286     int32_t  _kf_ispare0;  /* Space for more stuff. */
    287     target_cap_rights_t kf_cap_rights; /* Capability rights. */
    288     uint64_t _kf_cap_spare; /* Space for future cap_rights_t. */
    289     /* Truncated before copyout in sysctl */
    290     char  kf_path[PATH_MAX]; /* Path to file, if any. */
    291 };
    292 
    293 struct target_kinfo_vmentry {
    294     int32_t  kve_structsize;  /* Variable size of record. */
    295     int32_t  kve_type;   /* Type of map entry. */
    296     uint64_t kve_start;   /* Starting address. */
    297     uint64_t kve_end;   /* Finishing address. */
    298     uint64_t kve_offset;   /* Mapping offset in object */
    299     uint64_t kve_vn_fileid;   /* inode number if vnode */
    300     uint32_t kve_vn_fsid_freebsd11;  /* dev_t of vnode location */
    301     int32_t  kve_flags;   /* Flags on map entry. */
    302     int32_t  kve_resident;   /* Number of resident pages. */
    303     int32_t  kve_private_resident;  /* Number of private pages. */
    304     int32_t  kve_protection;  /* Protection bitmask. */
    305     int32_t  kve_ref_count;   /* VM obj ref count. */
    306     int32_t  kve_shadow_count;  /* VM obj shadow count. */
    307     int32_t  kve_vn_type;   /* Vnode type. */
    308     uint64_t kve_vn_size;   /* File size. */
    309     uint32_t kve_vn_rdev_freebsd11;  /* Device id if device. */
    310     uint16_t kve_vn_mode;   /* File mode. */
    311     uint16_t kve_status;   /* Status flags. */
    312 #if (__FreeBSD_version >= 1300501 && __FreeBSD_version < 1400000) ||    \
    313     __FreeBSD_version >= 1400009
    314     union {
    315         uint64_t _kve_vn_fsid;  /* dev_t of vnode location */
    316         uint64_t _kve_obj;  /* handle of anon obj */
    317     } kve_type_spec;
    318 #define kve_vn_fsid kve_type_spec._kve_vn_fsid
    319 #define kve_obj  kve_type_spec._kve_obj
    320 #else
    321     uint64_t kve_vn_fsid;   /* dev_t of vnode location */
    322 #endif
    323     uint64_t kve_vn_rdev;   /* Device id if device. */
    324     int  _kve_ispare[8];  /* Space for more stuff. */
    325     /* Truncated before copyout in sysctl */
    326     char  kve_path[PATH_MAX];  /* Path to VM obj, if any. */
    327 };
    328 
    329 #endif /* TARGET_OS_USER_H */