2 /*--------------------------------------------------------------------*/
3 /*--- mips/Linux-specific kernel interface. vki-mips32-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/>.
25 The GNU General Public License is contained in the file COPYING.
28 #ifndef __VKI_MIPS32_LINUX_H
29 #define __VKI_MIPS32_LINUX_H
35 #define VKI_LITTLE_ENDIAN 1
36 #elif defined (_MIPSEB)
37 #define VKI_BIG_ENDIAN 1
41 //----------------------------------------------------------------------
42 // From linux-2.6.35.5/include/asm-generic/int-ll64.h
43 //----------------------------------------------------------------------
45 typedef __signed__
char __vki_s8
;
46 typedef unsigned char __vki_u8
;
48 typedef __signed__
short __vki_s16
;
49 typedef unsigned short __vki_u16
;
51 typedef __signed__
int __vki_s32
;
52 typedef unsigned int __vki_u32
;
54 typedef __signed
char vki_s8
;
55 typedef unsigned char vki_u8
;
57 typedef __signed
short vki_s16
;
58 typedef unsigned short vki_u16
;
60 typedef __signed
int vki_s32
;
61 typedef unsigned int vki_u32
;
63 typedef __signed__
long long __vki_s64
;
64 typedef unsigned long long __vki_u64
;
67 //----------------------------------------------------------------------
68 // From linux-2.6.35.5/include/asm-mips/page.h
69 //----------------------------------------------------------------------
71 /* MIPS32 uses runtime pagesize detection */
72 extern UWord VKI_PAGE_SHIFT
;
73 extern UWord VKI_PAGE_SIZE
;
74 #define VKI_PAGE_MASK (~(VKI_PAGE_SIZE-1))
75 #define VKI_MAX_PAGE_SHIFT 16
76 #define VKI_MAX_PAGE_SIZE (1UL << VKI_MAX_PAGE_SHIFT)
78 //----------------------------------------------------------------------
79 // From linux-2.6.35.9/arch/mips/include/bits/shm.h
80 //----------------------------------------------------------------------
82 #define VKI_SHMLBA 0x40000
84 //----------------------------------------------------------------------
85 // From linux-2.6.35.5/include/asm/signal.h
86 //----------------------------------------------------------------------
88 #define VKI_MINSIGSTKSZ 2048
90 #define VKI_SIG_BLOCK 1 /* for blocking signals */
91 #define VKI_SIG_UNBLOCK 2 /* for unblocking signals */
92 #define VKI_SIG_SETMASK 3 /* for setting the signal mask */
94 /* Type of a signal handler. */
95 typedef void __vki_signalfn_t(int);
96 typedef __vki_signalfn_t __user
*__vki_sighandler_t
;
98 typedef void __vki_restorefn_t(void);
99 typedef __vki_restorefn_t __user
*__vki_sigrestore_t
;
101 #define VKI_SIG_DFL ((__vki_sighandler_t)0) /* default signal handling */
102 #define VKI_SIG_IGN ((__vki_sighandler_t)1) /* ignore signal */
104 #define _VKI_NSIG 128
105 #define _VKI_NSIG_BPW 32
106 #define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
108 typedef unsigned long vki_old_sigset_t
; /* at least 32 bits */
111 unsigned long sig
[_VKI_NSIG_WORDS
];
114 #define VKI_SIGHUP 1 /* Hangup (POSIX). */
115 #define VKI_SIGINT 2 /* Interrupt (ANSI). */
116 #define VKI_SIGQUIT 3 /* Quit (POSIX). */
117 #define VKI_SIGILL 4 /* Illegal instruction (ANSI). */
118 #define VKI_SIGTRAP 5 /* Trace trap (POSIX). */
119 #define VKI_SIGIOT 6 /* IOT trap (4.2 BSD). */
120 #define VKI_SIGABRT VKI_SIGIOT /* Abort (ANSI). */
122 #define VKI_SIGFPE 8 /* Floating-point exception (ANSI). */
123 #define VKI_SIGKILL 9 /* Kill, unblockable (POSIX). */
124 #define VKI_SIGBUS 10 /* BUS error (4.2 BSD). */
125 #define VKI_SIGSEGV 11 /* Segmentation violation (ANSI). */
126 #define VKI_SIGSYS 12
127 #define VKI_SIGPIPE 13 /* Broken pipe (POSIX). */
128 #define VKI_SIGALRM 14 /* Alarm clock (POSIX). */
129 #define VKI_SIGTERM 15 /* Termination (ANSI). */
130 #define VKI_SIGUSR1 16 /* User-defined signal 1 (POSIX). */
131 #define VKI_SIGUSR2 17 /* User-defined signal 2 (POSIX). */
132 #define VKI_SIGCHLD 18 /* Child status has changed (POSIX). */
133 #define VKI_SIGCLD VKI_SIGCHLD /* Same as SIGCHLD (System V). */
134 #define VKI_SIGPWR 19 /* Power failure restart (System V). */
135 #define VKI_SIGWINCH 20 /* Window size change (4.3 BSD, Sun). */
136 #define VKI_SIGURG 21 /* Urgent condition on socket (4.2 BSD). */
137 #define VKI_SIGIO 22 /* I/O now possible (4.2 BSD). */
138 #define VKI_SIGPOLL VKI_SIGIO /* Pollable event occurred (System V). */
139 #define VKI_SIGSTOP 23 /* Stop, unblockable (POSIX). */
140 #define VKI_SIGTSTP 24 /* Keyboard stop (POSIX). */
141 #define VKI_SIGCONT 25 /* Continue (POSIX). */
142 #define VKI_SIGTTIN 26 /* Background read from tty (POSIX). */
143 #define VKI_SIGTTOU 27 /* Background write to tty (POSIX). */
144 #define VKI_SIGVTALRM 28 /* Virtual alarm clock (4.2 BSD). */
145 #define VKI_SIGPROF 29 /* Profiling alarm clock (4.2 BSD). */
146 #define VKI_SIGXCPU 30 /* CPU limit exceeded (4.2 BSD). */
147 #define VKI_SIGXFSZ 31 /* File size limit exceeded (4.2 BSD). */
149 /* These should not be considered constants from userland. */
150 #define VKI_SIGRTMIN 32
151 // [[This was (_NSIG-1) in 2.4.X... not sure if it matters.]]
152 #define VKI_SIGRTMAX _VKI_NSIG
154 #define VKI_SA_ONSTACK 0x08000000
155 #define VKI_SA_RESETHAND 0x80000000
156 #define VKI_SA_RESTART 0x10000000
157 #define VKI_SA_SIGINFO 0x00000008
158 #define VKI_SA_NODEFER 0x40000000
159 #define VKI_SA_NOCLDWAIT 0x00010000
160 #define VKI_SA_NOCLDSTOP 0x00000001
162 #define VKI_SA_NOMASK VKI_SA_NODEFER
163 #define VKI_SA_ONESHOT VKI_SA_RESETHAND
164 //#define VKI_SA_INTERRUPT 0x20000000 /* dummy -- ignored */
166 #define VKI_SA_RESTORER 0x04000000
168 #define VKI_SS_ONSTACK 1
169 #define VKI_SS_DISABLE 2
171 struct vki_old_sigaction
{
172 // [[Nb: a 'k' prefix is added to "sa_handler" because
173 // bits/sigaction.h (which gets dragged in somehow via signal.h)
174 // #defines it as something else. Since that is done for glibc's
175 // purposes, which we don't care about here, we use our own name.]]
176 unsigned long sa_flags
;
177 __vki_sighandler_t ksa_handler
;
178 vki_old_sigset_t sa_mask
;
179 __vki_sigrestore_t sa_restorer
;
182 struct vki_sigaction
{
183 unsigned int sa_flags
;
184 __vki_sighandler_t sa_handler
;
185 vki_sigset_t sa_mask
;
189 struct vki_sigaction_base
{
190 // [[See comment about extra 'k' above]]
191 unsigned long sa_flags
;
192 __vki_sighandler_t ksa_handler
;
194 vki_sigset_t sa_mask
; /* mask last for extensibility */
195 __vki_sigrestore_t sa_restorer
;
198 /* On Linux we use the same type for passing sigactions to
199 and from the kernel. Hence: */
200 typedef struct vki_sigaction_base vki_sigaction_toK_t
;
201 typedef struct vki_sigaction_base vki_sigaction_fromK_t
;
203 typedef struct vki_sigaltstack
{
211 //----------------------------------------------------------------------
212 // From 2.6.35.5/include/asm-mips/sigcontext.h
213 //----------------------------------------------------------------------
216 unsigned short significand
[4];
217 unsigned short exponent
;
221 unsigned short significand
[4];
222 unsigned short exponent
;
223 unsigned short padding
[3];
227 unsigned long element
[4];
230 struct _vki_fpstate
{
231 /* Regular FPU environment */
237 unsigned long dataoff
;
238 unsigned long datasel
;
239 struct _vki_fpreg _st
[8];
240 unsigned short status
;
241 unsigned short magic
; /* 0xffff = regular FPU data only */
243 /* FXSR FPU environment */
244 unsigned long _fxsr_env
[6]; /* FXSR FPU env is ignored */
246 unsigned long reserved
;
247 struct _vki_fpxreg _fxsr_st
[8]; /* FXSR FPU reg data is ignored */
248 struct _vki_xmmreg _xmm
[8];
249 unsigned long padding
[56];
252 //----------------------------------------------------------------------
253 // From linux-2.6.35.5/include/asm-mips/sigcontext.h
254 //----------------------------------------------------------------------
256 struct vki_sigcontext
{
257 unsigned int sc_regmask
; /* Unused */
258 unsigned int sc_status
; /* Unused */
259 unsigned long long sc_pc
;
260 unsigned long long sc_regs
[32];
261 unsigned long long sc_fpregs
[32];
262 unsigned int sc_acx
; /* Was sc_ownedfp */
263 unsigned int sc_fpc_csr
;
264 unsigned int sc_fpc_eir
; /* Unused */
265 unsigned int sc_used_math
;
266 unsigned int sc_dsp
; /* dsp status, was sc_ssflags */
267 unsigned long long sc_mdhi
;
268 unsigned long long sc_mdlo
;
269 unsigned long sc_hi1
; /* Was sc_cause */
270 unsigned long sc_lo1
; /* Was sc_badvaddr */
271 unsigned long sc_hi2
; /* Was sc_sigset[4] */
272 unsigned long sc_lo2
;
273 unsigned long sc_hi3
;
274 unsigned long sc_lo3
;
277 //----------------------------------------------------------------------
278 // From linux-2.6.35.5/include/asm-mips/mman.h
279 //----------------------------------------------------------------------
281 #define VKI_PROT_NONE 0x0 /* No page permissions */
282 #define VKI_PROT_READ 0x1 /* page can be read */
283 #define VKI_PROT_WRITE 0x2 /* page can be written */
284 #define VKI_PROT_EXEC 0x4 /* page can be executed */
285 #define VKI_PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */
286 #define VKI_PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */
288 #define VKI_MAP_SHARED 0x001 /* Share changes */
289 #define VKI_MAP_PRIVATE 0x002 /* Changes are private */
290 #define VKI_MAP_FIXED 0x010 /* Interpret addr exactly */
292 #define VKI_MAP_NORESERVE 0x0400 /* don't reserve swap pages */
294 /* These are linux-specific */
295 #define VKI_MAP_NORESERVE 0x0400 /* don't check for reservations */
296 #define VKI_MAP_ANONYMOUS 0x0800 /* don't use a file */
297 #define VKI_MAP_GROWSDOWN 0x1000 /* stack-like segment */
298 #define VKI_MAP_DENYWRITE 0x2000 /* ETXTBSY */
299 #define VKI_MAP_EXECUTABLE 0x4000 /* mark it as an executable */
300 #define VKI_MAP_LOCKED 0x8000 /* pages are locked */
301 #define VKI_MAP_POPULATE 0x10000 /* populate (prefault) pagetables */
302 #define VKI_MAP_NONBLOCK 0x20000 /* do not block on IO */
305 //----------------------------------------------------------------------
306 // From linux-2.6.35.5/include/asm-mips/fcntl.h
307 //----------------------------------------------------------------------
309 #define VKI_O_ACCMODE 03
310 #define VKI_O_RDONLY 00
311 #define VKI_O_WRONLY 01
312 #define VKI_O_RDWR 02
314 #define VKI_O_CREAT 0x0100 /* not fcntl */
315 #define VKI_O_EXCL 0x0400 /* not fcntl */
317 #define VKI_O_TRUNC 0x0200 /* not fcntl */
319 #define VKI_O_APPEND 0x0008
320 #define VKI_O_NONBLOCK 0x0080
321 #define VKI_O_LARGEFILE 0x2000
322 #define VKI_O_DIRECT 0x8000
324 #define VKI_AT_FDCWD -100
326 #define VKI_F_DUPFD 0 /* dup */
327 #define VKI_F_GETFD 1 /* get close_on_exec */
328 #define VKI_F_SETFD 2 /* set/clear close_on_exec */
329 #define VKI_F_GETFL 3 /* get file->f_flags */
330 #define VKI_F_SETFL 4 /* set file->f_flags */
332 #define VKI_F_GETLK 14
333 #define VKI_F_SETLK 6
334 #define VKI_F_SETLKW 7
336 #define VKI_F_SETOWN 24 /* for sockets. */
337 #define VKI_F_GETOWN 23 /* for sockets. */
338 #define VKI_F_SETSIG 10 /* for sockets. */
339 #define VKI_F_GETSIG 11 /* for sockets. */
341 #define VKI_F_SETOWN_EX 15
342 #define VKI_F_GETOWN_EX 16
344 #define VKI_F_OFD_GETLK 36
345 #define VKI_F_OFD_SETLK 37
346 #define VKI_F_OFD_SETLKW 38
348 #define VKI_F_GETLK64 33 /* using 'struct flock64' */
349 #define VKI_F_SETLK64 34
350 #define VKI_F_SETLKW64 35
352 /* for F_[GET|SET]FL */
353 #define VKI_FD_CLOEXEC 1 /* actually anything with low bit set goes */
355 #define VKI_F_LINUX_SPECIFIC_BASE 1024
357 struct vki_f_owner_ex
{
359 __vki_kernel_pid_t pid
;
362 //----------------------------------------------------------------------
363 // From linux-2.6.35.5/include/asm-mips/resource.h
364 //----------------------------------------------------------------------
366 #define VKI_RLIMIT_DATA 2 /* max data size */
367 #define VKI_RLIMIT_STACK 3 /* max stack size */
368 #define VKI_RLIMIT_CORE 4 /* max core file size */
369 #define VKI_RLIMIT_NOFILE 5 /* max number of open files */
370 #define VKI_RLIM_INFINITY 0x7fffffffUL
372 //----------------------------------------------------------------------
373 // From linux-2.6.35.5/include/asm-mips/socket.h
374 //----------------------------------------------------------------------
376 #define VKI_SOL_SOCKET 0xffff
378 #define VKI_SO_TYPE 0x1008
380 #define VKI_SO_ATTACH_FILTER 26
382 //----------------------------------------------------------------------
383 // From linux-2.6.35.5/include/asm-i386/sockios.h
384 //----------------------------------------------------------------------
386 #define VKI_SIOCATMARK _VKI_IOR('s', 7, int)
387 #define VKI_SIOCSPGRP _VKI_IOW('s', 8, vki_pid_t)
388 #define VKI_SIOCGPGRP _VKI_IOR('s', 9, vki_pid_t)
389 #define VKI_SIOCGSTAMP 0x8906 /* Get stamp (timeval) */
390 #define VKI_SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */
392 //----------------------------------------------------------------------
393 // From linux-2.6.35.5/include/asm-mips/stat.h
394 //----------------------------------------------------------------------
398 long st_pad1
[3]; /* Reserved for network id */
399 unsigned long st_ino
;
400 unsigned int st_mode
;
401 unsigned long st_nlink
;
409 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
410 * but we don't have it under Linux.
424 * This matches struct stat64 in glibc2.1, hence the absolutely insane
425 * amounts of padding around dev_t's. The memory layout is the same as of
426 * struct stat of the 64-bit kernel.
430 unsigned long st_dev
;
431 unsigned long st_pad0
[3]; /* Reserved for st_dev expansion */
433 unsigned long long st_ino
;
435 unsigned int st_mode
;
436 unsigned long st_nlink
;
441 unsigned long st_rdev
;
442 unsigned long st_pad1
[3]; /* Reserved for st_rdev expansion */
447 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
448 * but we don't have it under Linux.
451 unsigned long st_atime_nsec
; /* Reserved for st_atime expansion */
454 unsigned long st_mtime_nsec
; /* Reserved for st_mtime expansion */
457 unsigned long st_ctime_nsec
; /* Reserved for st_ctime expansion */
459 unsigned long st_blksize
;
460 unsigned long st_pad2
;
465 //----------------------------------------------------------------------
466 // From linux-2.6.35.5/include/asm-mips/statfs.h
467 //----------------------------------------------------------------------
472 long f_frsize
; /* Fragment size - unsupported */
480 __vki_kernel_fsid_t f_fsid
;
485 //----------------------------------------------------------------------
486 // From linux-2.6.35.5/include/asm-mips/termios.h
487 //----------------------------------------------------------------------
490 unsigned short ws_row
;
491 unsigned short ws_col
;
492 unsigned short ws_xpixel
;
493 unsigned short ws_ypixel
;
499 unsigned short c_iflag
; /* input mode flags */
500 unsigned short c_oflag
; /* output mode flags */
501 unsigned short c_cflag
; /* control mode flags */
502 unsigned short c_lflag
; /* local mode flags */
503 char c_line
; /* line discipline */
504 unsigned char c_cc
[NCCS
]; /* control characters */
508 //----------------------------------------------------------------------
509 // From linux-2.6.35.5/include/asm-mips/termbits.h
510 //----------------------------------------------------------------------
512 typedef unsigned char vki_cc_t
;
513 typedef unsigned long vki_speed_t
;
514 typedef unsigned long vki_tcflag_t
;
517 vki_tcflag_t c_iflag
; /* input mode flags */
518 vki_tcflag_t c_oflag
; /* output mode flags */
519 vki_tcflag_t c_cflag
; /* control mode flags */
520 vki_tcflag_t c_lflag
; /* local mode flags */
521 vki_cc_t c_line
; /* line discipline */
522 vki_cc_t c_cc
[NCCS
]; /* control characters */
525 //----------------------------------------------------------------------
526 // From linux-2.6.35.5/include/asm-mips/ioctl.h
527 //----------------------------------------------------------------------
529 #define _VKI_IOC_NRBITS 8
530 #define _VKI_IOC_TYPEBITS 8
531 #define _VKI_IOC_SIZEBITS 13
532 #define _VKI_IOC_DIRBITS 3
534 #define _VKI_IOC_NRMASK ((1 << _VKI_IOC_NRBITS)-1)
535 #define _VKI_IOC_TYPEMASK ((1 << _VKI_IOC_TYPEBITS)-1)
536 #define _VKI_IOC_SIZEMASK ((1 << _VKI_IOC_SIZEBITS)-1)
537 #define _VKI_IOC_DIRMASK ((1 << _VKI_IOC_DIRBITS)-1)
539 #define _VKI_IOC_NRSHIFT 0
540 #define _VKI_IOC_TYPESHIFT (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
541 #define _VKI_IOC_SIZESHIFT (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
542 #define _VKI_IOC_DIRSHIFT (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
544 #define _VKI_IOC_NONE 1U
545 #define _VKI_IOC_READ 2U
546 #define _VKI_IOC_WRITE 4U
548 #define _VKI_IOC(dir,type,nr,size) \
549 (((dir) << _VKI_IOC_DIRSHIFT) | \
550 ((type) << _VKI_IOC_TYPESHIFT) | \
551 ((nr) << _VKI_IOC_NRSHIFT) | \
552 ((size) << _VKI_IOC_SIZESHIFT))
554 /* provoke compile error for invalid uses of size argument */
555 extern unsigned int __VKI_invalid_size_argument_for_IOC
;
556 /* used to create numbers */
557 #define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
558 #define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
559 #define _VKI_IOW(type,nr,size) _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
560 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
562 /* used to decode ioctl numbers.. */
563 #define _VKI_IOC_DIR(nr) (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
564 #define _VKI_IOC_TYPE(nr) (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
565 #define _VKI_IOC_NR(nr) (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
566 #define _VKI_IOC_SIZE(nr) (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
568 //----------------------------------------------------------------------
569 // From linux-2.6.35.5/include/asm-mips/ioctls.h
570 //----------------------------------------------------------------------
572 #define VKI_TCGETA 0x5401
573 #define VKI_TCSETA 0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */
574 #define VKI_TCSETAW 0x5403
575 #define VKI_TCSETAF 0x5404
577 #define VKI_TCSBRK 0x5405
578 #define VKI_TCXONC 0x5406
579 #define VKI_TCFLSH 0x5407
581 #define VKI_TCGETS 0x540d
582 #define VKI_TCSETS 0x540e
583 #define VKI_TCSETSW 0x540f
584 #define VKI_TCSETSF 0x5410
586 #define VKI_TIOCEXCL 0x740d /* set exclusive use of tty */
587 #define VKI_TIOCNXCL 0x740e /* reset exclusive use of tty */
588 #define VKI_TIOCOUTQ 0x7472 /* output queue size */
589 #define VKI_TIOCSTI 0x5472 /* simulate terminal input */
590 #define VKI_TIOCMGET 0x741d /* get all modem bits */
591 #define VKI_TIOCMBIS 0x741b /* bis modem bits */
592 #define VKI_TIOCMBIC 0x741c /* bic modem bits */
593 #define VKI_TIOCMSET 0x741a /* set all modem bits */
594 #define VKI_TIOCPKT 0x5470 /* pty: set/clear packet mode */
595 #define VKI_TIOCPKT_DATA 0x00 /* data packet */
596 #define VKI_TIOCPKT_FLUSHREAD 0x01 /* flush packet */
597 #define VKI_TIOCPKT_FLUSHWRITE 0x02 /* flush packet */
598 #define VKI_TIOCPKT_STOP 0x04 /* stop output */
599 #define VKI_TIOCPKT_START 0x08 /* start output */
600 #define VKI_TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */
601 #define VKI_TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */
602 /* #define TIOCPKT_IOCTL 0x40 state change of pty driver */
603 #define VKI_TIOCSWINSZ _VKI_IOW('t', 103, struct vki_winsize) /* set window size */
604 #define VKI_TIOCGWINSZ _VKI_IOR('t', 104, struct vki_winsize) /* get window size */
605 #define VKI_TIOCNOTTY 0x5471 /* void tty association */
606 #define VKI_TIOCSETD 0x7401
607 #define VKI_TIOCGETD 0x7400
609 #define VKI_FIOCLEX 0x6601
610 #define VKI_FIONCLEX 0x6602
611 #define VKI_FIOASYNC 0x667d
612 #define VKI_FIONBIO 0x667e
613 #define VKI_FIOQSIZE 0x667f
615 #define VKI_TIOCGLTC 0x7474 /* get special local chars */
616 #define VKI_TIOCSLTC 0x7475 /* set special local chars */
617 #define VKI_TIOCSPGRP _VKI_IOW('t', 118, int) /* set pgrp of tty */
618 #define VKI_TIOCGPGRP _VKI_IOR('t', 119, int) /* get pgrp of tty */
619 #define VKI_TIOCCONS _VKI_IOW('t', 120, int) /* become virtual console */
621 #define VKI_FIONREAD 0x467f
622 #define VKI_TIOCINQ FIONREAD
624 #define VKI_TIOCGETP 0x7408
625 #define VKI_TIOCSETP 0x7409
626 #define VKI_TIOCSETN 0x740a /* TIOCSETP wo flush */
628 #define VKI_TIOCSBRK 0x5427 /* BSD compatibility */
629 #define VKI_TIOCCBRK 0x5428 /* BSD compatibility */
630 #define VKI_TIOCGSID 0x7416 /* Return the session ID of FD */
631 #define VKI_TIOCGPTN _VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
632 #define VKI_TIOCSPTLCK _VKI_IOW('T',0x31, int) /* Lock/unlock Pty */
634 /* I hope the range from 0x5480 on is free ... */
635 #define VKI_TIOCSCTTY 0x5480 /* become controlling tty */
636 #define VKI_TIOCGSOFTCAR 0x5481
637 #define VKI_TIOCSSOFTCAR 0x5482
638 #define VKI_TIOCLINUX 0x5483
639 #define VKI_TIOCGSERIAL 0x5484
640 #define VKI_TIOCSSERIAL 0x5485
641 #define VKI_TCSBRKP 0x5486 /* Needed for POSIX tcsendbreak() */
642 #define VKI_TIOCSERCONFIG 0x5488
643 #define VKI_TIOCSERGWILD 0x5489
644 #define VKI_TIOCSERSWILD 0x548a
645 #define VKI_TIOCGLCKTRMIOS 0x548b
646 #define VKI_TIOCSLCKTRMIOS 0x548c
647 #define VKI_TIOCSERGSTRUCT 0x548d /* For debugging only */
648 #define VKI_TIOCSERGETLSR 0x548e /* Get line status register */
649 #define VKI_TIOCSERGETMULTI 0x548f /* Get multiport config */
650 #define VKI_TIOCSERSETMULTI 0x5490 /* Set multiport config */
651 #define VKI_TIOCMIWAIT 0x5491 /* wait for a change on serial input line(s) */
652 #define VKI_TIOCGICOUNT 0x5492 /* read serial port inline interrupt counts */
653 #define VKI_TIOCGHAYESESP 0x5493 /* Get Hayes ESP configuration */
654 #define VKI_TIOCSHAYESESP 0x5494 /* Set Hayes ESP configuration */
656 //----------------------------------------------------------------------
657 // From asm-generic/poll.h
658 //----------------------------------------------------------------------
660 /* These are specified by iBCS2 */
661 #define VKI_POLLIN 0x0001
668 //----------------------------------------------------------------------
669 // From linux-2.6.35.5/include/asm-mips/ucontext.h
670 //----------------------------------------------------------------------
672 struct vki_ucontext
{
673 unsigned long uc_flags
;
674 struct vki_ucontext
*uc_link
;
675 vki_stack_t uc_stack
;
676 struct vki_sigcontext uc_mcontext
;
677 vki_sigset_t uc_sigmask
; /* mask last for extensibility */
681 typedef char vki_modify_ldt_t
;
683 //----------------------------------------------------------------------
684 // From linux-2.6.35.5/include/asm-mips/ipcbuf.h
685 //----------------------------------------------------------------------
687 struct vki_ipc64_perm
689 __vki_kernel_key_t key
;
690 __vki_kernel_uid_t uid
;
691 __vki_kernel_gid_t gid
;
692 __vki_kernel_uid_t cuid
;
693 __vki_kernel_gid_t cgid
;
694 __vki_kernel_mode_t mode
;
696 unsigned short __pad1
;
697 unsigned long __unused1
;
698 unsigned long __unused2
;
701 //----------------------------------------------------------------------
702 // From linux-2.6.35.5/include/asm-mips/sembuf.h
703 //----------------------------------------------------------------------
705 struct vki_semid64_ds
{
706 struct vki_ipc64_perm sem_perm
; /* permissions .. see ipc.h */
707 __vki_kernel_time_t sem_otime
; /* last semop time */
708 __vki_kernel_time_t sem_ctime
; /* last change time */
709 unsigned long sem_nsems
; /* no. of semaphores in array */
710 unsigned long __unused1
;
711 unsigned long __unused2
;
715 //----------------------------------------------------------------------
716 // From linux-2.6.35.5/include/asm-mips/msgbuf.h
717 //----------------------------------------------------------------------
719 struct vki_msqid64_ds
{
720 struct vki_ipc64_perm msg_perm
;
721 __vki_kernel_time_t msg_stime
; /* last msgsnd time */
722 unsigned long __unused1
;
723 __vki_kernel_time_t msg_rtime
; /* last msgrcv time */
724 unsigned long __unused2
;
725 __vki_kernel_time_t msg_ctime
; /* last change time */
726 unsigned long __unused3
;
727 unsigned long msg_cbytes
; /* current number of bytes on queue */
728 unsigned long msg_qnum
; /* number of messages in queue */
729 unsigned long msg_qbytes
; /* max number of bytes on queue */
730 __vki_kernel_pid_t msg_lspid
; /* pid of last msgsnd */
731 __vki_kernel_pid_t msg_lrpid
; /* last receive pid */
732 unsigned long __unused4
;
733 unsigned long __unused5
;
736 //----------------------------------------------------------------------
737 // From linux-2.6.35.5/include/asm-mips/ipc.h
738 //----------------------------------------------------------------------
740 struct vki_ipc_kludge
{
741 struct vki_msgbuf __user
*msgp
;
748 #define VKI_SEMTIMEDOP 4
749 #define VKI_MSGSND 11
750 #define VKI_MSGRCV 12
751 #define VKI_MSGGET 13
752 #define VKI_MSGCTL 14
755 #define VKI_SHMGET 23
756 #define VKI_SHMCTL 24
758 //----------------------------------------------------------------------
759 // From linux-2.6.35.5/include/asm-mips/shmbuf.h
760 //----------------------------------------------------------------------
762 struct vki_shmid64_ds
{
763 struct vki_ipc64_perm shm_perm
; /* operation perms */
764 vki_size_t shm_segsz
; /* size of segment (bytes) */
765 __vki_kernel_time_t shm_atime
; /* last attach time */
766 __vki_kernel_time_t shm_dtime
; /* last detach time */
767 __vki_kernel_time_t shm_ctime
; /* last change time */
768 __vki_kernel_pid_t shm_cpid
; /* pid of creator */
769 __vki_kernel_pid_t shm_lpid
; /* pid of last operator */
770 unsigned long shm_nattch
; /* no. of current attaches */
771 unsigned long __unused1
;
772 unsigned long __unused2
;
775 struct vki_shminfo64
{
776 unsigned long shmmax
;
777 unsigned long shmmin
;
778 unsigned long shmmni
;
779 unsigned long shmseg
;
780 unsigned long shmall
;
781 unsigned long __unused1
;
782 unsigned long __unused2
;
783 unsigned long __unused3
;
784 unsigned long __unused4
;
786 //----------------------------------------------------------------------
787 // From linux-2.6.35.5/include/asm-mips/ptrace.h
788 //----------------------------------------------------------------------
792 /* Pad bytes for argument save space on the stack. */
793 unsigned long pad0
[6];
795 /* Saved main processor registers. */
796 unsigned long regs
[32];
798 /* Saved special registers. */
799 unsigned long cp0_status
;
802 #ifdef CONFIG_CPU_HAS_SMARTMIPS
805 unsigned long cp0_badvaddr
;
806 unsigned long cp0_cause
;
807 unsigned long cp0_epc
;
808 #ifdef CONFIG_MIPS_MT_SMTC
809 unsigned long cp0_tcstatus
;
810 #endif /* CONFIG_MIPS_MT_SMTC */
811 #ifdef CONFIG_CPU_CAVIUM_OCTEON
812 unsigned long long mpl
[3]; /* MTM{0,1,2} */
813 unsigned long long mtp
[3]; /* MTP{0,1,2} */
815 } __attribute__ ((aligned (8)));
817 #define VKI_PTRACE_GETREGS 12
818 #define VKI_PTRACE_SETREGS 13
819 #define VKI_PTRACE_GETFPREGS 14
820 #define VKI_PTRACE_SETFPREGS 15
821 //----------------------------------------------------------------------
822 // From linux-4.5/arch/mips/include/uapi/asm/reg.h
823 //----------------------------------------------------------------------
824 #define VKI_MIPS32_EF_R0 6
825 #define VKI_MIPS32_EF_R1 7
826 #define VKI_MIPS32_EF_R2 8
827 #define VKI_MIPS32_EF_R3 9
828 #define VKI_MIPS32_EF_R4 10
829 #define VKI_MIPS32_EF_R5 11
830 #define VKI_MIPS32_EF_R6 12
831 #define VKI_MIPS32_EF_R7 13
832 #define VKI_MIPS32_EF_R8 14
833 #define VKI_MIPS32_EF_R9 15
834 #define VKI_MIPS32_EF_R10 16
835 #define VKI_MIPS32_EF_R11 17
836 #define VKI_MIPS32_EF_R12 18
837 #define VKI_MIPS32_EF_R13 19
838 #define VKI_MIPS32_EF_R14 20
839 #define VKI_MIPS32_EF_R15 21
840 #define VKI_MIPS32_EF_R16 22
841 #define VKI_MIPS32_EF_R17 23
842 #define VKI_MIPS32_EF_R18 24
843 #define VKI_MIPS32_EF_R19 25
844 #define VKI_MIPS32_EF_R20 26
845 #define VKI_MIPS32_EF_R21 27
846 #define VKI_MIPS32_EF_R22 28
847 #define VKI_MIPS32_EF_R23 29
848 #define VKI_MIPS32_EF_R24 30
849 #define VKI_MIPS32_EF_R25 31
850 #define VKI_MIPS32_EF_R26 32
851 #define VKI_MIPS32_EF_R27 33
852 #define VKI_MIPS32_EF_R28 34
853 #define VKI_MIPS32_EF_R29 35
854 #define VKI_MIPS32_EF_R30 36
855 #define VKI_MIPS32_EF_R31 37
856 #define VKI_MIPS32_EF_LO 38
857 #define VKI_MIPS32_EF_HI 39
858 #define VKI_MIPS32_EF_CP0_EPC 40
859 #define VKI_MIPS32_EF_CP0_BADVADDR 41
860 #define VKI_MIPS32_EF_CP0_STATUS 42
861 #define VKI_MIPS32_EF_CP0_CAUSE 43
862 #define VKI_MIPS32_EF_UNUSED0 44
864 //----------------------------------------------------------------------
865 // From linux-4.5/arch/mips/include/asm/elf.h
866 //----------------------------------------------------------------------
867 typedef unsigned long vki_elf_greg_t
;
869 #define VKI_ELF_NGREG 45
870 #define VKI_ELF_NFPREG 33 /* includes fpscr */
872 typedef vki_elf_greg_t vki_elf_gregset_t
[VKI_ELF_NGREG
];
874 typedef double vki_elf_fpreg_t
;
875 typedef vki_elf_fpreg_t vki_elf_fpregset_t
[VKI_ELF_NFPREG
];
877 typedef struct vki_user_fxsr_struct vki_elf_fpxregset_t
;
879 #define VKI_AT_SYSINFO 32
880 //----------------------------------------------------------------------
881 // From linux-2.6.35.5/include/asm-generic/siginfo.h
882 //----------------------------------------------------------------------
883 #define HAVE_ARCH_SIGINFO_T
885 typedef union vki_sigval
{
887 void __user
*sival_ptr
;
890 #ifndef __VKI_ARCH_SI_PREAMBLE_SIZE
891 #define __VKI_ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
894 #define VKI_SI_MAX_SIZE 128
896 #ifndef VKI_SI_PAD_SIZE
897 #define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
900 #ifndef __VKI_ARCH_SI_UID_T
901 #define __VKI_ARCH_SI_UID_T vki_uid_t
904 #ifndef __VKI_ARCH_SI_BAND_T
905 #define __VKI_ARCH_SI_BAND_T long
908 typedef struct vki_siginfo
{
912 int __pad0
[VKI_SI_MAX_SIZE
/ sizeof(int) - VKI_SI_PAD_SIZE
- 3];
915 int _pad
[VKI_SI_PAD_SIZE
];
919 vki_pid_t _pid
; /* sender's pid */
920 __VKI_ARCH_SI_UID_T _uid
; /* sender's uid */
923 /* POSIX.1b timers */
925 vki_timer_t _tid
; /* timer id */
926 int _overrun
; /* overrun count */
927 char _pad
[sizeof( __VKI_ARCH_SI_UID_T
) - sizeof(int)];
928 vki_sigval_t _sigval
; /* same as below */
929 int _sys_private
; /* not to be passed to user */
932 /* POSIX.1b signals */
934 vki_pid_t _pid
; /* sender's pid */
935 __VKI_ARCH_SI_UID_T _uid
; /* sender's uid */
936 vki_sigval_t _sigval
;
941 vki_pid_t _pid
; /* which child */
942 __VKI_ARCH_SI_UID_T _uid
; /* sender's uid */
943 int _status
; /* exit code */
950 vki_pid_t _pid
; /* which child */
952 int _status
; /* exit code */
956 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
958 void __user
*_addr
; /* faulting insn/memory ref. */
959 #ifdef __ARCH_SI_TRAPNO
960 int _trapno
; /* TRAP # which caused the signal */
964 /* SIGPOLL, SIGXFSZ (To do ...) */
966 __VKI_ARCH_SI_BAND_T _band
; /* POLL_IN, POLL_OUT, POLL_MSG */
972 //----------------------------------------------------------------------
973 // From linux-2.6.35.5/include/asm/break.h
974 //----------------------------------------------------------------------
975 #define VKI_BRK_OVERFLOW 6 /* Overflow check */
976 #define VKI_BRK_DIVZERO 7 /* Divide by zero check */
978 //----------------------------------------------------------------------
979 // From linux-3.6.35.5/arch/mips/include/socket.h
980 //----------------------------------------------------------------------
983 // [[others omitted]]
985 #define ARCH_HAS_SOCKET_TYPES 1
987 //----------------------------------------------------------------------
988 // From linux-3.7.0/arch/mips/include/uapi/asm/errno.h
989 //----------------------------------------------------------------------
991 #define VKI_ELIBBAD 84 /* Accessing a corrupted shared library */
992 #define VKI_EOPNOTSUPP 122 /* Operation not supported on transport
995 //----------------------------------------------------------------------
996 // From linux-3.13.0/include/asm/errno.h
997 //----------------------------------------------------------------------
999 #define VKI_ENOSYS 89 /* Function not implemented */
1000 #define VKI_EOVERFLOW 79 /* Value too large for defined data type */
1002 //----------------------------------------------------------------------
1003 // From linux-3.14.0/arch/mips/include/asm/elf.h
1004 //----------------------------------------------------------------------
1006 #define VKI_EF_MIPS_FP64 0x00000200
1008 //----------------------------------------------------------------------
1009 // From linux-4.1.0/arch/mips/include/asm/elf.h
1010 //----------------------------------------------------------------------
1012 #define VKI_MIPS_ABI_FP_UNKNOWN (-1)
1013 #define VKI_MIPS_ABI_FP_ANY 0 /* FP ABI doesn't matter */
1014 #define VKI_MIPS_ABI_FP_DOUBLE 1 /* -mdouble-float */
1015 #define VKI_MIPS_ABI_FP_SINGLE 2 /* -msingle-float */
1016 #define VKI_MIPS_ABI_FP_SOFT 3 /* -msoft-float */
1017 #define VKI_MIPS_ABI_FP_OLD_64 4 /* -mips32r2 -mfp64 */
1018 #define VKI_MIPS_ABI_FP_XX 5 /* -mfpxx */
1019 #define VKI_MIPS_ABI_FP_64 6 /* -mips32r2 -mfp64 */
1020 #define VKI_MIPS_ABI_FP_64A 7 /* -mips32r2 -mfp64 -mno-odd-spreg */
1022 struct vki_arch_elf_state
{
1025 int overall_fp_mode
;
1028 #define VKI_INIT_ARCH_ELF_STATE { \
1029 .fp_abi = VKI_MIPS_ABI_FP_UNKNOWN, \
1030 .interp_fp_abi = VKI_MIPS_ABI_FP_UNKNOWN, \
1031 .overall_fp_mode = -1, \
1034 struct vki_mips_elf_abiflags_v0
{
1035 vki_u16 version
; /* Version of flags structure */
1036 vki_u8 isa_level
; /* The level of the ISA: 1-5, 32, 64 */
1037 vki_u8 isa_rev
; /* The revision of ISA: 0 for MIPS V and below,
1039 vki_u8 gpr_size
; /* The size of general purpose registers */
1040 vki_u8 cpr1_size
; /* The size of co-processor 1 registers */
1041 vki_u8 cpr2_size
; /* The size of co-processor 2 registers */
1042 vki_u8 fp_abi
; /* The floating-point ABI */
1043 vki_u32 isa_ext
; /* Mask of processor-specific extensions */
1044 vki_u32 ases
; /* Mask of ASEs used */
1045 vki_u32 flags1
; /* Mask of general flags */
1049 #define VKI_PT_MIPS_ABIFLAGS 0x70000003
1051 //----------------------------------------------------------------------
1052 // From linux-4.1.0/arch/mips/kernel/elf.c
1053 //----------------------------------------------------------------------
1061 #endif // __VKI_MIPS32_LINUX_H
1063 /*--------------------------------------------------------------------*/
1064 /*--- end vki-mips32-linux.h ---*/
1065 /*--------------------------------------------------------------------*/