123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495 |
- /* -*- mode:c; c-file-style:"k&r"; c-basic-offset: 4; tab-width:4; indent-tabs-mode:nil; mode:auto-fill; fill-column:78; -*- */
- /* vim: set ts=4 sw=4 et tw=78 fo=cqt wm=0: */
- #ifndef _SHIM_TYPES_H_
- #define _SHIM_TYPES_H_
- #include <stddef.h>
- #include <stdint.h>
- #include <stdbool.h>
- #define __KERNEL__
- #include <linux/types.h>
- #include <linux/utsname.h>
- #include <linux/times.h>
- #include <linux/shm.h>
- #include <linux/msg.h>
- #include <linux/sem.h>
- #include <linux/kernel.h>
- #include <linux/utime.h>
- #include <linux/futex.h>
- #include <linux/aio_abi.h>
- #include <linux/perf_event.h>
- #include <linux/timex.h>
- #include <asm/posix_types.h>
- #include <asm/statfs.h>
- #include <asm/stat.h>
- #include <asm/ldt.h>
- #include <asm/signal.h>
- #include <asm/siginfo.h>
- #include <asm/poll.h>
- typedef unsigned int __u32;
- typedef unsigned long int nfds_t;
- typedef unsigned long int nlink_t;
- typedef __kernel_caddr_t caddr_t;
- typedef __kernel_mode_t mode_t;
- typedef __kernel_loff_t loff_t;
- typedef __kernel_time_t time_t;
- typedef __kernel_old_dev_t dev_t;
- typedef __kernel_ino_t ino_t;
- typedef __kernel_clockid_t clockid_t;
- typedef __kernel_key_t key_t;
- typedef __kernel_timer_t timer_t;
- typedef __kernel_fd_set fd_set;
- /* linux/time.h */
- struct __kernel_timespec {
- __kernel_time_t tv_sec; /* seconds */
- long tv_nsec; /* nanoseconds */
- };
- struct __kernel_timeval {
- __kernel_time_t tv_sec; /* seconds */
- __kernel_suseconds_t tv_usec; /* microsecond */
- };
- struct __kernel_itimerspec {
- struct __kernel_timespec it_interval; /* timer period */
- struct __kernel_timespec it_value; /* timer expiration */
- };
- struct __kernel_itimerval {
- struct __kernel_timeval it_interval; /* time interval */
- struct __kernel_timeval it_value; /* current value */
- };
- struct __kernel_timezone {
- int tz_minuteswest; /* minutes west of Greenwich */
- int tz_dsttime; /* type of dst correction */
- };
- /* linux/time.h
- * syscall interface - used (mainly by NTP daemon)
- * to discipline kernel clock oscillator
- */
- struct __kernel_timex {
- unsigned int modes; /* mode selector */
- long offset; /* time offset (usec) */
- long freq; /* frequency offset (scaled ppm) */
- long maxerror; /* maximum error (usec) */
- long esterror; /* estimated error (usec) */
- int status; /* clock command/status */
- long constant; /* pll time constant */
- long precision; /* clock precision (usec) (read only) */
- long tolerance; /* clock frequency tolerance (ppm)
- * (read only) */
- struct __kernel_timeval time; /* (read only) */
- long tick; /* (modified) usecs between clock ticks */
- long ppsfreq; /* pps frequency (scaled ppm) (ro) */
- long jitter; /* pps jitter (us) (ro) */
- int shift; /* interval duration (s) (shift) (ro) */
- long stabil; /* pps stability (scaled ppm) (ro) */
- long jitcnt; /* jitter limit exceeded (ro) */
- long calcnt; /* calibration intervals (ro) */
- long errcnt; /* calibration errors (ro) */
- long stbcnt; /* stability limit exceeded (ro) */
- int tai; /* TAI offset (ro) */
- int :32; int :32; int :32; int :32;
- int :32; int :32; int :32; int :32;
- int :32; int :32; int :32;
- };
- /* /arch/x86/include/asm/posix_types_64.h */
- typedef unsigned int __kernel_uid_t;
- typedef __kernel_uid_t __kernel_uid32_t;
- /* quota.h */
- typedef __kernel_uid32_t qid_t; /* Type in which we store ids in memory */
- /* capability.h */
- typedef struct __user_cap_header_struct {
- __u32 version;
- int pid;
- } *cap_user_header_t;
- typedef struct __user_cap_data_struct {
- __u32 effective;
- __u32 permitted;
- __u32 inheritable;
- } *cap_user_data_t;
- /* defined in function in sysdeps/unix/sysv/linux/sysctl.c */
- struct __kernel_sysctl_args {
- int *name; /* integer vector describing variable */
- int nlen; /* length of this vector */
- void *oldval; /* 0 or address where to store old value */
- size_t *oldlenp; /* available room for old value,
- overwritten by actual size of old value */
- void *newval; /* 0 or address of new value */
- size_t newlen; /* size of new value */
- };
- struct __kernel_sched_param {
- int __sched_priority;
- };
- struct __kernel_sigaction {
- __sighandler_t k_sa_handler;
- unsigned long sa_flags;
- void (*sa_restorer) (void);
- sigset_t sa_mask;
- };
- /* linux/aio_abi.h (for io_setup which has no glibc wrapper) */
- typedef unsigned long aio_context_t;
- /* asm/signal.h */
- #define NUM_SIGS 64
- #define NUM_KNOWN_SIGS 32
- typedef struct {
- unsigned long __val[NUM_SIGS / (8 * sizeof(unsigned long))];
- } __sigset_t;
- /* linux/rlimit.h */
- struct __kernel_rusage {
- struct __kernel_timeval ru_utime; /* user time used */
- struct __kernel_timeval ru_stime; /* system time used */
- long ru_maxrss; /* maximum resident set size */
- long ru_ixrss; /* integral shared memory size */
- long ru_idrss; /* integral unshared data size */
- long ru_isrss; /* integral unshared stack size */
- long ru_minflt; /* page reclaims */
- long ru_majflt; /* page faults */
- long ru_nswap; /* swaps */
- long ru_inblock; /* block input operations */
- long ru_oublock; /* block output operations */
- long ru_msgsnd; /* messages sent */
- long ru_msgrcv; /* messages received */
- long ru_nsignals; /* signals received */
- long ru_nvcsw; /* voluntary context switches */
- long ru_nivcsw; /* involuntary " */
- };
- struct __kernel_rlimit {
- unsigned long rlim_cur, rlim_max;
- };
- struct __kernel_rlimit64 {
- uint64_t rlim_cur, rlim_max;
- };
- /* linux/eventpoll.h
- * On x86-64 make the 64bit structure have the same alignment as the
- * 32bit structure. This makes 32bit emulation easier.
- *
- * UML/x86_64 needs the same packing as x86_64
- */
- struct __kernel_epoll_event {
- __u32 events;
- __u64 data;
- }
- #ifdef __x86_64__
- __attribute__((packed));
- #else
- ;
- #endif
- /* sys/ucontext.h */
- /* Type for general register. */
- typedef long int greg_t;
- /* Number of general registers. */
- #define NGREG 23
- /* Container for all general registers. */
- typedef greg_t gregset_t[NGREG];
- /* Number of each register in the `gregset_t' array. */
- enum
- {
- REG_R8 = 0,
- # define REG_R8 REG_R8
- REG_R9,
- # define REG_R9 REG_R9
- REG_R10,
- # define REG_R10 REG_R10
- REG_R11,
- # define REG_R11 REG_R11
- REG_R12,
- # define REG_R12 REG_R12
- REG_R13,
- # define REG_R13 REG_R13
- REG_R14,
- # define REG_R14 REG_R14
- REG_R15,
- # define REG_R15 REG_R15
- REG_RDI,
- # define REG_RDI REG_RDI
- REG_RSI,
- # define REG_RSI REG_RSI
- REG_RBP,
- # define REG_RBP REG_RBP
- REG_RBX,
- # define REG_RBX REG_RBX
- REG_RDX,
- # define REG_RDX REG_RDX
- REG_RAX,
- # define REG_RAX REG_RAX
- REG_RCX,
- # define REG_RCX REG_RCX
- REG_RSP,
- # define REG_RSP REG_RSP
- REG_RIP,
- # define REG_RIP REG_RIP
- REG_EFL,
- # define REG_EFL REG_EFL
- REG_CSGSFS, /* Actually short cs, gs, fs, __pad0. */
- # define REG_CSGSFS REG_CSGSFS
- REG_ERR,
- # define REG_ERR REG_ERR
- REG_TRAPNO,
- # define REG_TRAPNO REG_TRAPNO
- REG_OLDMASK,
- # define REG_OLDMASK REG_OLDMASK
- REG_CR2
- # define REG_CR2 REG_CR2
- };
- struct _libc_fpxreg {
- unsigned short int significand[4];
- unsigned short int exponent;
- unsigned short int padding[3];
- };
- struct _libc_xmmreg {
- __uint32_t element[4];
- };
- struct _libc_fpstate {
- /* 64-bit FXSAVE format. */
- __uint16_t cwd;
- __uint16_t swd;
- __uint16_t ftw;
- __uint16_t fop;
- __uint64_t rip;
- __uint64_t rdp;
- __uint32_t mxcsr;
- __uint32_t mxcr_mask;
- struct _libc_fpxreg st[8];
- struct _libc_xmmreg _xmm[16];
- __uint32_t padding[24];
- };
- /* Structure to describe FPU registers. */
- typedef struct _libc_fpstate *fpregset_t;
- /* Context to describe whole processor state. */
- typedef struct {
- gregset_t gregs;
- /* Note that fpregs is a pointer. */
- fpregset_t fpregs;
- unsigned long __reserved1 [8];
- } mcontext_t;
- /* Userlevel context. */
- typedef struct ucontext {
- unsigned long int uc_flags;
- struct ucontext *uc_link;
- stack_t uc_stack;
- mcontext_t uc_mcontext;
- __sigset_t uc_sigmask;
- struct _libc_fpstate __fpregs_mem;
- } ucontext_t;
- /* bits/ustat.h */
- struct __kernel_ustat
- {
- __daddr_t f_tfree; /* Number of free blocks. */
- __ino_t f_tinode; /* Number of free inodes. */
- char f_fname[6];
- char f_fpack[6];
- };
- /* bits/socket.h */
- struct msghdr {
- void *msg_name; /* Address to send to/receive from. */
- socklen_t msg_namelen; /* Length of address data. */
- struct iovec *msg_iov; /* Vector of data to send/receive into. */
- size_t msg_iovlen; /* Number of elements in the vector. */
- void *msg_control; /* Ancillary data (eg BSD filedesc passing). */
- size_t msg_controllen; /* Ancillary data buffer length.
- !! The type should be socklen_t but the
- definition of the kernel is incompatible
- with this. */
- int msg_flags; /* Flags on received message. */
- };
- /* For `recvmmsg'. */
- struct mmsghdr {
- struct msghdr msg_hdr; /* Actual message header. */
- unsigned int msg_len; /* Number of received bytes for the entry. */
- };
- /* POSIX.1g specifies this type name for the `sa_family' member. */
- typedef unsigned short int sa_family_t;
- /* This macro is used to declare the initial common members
- of the data types used for socket addresses, `struct sockaddr',
- `struct sockaddr_in', `struct sockaddr_un', etc. */
- #define __SOCKADDR_COMMON(sa_prefix) \
- sa_family_t sa_prefix##family
- /* Structure describing a generic socket address. */
- struct sockaddr {
- __SOCKADDR_COMMON (sa_); /* Common data: address family and length. */
- char sa_data[14]; /* Address data. */
- };
- /* linux/mqueue.h */
- struct __kernel_mq_attr {
- long mq_flags; /* message queue flags */
- long mq_maxmsg; /* maximum number of messages */
- long mq_msgsize; /* maximum message size */
- long mq_curmsgs; /* number of messages currently queued */
- long __reserved[4]; /* ignored for input, zeroed for output */
- };
- /* bits/uio.h */
- /* Structure for scatter/gather I/O. */
- struct iovec {
- void * iov_base; /* Pointer to data. */
- size_t iov_len; /* Length of data. */
- };
- /* bits/sched.h */
- /* Type for array elements in 'cpu_set_t'. */
- typedef unsigned long int __kernel_cpu_mask;
- /* Size definition for CPU sets. */
- # define __CPU_SETSIZE 1024
- # define __NCPUBITS (8 * sizeof (__kernel_cpu_mask))
- /* Data structure to describe CPU mask. */
- typedef struct {
- __kernel_cpu_mask __bits[__CPU_SETSIZE / __NCPUBITS];
- } __kernel_cpu_set_t;
- struct getcpu_cache {
- unsigned long blob[128 / sizeof(long)];
- };
- # undef __CPU_SETSIZE
- # undef __NCPUBITS
- #define LINUX_DT_UNKNOWN 0
- #define LINUX_DT_FIFO 1
- #define LINUX_DT_CHR 2
- #define LINUX_DT_DIR 4
- #define LINUX_DT_BLK 6
- #define LINUX_DT_REG 8
- #define LINUX_DT_LNK 10
- #define LINUX_DT_SOCK 12
- #define LINUX_DT_WHT 14
- struct linux_dirent64 {
- uint64_t d_ino; /* Inode number */
- uint64_t d_off; /* Offset to next linux_dirent */
- unsigned short int d_reclen; /* Length of this linux_dirent */
- unsigned char d_type;
- char d_name[]; /* File name (null-terminated) */
- };
- struct linux_dirent {
- unsigned long d_ino; /* Inode number */
- unsigned long d_off; /* Offset to next linux_dirent */
- unsigned short int d_reclen; /* Length of this linux_dirent */
- char d_name[]; /* File name (null-terminated) */
- };
- struct linux_dirent_tail {
- char pad;
- unsigned char d_type;
- };
- struct linux_file_handle {
- unsigned int handle_bytes;
- int handle_type;
- unsigned char f_handle[0];
- };
- struct __kernel_addrinfo
- {
- int ai_flags; /* Input flags. */
- int ai_family; /* Protocol family for socket. */
- int ai_socktype; /* Socket type. */
- int ai_protocol; /* Protocol for socket. */
- socklen_t ai_addrlen; /* Length of socket address. */
- struct sockaddr *ai_addr; /* Socket address for socket. */
- char *ai_canonname; /* Canonical name for service location. */
- struct addrinfo *ai_next; /* Pointer to next in list. */
- };
- #include "elf.h"
- #ifdef __x86_64__
- typedef Elf64_auxv_t elf_auxv_t;
- #else
- typedef Elf64_auxv_t elf_auxv_t;
- #endif
- /* typedef for shim internal types */
- typedef unsigned int IDTYPE;
- typedef uint16_t FDTYPE;
- typedef unsigned long LEASETYPE;
- typedef unsigned long HASHTYPE;
- typedef struct atomic_int REFTYPE;
- #include <pal.h>
- typedef struct shim_lock {
- PAL_HANDLE lock;
- IDTYPE owner;
- } LOCKTYPE;
- typedef struct shim_aevent {
- PAL_HANDLE event;
- } AEVENTTYPE;
- #define STR_SIZE 256
- struct shim_str {
- char str[STR_SIZE];
- };
- #define QSTR_SIZE 32
- /* Use qstr for names. This has fix size string + string object
- * if len > SHIM_QSTR_SIZE then use overflow string */
- struct shim_qstr {
- HASHTYPE hash;
- size_t len;
- char name[QSTR_SIZE];
- struct shim_str * oflow;
- };
- #endif /* _SHIM_TYPES_H_ */
|