2 /*--------------------------------------------------------------------*/
3 /*--- mips/Linux-specific kernel interface. vki-mips64-linux.h ---*/
4 /*--------------------------------------------------------------------*/
7 This file is part of Valgrind, a dynamic binary instrumentation
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
33 #define VKI_LITTLE_ENDIAN 1
34 #elif defined (_MIPSEB)
35 #define VKI_BIG_ENDIAN 1
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
;
72 typedef __signed__
long long __vki_s64
;
73 typedef unsigned long long __vki_u64
;
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 */
121 unsigned long sig
[_VKI_NSIG_WORDS
];
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). */
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
{
218 //----------------------------------------------------------------------
219 // From linux-2.6.35.9/include/asm-mips/sigcontext.h
220 //----------------------------------------------------------------------
223 unsigned short significand
[4];
224 unsigned short exponent
;
228 unsigned short significand
[4];
229 unsigned short exponent
;
230 unsigned short padding
[3];
234 unsigned long element
[4];
237 struct _vki_fpstate
{
238 /* Regular FPU environment */
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 */
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];
274 __vki_u64 sc_fpc_csr
;
275 __vki_u64 sc_used_math
;
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
290 #define VKI_PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end
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
{
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. */
404 unsigned int st_pad0
[3]; /* Reserved for st_dev expansion */
406 #if defined(VGABI_N32)
407 unsigned long long st_ino
;
409 unsigned long st_ino
;
413 unsigned int st_nlink
;
418 unsigned int st_rdev
;
419 unsigned int st_pad1
[3]; /* Reserved for st_rdev expansion */
421 #if defined(VGABI_N32)
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
;
447 unsigned long st_dev
;
448 unsigned long st_pad0
[3]; /* Reserved for st_dev expansion */
450 unsigned long long st_ino
;
453 unsigned int st_nlink
;
458 unsigned long st_rdev
;
459 unsigned long st_pad1
[3]; /* Reserved for st_rdev expansion */
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
;
482 //----------------------------------------------------------------------
483 // From linux-2.6.35.9/include/asm-mips/statfs.h
484 //----------------------------------------------------------------------
488 #define f_fstyp f_type
496 __vki_kernel_fsid_t f_fsid
;
498 __vki_u32 f_spare
[6];
501 //----------------------------------------------------------------------
502 // From linux-2.6.35.9/include/asm-mips/termios.h
503 //----------------------------------------------------------------------
506 unsigned short ws_row
;
507 unsigned short ws_col
;
508 unsigned short ws_xpixel
;
509 unsigned short ws_ypixel
;
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
;
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
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
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
676 #define VKI_TIOCGICOUNT 0x5492 /* read serial port inline interrupt
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
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
;
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
;
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
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 //----------------------------------------------------------------------
827 /* Pad bytes for argument save space on the stack. */
828 unsigned long pad0
[6];
831 /* Saved main processor registers. */
832 unsigned long regs
[32];
834 /* Saved special registers. */
835 unsigned long cp0_status
;
838 #ifdef CONFIG_CPU_HAS_SMARTMIPS
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} */
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
{
921 void __user
*sival_ptr
;
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))
930 #error unknown mips64 abi
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))
940 #ifndef __VKI_ARCH_SI_UID_T
941 #define __VKI_ARCH_SI_UID_T vki_uid_t
944 #ifndef __VKI_ARCH_SI_BAND_T
945 #define __VKI_ARCH_SI_BAND_T long
948 typedef struct vki_siginfo
{
952 int __pad0
[VKI_SI_MAX_SIZE
/ sizeof(int) - VKI_SI_PAD_SIZE
- 3];
955 int _pad
[VKI_SI_PAD_SIZE
];
959 vki_pid_t _pid
; /* sender's pid */
960 __VKI_ARCH_SI_UID_T _uid
; /* sender's uid */
963 /* POSIX.1b timers */
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 */
972 /* POSIX.1b signals */
974 vki_pid_t _pid
; /* sender's pid */
975 __VKI_ARCH_SI_UID_T _uid
; /* sender's uid */
976 vki_sigval_t _sigval
;
981 vki_pid_t _pid
; /* which child */
982 __VKI_ARCH_SI_UID_T _uid
; /* sender's uid */
983 int _status
; /* exit code */
990 vki_pid_t _pid
; /* which child */
992 int _status
; /* exit code */
996 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
998 void __user
*_addr
; /* faulting insn/memory ref. */
999 #ifdef __ARCH_SI_TRAPNO
1000 int _trapno
; /* TRAP # which caused the signal */
1004 /* SIGPOLL, SIGXFSZ (To do ...) */
1006 __VKI_ARCH_SI_BAND_T _band
; /* POLL_IN, POLL_OUT, POLL_MSG */
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
1041 #endif // __VKI_MIPS64_LINUX_H
1043 /*--------------------------------------------------------------------*/
1044 /*--- end vki-mips64-linux.h ---*/
1045 /*--------------------------------------------------------------------*/