1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- x86/Linux-specific kernel interface.         vki-x86-linux.h ---*/
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This file is part of Valgrind, a dynamic binary instrumentation
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   framework.
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   Copyright (C) 2000-2013 Julian Seward
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      jseward@acm.org
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This program is free software; you can redistribute it and/or
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   modify it under the terms of the GNU General Public License as
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   published by the Free Software Foundation; either version 2 of the
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   License, or (at your option) any later version.
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This program is distributed in the hope that it will be useful, but
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   WITHOUT ANY WARRANTY; without even the implied warranty of
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   General Public License for more details.
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   You should have received a copy of the GNU General Public License
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   along with this program; if not, write to the Free Software
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   02111-1307, USA.
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   The GNU General Public License is contained in the file COPYING.
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __VKI_X86_LINUX_H
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define __VKI_X86_LINUX_H
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// x86 is little-endian.
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_LITTLE_ENDIAN  1
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/types.h
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char __vki_u8;
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ short __vki_s16;
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short __vki_u16;
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ int __vki_s32;
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int __vki_u32;
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ long long __vki_s64;
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long long __vki_u64;
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short vki_u16;
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int vki_u32;
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/page.h
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* PAGE_SHIFT determines the page size */
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PAGE_SHIFT	12
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PAGE_SIZE	(1UL << VKI_PAGE_SHIFT)
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAX_PAGE_SHIFT	VKI_PAGE_SHIFT
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAX_PAGE_SIZE	VKI_PAGE_SIZE
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.35.4/arch/x86/include/asm/shmparam.h
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMLBA  VKI_PAGE_SIZE
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/signal.h
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MINSIGSTKSZ	2048
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_BLOCK          0	/* for blocking signals */
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_UNBLOCK        1	/* for unblocking signals */
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_SETMASK        2	/* for setting the signal mask */
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Type of a signal handler.  */
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void __vki_signalfn_t(int);
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_signalfn_t __user *__vki_sighandler_t;
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void __vki_restorefn_t(void);
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_restorefn_t __user *__vki_sigrestore_t;
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_DFL	((__vki_sighandler_t)0)	/* default signal handling */
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_IGN	((__vki_sighandler_t)1)	/* ignore signal */
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG	64
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG_BPW	32
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG_WORDS	(_VKI_NSIG / _VKI_NSIG_BPW)
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long vki_old_sigset_t;		/* at least 32 bits */
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct {
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long sig[_VKI_NSIG_WORDS];
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} vki_sigset_t;
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGHUP		 1
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGINT		 2
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGQUIT		 3
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGILL		 4
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTRAP		 5
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGABRT		 6
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_SIGIOT		 6
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGBUS		 7
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGFPE		 8
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGKILL		 9
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUSR1		10
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSEGV		11
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUSR2		12
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPIPE		13
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGALRM		14
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTERM		15
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSTKFLT		16
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGCHLD		17
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGCONT		18
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSTOP		19
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTSTP		20
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTTIN		21
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTTOU		22
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGURG		23
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGXCPU		24
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGXFSZ		25
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGVTALRM		26
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPROF		27
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGWINCH		28
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGIO		29
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPWR		30
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSYS		31
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define	VKI_SIGUNUSED		31
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* These should not be considered constants from userland.  */
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGRTMIN	32
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// [[This was (_NSIG-1) in 2.4.X... not sure if it matters.]]
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGRTMAX	_VKI_NSIG
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOCLDSTOP	0x00000001u
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOCLDWAIT	0x00000002u
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_SIGINFO		0x00000004u
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_ONSTACK		0x08000000u
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESTART		0x10000000u
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NODEFER		0x40000000u
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESETHAND	0x80000000u
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOMASK		VKI_SA_NODEFER
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_ONESHOT		VKI_SA_RESETHAND
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_SA_INTERRUPT	0x20000000 /* dummy -- ignored */
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESTORER		0x04000000
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SS_ONSTACK	1
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SS_DISABLE	2
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* These are 'legacy' sigactions in which the size of sa_mask is fixed
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   (cannot be expanded at any future point) because it is sandwiched
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   between two other fields.
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   (there is identical kludgery in vki-ppc32-linux.h) */
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_old_sigaction {
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // [[Nb: a 'k' prefix is added to "sa_handler" because
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // bits/sigaction.h (which gets dragged in somehow via signal.h)
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // #defines it as something else.  Since that is done for glibc's
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // purposes, which we don't care about here, we use our own name.]]
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        __vki_sighandler_t ksa_handler;
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        vki_old_sigset_t sa_mask;
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        unsigned long sa_flags;
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        __vki_sigrestore_t sa_restorer;
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_sigaction_base {
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // [[See comment about extra 'k' above]]
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_sighandler_t ksa_handler;
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long sa_flags;
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_sigrestore_t sa_restorer;
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_sigset_t sa_mask;		/* mask last for extensibility */
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* On Linux we use the same type for passing sigactions to
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   and from the kernel.  Hence: */
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef  struct vki_sigaction_base  vki_sigaction_toK_t;
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_sigaltstack {
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	void __user *ss_sp;
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	int ss_flags;
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_size_t ss_size;
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} vki_stack_t;
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/sigcontext.h
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _vki_fpreg {
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short significand[4];
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short exponent;
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _vki_fpxreg {
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short significand[4];
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short exponent;
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short padding[3];
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _vki_xmmreg {
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long element[4];
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _vki_fpstate {
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	/* Regular FPU environment */
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long 	cw;
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	sw;
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	tag;
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	ipoff;
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	cssel;
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	dataoff;
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	datasel;
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct _vki_fpreg	_st[8];
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	status;
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	magic;		/* 0xffff = regular FPU data only */
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	/* FXSR FPU environment */
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	_fxsr_env[6];	/* FXSR FPU env is ignored */
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	mxcsr;
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	reserved;
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct _vki_fpxreg	_fxsr_st[8];	/* FXSR FPU reg data is ignored */
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct _vki_xmmreg	_xmm[8];
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	padding[56];
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_sigcontext {
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short gs, __gsh;
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short fs, __fsh;
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short es, __esh;
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ds, __dsh;
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long edi;
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long esi;
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long ebp;
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long esp;
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long ebx;
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long edx;
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long ecx;
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long eax;
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long trapno;
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long err;
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long eip;
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short cs, __csh;
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long eflags;
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long esp_at_signal;
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ss, __ssh;
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct _vki_fpstate __user * fpstate;
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long oldmask;
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long cr2;
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/mman.h
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_NONE	0x0		/* No page permissions */
264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_READ	0x1		/* page can be read */
265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_WRITE	0x2		/* page can be written */
266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_EXEC	0x4		/* page can be executed */
267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_SHARED	0x01		/* Share changes */
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_PRIVATE	0x02		/* Changes are private */
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_MAP_TYPE	0x0f		/* Mask for type of mapping */
273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_FIXED	0x10		/* Interpret addr exactly */
274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_ANONYMOUS	0x20	/* don't use a file */
275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_NORESERVE	0x4000		/* don't check for reservations */
276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/fcntl.h
279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
281436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_ACCMODE	     03
282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_RDONLY	     00
283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_WRONLY	     01
284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_RDWR	     02
285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_CREAT	   0100	/* not fcntl */
286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_EXCL	   0200	/* not fcntl */
287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_TRUNC	  01000	/* not fcntl */
288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_APPEND	  02000
289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_NONBLOCK	  04000
290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_LARGEFILE	0100000
291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_AT_FDCWD            -100
293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_DUPFD		0	/* dup */
295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETFD		1	/* get close_on_exec */
296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETFD		2	/* set/clear close_on_exec */
297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETFL		3	/* get file->f_flags */
298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETFL		4	/* set file->f_flags */
299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETLK		5
300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLK		6
301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLKW		7
302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETOWN		8	/*  for sockets. */
304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETOWN		9	/*  for sockets. */
305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETSIG		10	/*  for sockets. */
306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETSIG		11	/*  for sockets. */
307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETLK64		12	/*  using 'struct flock64' */
309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLK64		13
310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLKW64		14
311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
312663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_SETOWN_EX		15
313663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_GETOWN_EX		16
314663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
315663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_OWNER_TID		0
316663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_OWNER_PID		1
317663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_OWNER_PGRP	2
318663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
319663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct vki_f_owner_ex {
320663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	int	type;
321663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	__vki_kernel_pid_t	pid;
322663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
323663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* for F_[GET|SET]FL */
325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FD_CLOEXEC	1	/* actually anything with low bit set goes */
326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_LINUX_SPECIFIC_BASE	1024
328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/resource.h
331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_DATA		2	/* max data size */
334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_STACK	3	/* max stack size */
335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_CORE		4	/* max core file size */
336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_NOFILE	7	/* max number of open files */
337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/socket.h
340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SOL_SOCKET	1
343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SO_TYPE	3
345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
346436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SO_ATTACH_FILTER	26
347436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/sockios.h
350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCSPGRP		0x8902
353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGPGRP		0x8904
354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGSTAMP		0x8906		/* Get stamp (timeval) */
355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGSTAMPNS	0x8907		/* Get stamp (timespec) */
356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/stat.h
359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_stat {
362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_dev;
363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_ino;
364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short st_mode;
365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short st_nlink;
366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short st_uid;
367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short st_gid;
368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_rdev;
369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_size;
370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_blksize;
371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_blocks;
372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_atime;
373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_atime_nsec;
374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_mtime;
375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_mtime_nsec;
376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_ctime;
377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_ctime_nsec;
378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused4;
379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused5;
380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_stat64 {
383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long long	st_dev;
384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char	__pad0[4];
385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define STAT64_HAS_BROKEN_ST_INO	1
387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__st_ino;
388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_mode;
390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_nlink;
391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_uid;
393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_gid;
394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long long	st_rdev;
396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char	__pad3[4];
397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long long	st_size;
399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_blksize;
400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_blocks;	/* Number 512-byte blocks allocated. */
402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__pad4;		/* future possible st_blocks high bits */
403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_atime;
405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_atime_nsec;
406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_mtime;
408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_mtime_nsec;
409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_ctime;
411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_ctime_nsec;
412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long long	st_ino;
414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/statfs.h
418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// [[Nb: asm-i386/statfs.h just #include asm-generic/statfs.h directly]]
421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_statfs {
422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_type;
423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_bsize;
424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_blocks;
425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_bfree;
426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_bavail;
427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_files;
428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_ffree;
429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_fsid_t f_fsid;
430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_namelen;
431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_frsize;
432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_spare[5];
433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/termios.h
437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_winsize {
440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_row;
441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_col;
442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_xpixel;
443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_ypixel;
444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_NCC 8
447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_termio {
448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_iflag;		/* input mode flags */
449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_oflag;		/* output mode flags */
450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_cflag;		/* control mode flags */
451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_lflag;		/* local mode flags */
452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char c_line;		/* line discipline */
453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char c_cc[VKI_NCC];	/* control characters */
454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/termbits.h
459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char   vki_cc_t;
462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int    vki_tcflag_t;
463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_NCCS 19
465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_termios {
466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_iflag;		/* input mode flags */
467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_oflag;		/* output mode flags */
468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_cflag;		/* control mode flags */
469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_lflag;		/* local mode flags */
470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_cc_t c_line;		/* line discipline */
471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_cc_t c_cc[VKI_NCCS];	/* control characters */
472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ioctl.h
476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRBITS		8
479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPEBITS	8
480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZEBITS	14
481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRBITS	2
482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRMASK		((1 << _VKI_IOC_NRBITS)-1)
484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPEMASK	((1 << _VKI_IOC_TYPEBITS)-1)
485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZEMASK	((1 << _VKI_IOC_SIZEBITS)-1)
486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRMASK	((1 << _VKI_IOC_DIRBITS)-1)
487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRSHIFT	0
489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPESHIFT	(_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZESHIFT	(_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRSHIFT	(_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NONE	0U
494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_WRITE	1U
495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_READ	2U
496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC(dir,type,nr,size) \
498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	(((dir)  << _VKI_IOC_DIRSHIFT) | \
499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((type) << _VKI_IOC_TYPESHIFT) | \
500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((nr)   << _VKI_IOC_NRSHIFT) | \
501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((size) << _VKI_IOC_SIZESHIFT))
502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* used to create numbers */
504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IO(type,nr)	_VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOW(type,nr,size)	_VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOWR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* used to decode ioctl numbers.. */
510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIR(nr)	(((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPE(nr)	(((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NR(nr)		(((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZE(nr)	(((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ioctls.h
517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCGETS	0x5401
520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETS	0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */
521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETSW	0x5403
522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETSF	0x5404
523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCGETA	0x5405
524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETA	0x5406
525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETAW	0x5407
526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETAF	0x5408
527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSBRK	0x5409
528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCXONC	0x540A
529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCFLSH	0x540B
530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSCTTY	0x540E
531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGPGRP	0x540F
532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSPGRP	0x5410
533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCOUTQ	0x5411
534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGWINSZ	0x5413
535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSWINSZ	0x5414
536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMGET	0x5415
537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMBIS	0x5416
538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMBIC	0x5417
539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMSET	0x5418
540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIONREAD	0x541B
541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCLINUX	0x541C
542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIONBIO	0x5421
543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSBRKP	0x5425	/* Needed for POSIX tcsendbreak() */
544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGPTN	_VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSPTLCK	_VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
547436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIONCLEX    0x5450
548436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIOCLEX     0x5451
549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIOASYNC	0x5452
550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/poll.h
556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* These are specified by iBCS2 */
559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_POLLIN		0x0001
560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_pollfd {
562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	int fd;
563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	short events;
564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	short revents;
565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/user.h
569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_i387_struct {
572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	cwd;
573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	swd;
574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	twd;
575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	fip;
576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	fcs;
577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	foo;
578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	fos;
579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	st_space[20];	/* 8*10 bytes for each FP-reg = 80 bytes */
580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_fxsr_struct {
583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	cwd;
584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	swd;
585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	twd;
586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	fop;
587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	fip;
588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	fcs;
589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	foo;
590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	fos;
591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	mxcsr;
592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	reserved;
593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	st_space[32];	/* 8*16 bytes for each FP-reg = 128 bytes */
594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	xmm_space[32];	/* 8*16 bytes for each XMM-reg = 128 bytes */
595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long	padding[56];
596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * This is the old layout of "struct pt_regs", and
600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * is still the layout used by user mode (the new
601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * pt_regs doesn't have all registers as the kernel
602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * doesn't use the extra segment registers)
603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_regs_struct {
605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long ebx, ecx, edx, esi, edi, ebp, eax;
606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ds, __ds, es, __es;
607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short fs, __fs, gs, __gs;
608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long orig_eax, eip;
609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short cs, __cs;
610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long eflags, esp;
611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ss, __ss;
612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/elf.h
616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long vki_elf_greg_t;
619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_user_i387_struct vki_elf_fpregset_t;
624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_user_fxsr_struct vki_elf_fpxregset_t;
625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_AT_SYSINFO		32
627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ucontext.h
630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ucontext {
633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		uc_flags;
634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ucontext    *uc_link;
635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_stack_t		uc_stack;
636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_sigcontext	uc_mcontext;
637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_sigset_t		uc_sigmask;	/* mask last for extensibility */
638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/segment.h
642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_ENTRIES	3
645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_MIN	6
646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_MAX 	(VKI_GDT_ENTRY_TLS_MIN + VKI_GDT_ENTRY_TLS_ENTRIES - 1)
647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ldt.h
650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* [[Nb: This is the structure passed to the modify_ldt syscall.  Just so as
653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   to confuse and annoy everyone, this is _not_ the same as an
654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VgLdtEntry and has to be translated into such.  The logic for doing
655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   so, in vg_ldt.c, is copied from the kernel sources.]] */
656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_desc {
657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  entry_number;
658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long base_addr;
659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  limit;
660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  seg_32bit:1;
661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  contents:2;
662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  read_exec_only:1;
663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  limit_in_pages:1;
664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  seg_not_present:1;
665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  useable:1;
666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // [[Nb: this field is not in the kernel sources, but it has always
667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // been in the Valgrind sources so I will keep it there in case it's
668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // important... this is an x86-defined data structure so who
669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // knows;  maybe it's important to set this field to zero at some
670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // point.  --njn]]
671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  reserved:25;
672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// [[Nb: for our convenience within Valgrind, use a more specific name]]
675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_user_desc vki_modify_ldt_t;
676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ipcbuf.h
679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ipc64_perm
682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_key_t	key;
684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_uid32_t	uid;
685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_gid32_t	gid;
686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_uid32_t	cuid;
687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_gid32_t	cgid;
688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_mode_t	mode;
689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		__pad1;
690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		seq;
691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		__pad2;
692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused1;
693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused2;
694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/sembuf.h
698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_semid64_ds {
701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm sem_perm;		/* permissions .. see ipc.h */
702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	sem_otime;		/* last semop time */
703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused1;
704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	sem_ctime;		/* last change time */
705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused2;
706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	sem_nsems;		/* no. of semaphores in array */
707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused3;
708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused4;
709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/msgbuf.h
713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_msqid64_ds {
716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm msg_perm;
717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_stime;	/* last msgsnd time */
718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused1;
719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_rtime;	/* last msgrcv time */
720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused2;
721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_ctime;	/* last change time */
722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused3;
723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_cbytes;	/* current number of bytes on queue */
724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_qnum;	/* number of messages in queue */
725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_qbytes;	/* max number of bytes on queue */
726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t msg_lspid;	/* pid of last msgsnd */
727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t msg_lrpid;	/* last receive pid */
728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused4;
729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused5;
730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ipc.h
734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ipc_kludge {
737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_msgbuf __user *msgp;
738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long msgtyp;
739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMOP		 1
742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMGET		 2
743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMCTL		 3
744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMTIMEDOP	 	 4
745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGSND		11
746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGRCV		12
747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGGET		13
748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGCTL		14
749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMAT		21
750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMDT		22
751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMGET		23
752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMCTL		24
753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/shmbuf.h
757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_shmid64_ds {
760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm	shm_perm;	/* operation perms */
761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_size_t		shm_segsz;	/* size of segment (bytes) */
762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_atime;	/* last attach time */
763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused1;
764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_dtime;	/* last detach time */
765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused2;
766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_ctime;	/* last change time */
767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused3;
768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t	shm_cpid;	/* pid of creator */
769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t	shm_lpid;	/* pid of last operator */
770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		shm_nattch;	/* no. of current attaches */
771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused4;
772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused5;
773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_shminfo64 {
776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmax;
777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmin;
778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmni;
779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmseg;
780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmall;
781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused1;
782ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused2;
783ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused3;
784ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused4;
785ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
786ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
787ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
788ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// DRM ioctls
789ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
790ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
791ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// jrs 20050207: where did all this stuff come from?  Is it really
792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// i386 specific, or should it go into the linux-generic category?
793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//struct vki_drm_buf_pub {
794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	Int		  idx;	       /**< Index into the master buffer list */
795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	Int		  total;       /**< Buffer size */
796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	Int		  used;	       /**< Amount of buffer in use (for DMA) */
797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	void	  __user *address;     /**< Address of buffer */
798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//};
799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//
800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//struct vki_drm_buf_map {
801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	Int	      count;		/**< Length of the buffer list */
802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	void	      __user *virtual;	/**< Mmap'd area in user-virtual */
803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	struct vki_drm_buf_pub __user *list;	/**< Buffer information */
804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//};
805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//
806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown///* We need to pay attention to this, because it mmaps memory */
807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_DRM_IOCTL_MAP_BUFS		_VKI_IOWR('d', 0x19, struct vki_drm_buf_map)
808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-i386/ptrace.h
811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_GETREGS            12
814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_SETREGS            13
815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_GETFPREGS          14
816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_SETFPREGS          15
817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_GETFPXREGS         18
818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_SETFPXREGS         19
819436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PTRACE_GET_THREAD_AREA    25
820436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PTRACE_SET_THREAD_AREA    26
821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.15.4/include/asm-i386/vm86.h
824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_PLUS_INSTALL_CHECK	0
827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_ENTER			1
828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_ENTER_NO_BYPASS	2
829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define	VKI_VM86_REQUEST_IRQ		3
830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_FREE_IRQ		4
831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_GET_IRQ_BITS		5
832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_GET_AND_RESET_IRQ	6
833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_vm86_regs {
835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * normal regs, with special meaning for the segment descriptors..
837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long ebx;
839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long ecx;
840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long edx;
841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long esi;
842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long edi;
843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long ebp;
844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long eax;
845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long __null_ds;
846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long __null_es;
847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long __null_fs;
848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long __null_gs;
849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long orig_eax;
850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long eip;
851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short cs, __csh;
852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long eflags;
853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long esp;
854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ss, __ssh;
855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * these are specific to v86 mode:
857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short es, __esh;
859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ds, __dsh;
860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short fs, __fsh;
861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short gs, __gsh;
862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_revectored_struct {
865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long __map[8];			/* 256 bits */
866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_vm86_struct {
869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_vm86_regs regs;
870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long flags;
871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long screen_bitmap;
872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long cpu_type;
873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_revectored_struct int_revectored;
874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_revectored_struct int21_revectored;
875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_vm86plus_info_struct {
878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long force_return_for_pic:1;
879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long vm86dbg_active:1;       /* for debugger */
880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long vm86dbg_TFpendig:1;     /* for debugger */
881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long unused:28;
882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long is_vm86pus:1;	      /* for vm86 internal use */
883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char vm86dbg_intxxtab[32];   /* for debugger */
884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_vm86plus_struct {
887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_vm86_regs regs;
888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long flags;
889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long screen_bitmap;
890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long cpu_type;
891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_revectored_struct int_revectored;
892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_revectored_struct int21_revectored;
893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_vm86plus_info_struct vm86plus;
894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
897436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-2.6.8.1/include/asm-generic/errno.h
898436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
899436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
900436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define	VKI_ENOSYS       38  /* Function not implemented */
901436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define	VKI_EOVERFLOW    75  /* Value too large for defined data type */
902436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
903436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// And that's it!
905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // __VKI_X86_LINUX_H
908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- end                                                          ---*/
911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
912