Handle gcc __builtin_strcmp using 128/256 bit vectors with sse4.1, avx/avx2
[valgrind.git] / include / vki / vki-mips64-linux.h
blob527b0dae63067bf5e0ccb2ef6502cf8000a4d6cd
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
327 #define VKI_O_DIRECT 0x8000
329 #define VKI_AT_FDCWD -100
331 #define VKI_F_DUPFD 0 /* dup */
332 #define VKI_F_GETFD 1 /* get close_on_exec */
333 #define VKI_F_SETFD 2 /* set/clear close_on_exec */
334 #define VKI_F_GETFL 3 /* get file->f_flags */
335 #define VKI_F_SETFL 4 /* set file->f_flags */
337 #define VKI_F_GETLK 14
338 #define VKI_F_SETLK 6
339 #define VKI_F_SETLKW 7
341 #define VKI_F_SETOWN 24 /* for sockets. */
342 #define VKI_F_GETOWN 23 /* for sockets. */
343 #define VKI_F_SETSIG 10 /* for sockets. */
344 #define VKI_F_GETSIG 11 /* for sockets. */
346 #define VKI_F_SETOWN_EX 15
347 #define VKI_F_GETOWN_EX 16
349 #define VKI_F_OFD_GETLK 36
350 #define VKI_F_OFD_SETLK 37
351 #define VKI_F_OFD_SETLKW 38
353 #define VKI_F_GETLK64 33 /* using 'struct flock64' */
354 #define VKI_F_SETLK64 34
355 #define VKI_F_SETLKW64 35
357 /* for F_[GET|SET]FL */
358 #define VKI_FD_CLOEXEC 1 /* actually anything with low bit set goes */
360 #define VKI_F_LINUX_SPECIFIC_BASE 1024
362 struct vki_f_owner_ex {
363 int type;
364 __vki_kernel_pid_t pid;
367 //----------------------------------------------------------------------
368 // From linux-2.6.35.9/include/asm-mips/resource.h
369 //----------------------------------------------------------------------
371 #define VKI_RLIMIT_DATA 2 /* max data size */
372 #define VKI_RLIMIT_STACK 3 /* max stack size */
373 #define VKI_RLIMIT_CORE 4 /* max core file size */
374 #define VKI_RLIMIT_NOFILE 5 /* max number of open files */
376 //----------------------------------------------------------------------
377 // From linux-2.6.35.9/include/asm-mips/socket.h
378 //----------------------------------------------------------------------
380 #define VKI_SOL_SOCKET 0xffff
382 #define VKI_SO_TYPE 0x1008
384 #define VKI_SO_ATTACH_FILTER 26
386 //----------------------------------------------------------------------
387 // From linux-2.6.35.9/include/asm-i386/sockios.h
388 //----------------------------------------------------------------------
390 #define VKI_SIOCATMARK _VKI_IOR('s', 7, int)
391 #define VKI_SIOCSPGRP _VKI_IOW('s', 8, vki_pid_t)
392 #define VKI_SIOCGPGRP _VKI_IOR('s', 9, vki_pid_t)
393 #define VKI_SIOCGSTAMP 0x8906 /* Get stamp (timeval) */
394 #define VKI_SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */
396 //----------------------------------------------------------------------
397 // From linux-2.6.35.9/include/asm-mips/stat.h
398 //----------------------------------------------------------------------
400 /* Size of kernel long is different from Valgrind MIPS n32 long size, so we have to
401 use long long instead long type. */
402 struct vki_stat {
403 unsigned int st_dev;
404 unsigned int st_pad0[3]; /* Reserved for st_dev expansion */
406 #if defined(VGABI_N32)
407 unsigned long long st_ino;
408 #else
409 unsigned long st_ino;
410 #endif
412 int st_mode;
413 unsigned int st_nlink;
415 unsigned int st_uid;
416 unsigned int st_gid;
418 unsigned int st_rdev;
419 unsigned int st_pad1[3]; /* Reserved for st_rdev expansion */
421 #if defined(VGABI_N32)
422 long long st_size;
423 #else
424 long st_size;
425 #endif
428 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
429 * but we don't have it under Linux.
431 unsigned int st_atime;
432 unsigned int st_atime_nsec; /* Reserved for st_atime expansion */
434 unsigned int st_mtime;
435 unsigned int st_mtime_nsec; /* Reserved for st_mtime expansion */
437 unsigned int st_ctime;
438 unsigned int st_ctime_nsec; /* Reserved for st_ctime expansion */
440 unsigned int st_blksize;
441 unsigned int st_pad2;
443 long long st_blocks;
446 struct vki_stat64 {
447 unsigned long st_dev;
448 unsigned long st_pad0[3]; /* Reserved for st_dev expansion */
450 unsigned long long st_ino;
452 int st_mode;
453 unsigned int st_nlink;
455 unsigned int st_uid;
456 unsigned int st_gid;
458 unsigned long st_rdev;
459 unsigned long st_pad1[3]; /* Reserved for st_rdev expansion */
461 long long st_size;
464 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
465 * but we don't have it under Linux.
467 unsigned long st_atime;
468 unsigned long st_atime_nsec; /* Reserved for st_atime expansion */
470 unsigned long st_mtime;
471 unsigned long st_mtime_nsec; /* Reserved for st_mtime expansion */
473 unsigned long st_ctime;
474 unsigned long st_ctime_nsec; /* Reserved for st_ctime expansion */
476 unsigned long st_blksize;
477 unsigned long st_pad2;
479 long long st_blocks;
482 //----------------------------------------------------------------------
483 // From linux-2.6.35.9/include/asm-mips/statfs.h
484 //----------------------------------------------------------------------
486 struct vki_statfs {
487 __vki_u32 f_type;
488 #define f_fstyp f_type
489 __vki_u32 f_bsize;
490 __vki_u32 f_frsize;
491 __vki_u32 f_blocks;
492 __vki_u32 f_bfree;
493 __vki_u32 f_files;
494 __vki_u32 f_ffree;
495 __vki_u32 f_bavail;
496 __vki_kernel_fsid_t f_fsid;
497 __vki_u32 f_namelen;
498 __vki_u32 f_spare[6];
501 //----------------------------------------------------------------------
502 // From linux-2.6.35.9/include/asm-mips/termios.h
503 //----------------------------------------------------------------------
505 struct vki_winsize {
506 unsigned short ws_row;
507 unsigned short ws_col;
508 unsigned short ws_xpixel;
509 unsigned short ws_ypixel;
512 #define NCC 8
513 #define NCCS 23
514 struct vki_termio {
515 unsigned short c_iflag; /* input mode flags */
516 unsigned short c_oflag; /* output mode flags */
517 unsigned short c_cflag; /* control mode flags */
518 unsigned short c_lflag; /* local mode flags */
519 char c_line; /* line discipline */
520 unsigned char c_cc[NCCS]; /* control characters */
523 //----------------------------------------------------------------------
524 // From linux-2.6.35.9/include/asm-mips/termbits.h
525 //----------------------------------------------------------------------
527 typedef unsigned char vki_cc_t;
528 typedef unsigned long vki_speed_t;
529 typedef unsigned long vki_tcflag_t;
531 struct vki_termios {
532 vki_tcflag_t c_iflag; /* input mode flags */
533 vki_tcflag_t c_oflag; /* output mode flags */
534 vki_tcflag_t c_cflag; /* control mode flags */
535 vki_tcflag_t c_lflag; /* local mode flags */
536 vki_cc_t c_line; /* line discipline */
537 vki_cc_t c_cc[NCCS]; /* control characters */
540 //----------------------------------------------------------------------
541 // From linux-2.6.35.9/include/asm-mips/ioctl.h
542 //----------------------------------------------------------------------
544 #define _VKI_IOC_NRBITS 8
545 #define _VKI_IOC_TYPEBITS 8
546 #define _VKI_IOC_SIZEBITS 13
547 #define _VKI_IOC_DIRBITS 3
549 #define _VKI_IOC_NRMASK ((1 << _VKI_IOC_NRBITS)-1)
550 #define _VKI_IOC_TYPEMASK ((1 << _VKI_IOC_TYPEBITS)-1)
551 #define _VKI_IOC_SIZEMASK ((1 << _VKI_IOC_SIZEBITS)-1)
552 #define _VKI_IOC_DIRMASK ((1 << _VKI_IOC_DIRBITS)-1)
554 #define _VKI_IOC_NRSHIFT 0
555 #define _VKI_IOC_TYPESHIFT (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
556 #define _VKI_IOC_SIZESHIFT (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
557 #define _VKI_IOC_DIRSHIFT (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
559 #define _VKI_IOC_NONE 1U
560 #define _VKI_IOC_READ 2U
561 #define _VKI_IOC_WRITE 4U
563 #define _VKI_IOC(dir,type,nr,size) \
564 (((dir) << _VKI_IOC_DIRSHIFT) | \
565 ((type) << _VKI_IOC_TYPESHIFT) | \
566 ((nr) << _VKI_IOC_NRSHIFT) | \
567 ((size) << _VKI_IOC_SIZESHIFT))
569 /* provoke compile error for invalid uses of size argument */
570 extern unsigned int __VKI_invalid_size_argument_for_IOC;
571 /* used to create numbers */
572 #define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
573 #define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr), \
574 (_VKI_IOC_TYPECHECK(size)))
575 #define _VKI_IOW(type,nr,size) _VKI_IOC(_VKI_IOC_WRITE,(type),(nr), \
576 (_VKI_IOC_TYPECHECK(size)))
577 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type), \
578 (nr),(_VKI_IOC_TYPECHECK(size)))
580 /* used to decode ioctl numbers.. */
581 #define _VKI_IOC_DIR(nr) (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
582 #define _VKI_IOC_TYPE(nr) (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
583 #define _VKI_IOC_NR(nr) (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
584 #define _VKI_IOC_SIZE(nr) (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
586 //----------------------------------------------------------------------
587 // From linux-2.6.35.9/include/asm-mips/ioctls.h
588 //----------------------------------------------------------------------
590 #define VKI_TCGETA 0x5401
591 #define VKI_TCSETA 0x5402 /* Clashes with SNDCTL_TMR_START
592 sound ioctl */
593 #define VKI_TCSETAW 0x5403
594 #define VKI_TCSETAF 0x5404
596 #define VKI_TCSBRK 0x5405
597 #define VKI_TCXONC 0x5406
598 #define VKI_TCFLSH 0x5407
600 #define VKI_TCGETS 0x540d
601 #define VKI_TCSETS 0x540e
602 #define VKI_TCSETSW 0x540f
603 #define VKI_TCSETSF 0x5410
605 #define VKI_TIOCEXCL 0x740d /* set exclusive use of tty */
606 #define VKI_TIOCNXCL 0x740e /* reset exclusive use of tty */
607 #define VKI_TIOCOUTQ 0x7472 /* output queue size */
608 #define VKI_TIOCSTI 0x5472 /* simulate terminal input */
609 #define VKI_TIOCMGET 0x741d /* get all modem bits */
610 #define VKI_TIOCMBIS 0x741b /* bis modem bits */
611 #define VKI_TIOCMBIC 0x741c /* bic modem bits */
612 #define VKI_TIOCMSET 0x741a /* set all modem bits */
613 #define VKI_TIOCPKT 0x5470 /* pty: set/clear packet mode */
614 #define VKI_TIOCPKT_DATA 0x00 /* data packet */
615 #define VKI_TIOCPKT_FLUSHREAD 0x01 /* flush packet */
616 #define VKI_TIOCPKT_FLUSHWRITE 0x02 /* flush packet */
617 #define VKI_TIOCPKT_STOP 0x04 /* stop output */
618 #define VKI_TIOCPKT_START 0x08 /* start output */
619 #define VKI_TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */
620 #define VKI_TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */
622 /* set window size */
623 #define VKI_TIOCSWINSZ _VKI_IOW('t', 103, struct vki_winsize)
624 /* get window size */
625 #define VKI_TIOCGWINSZ _VKI_IOR('t', 104, struct vki_winsize)
626 #define VKI_TIOCNOTTY 0x5471 /* void tty association */
627 #define VKI_TIOCSETD 0x7401
628 #define VKI_TIOCGETD 0x7400
630 #define VKI_FIOCLEX 0x6601
631 #define VKI_FIONCLEX 0x6602
632 #define VKI_FIOASYNC 0x667d
633 #define VKI_FIONBIO 0x667e
634 #define VKI_FIOQSIZE 0x667f
636 #define VKI_TIOCGLTC 0x7474 /* get special local chars */
637 #define VKI_TIOCSLTC 0x7475 /* set special local chars */
638 #define VKI_TIOCSPGRP _VKI_IOW('t', 118, int) /* set pgrp of tty */
639 #define VKI_TIOCGPGRP _VKI_IOR('t', 119, int) /* get pgrp of tty */
640 #define VKI_TIOCCONS _VKI_IOW('t', 120, int) /* become virtual
641 console */
643 #define VKI_FIONREAD 0x467f
644 #define VKI_TIOCINQ FIONREAD
646 #define VKI_TIOCGETP 0x7408
647 #define VKI_TIOCSETP 0x7409
648 #define VKI_TIOCSETN 0x740a /* TIOCSETP wo flush */
650 #define VKI_TIOCSBRK 0x5427 /* BSD compatibility */
651 #define VKI_TIOCCBRK 0x5428 /* BSD compatibility */
652 #define VKI_TIOCGSID 0x7416 /* Return the session ID of FD */
653 #define VKI_TIOCGPTN _VKI_IOR('T',0x30, unsigned int) /* Get Pty
654 Number (of pty-mux device) */
655 #define VKI_TIOCSPTLCK _VKI_IOW('T',0x31, int) /* Lock/unlock Pty */
657 /* I hope the range from 0x5480 on is free ... */
658 #define VKI_TIOCSCTTY 0x5480 /* become controlling tty */
659 #define VKI_TIOCGSOFTCAR 0x5481
660 #define VKI_TIOCSSOFTCAR 0x5482
661 #define VKI_TIOCLINUX 0x5483
662 #define VKI_TIOCGSERIAL 0x5484
663 #define VKI_TIOCSSERIAL 0x5485
664 #define VKI_TCSBRKP 0x5486 /* Needed for POSIX tcsendbreak() */
665 #define VKI_TIOCSERCONFIG 0x5488
666 #define VKI_TIOCSERGWILD 0x5489
667 #define VKI_TIOCSERSWILD 0x548a
668 #define VKI_TIOCGLCKTRMIOS 0x548b
669 #define VKI_TIOCSLCKTRMIOS 0x548c
670 #define VKI_TIOCSERGSTRUCT 0x548d /* For debugging only */
671 #define VKI_TIOCSERGETLSR 0x548e /* Get line status register */
672 #define VKI_TIOCSERGETMULTI 0x548f /* Get multiport config */
673 #define VKI_TIOCSERSETMULTI 0x5490 /* Set multiport config */
674 #define VKI_TIOCMIWAIT 0x5491 /* wait for a change on serial input
675 line(s) */
676 #define VKI_TIOCGICOUNT 0x5492 /* read serial port inline interrupt
677 counts */
678 #define VKI_TIOCGHAYESESP 0x5493 /* Get Hayes ESP configuration */
679 #define VKI_TIOCSHAYESESP 0x5494 /* Set Hayes ESP configuration */
681 //----------------------------------------------------------------------
682 // From asm-generic/poll.h
683 //----------------------------------------------------------------------
685 /* These are specified by iBCS2 */
686 #define VKI_POLLIN 0x0001
688 struct vki_pollfd {
689 int fd;
690 short events;
691 short revents;
693 //----------------------------------------------------------------------
694 // From linux-2.6.35.9/include/asm-mips/elf.h
695 //----------------------------------------------------------------------
697 #define VKI_ELF_NGREG 45 /* includes nip, msr, lr, etc. */
698 #define VKI_ELF_NFPREG 33 /* includes fpscr */
700 typedef unsigned long vki_elf_greg_t;
701 typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
703 typedef double vki_elf_fpreg_t;
704 typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];
706 typedef struct vki_user_fxsr_struct vki_elf_fpxregset_t;
708 #define VKI_AT_SYSINFO 32
709 //----------------------------------------------------------------------
710 // From linux-2.6.35.9/include/asm-mips/ucontext.h
711 //----------------------------------------------------------------------
713 struct vki_ucontext {
714 unsigned long uc_flags;
715 struct vki_ucontext *uc_link;
716 vki_stack_t uc_stack;
717 struct vki_sigcontext uc_mcontext;
718 vki_sigset_t uc_sigmask; /* mask last for extensibility */
721 typedef char vki_modify_ldt_t;
722 //----------------------------------------------------------------------
723 // From linux-2.6.35.9/include/asm-mips/ipcbuf.h
724 //----------------------------------------------------------------------
726 struct vki_ipc64_perm {
727 __vki_kernel_key_t key;
728 __vki_kernel_uid_t uid;
729 __vki_kernel_gid_t gid;
730 __vki_kernel_uid_t cuid;
731 __vki_kernel_gid_t cgid;
732 __vki_kernel_mode_t mode;
733 unsigned short seq;
734 unsigned short __pad1;
735 unsigned long __unused1;
736 unsigned long __unused2;
739 //----------------------------------------------------------------------
740 // From linux-2.6.35.9/include/asm-mips/sembuf.h
741 //----------------------------------------------------------------------
743 struct vki_semid64_ds {
744 struct vki_ipc64_perm sem_perm; /* permissions .. see ipc.h */
745 __vki_kernel_time_t sem_otime; /* last semop time */
746 __vki_kernel_time_t sem_ctime; /* last change time */
747 unsigned long sem_nsems; /* no. of semaphores in array */
748 unsigned long __unused1;
749 unsigned long __unused2;
752 //----------------------------------------------------------------------
753 // From linux-2.6.35.9/include/asm-mips/msgbuf.h
754 //----------------------------------------------------------------------
756 struct vki_msqid64_ds {
757 struct vki_ipc64_perm msg_perm;
758 __vki_kernel_time_t msg_stime; /* last msgsnd time */
759 __vki_kernel_time_t msg_rtime; /* last msgrcv time */
760 __vki_kernel_time_t msg_ctime; /* last change time */
761 unsigned long msg_cbytes; /* current number of bytes on queue */
762 unsigned long msg_qnum; /* number of messages in queue */
763 unsigned long msg_qbytes; /* max number of bytes on queue */
764 __vki_kernel_pid_t msg_lspid; /* pid of last msgsnd */
765 __vki_kernel_pid_t msg_lrpid; /* last receive pid */
766 unsigned long __unused4;
767 unsigned long __unused5;
770 //----------------------------------------------------------------------
771 // From linux-2.6.35.9/include/asm-mips/ipc.h
772 //----------------------------------------------------------------------
774 struct vki_ipc_kludge {
775 struct vki_msgbuf __user *msgp;
776 long msgtyp;
779 #define VKI_SEMOP 1
780 #define VKI_SEMGET 2
781 #define VKI_SEMCTL 3
782 #define VKI_SEMTIMEDOP 4
783 #define VKI_MSGSND 11
784 #define VKI_MSGRCV 12
785 #define VKI_MSGGET 13
786 #define VKI_MSGCTL 14
787 #define VKI_SHMAT 21
788 #define VKI_SHMDT 22
789 #define VKI_SHMGET 23
790 #define VKI_SHMCTL 24
792 //----------------------------------------------------------------------
793 // From linux-2.6.35.9/include/asm-mips/shmbuf.h
794 //----------------------------------------------------------------------
796 struct vki_shmid64_ds {
797 struct vki_ipc64_perm shm_perm; /* operation perms */
798 vki_size_t shm_segsz; /* size of segment (bytes) */
799 __vki_kernel_time_t shm_atime; /* last attach time */
800 __vki_kernel_time_t shm_dtime; /* last detach time */
801 __vki_kernel_time_t shm_ctime; /* last change time */
802 __vki_kernel_pid_t shm_cpid; /* pid of creator */
803 __vki_kernel_pid_t shm_lpid; /* pid of last operator */
804 unsigned long shm_nattch; /* no. of current attaches */
805 unsigned long __unused1;
806 unsigned long __unused2;
809 struct vki_shminfo64 {
810 unsigned long shmmax;
811 unsigned long shmmin;
812 unsigned long shmmni;
813 unsigned long shmseg;
814 unsigned long shmall;
815 unsigned long __unused1;
816 unsigned long __unused2;
817 unsigned long __unused3;
818 unsigned long __unused4;
821 //----------------------------------------------------------------------
822 // From linux-2.6.35.9/include/asm-mips/ptrace.h
823 //----------------------------------------------------------------------
825 struct vki_pt_regs {
826 #ifdef CONFIG_32BIT
827 /* Pad bytes for argument save space on the stack. */
828 unsigned long pad0[6];
829 #endif
831 /* Saved main processor registers. */
832 unsigned long regs[32];
834 /* Saved special registers. */
835 unsigned long cp0_status;
836 unsigned long hi;
837 unsigned long lo;
838 #ifdef CONFIG_CPU_HAS_SMARTMIPS
839 unsigned long acx;
840 #endif
841 unsigned long cp0_badvaddr;
842 unsigned long cp0_cause;
843 unsigned long cp0_epc;
844 #ifdef CONFIG_MIPS_MT_SMTC
845 unsigned long cp0_tcstatus;
846 #endif /* CONFIG_MIPS_MT_SMTC */
847 #ifdef CONFIG_CPU_CAVIUM_OCTEON
848 unsigned long long mpl[3]; /* MTM{0,1,2} */
849 unsigned long long mtp[3]; /* MTP{0,1,2} */
850 #endif
851 } __attribute__ ((aligned (8)));
853 //----------------------------------------------------------------------
854 // From linux-4.5/arch/mips/include/uapi/asm/reg.h
855 //----------------------------------------------------------------------
857 #define VKI_MIPS64_EF_R0 0
858 #define VKI_MIPS64_EF_R1 1
859 #define VKI_MIPS64_EF_R2 2
860 #define VKI_MIPS64_EF_R3 3
861 #define VKI_MIPS64_EF_R4 4
862 #define VKI_MIPS64_EF_R5 5
863 #define VKI_MIPS64_EF_R6 6
864 #define VKI_MIPS64_EF_R7 7
865 #define VKI_MIPS64_EF_R8 8
866 #define VKI_MIPS64_EF_R9 9
867 #define VKI_MIPS64_EF_R10 10
868 #define VKI_MIPS64_EF_R11 11
869 #define VKI_MIPS64_EF_R12 12
870 #define VKI_MIPS64_EF_R13 13
871 #define VKI_MIPS64_EF_R14 14
872 #define VKI_MIPS64_EF_R15 15
873 #define VKI_MIPS64_EF_R16 16
874 #define VKI_MIPS64_EF_R17 17
875 #define VKI_MIPS64_EF_R18 18
876 #define VKI_MIPS64_EF_R19 19
877 #define VKI_MIPS64_EF_R20 20
878 #define VKI_MIPS64_EF_R21 21
879 #define VKI_MIPS64_EF_R22 22
880 #define VKI_MIPS64_EF_R23 23
881 #define VKI_MIPS64_EF_R24 24
882 #define VKI_MIPS64_EF_R25 25
883 #define VKI_MIPS64_EF_R26 26
884 #define VKI_MIPS64_EF_R27 27
885 #define VKI_MIPS64_EF_R28 28
886 #define VKI_MIPS64_EF_R29 29
887 #define VKI_MIPS64_EF_R30 30
888 #define VKI_MIPS64_EF_R31 31
889 #define VKI_MIPS64_EF_LO 32
890 #define VKI_MIPS64_EF_HI 33
891 #define VKI_MIPS64_EF_CP0_EPC 34
892 #define VKI_MIPS64_EF_CP0_BADVADDR 35
893 #define VKI_MIPS64_EF_CP0_STATUS 36
894 #define VKI_MIPS64_EF_CP0_CAUSE 37
896 //----------------------------------------------------------------------
897 // From linux-2.6.35.9/include/asm-i386/ptrace.h
898 //----------------------------------------------------------------------
900 #define VKI_PTRACE_GETREGS 12
901 #define VKI_PTRACE_SETREGS 13
902 #define VKI_PTRACE_GETFPREGS 14
903 #define VKI_PTRACE_SETFPREGS 15
904 #define VKI_PTRACE_GETFPXREGS 18
905 #define VKI_PTRACE_SETFPXREGS 19
907 /* Calls to trace a 64bit program from a 32bit program. */
908 #define VKI_PTRACE_PEEKTEXT_3264 0xc0
909 #define VKI_PTRACE_PEEKDATA_3264 0xc1
910 #define VKI_PTRACE_POKETEXT_3264 0xc2
911 #define VKI_PTRACE_POKEDATA_3264 0xc3
912 #define VKI_PTRACE_GET_THREAD_AREA_3264 0xc4s
914 //----------------------------------------------------------------------
915 // From linux-2.6.35.9/include/asm-generic/siginfo.h
916 //----------------------------------------------------------------------
918 #define HAVE_ARCH_SIGINFO_T
919 typedef union vki_sigval {
920 int sival_int;
921 void __user *sival_ptr;
922 } vki_sigval_t;
924 #ifndef __VKI_ARCH_SI_PREAMBLE_SIZE
925 #if defined(VGABI_64)
926 #define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
927 #elif defined(VGABI_N32)
928 #define __VKI_ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
929 #else
930 #error unknown mips64 abi
931 #endif
932 #endif
934 #define VKI_SI_MAX_SIZE 128
936 #ifndef VKI_SI_PAD_SIZE
937 #define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
938 #endif
940 #ifndef __VKI_ARCH_SI_UID_T
941 #define __VKI_ARCH_SI_UID_T vki_uid_t
942 #endif
944 #ifndef __VKI_ARCH_SI_BAND_T
945 #define __VKI_ARCH_SI_BAND_T long
946 #endif
948 typedef struct vki_siginfo {
949 int si_signo;
950 int si_code;
951 int si_errno;
952 int __pad0[VKI_SI_MAX_SIZE / sizeof(int) - VKI_SI_PAD_SIZE - 3];
954 union {
955 int _pad[VKI_SI_PAD_SIZE];
957 /* kill() */
958 struct {
959 vki_pid_t _pid; /* sender's pid */
960 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
961 } _kill;
963 /* POSIX.1b timers */
964 struct {
965 vki_timer_t _tid; /* timer id */
966 int _overrun; /* overrun count */
967 char _pad[sizeof( __VKI_ARCH_SI_UID_T) - sizeof(int)];
968 vki_sigval_t _sigval; /* same as below */
969 int _sys_private; /* not to be passed to user */
970 } _timer;
972 /* POSIX.1b signals */
973 struct {
974 vki_pid_t _pid; /* sender's pid */
975 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
976 vki_sigval_t _sigval;
977 } _rt;
979 /* SIGCHLD */
980 struct {
981 vki_pid_t _pid; /* which child */
982 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
983 int _status; /* exit code */
984 vki_clock_t _utime;
985 vki_clock_t _stime;
986 } _sigchld;
988 /* IRIX SIGCHLD */
989 struct {
990 vki_pid_t _pid; /* which child */
991 vki_clock_t _utime;
992 int _status; /* exit code */
993 vki_clock_t _stime;
994 } _irix_sigchld;
996 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
997 struct {
998 void __user *_addr; /* faulting insn/memory ref. */
999 #ifdef __ARCH_SI_TRAPNO
1000 int _trapno; /* TRAP # which caused the signal */
1001 #endif
1002 } _sigfault;
1004 /* SIGPOLL, SIGXFSZ (To do ...) */
1005 struct {
1006 __VKI_ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
1007 int _fd;
1008 } _sigpoll;
1009 } _sifields;
1010 } vki_siginfo_t;
1012 //----------------------------------------------------------------------
1013 // From linux-2.6.35.5/include/asm/break.h
1014 //----------------------------------------------------------------------
1015 #define VKI_BRK_OVERFLOW 6 /* Overflow check */
1016 #define VKI_BRK_DIVZERO 7 /* Divide by zero check */
1018 //----------------------------------------------------------------------
1019 // From linux-3.6.35.5/arch/mips/include/socket.h
1020 //----------------------------------------------------------------------
1021 enum vki_sock_type {
1022 VKI_SOCK_STREAM = 2,
1023 // [[others omitted]]
1025 #define ARCH_HAS_SOCKET_TYPES 1
1027 //----------------------------------------------------------------------
1028 // From linux-3.13.0/include/asm/errno.h
1029 //----------------------------------------------------------------------
1031 #define VKI_ENOSYS 89 /* Function not implemented */
1032 #define VKI_EOVERFLOW 79 /* Value too large for defined data type */
1034 //----------------------------------------------------------------------
1035 // From linux-3.7.0/arch/mips/include/uapi/asm/errno.h
1036 //----------------------------------------------------------------------
1038 #define VKI_EOPNOTSUPP 122 /* Operation not supported on transport
1039 endpoint */
1041 #endif // __VKI_MIPS64_LINUX_H
1043 /*--------------------------------------------------------------------*/
1044 /*--- end vki-mips64-linux.h ---*/
1045 /*--------------------------------------------------------------------*/