Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 09:35:44

0001 
0002 /*--------------------------------------------------------------------*/
0003 /*--- mips/Linux-specific kernel interface.     vki-mips32-linux.h ---*/
0004 /*--------------------------------------------------------------------*/
0005 
0006 /*
0007    This file is part of Valgrind, a dynamic binary instrumentation
0008    framework.
0009 
0010    Copyright (C) 2010-2017 RT-RK
0011 
0012    This program is free software; you can redistribute it and/or
0013    modify it under the terms of the GNU General Public License as
0014    published by the Free Software Foundation; either version 2 of the
0015    License, or (at your option) any later version.
0016 
0017    This program is distributed in the hope that it will be useful, but
0018    WITHOUT ANY WARRANTY; without even the implied warranty of
0019    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0020    General Public License for more details.
0021 
0022    You should have received a copy of the GNU General Public License
0023    along with this program; if not, see <http://www.gnu.org/licenses/>.
0024 
0025    The GNU General Public License is contained in the file COPYING.
0026 */
0027 
0028 #ifndef __VKI_MIPS32_LINUX_H
0029 #define __VKI_MIPS32_LINUX_H
0030 
0031 #include <config.h>
0032 
0033 // mips endian
0034 #if defined (_MIPSEL)
0035 #define VKI_LITTLE_ENDIAN  1
0036 #elif defined (_MIPSEB)
0037 #define VKI_BIG_ENDIAN  1
0038 #endif
0039 
0040 
0041 //----------------------------------------------------------------------
0042 // From linux-2.6.35.5/include/asm-generic/int-ll64.h
0043 //----------------------------------------------------------------------
0044 
0045 typedef __signed__ char __vki_s8;
0046 typedef unsigned char __vki_u8;
0047 
0048 typedef __signed__ short __vki_s16;
0049 typedef unsigned short __vki_u16;
0050 
0051 typedef __signed__ int __vki_s32;
0052 typedef unsigned int __vki_u32;
0053 
0054 typedef __signed char vki_s8;
0055 typedef unsigned char vki_u8;
0056 
0057 typedef __signed short vki_s16;
0058 typedef unsigned short vki_u16;
0059 
0060 typedef __signed int vki_s32;
0061 typedef unsigned int vki_u32;
0062 
0063 typedef __signed__ long long __vki_s64;
0064 typedef unsigned long long __vki_u64;
0065 
0066 
0067 //----------------------------------------------------------------------
0068 // From linux-2.6.35.5/include/asm-mips/page.h
0069 //----------------------------------------------------------------------
0070 
0071 /* MIPS32 uses runtime pagesize detection */
0072 extern UWord VKI_PAGE_SHIFT;
0073 extern UWord VKI_PAGE_SIZE;
0074 #define VKI_PAGE_MASK           (~(VKI_PAGE_SIZE-1))
0075 #define VKI_MAX_PAGE_SHIFT      16
0076 #define VKI_MAX_PAGE_SIZE       (1UL << VKI_MAX_PAGE_SHIFT)
0077 
0078 //----------------------------------------------------------------------
0079 // From linux-2.6.35.9/arch/mips/include/bits/shm.h
0080 //----------------------------------------------------------------------
0081 
0082 #define VKI_SHMLBA  0x40000
0083 
0084 //----------------------------------------------------------------------
0085 // From linux-2.6.35.5/include/asm/signal.h
0086 //----------------------------------------------------------------------
0087 
0088 #define VKI_MINSIGSTKSZ     2048
0089 
0090 #define VKI_SIG_BLOCK       1    /* for blocking signals */
0091 #define VKI_SIG_UNBLOCK     2    /* for unblocking signals */
0092 #define VKI_SIG_SETMASK     3    /* for setting the signal mask */
0093 
0094 /* Type of a signal handler.  */
0095 typedef void __vki_signalfn_t(int);
0096 typedef __vki_signalfn_t __user *__vki_sighandler_t;
0097 
0098 typedef void __vki_restorefn_t(void);
0099 typedef __vki_restorefn_t __user *__vki_sigrestore_t;
0100 
0101 #define VKI_SIG_DFL ((__vki_sighandler_t)0) /* default signal handling */
0102 #define VKI_SIG_IGN ((__vki_sighandler_t)1) /* ignore signal */
0103 
0104 #define _VKI_NSIG       128
0105 #define _VKI_NSIG_BPW   32
0106 #define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
0107 
0108 typedef unsigned long vki_old_sigset_t;     /* at least 32 bits */
0109 
0110 typedef struct {
0111         unsigned long sig[_VKI_NSIG_WORDS];
0112 } vki_sigset_t;
0113 
0114 #define VKI_SIGHUP       1  /* Hangup (POSIX).  */
0115 #define VKI_SIGINT       2  /* Interrupt (ANSI).  */
0116 #define VKI_SIGQUIT      3  /* Quit (POSIX).  */
0117 #define VKI_SIGILL       4  /* Illegal instruction (ANSI).  */
0118 #define VKI_SIGTRAP      5  /* Trace trap (POSIX).  */
0119 #define VKI_SIGIOT       6  /* IOT trap (4.2 BSD).  */
0120 #define VKI_SIGABRT      VKI_SIGIOT /* Abort (ANSI).  */
0121 #define VKI_SIGEMT       7
0122 #define VKI_SIGFPE       8  /* Floating-point exception (ANSI).  */
0123 #define VKI_SIGKILL      9  /* Kill, unblockable (POSIX).  */
0124 #define VKI_SIGBUS      10  /* BUS error (4.2 BSD).  */
0125 #define VKI_SIGSEGV     11  /* Segmentation violation (ANSI).  */
0126 #define VKI_SIGSYS      12
0127 #define VKI_SIGPIPE     13  /* Broken pipe (POSIX).  */
0128 #define VKI_SIGALRM     14  /* Alarm clock (POSIX).  */
0129 #define VKI_SIGTERM     15  /* Termination (ANSI).  */
0130 #define VKI_SIGUSR1     16  /* User-defined signal 1 (POSIX).  */
0131 #define VKI_SIGUSR2     17  /* User-defined signal 2 (POSIX).  */
0132 #define VKI_SIGCHLD     18  /* Child status has changed (POSIX).  */
0133 #define VKI_SIGCLD      VKI_SIGCHLD /* Same as SIGCHLD (System V).  */
0134 #define VKI_SIGPWR      19  /* Power failure restart (System V).  */
0135 #define VKI_SIGWINCH    20  /* Window size change (4.3 BSD, Sun).  */
0136 #define VKI_SIGURG      21  /* Urgent condition on socket (4.2 BSD).  */
0137 #define VKI_SIGIO       22  /* I/O now possible (4.2 BSD).  */
0138 #define VKI_SIGPOLL     VKI_SIGIO   /* Pollable event occurred (System V).  */
0139 #define VKI_SIGSTOP     23  /* Stop, unblockable (POSIX).  */
0140 #define VKI_SIGTSTP     24  /* Keyboard stop (POSIX).  */
0141 #define VKI_SIGCONT     25  /* Continue (POSIX).  */
0142 #define VKI_SIGTTIN     26  /* Background read from tty (POSIX).  */
0143 #define VKI_SIGTTOU     27  /* Background write to tty (POSIX).  */
0144 #define VKI_SIGVTALRM   28  /* Virtual alarm clock (4.2 BSD).  */
0145 #define VKI_SIGPROF     29  /* Profiling alarm clock (4.2 BSD).  */
0146 #define VKI_SIGXCPU     30  /* CPU limit exceeded (4.2 BSD).  */
0147 #define VKI_SIGXFSZ     31  /* File size limit exceeded (4.2 BSD).  */
0148 
0149 /* These should not be considered constants from userland.  */
0150 #define VKI_SIGRTMIN    32
0151 // [[This was (_NSIG-1) in 2.4.X... not sure if it matters.]]
0152 #define VKI_SIGRTMAX    _VKI_NSIG
0153 
0154 #define VKI_SA_ONSTACK      0x08000000
0155 #define VKI_SA_RESETHAND    0x80000000
0156 #define VKI_SA_RESTART      0x10000000
0157 #define VKI_SA_SIGINFO      0x00000008
0158 #define VKI_SA_NODEFER      0x40000000
0159 #define VKI_SA_NOCLDWAIT    0x00010000
0160 #define VKI_SA_NOCLDSTOP    0x00000001
0161 
0162 #define VKI_SA_NOMASK       VKI_SA_NODEFER
0163 #define VKI_SA_ONESHOT      VKI_SA_RESETHAND
0164 //#define VKI_SA_INTERRUPT  0x20000000 /* dummy -- ignored */
0165 
0166 #define VKI_SA_RESTORER     0x04000000
0167 
0168 #define VKI_SS_ONSTACK      1
0169 #define VKI_SS_DISABLE      2
0170 
0171 struct vki_old_sigaction {
0172         // [[Nb: a 'k' prefix is added to "sa_handler" because
0173         // bits/sigaction.h (which gets dragged in somehow via signal.h)
0174         // #defines it as something else.  Since that is done for glibc's
0175         // purposes, which we don't care about here, we use our own name.]]
0176     unsigned long sa_flags;
0177         __vki_sighandler_t ksa_handler;
0178         vki_old_sigset_t sa_mask;
0179         __vki_sigrestore_t sa_restorer;
0180 };
0181 
0182 struct vki_sigaction {
0183         unsigned int    sa_flags;
0184         __vki_sighandler_t  sa_handler;
0185         vki_sigset_t        sa_mask;
0186 };
0187 
0188 
0189 struct vki_sigaction_base {
0190         // [[See comment about extra 'k' above]]
0191         unsigned long sa_flags;
0192     __vki_sighandler_t ksa_handler;
0193 
0194     vki_sigset_t sa_mask;       /* mask last for extensibility */
0195         __vki_sigrestore_t sa_restorer;
0196 };
0197 
0198 /* On Linux we use the same type for passing sigactions to
0199    and from the kernel.  Hence: */
0200 typedef  struct vki_sigaction_base  vki_sigaction_toK_t;
0201 typedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
0202 
0203 typedef struct vki_sigaltstack {
0204     void __user *ss_sp;
0205     vki_size_t ss_size;
0206     int ss_flags;
0207 
0208 } vki_stack_t;
0209 
0210 
0211 //----------------------------------------------------------------------
0212 // From 2.6.35.5/include/asm-mips/sigcontext.h
0213 //----------------------------------------------------------------------
0214 
0215 struct _vki_fpreg {
0216     unsigned short significand[4];
0217     unsigned short exponent;
0218 };
0219 
0220 struct _vki_fpxreg {
0221     unsigned short significand[4];
0222     unsigned short exponent;
0223     unsigned short padding[3];
0224 };
0225 
0226 struct _vki_xmmreg {
0227     unsigned long element[4];
0228 };
0229 
0230 struct _vki_fpstate {
0231     /* Regular FPU environment */
0232     unsigned long   cw;
0233     unsigned long   sw;
0234     unsigned long   tag;
0235     unsigned long   ipoff;
0236     unsigned long   cssel;
0237     unsigned long   dataoff;
0238     unsigned long   datasel;
0239     struct _vki_fpreg   _st[8];
0240     unsigned short  status;
0241     unsigned short  magic;      /* 0xffff = regular FPU data only */
0242 
0243     /* FXSR FPU environment */
0244     unsigned long   _fxsr_env[6];   /* FXSR FPU env is ignored */
0245     unsigned long   mxcsr;
0246     unsigned long   reserved;
0247     struct _vki_fpxreg  _fxsr_st[8];    /* FXSR FPU reg data is ignored */
0248     struct _vki_xmmreg  _xmm[8];
0249     unsigned long   padding[56];
0250 };
0251 
0252 //----------------------------------------------------------------------
0253 // From linux-2.6.35.5/include/asm-mips/sigcontext.h
0254 //----------------------------------------------------------------------
0255 
0256 struct vki_sigcontext {
0257         unsigned int            sc_regmask;     /* Unused */
0258         unsigned int            sc_status;      /* Unused */
0259         unsigned long long      sc_pc;
0260         unsigned long long      sc_regs[32];
0261         unsigned long long      sc_fpregs[32];
0262         unsigned int            sc_acx;         /* Was sc_ownedfp */
0263         unsigned int            sc_fpc_csr;
0264         unsigned int            sc_fpc_eir;     /* Unused */
0265         unsigned int            sc_used_math;
0266         unsigned int            sc_dsp;         /* dsp status, was sc_ssflags */
0267         unsigned long long      sc_mdhi;
0268         unsigned long long      sc_mdlo;
0269         unsigned long           sc_hi1;         /* Was sc_cause */
0270         unsigned long           sc_lo1;         /* Was sc_badvaddr */
0271         unsigned long           sc_hi2;         /* Was sc_sigset[4] */
0272         unsigned long           sc_lo2;
0273         unsigned long           sc_hi3;
0274         unsigned long           sc_lo3;
0275 };
0276 
0277 //----------------------------------------------------------------------
0278 // From linux-2.6.35.5/include/asm-mips/mman.h
0279 //----------------------------------------------------------------------
0280 
0281 #define VKI_PROT_NONE       0x0      /* No page permissions */
0282 #define VKI_PROT_READ       0x1      /* page can be read */
0283 #define VKI_PROT_WRITE      0x2      /* page can be written */
0284 #define VKI_PROT_EXEC       0x4      /* page can be executed */
0285 #define VKI_PROT_GROWSDOWN  0x01000000  /* mprotect flag: extend change to start of growsdown vma */
0286 #define VKI_PROT_GROWSUP    0x02000000  /* mprotect flag: extend change to end of growsup vma */
0287 
0288 #define VKI_MAP_SHARED      0x001     /* Share changes */
0289 #define VKI_MAP_PRIVATE     0x002     /* Changes are private */
0290 #define VKI_MAP_FIXED       0x010     /* Interpret addr exactly */
0291 
0292 #define VKI_MAP_NORESERVE   0x0400   /* don't reserve swap pages */
0293 
0294 /* These are linux-specific */
0295 #define VKI_MAP_NORESERVE   0x0400          /* don't check for reservations */
0296 #define VKI_MAP_ANONYMOUS   0x0800          /* don't use a file */
0297 #define VKI_MAP_GROWSDOWN   0x1000          /* stack-like segment */
0298 #define VKI_MAP_DENYWRITE   0x2000          /* ETXTBSY */
0299 #define VKI_MAP_EXECUTABLE  0x4000          /* mark it as an executable */
0300 #define VKI_MAP_LOCKED      0x8000          /* pages are locked */
0301 #define VKI_MAP_POPULATE    0x10000         /* populate (prefault) pagetables */
0302 #define VKI_MAP_NONBLOCK    0x20000         /* do not block on IO */
0303 
0304 
0305 //----------------------------------------------------------------------
0306 // From linux-2.6.35.5/include/asm-mips/fcntl.h
0307 //----------------------------------------------------------------------
0308 
0309 #define VKI_O_ACCMODE          03
0310 #define VKI_O_RDONLY           00
0311 #define VKI_O_WRONLY           01
0312 #define VKI_O_RDWR         02
0313 
0314 #define VKI_O_CREAT     0x0100      /* not fcntl */
0315 #define VKI_O_EXCL      0x0400      /* not fcntl */
0316 
0317 #define VKI_O_TRUNC     0x0200  /* not fcntl */
0318 
0319 #define VKI_O_APPEND        0x0008
0320 #define VKI_O_NONBLOCK      0x0080
0321 #define VKI_O_LARGEFILE         0x2000
0322 #define VKI_O_DIRECT            0x8000
0323 
0324 #define VKI_AT_FDCWD            -100
0325 
0326 #define VKI_F_DUPFD      0          /* dup */
0327 #define VKI_F_GETFD      1          /* get close_on_exec */
0328 #define VKI_F_SETFD      2          /* set/clear close_on_exec */
0329 #define VKI_F_GETFL      3          /* get file->f_flags */
0330 #define VKI_F_SETFL      4          /* set file->f_flags */
0331 
0332 #define VKI_F_GETLK      14
0333 #define VKI_F_SETLK      6
0334 #define VKI_F_SETLKW         7
0335 
0336 #define VKI_F_SETOWN         24         /*  for sockets. */
0337 #define VKI_F_GETOWN         23         /*  for sockets. */
0338 #define VKI_F_SETSIG         10         /*  for sockets. */
0339 #define VKI_F_GETSIG         11         /*  for sockets. */
0340 
0341 #define VKI_F_SETOWN_EX     15
0342 #define VKI_F_GETOWN_EX     16
0343 
0344 #define VKI_F_OFD_GETLK     36
0345 #define VKI_F_OFD_SETLK     37
0346 #define VKI_F_OFD_SETLKW    38
0347 
0348 #define VKI_F_GETLK64       33          /*  using 'struct flock64' */
0349 #define VKI_F_SETLK64       34
0350 #define VKI_F_SETLKW64      35
0351 
0352 /* for F_[GET|SET]FL */
0353 #define VKI_FD_CLOEXEC   1      /* actually anything with low bit set goes */
0354 
0355 #define VKI_F_LINUX_SPECIFIC_BASE   1024
0356 
0357 struct vki_f_owner_ex {
0358     int type;
0359     __vki_kernel_pid_t  pid;
0360 };
0361 
0362 //----------------------------------------------------------------------
0363 // From linux-2.6.35.5/include/asm-mips/resource.h
0364 //----------------------------------------------------------------------
0365 
0366 #define VKI_RLIMIT_DATA     2   /* max data size */
0367 #define VKI_RLIMIT_STACK    3   /* max stack size */
0368 #define VKI_RLIMIT_CORE     4   /* max core file size */
0369 #define VKI_RLIMIT_NOFILE   5   /* max number of open files */
0370 #define VKI_RLIM_INFINITY 0x7fffffffUL
0371 
0372 //----------------------------------------------------------------------
0373 // From linux-2.6.35.5/include/asm-mips/socket.h
0374 //----------------------------------------------------------------------
0375 
0376 #define VKI_SOL_SOCKET  0xffff
0377 
0378 #define VKI_SO_TYPE 0x1008
0379 
0380 #define VKI_SO_ATTACH_FILTER    26
0381 
0382 //----------------------------------------------------------------------
0383 // From linux-2.6.35.5/include/asm-i386/sockios.h
0384 //----------------------------------------------------------------------
0385 
0386 #define VKI_SIOCATMARK          _VKI_IOR('s', 7, int)
0387 #define VKI_SIOCSPGRP           _VKI_IOW('s', 8, vki_pid_t)
0388 #define VKI_SIOCGPGRP           _VKI_IOR('s', 9, vki_pid_t)
0389 #define VKI_SIOCGSTAMP          0x8906      /* Get stamp (timeval) */
0390 #define VKI_SIOCGSTAMPNS        0x8907      /* Get stamp (timespec) */
0391 
0392 //----------------------------------------------------------------------
0393 // From linux-2.6.35.5/include/asm-mips/stat.h
0394 //----------------------------------------------------------------------
0395 
0396 struct vki_stat {
0397     unsigned    st_dev;
0398     long        st_pad1[3];     /* Reserved for network id */
0399     unsigned long   st_ino;
0400     unsigned int    st_mode;
0401     unsigned long   st_nlink;
0402     unsigned int    st_uid;
0403     unsigned int    st_gid;
0404     unsigned    st_rdev;
0405     long        st_pad2[2];
0406     long        st_size;
0407     long        st_pad3;
0408     /*
0409      * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
0410      * but we don't have it under Linux.
0411      */
0412     long        st_atime;
0413     long        st_atime_nsec;
0414     long        st_mtime;
0415     long        st_mtime_nsec;
0416     long        st_ctime;
0417     long        st_ctime_nsec;
0418     long        st_blksize;
0419     long        st_blocks;
0420     long        st_pad4[14];
0421 };
0422 
0423 /*
0424  * This matches struct stat64 in glibc2.1, hence the absolutely insane
0425  * amounts of padding around dev_t's.  The memory layout is the same as of
0426  * struct stat of the 64-bit kernel.
0427  */
0428 
0429 struct vki_stat64 {
0430     unsigned long   st_dev;
0431     unsigned long   st_pad0[3]; /* Reserved for st_dev expansion  */
0432 
0433     unsigned long long  st_ino;
0434 
0435     unsigned int    st_mode;
0436     unsigned long   st_nlink;
0437 
0438     unsigned int    st_uid;
0439     unsigned int    st_gid;
0440 
0441     unsigned long   st_rdev;
0442     unsigned long   st_pad1[3]; /* Reserved for st_rdev expansion  */
0443 
0444     long long   st_size;
0445 
0446     /*
0447      * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
0448      * but we don't have it under Linux.
0449      */
0450     long        st_atime;
0451     unsigned long   st_atime_nsec;  /* Reserved for st_atime expansion  */
0452 
0453     long        st_mtime;
0454     unsigned long   st_mtime_nsec;  /* Reserved for st_mtime expansion  */
0455 
0456     long        st_ctime;
0457     unsigned long   st_ctime_nsec;  /* Reserved for st_ctime expansion  */
0458 
0459     unsigned long   st_blksize;
0460     unsigned long   st_pad2;
0461 
0462     long long   st_blocks;
0463 };
0464 
0465 //----------------------------------------------------------------------
0466 // From linux-2.6.35.5/include/asm-mips/statfs.h
0467 //----------------------------------------------------------------------
0468 
0469 struct vki_statfs {
0470     long        f_type;
0471     long        f_bsize;
0472     long        f_frsize;   /* Fragment size - unsupported */
0473     long        f_blocks;
0474     long        f_bfree;
0475     long        f_files;
0476     long        f_ffree;
0477     long        f_bavail;
0478 
0479     /* Linux specials */
0480     __vki_kernel_fsid_t f_fsid;
0481     long        f_namelen;
0482     long        f_spare[6];
0483 };
0484 
0485 //----------------------------------------------------------------------
0486 // From linux-2.6.35.5/include/asm-mips/termios.h
0487 //----------------------------------------------------------------------
0488 
0489 struct vki_winsize {
0490     unsigned short ws_row;
0491     unsigned short ws_col;
0492     unsigned short ws_xpixel;
0493     unsigned short ws_ypixel;
0494 };
0495 
0496 #define NCC 8
0497 #define NCCS    23
0498 struct vki_termio {
0499     unsigned short c_iflag;     /* input mode flags */
0500     unsigned short c_oflag;     /* output mode flags */
0501     unsigned short c_cflag;     /* control mode flags */
0502     unsigned short c_lflag;     /* local mode flags */
0503     char c_line;            /* line discipline */
0504     unsigned char c_cc[NCCS];   /* control characters */
0505 };
0506 
0507 
0508 //----------------------------------------------------------------------
0509 // From linux-2.6.35.5/include/asm-mips/termbits.h
0510 //----------------------------------------------------------------------
0511 
0512 typedef unsigned char   vki_cc_t;
0513 typedef unsigned long   vki_speed_t;
0514 typedef unsigned long   vki_tcflag_t;
0515 
0516 struct vki_termios {
0517     vki_tcflag_t c_iflag;       /* input mode flags */
0518     vki_tcflag_t c_oflag;       /* output mode flags */
0519     vki_tcflag_t c_cflag;       /* control mode flags */
0520     vki_tcflag_t c_lflag;       /* local mode flags */
0521     vki_cc_t c_line;            /* line discipline */
0522     vki_cc_t c_cc[NCCS];        /* control characters */
0523 };
0524 
0525 //----------------------------------------------------------------------
0526 // From linux-2.6.35.5/include/asm-mips/ioctl.h
0527 //----------------------------------------------------------------------
0528 
0529 #define _VKI_IOC_NRBITS     8
0530 #define _VKI_IOC_TYPEBITS   8
0531 #define _VKI_IOC_SIZEBITS   13
0532 #define _VKI_IOC_DIRBITS    3
0533 
0534 #define _VKI_IOC_NRMASK     ((1 << _VKI_IOC_NRBITS)-1)
0535 #define _VKI_IOC_TYPEMASK   ((1 << _VKI_IOC_TYPEBITS)-1)
0536 #define _VKI_IOC_SIZEMASK   ((1 << _VKI_IOC_SIZEBITS)-1)
0537 #define _VKI_IOC_DIRMASK    ((1 << _VKI_IOC_DIRBITS)-1)
0538 
0539 #define _VKI_IOC_NRSHIFT    0
0540 #define _VKI_IOC_TYPESHIFT  (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
0541 #define _VKI_IOC_SIZESHIFT  (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
0542 #define _VKI_IOC_DIRSHIFT   (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
0543 
0544 #define _VKI_IOC_NONE   1U
0545 #define _VKI_IOC_READ   2U
0546 #define _VKI_IOC_WRITE  4U
0547 
0548 #define _VKI_IOC(dir,type,nr,size) \
0549     (((dir)  << _VKI_IOC_DIRSHIFT) | \
0550      ((type) << _VKI_IOC_TYPESHIFT) | \
0551      ((nr)   << _VKI_IOC_NRSHIFT) | \
0552      ((size) << _VKI_IOC_SIZESHIFT))
0553 
0554 /* provoke compile error for invalid uses of size argument */
0555 extern unsigned int __VKI_invalid_size_argument_for_IOC;
0556 /* used to create numbers */
0557 #define _VKI_IO(type,nr)    _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
0558 #define _VKI_IOR(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
0559 #define _VKI_IOW(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
0560 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
0561 
0562 /* used to decode ioctl numbers.. */
0563 #define _VKI_IOC_DIR(nr)    (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
0564 #define _VKI_IOC_TYPE(nr)   (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
0565 #define _VKI_IOC_NR(nr)     (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
0566 #define _VKI_IOC_SIZE(nr)   (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
0567 
0568 //----------------------------------------------------------------------
0569 // From linux-2.6.35.5/include/asm-mips/ioctls.h
0570 //----------------------------------------------------------------------
0571 
0572 #define VKI_TCGETA      0x5401
0573 #define VKI_TCSETA      0x5402  /* Clashes with SNDCTL_TMR_START sound ioctl */
0574 #define VKI_TCSETAW     0x5403
0575 #define VKI_TCSETAF     0x5404
0576 
0577 #define VKI_TCSBRK      0x5405
0578 #define VKI_TCXONC      0x5406
0579 #define VKI_TCFLSH      0x5407
0580 
0581 #define VKI_TCGETS      0x540d
0582 #define VKI_TCSETS      0x540e
0583 #define VKI_TCSETSW     0x540f
0584 #define VKI_TCSETSF     0x5410
0585 
0586 #define VKI_TIOCEXCL        0x740d      /* set exclusive use of tty */
0587 #define VKI_TIOCNXCL        0x740e      /* reset exclusive use of tty */
0588 #define VKI_TIOCOUTQ        0x7472      /* output queue size */
0589 #define VKI_TIOCSTI     0x5472      /* simulate terminal input */
0590 #define VKI_TIOCMGET        0x741d      /* get all modem bits */
0591 #define VKI_TIOCMBIS        0x741b      /* bis modem bits */
0592 #define VKI_TIOCMBIC        0x741c      /* bic modem bits */
0593 #define VKI_TIOCMSET        0x741a      /* set all modem bits */
0594 #define VKI_TIOCPKT     0x5470      /* pty: set/clear packet mode */
0595 #define  VKI_TIOCPKT_DATA       0x00    /* data packet */
0596 #define  VKI_TIOCPKT_FLUSHREAD      0x01    /* flush packet */
0597 #define  VKI_TIOCPKT_FLUSHWRITE     0x02    /* flush packet */
0598 #define  VKI_TIOCPKT_STOP       0x04    /* stop output */
0599 #define  VKI_TIOCPKT_START      0x08    /* start output */
0600 #define  VKI_TIOCPKT_NOSTOP     0x10    /* no more ^S, ^Q */
0601 #define  VKI_TIOCPKT_DOSTOP     0x20    /* now do ^S ^Q */
0602 /* #define  TIOCPKT_IOCTL       0x40    state change of pty driver */
0603 #define VKI_TIOCSWINSZ  _VKI_IOW('t', 103, struct vki_winsize)  /* set window size */
0604 #define VKI_TIOCGWINSZ  _VKI_IOR('t', 104, struct vki_winsize)  /* get window size */
0605 #define VKI_TIOCNOTTY   0x5471      /* void tty association */
0606 #define VKI_TIOCSETD    0x7401
0607 #define VKI_TIOCGETD    0x7400
0608 
0609 #define VKI_FIOCLEX     0x6601
0610 #define VKI_FIONCLEX        0x6602
0611 #define VKI_FIOASYNC        0x667d
0612 #define VKI_FIONBIO     0x667e
0613 #define VKI_FIOQSIZE        0x667f
0614 
0615 #define VKI_TIOCGLTC        0x7474          /* get special local chars */
0616 #define VKI_TIOCSLTC        0x7475          /* set special local chars */
0617 #define VKI_TIOCSPGRP       _VKI_IOW('t', 118, int) /* set pgrp of tty */
0618 #define VKI_TIOCGPGRP       _VKI_IOR('t', 119, int) /* get pgrp of tty */
0619 #define VKI_TIOCCONS        _VKI_IOW('t', 120, int) /* become virtual console */
0620 
0621 #define VKI_FIONREAD        0x467f
0622 #define VKI_TIOCINQ     FIONREAD
0623 
0624 #define VKI_TIOCGETP            0x7408
0625 #define VKI_TIOCSETP            0x7409
0626 #define VKI_TIOCSETN            0x740a          /* TIOCSETP wo flush */
0627 
0628 #define VKI_TIOCSBRK    0x5427  /* BSD compatibility */
0629 #define VKI_TIOCCBRK    0x5428  /* BSD compatibility */
0630 #define VKI_TIOCGSID    0x7416  /* Return the session ID of FD */
0631 #define VKI_TIOCGPTN    _VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
0632 #define VKI_TIOCSPTLCK  _VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
0633 
0634 /* I hope the range from 0x5480 on is free ... */
0635 #define VKI_TIOCSCTTY       0x5480      /* become controlling tty */
0636 #define VKI_TIOCGSOFTCAR    0x5481
0637 #define VKI_TIOCSSOFTCAR    0x5482
0638 #define VKI_TIOCLINUX       0x5483
0639 #define VKI_TIOCGSERIAL     0x5484
0640 #define VKI_TIOCSSERIAL     0x5485
0641 #define VKI_TCSBRKP     0x5486  /* Needed for POSIX tcsendbreak() */
0642 #define VKI_TIOCSERCONFIG   0x5488
0643 #define VKI_TIOCSERGWILD    0x5489
0644 #define VKI_TIOCSERSWILD    0x548a
0645 #define VKI_TIOCGLCKTRMIOS  0x548b
0646 #define VKI_TIOCSLCKTRMIOS  0x548c
0647 #define VKI_TIOCSERGSTRUCT  0x548d /* For debugging only */
0648 #define VKI_TIOCSERGETLSR       0x548e /* Get line status register */
0649 #define VKI_TIOCSERGETMULTI     0x548f /* Get multiport config  */
0650 #define VKI_TIOCSERSETMULTI     0x5490 /* Set multiport config */
0651 #define VKI_TIOCMIWAIT          0x5491 /* wait for a change on serial input line(s) */
0652 #define VKI_TIOCGICOUNT         0x5492 /* read serial port inline interrupt counts */
0653 #define VKI_TIOCGHAYESESP   0x5493 /* Get Hayes ESP configuration */
0654 #define VKI_TIOCSHAYESESP   0x5494 /* Set Hayes ESP configuration */
0655 
0656 //----------------------------------------------------------------------
0657 // From asm-generic/poll.h
0658 //----------------------------------------------------------------------
0659 
0660 /* These are specified by iBCS2 */
0661 #define VKI_POLLIN      0x0001
0662 
0663 struct vki_pollfd {
0664     int fd;
0665     short events;
0666     short revents;
0667 };
0668 //----------------------------------------------------------------------
0669 // From linux-2.6.35.5/include/asm-mips/ucontext.h
0670 //----------------------------------------------------------------------
0671 
0672 struct vki_ucontext {
0673     unsigned long       uc_flags;
0674     struct vki_ucontext    *uc_link;
0675     vki_stack_t     uc_stack;
0676     struct vki_sigcontext   uc_mcontext;
0677     vki_sigset_t        uc_sigmask; /* mask last for extensibility */
0678 };
0679 
0680 // CAB: TODO
0681 typedef char vki_modify_ldt_t;
0682 
0683 //----------------------------------------------------------------------
0684 // From linux-2.6.35.5/include/asm-mips/ipcbuf.h
0685 //----------------------------------------------------------------------
0686 
0687 struct vki_ipc64_perm
0688 {
0689         __vki_kernel_key_t  key;
0690         __vki_kernel_uid_t  uid;
0691         __vki_kernel_gid_t  gid;
0692         __vki_kernel_uid_t  cuid;
0693         __vki_kernel_gid_t  cgid;
0694         __vki_kernel_mode_t mode;
0695         unsigned short  seq;
0696         unsigned short  __pad1;
0697         unsigned long   __unused1;
0698         unsigned long   __unused2;
0699 };
0700 
0701 //----------------------------------------------------------------------
0702 // From linux-2.6.35.5/include/asm-mips/sembuf.h
0703 //----------------------------------------------------------------------
0704 
0705 struct vki_semid64_ds {
0706         struct vki_ipc64_perm sem_perm;             /* permissions .. see ipc.h */
0707         __vki_kernel_time_t sem_otime;              /* last semop time */
0708         __vki_kernel_time_t sem_ctime;              /* last change time */
0709         unsigned long   sem_nsems;              /* no. of semaphores in array */
0710         unsigned long   __unused1;
0711         unsigned long   __unused2;
0712 };
0713 
0714 
0715 //----------------------------------------------------------------------
0716 // From linux-2.6.35.5/include/asm-mips/msgbuf.h
0717 //----------------------------------------------------------------------
0718 
0719 struct vki_msqid64_ds {
0720     struct vki_ipc64_perm msg_perm;
0721     __vki_kernel_time_t msg_stime;  /* last msgsnd time */
0722     unsigned long   __unused1;
0723     __vki_kernel_time_t msg_rtime;  /* last msgrcv time */
0724     unsigned long   __unused2;
0725     __vki_kernel_time_t msg_ctime;  /* last change time */
0726     unsigned long   __unused3;
0727     unsigned long  msg_cbytes;  /* current number of bytes on queue */
0728     unsigned long  msg_qnum;    /* number of messages in queue */
0729     unsigned long  msg_qbytes;  /* max number of bytes on queue */
0730     __vki_kernel_pid_t msg_lspid;   /* pid of last msgsnd */
0731     __vki_kernel_pid_t msg_lrpid;   /* last receive pid */
0732     unsigned long  __unused4;
0733     unsigned long  __unused5;
0734 };
0735 
0736 //----------------------------------------------------------------------
0737 // From linux-2.6.35.5/include/asm-mips/ipc.h
0738 //----------------------------------------------------------------------
0739 
0740 struct vki_ipc_kludge {
0741         struct vki_msgbuf __user *msgp;
0742         long msgtyp;
0743 };
0744 
0745 #define VKI_SEMOP            1
0746 #define VKI_SEMGET           2
0747 #define VKI_SEMCTL           3
0748 #define VKI_SEMTIMEDOP       4
0749 #define VKI_MSGSND          11
0750 #define VKI_MSGRCV          12
0751 #define VKI_MSGGET          13
0752 #define VKI_MSGCTL          14
0753 #define VKI_SHMAT           21
0754 #define VKI_SHMDT           22
0755 #define VKI_SHMGET          23
0756 #define VKI_SHMCTL          24
0757 
0758 //----------------------------------------------------------------------
0759 // From linux-2.6.35.5/include/asm-mips/shmbuf.h
0760 //----------------------------------------------------------------------
0761 
0762 struct vki_shmid64_ds {
0763         struct vki_ipc64_perm       shm_perm;       /* operation perms */
0764         vki_size_t                  shm_segsz;      /* size of segment (bytes) */
0765         __vki_kernel_time_t         shm_atime;      /* last attach time */
0766         __vki_kernel_time_t         shm_dtime;      /* last detach time */
0767         __vki_kernel_time_t         shm_ctime;      /* last change time */
0768         __vki_kernel_pid_t          shm_cpid;       /* pid of creator */
0769         __vki_kernel_pid_t          shm_lpid;       /* pid of last operator */
0770         unsigned long           shm_nattch;     /* no. of current attaches */
0771         unsigned long           __unused1;
0772         unsigned long           __unused2;
0773 };
0774 
0775 struct vki_shminfo64 {
0776         unsigned long   shmmax;
0777         unsigned long   shmmin;
0778         unsigned long   shmmni;
0779         unsigned long   shmseg;
0780         unsigned long   shmall;
0781         unsigned long   __unused1;
0782         unsigned long   __unused2;
0783         unsigned long   __unused3;
0784         unsigned long   __unused4;
0785 };
0786 //----------------------------------------------------------------------
0787 // From linux-2.6.35.5/include/asm-mips/ptrace.h
0788 //----------------------------------------------------------------------
0789 
0790 struct vki_pt_regs {
0791 #ifdef CONFIG_32BIT
0792         /* Pad bytes for argument save space on the stack. */
0793         unsigned long pad0[6];
0794 #endif
0795         /* Saved main processor registers. */
0796         unsigned long regs[32];
0797 
0798         /* Saved special registers. */
0799         unsigned long cp0_status;
0800         unsigned long hi;
0801         unsigned long lo;
0802 #ifdef CONFIG_CPU_HAS_SMARTMIPS
0803         unsigned long acx;
0804 #endif
0805         unsigned long cp0_badvaddr;
0806         unsigned long cp0_cause;
0807         unsigned long cp0_epc;
0808 #ifdef CONFIG_MIPS_MT_SMTC
0809         unsigned long cp0_tcstatus;
0810 #endif /* CONFIG_MIPS_MT_SMTC */
0811 #ifdef CONFIG_CPU_CAVIUM_OCTEON
0812         unsigned long long mpl[3];        /* MTM{0,1,2} */
0813         unsigned long long mtp[3];        /* MTP{0,1,2} */
0814 #endif
0815 } __attribute__ ((aligned (8)));
0816 
0817 #define VKI_PTRACE_GETREGS            12
0818 #define VKI_PTRACE_SETREGS            13
0819 #define VKI_PTRACE_GETFPREGS          14
0820 #define VKI_PTRACE_SETFPREGS          15
0821 //----------------------------------------------------------------------
0822 // From linux-4.5/arch/mips/include/uapi/asm/reg.h
0823 //----------------------------------------------------------------------
0824 #define VKI_MIPS32_EF_R0               6
0825 #define VKI_MIPS32_EF_R1               7
0826 #define VKI_MIPS32_EF_R2               8
0827 #define VKI_MIPS32_EF_R3               9
0828 #define VKI_MIPS32_EF_R4              10
0829 #define VKI_MIPS32_EF_R5              11
0830 #define VKI_MIPS32_EF_R6              12
0831 #define VKI_MIPS32_EF_R7              13
0832 #define VKI_MIPS32_EF_R8              14
0833 #define VKI_MIPS32_EF_R9              15
0834 #define VKI_MIPS32_EF_R10             16
0835 #define VKI_MIPS32_EF_R11             17
0836 #define VKI_MIPS32_EF_R12             18
0837 #define VKI_MIPS32_EF_R13             19
0838 #define VKI_MIPS32_EF_R14             20
0839 #define VKI_MIPS32_EF_R15             21
0840 #define VKI_MIPS32_EF_R16             22
0841 #define VKI_MIPS32_EF_R17             23
0842 #define VKI_MIPS32_EF_R18             24
0843 #define VKI_MIPS32_EF_R19             25
0844 #define VKI_MIPS32_EF_R20             26
0845 #define VKI_MIPS32_EF_R21             27
0846 #define VKI_MIPS32_EF_R22             28
0847 #define VKI_MIPS32_EF_R23             29
0848 #define VKI_MIPS32_EF_R24             30
0849 #define VKI_MIPS32_EF_R25             31
0850 #define VKI_MIPS32_EF_R26             32
0851 #define VKI_MIPS32_EF_R27             33
0852 #define VKI_MIPS32_EF_R28             34
0853 #define VKI_MIPS32_EF_R29             35
0854 #define VKI_MIPS32_EF_R30             36
0855 #define VKI_MIPS32_EF_R31             37
0856 #define VKI_MIPS32_EF_LO              38
0857 #define VKI_MIPS32_EF_HI              39
0858 #define VKI_MIPS32_EF_CP0_EPC         40
0859 #define VKI_MIPS32_EF_CP0_BADVADDR    41
0860 #define VKI_MIPS32_EF_CP0_STATUS      42
0861 #define VKI_MIPS32_EF_CP0_CAUSE       43
0862 #define VKI_MIPS32_EF_UNUSED0         44
0863 
0864 //----------------------------------------------------------------------
0865 // From linux-4.5/arch/mips/include/asm/elf.h
0866 //----------------------------------------------------------------------
0867 typedef unsigned long vki_elf_greg_t;
0868 
0869 #define VKI_ELF_NGREG      45
0870 #define VKI_ELF_NFPREG     33 /* includes fpscr */
0871 
0872 typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
0873 
0874 typedef double vki_elf_fpreg_t;
0875 typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];
0876 
0877 typedef struct vki_user_fxsr_struct vki_elf_fpxregset_t;
0878 
0879 #define VKI_AT_SYSINFO      32
0880 //----------------------------------------------------------------------
0881 // From linux-2.6.35.5/include/asm-generic/siginfo.h
0882 //----------------------------------------------------------------------
0883 #define HAVE_ARCH_SIGINFO_T
0884 
0885 typedef union vki_sigval {
0886     int sival_int;
0887     void __user *sival_ptr;
0888 } vki_sigval_t;
0889 
0890 #ifndef __VKI_ARCH_SI_PREAMBLE_SIZE
0891 #define __VKI_ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
0892 #endif
0893 
0894 #define VKI_SI_MAX_SIZE 128
0895 
0896 #ifndef VKI_SI_PAD_SIZE
0897 #define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
0898 #endif
0899 
0900 #ifndef __VKI_ARCH_SI_UID_T
0901 #define __VKI_ARCH_SI_UID_T vki_uid_t
0902 #endif
0903 
0904 #ifndef __VKI_ARCH_SI_BAND_T
0905 #define __VKI_ARCH_SI_BAND_T long
0906 #endif
0907 
0908 typedef struct vki_siginfo {
0909         int si_signo;
0910         int si_code;
0911         int si_errno;
0912         int __pad0[VKI_SI_MAX_SIZE / sizeof(int) - VKI_SI_PAD_SIZE - 3];
0913 
0914         union {
0915                 int _pad[VKI_SI_PAD_SIZE];
0916 
0917                 /* kill() */
0918                 struct {
0919                         vki_pid_t _pid;             /* sender's pid */
0920                         __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
0921                 } _kill;
0922 
0923                 /* POSIX.1b timers */
0924                 struct {
0925                         vki_timer_t _tid;           /* timer id */
0926                         int _overrun;           /* overrun count */
0927                         char _pad[sizeof( __VKI_ARCH_SI_UID_T) - sizeof(int)];
0928                         vki_sigval_t _sigval;       /* same as below */
0929                         int _sys_private;       /* not to be passed to user */
0930                 } _timer;
0931 
0932                 /* POSIX.1b signals */
0933                 struct {
0934                         vki_pid_t _pid;             /* sender's pid */
0935                         __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
0936                         vki_sigval_t _sigval;
0937                 } _rt;
0938 
0939                 /* SIGCHLD */
0940                 struct {
0941                         vki_pid_t _pid;             /* which child */
0942                         __VKI_ARCH_SI_UID_T _uid;   /* sender's uid */
0943                         int _status;            /* exit code */
0944                         vki_clock_t _utime;
0945                         vki_clock_t _stime;
0946                 } _sigchld;
0947 
0948                 /* IRIX SIGCHLD */
0949                 struct {
0950                         vki_pid_t _pid;             /* which child */
0951                         vki_clock_t _utime;
0952                         int _status;            /* exit code */
0953                         vki_clock_t _stime;
0954                 } _irix_sigchld;
0955 
0956                 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
0957                 struct {
0958                         void __user *_addr; /* faulting insn/memory ref. */
0959 #ifdef __ARCH_SI_TRAPNO
0960                         int _trapno;    /* TRAP # which caused the signal */
0961 #endif
0962                 } _sigfault;
0963 
0964                 /* SIGPOLL, SIGXFSZ (To do ...)  */
0965                 struct {
0966                         __VKI_ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
0967                         int _fd;
0968                 } _sigpoll;
0969         } _sifields;
0970 } vki_siginfo_t;
0971 
0972 //----------------------------------------------------------------------
0973 // From linux-2.6.35.5/include/asm/break.h
0974 //----------------------------------------------------------------------
0975 #define VKI_BRK_OVERFLOW         6    /* Overflow check */
0976 #define VKI_BRK_DIVZERO          7    /* Divide by zero check */
0977 
0978 //----------------------------------------------------------------------
0979 // From linux-3.6.35.5/arch/mips/include/socket.h
0980 //----------------------------------------------------------------------
0981 enum vki_sock_type {
0982         VKI_SOCK_STREAM = 2,
0983         // [[others omitted]]
0984 };
0985 #define ARCH_HAS_SOCKET_TYPES 1
0986 
0987 //----------------------------------------------------------------------
0988 // From linux-3.7.0/arch/mips/include/uapi/asm/errno.h
0989 //----------------------------------------------------------------------
0990 
0991 #define VKI_ELIBBAD      84  /* Accessing a corrupted shared library */
0992 #define VKI_EOPNOTSUPP   122 /* Operation not supported on transport
0993                                  endpoint */
0994 
0995 //----------------------------------------------------------------------
0996 // From linux-3.13.0/include/asm/errno.h
0997 //----------------------------------------------------------------------
0998 
0999 #define VKI_ENOSYS       89  /* Function not implemented */
1000 #define VKI_EOVERFLOW    79  /* Value too large for defined data type */
1001 
1002 //----------------------------------------------------------------------
1003 // From linux-3.14.0/arch/mips/include/asm/elf.h
1004 //----------------------------------------------------------------------
1005 
1006 #define VKI_EF_MIPS_FP64    0x00000200
1007 
1008 //----------------------------------------------------------------------
1009 // From linux-4.1.0/arch/mips/include/asm/elf.h
1010 //----------------------------------------------------------------------
1011 
1012 #define VKI_MIPS_ABI_FP_UNKNOWN (-1)
1013 #define VKI_MIPS_ABI_FP_ANY       0  /* FP ABI doesn't matter */
1014 #define VKI_MIPS_ABI_FP_DOUBLE    1  /* -mdouble-float */
1015 #define VKI_MIPS_ABI_FP_SINGLE    2  /* -msingle-float */
1016 #define VKI_MIPS_ABI_FP_SOFT      3  /* -msoft-float */
1017 #define VKI_MIPS_ABI_FP_OLD_64    4  /* -mips32r2 -mfp64 */
1018 #define VKI_MIPS_ABI_FP_XX        5  /* -mfpxx */
1019 #define VKI_MIPS_ABI_FP_64        6  /* -mips32r2 -mfp64 */
1020 #define VKI_MIPS_ABI_FP_64A       7  /* -mips32r2 -mfp64 -mno-odd-spreg */
1021 
1022 struct vki_arch_elf_state {
1023    int fp_abi;
1024    int interp_fp_abi;
1025    int overall_fp_mode;
1026 };
1027 
1028 #define VKI_INIT_ARCH_ELF_STATE {             \
1029    .fp_abi = VKI_MIPS_ABI_FP_UNKNOWN,         \
1030    .interp_fp_abi = VKI_MIPS_ABI_FP_UNKNOWN,  \
1031    .overall_fp_mode = -1,                     \
1032 }
1033 
1034 struct vki_mips_elf_abiflags_v0 {
1035    vki_u16 version;     /* Version of flags structure */
1036    vki_u8  isa_level;   /* The level of the ISA: 1-5, 32, 64 */
1037    vki_u8  isa_rev;     /* The revision of ISA: 0 for MIPS V and below,
1038                            1-n otherwise */
1039    vki_u8  gpr_size;    /* The size of general purpose registers */
1040    vki_u8  cpr1_size;   /* The size of co-processor 1 registers */
1041    vki_u8  cpr2_size;   /* The size of co-processor 2 registers */
1042    vki_u8  fp_abi;      /* The floating-point ABI */
1043    vki_u32 isa_ext;     /* Mask of processor-specific extensions */
1044    vki_u32 ases;        /* Mask of ASEs used */
1045    vki_u32 flags1;      /* Mask of general flags */
1046    vki_u32 flags2;
1047 };
1048 
1049 #define VKI_PT_MIPS_ABIFLAGS   0x70000003
1050 
1051 //----------------------------------------------------------------------
1052 // From linux-4.1.0/arch/mips/kernel/elf.c
1053 //----------------------------------------------------------------------
1054 
1055 enum {
1056    VKI_FP_FRE,
1057    VKI_FP_FR0,
1058    VKI_FP_FR1,
1059 };
1060 
1061 #endif // __VKI_MIPS32_LINUX_H
1062 
1063 /*--------------------------------------------------------------------*/
1064 /*--- end                                       vki-mips32-linux.h ---*/
1065 /*--------------------------------------------------------------------*/