valgrind-monitor.py regular expressions should use raw strings
[valgrind.git] / include / vki / vki-mips64-linux.h
blobdc15c6e69e96438e2644a0776266d18a3102bf57
2 /*--------------------------------------------------------------------*/
3 /*--- mips/Linux-specific kernel interface. vki-mips64-linux.h ---*/
4 /*--------------------------------------------------------------------*/
6 /*
7 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
10 Copyright (C) 2010-2017 RT-RK
12 This program is free software; you can redistribute it and/or
13 modify it under the terms of the GNU General Public License as
14 published by the Free Software Foundation; either version 2 of the
15 License, or (at your option) any later version.
17 This program is distributed in the hope that it will be useful, but
18 WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, see <http://www.gnu.org/licenses/>.
26 #ifndef __VKI_MIPS64_LINUX_H
27 #define __VKI_MIPS64_LINUX_H
29 #include <config.h>
31 // mips endian
32 #if defined (_MIPSEL)
33 #define VKI_LITTLE_ENDIAN 1
34 #elif defined (_MIPSEB)
35 #define VKI_BIG_ENDIAN 1
36 #endif
38 //----------------------------------------------------------------------
39 // From linux-2.6.35.9/include/asm-mips/cachectl.h
40 //----------------------------------------------------------------------
42 #define VKI_ICACHE (1<<0) /* flush instruction cache */
43 #define VKI_DCACHE (1<<1) /* writeback and flush data cache */
44 #define VKI_BCACHE (VKI_ICACHE | VKI_DCACHE) /* flush both caches */
46 //----------------------------------------------------------------------
47 // From linux-2.6.35.9/include/mips-mips/types.h
48 //----------------------------------------------------------------------
50 typedef __signed__ char __vki_s8;
51 typedef unsigned char __vki_u8;
53 typedef __signed__ short __vki_s16;
54 typedef unsigned short __vki_u16;
56 typedef __signed__ int __vki_s32;
57 typedef unsigned int __vki_u32;
59 typedef __signed char vki_s8;
60 typedef unsigned char vki_u8;
62 typedef __signed short vki_s16;
63 typedef unsigned short vki_u16;
65 typedef __signed int vki_s32;
66 typedef unsigned int vki_u32;
68 #if (_MIPS_SZLONG == 64)
69 typedef __signed__ long __vki_s64;
70 typedef unsigned long __vki_u64;
71 #else
72 typedef __signed__ long long __vki_s64;
73 typedef unsigned long long __vki_u64;
74 #endif
76 //----------------------------------------------------------------------
77 // From linux-2.6.35.9/include/asm-mips/page.h
78 //----------------------------------------------------------------------
80 /* MIPS64 uses runtime pagesize detection */
81 extern UWord VKI_PAGE_SHIFT;
82 extern UWord VKI_PAGE_SIZE;
83 #define VKI_PAGE_MASK (~(VKI_PAGE_SIZE-1))
84 #define VKI_MAX_PAGE_SHIFT 16
85 #define VKI_MAX_PAGE_SIZE (1UL << VKI_MAX_PAGE_SHIFT)
87 //----------------------------------------------------------------------
88 // From linux-2.6.35.9/arch/mips/include/bits/shm.h
89 //----------------------------------------------------------------------
91 #define VKI_SHMLBA 0x40000
93 //----------------------------------------------------------------------
94 // From linux-2.6.35.9/include/asm-mips/signal.h
95 //----------------------------------------------------------------------
97 #define VKI_MINSIGSTKSZ 2048
99 #define VKI_SIG_BLOCK 1 /* for blocking signals */
100 #define VKI_SIG_UNBLOCK 2 /* for unblocking signals */
101 #define VKI_SIG_SETMASK 3 /* for setting the signal mask */
103 /* Type of a signal handler. */
104 typedef void __vki_signalfn_t(int);
105 typedef __vki_signalfn_t __user *__vki_sighandler_t;
107 typedef void __vki_restorefn_t(void);
108 typedef __vki_restorefn_t __user *__vki_sigrestore_t;
110 #define VKI_SIG_DFL ((__vki_sighandler_t)0) /* default signal handling */
111 #define VKI_SIG_IGN ((__vki_sighandler_t)1) /* ignore signal */
112 #define VKI_SIG_ERR ((__vki_sighandler_t)-1) /* error return from signal */
114 #define _VKI_NSIG 128
115 #define _VKI_NSIG_BPW (__SIZEOF_LONG__ * 8)
116 #define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
118 typedef unsigned long vki_old_sigset_t; /* at least 32 bits */
120 typedef struct {
121 unsigned long sig[_VKI_NSIG_WORDS];
122 } vki_sigset_t;
124 #define VKI_SIGHUP 1 /* Hangup (POSIX). */
125 #define VKI_SIGINT 2 /* Interrupt (ANSI). */
126 #define VKI_SIGQUIT 3 /* Quit (POSIX). */
127 #define VKI_SIGILL 4 /* Illegal instruction (ANSI). */
128 #define VKI_SIGTRAP 5 /* Trace trap (POSIX). */
129 #define VKI_SIGIOT 6 /* IOT trap (4.2 BSD). */
130 #define VKI_SIGABRT VKI_SIGIOT /* Abort (ANSI). */
131 #define VKI_SIGEMT 7
132 #define VKI_SIGFPE 8 /* Floating-point exception (ANSI). */
133 #define VKI_SIGKILL 9 /* Kill, unblockable (POSIX). */
134 #define VKI_SIGBUS 10 /* BUS error (4.2 BSD). */
135 #define VKI_SIGSEGV 11 /* Segmentation violation (ANSI). */
136 #define VKI_SIGSYS 12
137 #define VKI_SIGPIPE 13 /* Broken pipe (POSIX). */
138 #define VKI_SIGALRM 14 /* Alarm clock (POSIX). */
139 #define VKI_SIGTERM 15 /* Termination (ANSI). */
140 #define VKI_SIGUSR1 16 /* User-defined signal 1 (POSIX). */
141 #define VKI_SIGUSR2 17 /* User-defined signal 2 (POSIX). */
142 #define VKI_SIGCHLD 18 /* Child status has changed (POSIX). */
143 #define VKI_SIGCLD VKI_SIGCHLD /* Same as SIGCHLD (System V). */
144 #define VKI_SIGPWR 19 /* Power failure restart (System V). */
145 #define VKI_SIGWINCH 20 /* Window size change (4.3 BSD, Sun). */
146 #define VKI_SIGURG 21 /* Urgent condition on socket. */
147 #define VKI_SIGIO 22 /* I/O now possible (4.2 BSD). */
148 #define VKI_SIGPOLL VKI_SIGIO /* Pollable event occurred (System V).*/
149 #define VKI_SIGSTOP 23 /* Stop, unblockable (POSIX). */
150 #define VKI_SIGTSTP 24 /* Keyboard stop (POSIX). */
151 #define VKI_SIGCONT 25 /* Continue (POSIX). */
152 #define VKI_SIGTTIN 26 /* Background read from tty (POSIX). */
153 #define VKI_SIGTTOU 27 /* Background write to tty (POSIX). */
154 #define VKI_SIGVTALRM 28 /* Virtual alarm clock (4.2 BSD). */
155 #define VKI_SIGPROF 29 /* Profiling alarm clock (4.2 BSD). */
156 #define VKI_SIGXCPU 30 /* CPU limit exceeded (4.2 BSD). */
157 #define VKI_SIGXFSZ 31 /* File size limit exceeded (4.2 BSD).*/
159 /* These should not be considered constants from userland. */
160 #define VKI_SIGRTMIN 32
161 // [[This was (_NSIG-1) in 2.4.X... not sure if it matters.]]
162 #define VKI_SIGRTMAX (_VKI_NSIG - 1)
164 #define VKI_SA_ONSTACK 0x08000000u
165 #define VKI_SA_RESETHAND 0x80000000u
166 #define VKI_SA_RESTART 0x10000000u
167 #define VKI_SA_SIGINFO 0x00000008u
168 #define VKI_SA_NODEFER 0x40000000u
169 #define VKI_SA_NOCLDWAIT 0x00010000u
170 #define VKI_SA_NOCLDSTOP 0x00000001u
172 #define VKI_SA_NOMASK VKI_SA_NODEFER
173 #define VKI_SA_ONESHOT VKI_SA_RESETHAND
174 //#define VKI_SA_INTERRUPT 0x20000000 /* dummy -- ignored */
176 #define VKI_SA_RESTORER 0x04000000
178 #define VKI_SS_ONSTACK 1
179 #define VKI_SS_DISABLE 2
181 struct vki_old_sigaction {
182 // [[Nb: a 'k' prefix is added to "sa_handler" because
183 // bits/sigaction.h (which gets dragged in somehow via signal.h)
184 // #defines it as something else. Since that is done for glibc's
185 // purposes, which we don't care about here, we use our own name.]]
186 unsigned long sa_flags;
187 __vki_sighandler_t ksa_handler;
188 vki_old_sigset_t sa_mask;
189 __vki_sigrestore_t sa_restorer;
192 struct vki_sigaction {
193 unsigned int sa_flags;
194 __vki_sighandler_t sa_handler;
195 vki_sigset_t sa_mask;
199 struct vki_sigaction_base {
200 // [[See comment about extra 'k' above]]
201 unsigned int sa_flags;
202 __vki_sighandler_t ksa_handler;
203 vki_sigset_t sa_mask; // mask last for extensibility
204 __vki_sigrestore_t sa_restorer;
207 /* On Linux we use the same type for passing sigactions to
208 and from the kernel. Hence: */
209 typedef struct vki_sigaction_base vki_sigaction_toK_t;
210 typedef struct vki_sigaction_base vki_sigaction_fromK_t;
212 typedef struct vki_sigaltstack {
213 void __user *ss_sp;
214 vki_size_t ss_size;
215 int ss_flags;
216 } vki_stack_t;
218 //----------------------------------------------------------------------
219 // From linux-2.6.35.9/include/asm-mips/sigcontext.h
220 //----------------------------------------------------------------------
222 struct _vki_fpreg {
223 unsigned short significand[4];
224 unsigned short exponent;
227 struct _vki_fpxreg {
228 unsigned short significand[4];
229 unsigned short exponent;
230 unsigned short padding[3];
233 struct _vki_xmmreg {
234 unsigned long element[4];
237 struct _vki_fpstate {
238 /* Regular FPU environment */
239 unsigned long cw;
240 unsigned long sw;
241 unsigned long tag;
242 unsigned long ipoff;
243 unsigned long cssel;
244 unsigned long dataoff;
245 unsigned long datasel;
246 struct _vki_fpreg _st[8];
247 unsigned short status;
248 unsigned short magic; /* 0xffff = regular FPU data only */
250 /* FXSR FPU environment */
251 unsigned long _fxsr_env[6]; /* FXSR FPU env is ignored */
252 unsigned long mxcsr;
253 unsigned long reserved;
254 struct _vki_fpxreg _fxsr_st[8]; /* FXSR FPU reg data is ignored */
255 struct _vki_xmmreg _xmm[8];
256 unsigned long padding[56];
259 //----------------------------------------------------------------------
260 // From linux-2.6.35.9/include/asm-mips/sigcontext.h
261 //----------------------------------------------------------------------
262 struct vki_sigcontext {
263 __vki_u64 sc_regs[32];
264 __vki_u64 sc_fpregs[32];
265 __vki_u64 sc_mdhi;
266 __vki_u64 sc_hi1;
267 __vki_u64 sc_hi2;
268 __vki_u64 sc_hi3;
269 __vki_u64 sc_mdlo;
270 __vki_u64 sc_lo1;
271 __vki_u64 sc_lo2;
272 __vki_u64 sc_lo3;
273 __vki_u64 sc_pc;
274 __vki_u64 sc_fpc_csr;
275 __vki_u64 sc_used_math;
276 __vki_u64 sc_dsp;
277 __vki_u64 sc_reserved;
280 //----------------------------------------------------------------------
281 // From linux-2.6.35.9/include/asm-mips/mman.h
282 //----------------------------------------------------------------------
284 #define VKI_PROT_NONE 0x0 /* No page permissions */
285 #define VKI_PROT_READ 0x1 /* page can be read */
286 #define VKI_PROT_WRITE 0x2 /* page can be written */
287 #define VKI_PROT_EXEC 0x4 /* page can be executed */
288 #define VKI_PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start
289 of growsdown vma */
290 #define VKI_PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end
291 of growsup vma */
293 #define VKI_MAP_SHARED 0x001 /* Share changes */
294 #define VKI_MAP_PRIVATE 0x002 /* Changes are private */
295 //#define VKI_MAP_TYPE 0x0f /* Mask for type of mapping */
296 #define VKI_MAP_FIXED 0x010 /* Interpret addr exactly */
298 #define VKI_MAP_NORESERVE 0x0400 /* don't reserve swap pages */
300 /* These are linux-specific */
301 #define VKI_MAP_NORESERVE 0x0400 /* don't check for reservations */
302 #define VKI_MAP_ANONYMOUS 0x0800 /* don't use a file */
303 #define VKI_MAP_GROWSDOWN 0x1000 /* stack-like segment */
304 #define VKI_MAP_DENYWRITE 0x2000 /* ETXTBSY */
305 #define VKI_MAP_EXECUTABLE 0x4000 /* mark it as an executable */
306 #define VKI_MAP_LOCKED 0x8000 /* pages are locked */
307 #define VKI_MAP_POPULATE 0x10000 /* populate (prefault) pagetables */
308 #define VKI_MAP_NONBLOCK 0x20000 /* do not block on IO */
310 //----------------------------------------------------------------------
311 // From linux-2.6.35.9/include/asm-mips/fcntl.h
312 //----------------------------------------------------------------------
314 #define VKI_O_RDONLY 00
315 #define VKI_O_WRONLY 01
316 #define VKI_O_RDWR 02
317 #define VKI_O_ACCMODE 03
319 #define VKI_O_CREAT 0x0100 /* not fcntl */
320 #define VKI_O_EXCL 0x0400 /* not fcntl */
322 #define VKI_O_TRUNC 0x0200 /* not fcntl */
324 #define VKI_O_APPEND 0x0008
325 #define VKI_O_NONBLOCK 0x0080
326 #define VKI_O_LARGEFILE 0x2000
328 #define VKI_AT_FDCWD -100
330 #define VKI_F_DUPFD 0 /* dup */
331 #define VKI_F_GETFD 1 /* get close_on_exec */
332 #define VKI_F_SETFD 2 /* set/clear close_on_exec */
333 #define VKI_F_GETFL 3 /* get file->f_flags */
334 #define VKI_F_SETFL 4 /* set file->f_flags */
336 #define VKI_F_GETLK 14
337 #define VKI_F_SETLK 6
338 #define VKI_F_SETLKW 7
340 #define VKI_F_SETOWN 24 /* for sockets. */
341 #define VKI_F_GETOWN 23 /* for sockets. */
342 #define VKI_F_SETSIG 10 /* for sockets. */
343 #define VKI_F_GETSIG 11 /* for sockets. */
345 #define VKI_F_SETOWN_EX 15
346 #define VKI_F_GETOWN_EX 16
348 #define VKI_F_OFD_GETLK 36
349 #define VKI_F_OFD_SETLK 37
350 #define VKI_F_OFD_SETLKW 38
352 #define VKI_F_GETLK64 33 /* using 'struct flock64' */
353 #define VKI_F_SETLK64 34
354 #define VKI_F_SETLKW64 35
356 /* for F_[GET|SET]FL */
357 #define VKI_FD_CLOEXEC 1 /* actually anything with low bit set goes */
359 #define VKI_F_LINUX_SPECIFIC_BASE 1024
361 struct vki_f_owner_ex {
362 int type;
363 __vki_kernel_pid_t pid;
366 //----------------------------------------------------------------------
367 // From linux-2.6.35.9/include/asm-mips/resource.h
368 //----------------------------------------------------------------------
370 #define VKI_RLIMIT_DATA 2 /* max data size */
371 #define VKI_RLIMIT_STACK 3 /* max stack size */
372 #define VKI_RLIMIT_CORE 4 /* max core file size */
373 #define VKI_RLIMIT_NOFILE 5 /* max number of open files */
375 //----------------------------------------------------------------------
376 // From linux-2.6.35.9/include/asm-mips/socket.h
377 //----------------------------------------------------------------------
379 #define VKI_SOL_SOCKET 0xffff
381 #define VKI_SO_TYPE 0x1008
383 #define VKI_SO_ATTACH_FILTER 26
385 //----------------------------------------------------------------------
386 // From linux-2.6.35.9/include/asm-i386/sockios.h
387 //----------------------------------------------------------------------
389 #define VKI_SIOCATMARK _VKI_IOR('s', 7, int)
390 #define VKI_SIOCSPGRP _VKI_IOW('s', 8, vki_pid_t)
391 #define VKI_SIOCGPGRP _VKI_IOR('s', 9, vki_pid_t)
392 #define VKI_SIOCGSTAMP 0x8906 /* Get stamp (timeval) */
393 #define VKI_SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */
395 //----------------------------------------------------------------------
396 // From linux-2.6.35.9/include/asm-mips/stat.h
397 //----------------------------------------------------------------------
399 /* Size of kernel long is different from Valgrind MIPS n32 long size, so we have to
400 use long long instead long type. */
401 struct vki_stat {
402 unsigned int st_dev;
403 unsigned int st_pad0[3]; /* Reserved for st_dev expansion */
405 #if defined(VGABI_N32)
406 unsigned long long st_ino;
407 #else
408 unsigned long st_ino;
409 #endif
411 int st_mode;
412 unsigned int st_nlink;
414 unsigned int st_uid;
415 unsigned int st_gid;
417 unsigned int st_rdev;
418 unsigned int st_pad1[3]; /* Reserved for st_rdev expansion */
420 #if defined(VGABI_N32)
421 long long st_size;
422 #else
423 long st_size;
424 #endif
427 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
428 * but we don't have it under Linux.
430 unsigned int st_atime;
431 unsigned int st_atime_nsec; /* Reserved for st_atime expansion */
433 unsigned int st_mtime;
434 unsigned int st_mtime_nsec; /* Reserved for st_mtime expansion */
436 unsigned int st_ctime;
437 unsigned int st_ctime_nsec; /* Reserved for st_ctime expansion */
439 unsigned int st_blksize;
440 unsigned int st_pad2;
442 long long st_blocks;
445 struct vki_stat64 {
446 unsigned long st_dev;
447 unsigned long st_pad0[3]; /* Reserved for st_dev expansion */
449 unsigned long long st_ino;
451 int st_mode;
452 unsigned int st_nlink;
454 unsigned int st_uid;
455 unsigned int st_gid;
457 unsigned long st_rdev;
458 unsigned long st_pad1[3]; /* Reserved for st_rdev expansion */
460 long long st_size;
463 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
464 * but we don't have it under Linux.
466 unsigned long st_atime;
467 unsigned long st_atime_nsec; /* Reserved for st_atime expansion */
469 unsigned long st_mtime;
470 unsigned long st_mtime_nsec; /* Reserved for st_mtime expansion */
472 unsigned long st_ctime;
473 unsigned long st_ctime_nsec; /* Reserved for st_ctime expansion */
475 unsigned long st_blksize;
476 unsigned long st_pad2;
478 long long st_blocks;
481 //----------------------------------------------------------------------
482 // From linux-2.6.35.9/include/asm-mips/statfs.h
483 //----------------------------------------------------------------------
485 struct vki_statfs {
486 __vki_u32 f_type;
487 #define f_fstyp f_type
488 __vki_u32 f_bsize;
489 __vki_u32 f_frsize;
490 __vki_u32 f_blocks;
491 __vki_u32 f_bfree;
492 __vki_u32 f_files;
493 __vki_u32 f_ffree;
494 __vki_u32 f_bavail;
495 __vki_kernel_fsid_t f_fsid;
496 __vki_u32 f_namelen;
497 __vki_u32 f_spare[6];
500 //----------------------------------------------------------------------
501 // From linux-2.6.35.9/include/asm-mips/termios.h
502 //----------------------------------------------------------------------
504 struct vki_winsize {
505 unsigned short ws_row;
506 unsigned short ws_col;
507 unsigned short ws_xpixel;
508 unsigned short ws_ypixel;
511 #define NCC 8
512 #define NCCS 23
513 struct vki_termio {
514 unsigned short c_iflag; /* input mode flags */
515 unsigned short c_oflag; /* output mode flags */
516 unsigned short c_cflag; /* control mode flags */
517 unsigned short c_lflag; /* local mode flags */
518 char c_line; /* line discipline */
519 unsigned char c_cc[NCCS]; /* control characters */
522 //----------------------------------------------------------------------
523 // From linux-2.6.35.9/include/asm-mips/termbits.h
524 //----------------------------------------------------------------------
526 typedef unsigned char vki_cc_t;
527 typedef unsigned long vki_speed_t;
528 typedef unsigned long vki_tcflag_t;
530 struct vki_termios {
531 vki_tcflag_t c_iflag; /* input mode flags */
532 vki_tcflag_t c_oflag; /* output mode flags */
533 vki_tcflag_t c_cflag; /* control mode flags */
534 vki_tcflag_t c_lflag; /* local mode flags */
535 vki_cc_t c_line; /* line discipline */
536 vki_cc_t c_cc[NCCS]; /* control characters */
539 //----------------------------------------------------------------------
540 // From linux-2.6.35.9/include/asm-mips/ioctl.h
541 //----------------------------------------------------------------------
543 #define _VKI_IOC_NRBITS 8
544 #define _VKI_IOC_TYPEBITS 8
545 #define _VKI_IOC_SIZEBITS 13
546 #define _VKI_IOC_DIRBITS 3
548 #define _VKI_IOC_NRMASK ((1 << _VKI_IOC_NRBITS)-1)
549 #define _VKI_IOC_TYPEMASK ((1 << _VKI_IOC_TYPEBITS)-1)
550 #define _VKI_IOC_SIZEMASK ((1 << _VKI_IOC_SIZEBITS)-1)
551 #define _VKI_IOC_DIRMASK ((1 << _VKI_IOC_DIRBITS)-1)
553 #define _VKI_IOC_NRSHIFT 0
554 #define _VKI_IOC_TYPESHIFT (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
555 #define _VKI_IOC_SIZESHIFT (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
556 #define _VKI_IOC_DIRSHIFT (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
558 #define _VKI_IOC_NONE 1U
559 #define _VKI_IOC_READ 2U
560 #define _VKI_IOC_WRITE 4U
562 #define _VKI_IOC(dir,type,nr,size) \
563 (((dir) << _VKI_IOC_DIRSHIFT) | \
564 ((type) << _VKI_IOC_TYPESHIFT) | \
565 ((nr) << _VKI_IOC_NRSHIFT) | \
566 ((size) << _VKI_IOC_SIZESHIFT))
568 /* provoke compile error for invalid uses of size argument */
569 extern unsigned int __VKI_invalid_size_argument_for_IOC;
570 /* used to create numbers */
571 #define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
572 #define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr), \
573 (_VKI_IOC_TYPECHECK(size)))
574 #define _VKI_IOW(type,nr,size) _VKI_IOC(_VKI_IOC_WRITE,(type),(nr), \
575 (_VKI_IOC_TYPECHECK(size)))
576 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type), \
577 (nr),(_VKI_IOC_TYPECHECK(size)))
579 /* used to decode ioctl numbers.. */
580 #define _VKI_IOC_DIR(nr) (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
581 #define _VKI_IOC_TYPE(nr) (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
582 #define _VKI_IOC_NR(nr) (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
583 #define _VKI_IOC_SIZE(nr) (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
585 //----------------------------------------------------------------------
586 // From linux-2.6.35.9/include/asm-mips/ioctls.h
587 //----------------------------------------------------------------------
589 #define VKI_TCGETA 0x5401
590 #define VKI_TCSETA 0x5402 /* Clashes with SNDCTL_TMR_START
591 sound ioctl */
592 #define VKI_TCSETAW 0x5403
593 #define VKI_TCSETAF 0x5404
595 #define VKI_TCSBRK 0x5405
596 #define VKI_TCXONC 0x5406
597 #define VKI_TCFLSH 0x5407
599 #define VKI_TCGETS 0x540d
600 #define VKI_TCSETS 0x540e
601 #define VKI_TCSETSW 0x540f
602 #define VKI_TCSETSF 0x5410
604 #define VKI_TIOCEXCL 0x740d /* set exclusive use of tty */
605 #define VKI_TIOCNXCL 0x740e /* reset exclusive use of tty */
606 #define VKI_TIOCOUTQ 0x7472 /* output queue size */
607 #define VKI_TIOCSTI 0x5472 /* simulate terminal input */
608 #define VKI_TIOCMGET 0x741d /* get all modem bits */
609 #define VKI_TIOCMBIS 0x741b /* bis modem bits */
610 #define VKI_TIOCMBIC 0x741c /* bic modem bits */
611 #define VKI_TIOCMSET 0x741a /* set all modem bits */
612 #define VKI_TIOCPKT 0x5470 /* pty: set/clear packet mode */
613 #define VKI_TIOCPKT_DATA 0x00 /* data packet */
614 #define VKI_TIOCPKT_FLUSHREAD 0x01 /* flush packet */
615 #define VKI_TIOCPKT_FLUSHWRITE 0x02 /* flush packet */
616 #define VKI_TIOCPKT_STOP 0x04 /* stop output */
617 #define VKI_TIOCPKT_START 0x08 /* start output */
618 #define VKI_TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */
619 #define VKI_TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */
621 /* set window size */
622 #define VKI_TIOCSWINSZ _VKI_IOW('t', 103, struct vki_winsize)
623 /* get window size */
624 #define VKI_TIOCGWINSZ _VKI_IOR('t', 104, struct vki_winsize)
625 #define VKI_TIOCNOTTY 0x5471 /* void tty association */
626 #define VKI_TIOCSETD 0x7401
627 #define VKI_TIOCGETD 0x7400
629 #define VKI_FIOCLEX 0x6601
630 #define VKI_FIONCLEX 0x6602
631 #define VKI_FIOASYNC 0x667d
632 #define VKI_FIONBIO 0x667e
633 #define VKI_FIOQSIZE 0x667f
635 #define VKI_TIOCGLTC 0x7474 /* get special local chars */
636 #define VKI_TIOCSLTC 0x7475 /* set special local chars */
637 #define VKI_TIOCSPGRP _VKI_IOW('t', 118, int) /* set pgrp of tty */
638 #define VKI_TIOCGPGRP _VKI_IOR('t', 119, int) /* get pgrp of tty */
639 #define VKI_TIOCCONS _VKI_IOW('t', 120, int) /* become virtual
640 console */
642 #define VKI_FIONREAD 0x467f
643 #define VKI_TIOCINQ FIONREAD
645 #define VKI_TIOCGETP 0x7408
646 #define VKI_TIOCSETP 0x7409
647 #define VKI_TIOCSETN 0x740a /* TIOCSETP wo flush */
649 #define VKI_TIOCSBRK 0x5427 /* BSD compatibility */
650 #define VKI_TIOCCBRK 0x5428 /* BSD compatibility */
651 #define VKI_TIOCGSID 0x7416 /* Return the session ID of FD */
652 #define VKI_TIOCGPTN _VKI_IOR('T',0x30, unsigned int) /* Get Pty
653 Number (of pty-mux device) */
654 #define VKI_TIOCSPTLCK _VKI_IOW('T',0x31, int) /* Lock/unlock Pty */
656 /* I hope the range from 0x5480 on is free ... */
657 #define VKI_TIOCSCTTY 0x5480 /* become controlling tty */
658 #define VKI_TIOCGSOFTCAR 0x5481
659 #define VKI_TIOCSSOFTCAR 0x5482
660 #define VKI_TIOCLINUX 0x5483
661 #define VKI_TIOCGSERIAL 0x5484
662 #define VKI_TIOCSSERIAL 0x5485
663 #define VKI_TCSBRKP 0x5486 /* Needed for POSIX tcsendbreak() */
664 #define VKI_TIOCSERCONFIG 0x5488
665 #define VKI_TIOCSERGWILD 0x5489
666 #define VKI_TIOCSERSWILD 0x548a
667 #define VKI_TIOCGLCKTRMIOS 0x548b
668 #define VKI_TIOCSLCKTRMIOS 0x548c
669 #define VKI_TIOCSERGSTRUCT 0x548d /* For debugging only */
670 #define VKI_TIOCSERGETLSR 0x548e /* Get line status register */
671 #define VKI_TIOCSERGETMULTI 0x548f /* Get multiport config */
672 #define VKI_TIOCSERSETMULTI 0x5490 /* Set multiport config */
673 #define VKI_TIOCMIWAIT 0x5491 /* wait for a change on serial input
674 line(s) */
675 #define VKI_TIOCGICOUNT 0x5492 /* read serial port inline interrupt
676 counts */
677 #define VKI_TIOCGHAYESESP 0x5493 /* Get Hayes ESP configuration */
678 #define VKI_TIOCSHAYESESP 0x5494 /* Set Hayes ESP configuration */
680 //----------------------------------------------------------------------
681 // From asm-generic/poll.h
682 //----------------------------------------------------------------------
684 /* These are specified by iBCS2 */
685 #define VKI_POLLIN 0x0001
687 struct vki_pollfd {
688 int fd;
689 short events;
690 short revents;
692 //----------------------------------------------------------------------
693 // From linux-2.6.35.9/include/asm-mips/elf.h
694 //----------------------------------------------------------------------
696 #define VKI_ELF_NGREG 45 /* includes nip, msr, lr, etc. */
697 #define VKI_ELF_NFPREG 33 /* includes fpscr */
699 typedef unsigned long vki_elf_greg_t;
700 typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
702 typedef double vki_elf_fpreg_t;
703 typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];
705 typedef struct vki_user_fxsr_struct vki_elf_fpxregset_t;
707 #define VKI_AT_SYSINFO 32
708 //----------------------------------------------------------------------
709 // From linux-2.6.35.9/include/asm-mips/ucontext.h
710 //----------------------------------------------------------------------
712 struct vki_ucontext {
713 unsigned long uc_flags;
714 struct vki_ucontext *uc_link;
715 vki_stack_t uc_stack;
716 struct vki_sigcontext uc_mcontext;
717 vki_sigset_t uc_sigmask; /* mask last for extensibility */
720 typedef char vki_modify_ldt_t;
721 //----------------------------------------------------------------------
722 // From linux-2.6.35.9/include/asm-mips/ipcbuf.h
723 //----------------------------------------------------------------------
725 struct vki_ipc64_perm {
726 __vki_kernel_key_t key;
727 __vki_kernel_uid_t uid;
728 __vki_kernel_gid_t gid;
729 __vki_kernel_uid_t cuid;
730 __vki_kernel_gid_t cgid;
731 __vki_kernel_mode_t mode;
732 unsigned short seq;
733 unsigned short __pad1;
734 unsigned long __unused1;
735 unsigned long __unused2;
738 //----------------------------------------------------------------------
739 // From linux-2.6.35.9/include/asm-mips/sembuf.h
740 //----------------------------------------------------------------------
742 struct vki_semid64_ds {
743 struct vki_ipc64_perm sem_perm; /* permissions .. see ipc.h */
744 __vki_kernel_time_t sem_otime; /* last semop time */
745 __vki_kernel_time_t sem_ctime; /* last change time */
746 unsigned long sem_nsems; /* no. of semaphores in array */
747 unsigned long __unused1;
748 unsigned long __unused2;
751 //----------------------------------------------------------------------
752 // From linux-2.6.35.9/include/asm-mips/msgbuf.h
753 //----------------------------------------------------------------------
755 struct vki_msqid64_ds {
756 struct vki_ipc64_perm msg_perm;
757 __vki_kernel_time_t msg_stime; /* last msgsnd time */
758 __vki_kernel_time_t msg_rtime; /* last msgrcv time */
759 __vki_kernel_time_t msg_ctime; /* last change time */
760 unsigned long msg_cbytes; /* current number of bytes on queue */
761 unsigned long msg_qnum; /* number of messages in queue */
762 unsigned long msg_qbytes; /* max number of bytes on queue */
763 __vki_kernel_pid_t msg_lspid; /* pid of last msgsnd */
764 __vki_kernel_pid_t msg_lrpid; /* last receive pid */
765 unsigned long __unused4;
766 unsigned long __unused5;
769 //----------------------------------------------------------------------
770 // From linux-2.6.35.9/include/asm-mips/ipc.h
771 //----------------------------------------------------------------------
773 struct vki_ipc_kludge {
774 struct vki_msgbuf __user *msgp;
775 long msgtyp;
778 #define VKI_SEMOP 1
779 #define VKI_SEMGET 2
780 #define VKI_SEMCTL 3
781 #define VKI_SEMTIMEDOP 4
782 #define VKI_MSGSND 11
783 #define VKI_MSGRCV 12
784 #define VKI_MSGGET 13
785 #define VKI_MSGCTL 14
786 #define VKI_SHMAT 21
787 #define VKI_SHMDT 22
788 #define VKI_SHMGET 23
789 #define VKI_SHMCTL 24
791 //----------------------------------------------------------------------
792 // From linux-2.6.35.9/include/asm-mips/shmbuf.h
793 //----------------------------------------------------------------------
795 struct vki_shmid64_ds {
796 struct vki_ipc64_perm shm_perm; /* operation perms */
797 vki_size_t shm_segsz; /* size of segment (bytes) */
798 __vki_kernel_time_t shm_atime; /* last attach time */
799 __vki_kernel_time_t shm_dtime; /* last detach time */
800 __vki_kernel_time_t shm_ctime; /* last change time */
801 __vki_kernel_pid_t shm_cpid; /* pid of creator */
802 __vki_kernel_pid_t shm_lpid; /* pid of last operator */
803 unsigned long shm_nattch; /* no. of current attaches */
804 unsigned long __unused1;
805 unsigned long __unused2;
808 struct vki_shminfo64 {
809 unsigned long shmmax;
810 unsigned long shmmin;
811 unsigned long shmmni;
812 unsigned long shmseg;
813 unsigned long shmall;
814 unsigned long __unused1;
815 unsigned long __unused2;
816 unsigned long __unused3;
817 unsigned long __unused4;
820 //----------------------------------------------------------------------
821 // From linux-2.6.35.9/include/asm-mips/ptrace.h
822 //----------------------------------------------------------------------
824 struct vki_pt_regs {
825 #ifdef CONFIG_32BIT
826 /* Pad bytes for argument save space on the stack. */
827 unsigned long pad0[6];
828 #endif
830 /* Saved main processor registers. */
831 unsigned long regs[32];
833 /* Saved special registers. */
834 unsigned long cp0_status;
835 unsigned long hi;
836 unsigned long lo;
837 #ifdef CONFIG_CPU_HAS_SMARTMIPS
838 unsigned long acx;
839 #endif
840 unsigned long cp0_badvaddr;
841 unsigned long cp0_cause;
842 unsigned long cp0_epc;
843 #ifdef CONFIG_MIPS_MT_SMTC
844 unsigned long cp0_tcstatus;
845 #endif /* CONFIG_MIPS_MT_SMTC */
846 #ifdef CONFIG_CPU_CAVIUM_OCTEON
847 unsigned long long mpl[3]; /* MTM{0,1,2} */
848 unsigned long long mtp[3]; /* MTP{0,1,2} */
849 #endif
850 } __attribute__ ((aligned (8)));
852 //----------------------------------------------------------------------
853 // From linux-4.5/arch/mips/include/uapi/asm/reg.h
854 //----------------------------------------------------------------------
856 #define VKI_MIPS64_EF_R0 0
857 #define VKI_MIPS64_EF_R1 1
858 #define VKI_MIPS64_EF_R2 2
859 #define VKI_MIPS64_EF_R3 3
860 #define VKI_MIPS64_EF_R4 4
861 #define VKI_MIPS64_EF_R5 5
862 #define VKI_MIPS64_EF_R6 6
863 #define VKI_MIPS64_EF_R7 7
864 #define VKI_MIPS64_EF_R8 8
865 #define VKI_MIPS64_EF_R9 9
866 #define VKI_MIPS64_EF_R10 10
867 #define VKI_MIPS64_EF_R11 11
868 #define VKI_MIPS64_EF_R12 12
869 #define VKI_MIPS64_EF_R13 13
870 #define VKI_MIPS64_EF_R14 14
871 #define VKI_MIPS64_EF_R15 15
872 #define VKI_MIPS64_EF_R16 16
873 #define VKI_MIPS64_EF_R17 17
874 #define VKI_MIPS64_EF_R18 18
875 #define VKI_MIPS64_EF_R19 19
876 #define VKI_MIPS64_EF_R20 20
877 #define VKI_MIPS64_EF_R21 21
878 #define VKI_MIPS64_EF_R22 22
879 #define VKI_MIPS64_EF_R23 23
880 #define VKI_MIPS64_EF_R24 24
881 #define VKI_MIPS64_EF_R25 25
882 #define VKI_MIPS64_EF_R26 26
883 #define VKI_MIPS64_EF_R27 27
884 #define VKI_MIPS64_EF_R28 28
885 #define VKI_MIPS64_EF_R29 29
886 #define VKI_MIPS64_EF_R30 30
887 #define VKI_MIPS64_EF_R31 31
888 #define VKI_MIPS64_EF_LO 32
889 #define VKI_MIPS64_EF_HI 33
890 #define VKI_MIPS64_EF_CP0_EPC 34
891 #define VKI_MIPS64_EF_CP0_BADVADDR 35
892 #define VKI_MIPS64_EF_CP0_STATUS 36
893 #define VKI_MIPS64_EF_CP0_CAUSE 37
895 //----------------------------------------------------------------------
896 // From linux-2.6.35.9/include/asm-i386/ptrace.h
897 //----------------------------------------------------------------------
899 #define VKI_PTRACE_GETREGS 12
900 #define VKI_PTRACE_SETREGS 13
901 #define VKI_PTRACE_GETFPREGS 14
902 #define VKI_PTRACE_SETFPREGS 15
903 #define VKI_PTRACE_GETFPXREGS 18
904 #define VKI_PTRACE_SETFPXREGS 19
906 /* Calls to trace a 64bit program from a 32bit program. */
907 #define VKI_PTRACE_PEEKTEXT_3264 0xc0
908 #define VKI_PTRACE_PEEKDATA_3264 0xc1
909 #define VKI_PTRACE_POKETEXT_3264 0xc2
910 #define VKI_PTRACE_POKEDATA_3264 0xc3
911 #define VKI_PTRACE_GET_THREAD_AREA_3264 0xc4s
913 //----------------------------------------------------------------------
914 // From linux-2.6.35.9/include/asm-generic/siginfo.h
915 //----------------------------------------------------------------------
917 #define HAVE_ARCH_SIGINFO_T
918 typedef union vki_sigval {
919 int sival_int;
920 void __user *sival_ptr;
921 } vki_sigval_t;
923 #ifndef __VKI_ARCH_SI_PREAMBLE_SIZE
924 #if defined(VGABI_64)
925 #define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
926 #elif defined(VGABI_N32)
927 #define __VKI_ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
928 #else
929 #error unknown mips64 abi
930 #endif
931 #endif
933 #define VKI_SI_MAX_SIZE 128
935 #ifndef VKI_SI_PAD_SIZE
936 #define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
937 #endif
939 #ifndef __VKI_ARCH_SI_UID_T
940 #define __VKI_ARCH_SI_UID_T vki_uid_t
941 #endif
943 #ifndef __VKI_ARCH_SI_BAND_T
944 #define __VKI_ARCH_SI_BAND_T long
945 #endif
947 typedef struct vki_siginfo {
948 int si_signo;
949 int si_code;
950 int si_errno;
951 int __pad0[VKI_SI_MAX_SIZE / sizeof(int) - VKI_SI_PAD_SIZE - 3];
953 union {
954 int _pad[VKI_SI_PAD_SIZE];
956 /* kill() */
957 struct {
958 vki_pid_t _pid; /* sender's pid */
959 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
960 } _kill;
962 /* POSIX.1b timers */
963 struct {
964 vki_timer_t _tid; /* timer id */
965 int _overrun; /* overrun count */
966 char _pad[sizeof( __VKI_ARCH_SI_UID_T) - sizeof(int)];
967 vki_sigval_t _sigval; /* same as below */
968 int _sys_private; /* not to be passed to user */
969 } _timer;
971 /* POSIX.1b signals */
972 struct {
973 vki_pid_t _pid; /* sender's pid */
974 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
975 vki_sigval_t _sigval;
976 } _rt;
978 /* SIGCHLD */
979 struct {
980 vki_pid_t _pid; /* which child */
981 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
982 int _status; /* exit code */
983 vki_clock_t _utime;
984 vki_clock_t _stime;
985 } _sigchld;
987 /* IRIX SIGCHLD */
988 struct {
989 vki_pid_t _pid; /* which child */
990 vki_clock_t _utime;
991 int _status; /* exit code */
992 vki_clock_t _stime;
993 } _irix_sigchld;
995 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
996 struct {
997 void __user *_addr; /* faulting insn/memory ref. */
998 #ifdef __ARCH_SI_TRAPNO
999 int _trapno; /* TRAP # which caused the signal */
1000 #endif
1001 } _sigfault;
1003 /* SIGPOLL, SIGXFSZ (To do ...) */
1004 struct {
1005 __VKI_ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
1006 int _fd;
1007 } _sigpoll;
1008 } _sifields;
1009 } vki_siginfo_t;
1011 //----------------------------------------------------------------------
1012 // From linux-2.6.35.5/include/asm/break.h
1013 //----------------------------------------------------------------------
1014 #define VKI_BRK_OVERFLOW 6 /* Overflow check */
1015 #define VKI_BRK_DIVZERO 7 /* Divide by zero check */
1017 //----------------------------------------------------------------------
1018 // From linux-3.6.35.5/arch/mips/include/socket.h
1019 //----------------------------------------------------------------------
1020 enum vki_sock_type {
1021 VKI_SOCK_STREAM = 2,
1022 // [[others omitted]]
1024 #define ARCH_HAS_SOCKET_TYPES 1
1026 //----------------------------------------------------------------------
1027 // From linux-3.13.0/include/asm/errno.h
1028 //----------------------------------------------------------------------
1030 #define VKI_ENOSYS 89 /* Function not implemented */
1031 #define VKI_EOVERFLOW 79 /* Value too large for defined data type */
1033 //----------------------------------------------------------------------
1034 // From linux-3.7.0/arch/mips/include/uapi/asm/errno.h
1035 //----------------------------------------------------------------------
1037 #define VKI_EOPNOTSUPP 122 /* Operation not supported on transport
1038 endpoint */
1040 #endif // __VKI_MIPS64_LINUX_H
1042 /*--------------------------------------------------------------------*/
1043 /*--- end vki-mips64-linux.h ---*/
1044 /*--------------------------------------------------------------------*/