1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- arm/Linux-specific kernel interface.         vki-arm-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
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Copyright (C) 2000-2011 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_ARM_LINUX_H
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define __VKI_ARM_LINUX_H
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// arm is little-endian.
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_LITTLE_ENDIAN  1
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// The various comments below indicating i386-ness should be regarded
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// with great skepticism -- they are quite possibly wrong.  But see
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// also bug 269079 comment 0.
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/types.h
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char __vki_u8;
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ short __vki_s16;
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short __vki_u16;
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ int __vki_s32;
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int __vki_u32;
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ long long __vki_s64;
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long long __vki_u64;
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short vki_u16;
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int vki_u32;
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/page.h
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* PAGE_SHIFT determines the page size */
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PAGE_SHIFT	12
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PAGE_SIZE	(1UL << VKI_PAGE_SHIFT)
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAX_PAGE_SHIFT	VKI_PAGE_SHIFT
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAX_PAGE_SIZE	VKI_PAGE_SIZE
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.35.4/arch/arm/include/asm/shmparam.h
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMLBA  (4 * VKI_PAGE_SIZE)
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/signal.h
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MINSIGSTKSZ	2048
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_BLOCK          0	/* for blocking signals */
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_UNBLOCK        1	/* for unblocking signals */
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_SETMASK        2	/* for setting the signal mask */
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Type of a signal handler.  */
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void __vki_signalfn_t(int);
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_signalfn_t __user *__vki_sighandler_t;
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void __vki_restorefn_t(void);
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_restorefn_t __user *__vki_sigrestore_t;
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_DFL	((__vki_sighandler_t)0)	/* default signal handling */
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_IGN	((__vki_sighandler_t)1)	/* ignore signal */
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG	64
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG_BPW	32
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG_WORDS	(_VKI_NSIG / _VKI_NSIG_BPW)
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long vki_old_sigset_t;		/* at least 32 bits */
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct {
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long sig[_VKI_NSIG_WORDS];
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} vki_sigset_t;
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGHUP		 1
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGINT		 2
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGQUIT		 3
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGILL		 4
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTRAP		 5
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGABRT		 6
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_SIGIOT		 6
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGBUS		 7
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGFPE		 8
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGKILL		 9
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUSR1		10
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSEGV		11
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUSR2		12
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPIPE		13
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGALRM		14
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTERM		15
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSTKFLT		16
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGCHLD		17
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGCONT		18
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSTOP		19
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTSTP		20
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTTIN		21
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTTOU		22
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGURG		23
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGXCPU		24
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGXFSZ		25
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGVTALRM		26
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPROF		27
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGWINCH		28
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGIO		29
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPWR		30
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSYS		31
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define	VKI_SIGUNUSED		31
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* These should not be considered constants from userland.  */
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGRTMIN	32
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// [[This was (_NSIG-1) in 2.4.X... not sure if it matters.]]
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGRTMAX	_VKI_NSIG
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOCLDSTOP	0x00000001u
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOCLDWAIT	0x00000002u
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_SIGINFO		0x00000004u
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_ONSTACK		0x08000000u
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESTART		0x10000000u
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NODEFER		0x40000000u
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESETHAND	0x80000000u
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOMASK		VKI_SA_NODEFER
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_ONESHOT		VKI_SA_RESETHAND
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_SA_INTERRUPT	0x20000000 /* dummy -- ignored */
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESTORER		0x04000000
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SS_ONSTACK	1
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SS_DISABLE	2
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
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_sigcontext {
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long trap_no;
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long error_code;
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long oldmask;
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r0;
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r1;
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r2;
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r3;
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r4;
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r5;
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r6;
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r7;
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r8;
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r9;
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_r10;
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_fp;
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_ip;
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_sp;
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_lr;
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_pc;
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long arm_cpsr;
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		unsigned long fault_address;
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/mman.h
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_NONE	0x0		/* No page permissions */
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_READ	0x1		/* page can be read */
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_WRITE	0x2		/* page can be written */
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_EXEC	0x4		/* page can be executed */
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_SHARED	0x01		/* Share changes */
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_PRIVATE	0x02		/* Changes are private */
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_MAP_TYPE	0x0f		/* Mask for type of mapping */
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_FIXED	0x10		/* Interpret addr exactly */
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_ANONYMOUS	0x20	/* don't use a file */
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_NORESERVE	0x4000		/* don't check for reservations */
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/fcntl.h
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_RDONLY	     00
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_WRONLY	     01
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_RDWR	     02
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_CREAT	   0100	/* not fcntl */
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_EXCL	   0200	/* not fcntl */
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_TRUNC	  01000	/* not fcntl */
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_APPEND	  02000
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_NONBLOCK	  04000
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_LARGEFILE	0100000
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_AT_FDCWD            -100
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_DUPFD		0	/* dup */
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETFD		1	/* get close_on_exec */
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETFD		2	/* set/clear close_on_exec */
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETFL		3	/* get file->f_flags */
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETFL		4	/* set file->f_flags */
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETLK		5
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLK		6
262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLKW		7
263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETOWN		8	/*  for sockets. */
265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETOWN		9	/*  for sockets. */
266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETSIG		10	/*  for sockets. */
267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETSIG		11	/*  for sockets. */
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETLK64		12	/*  using 'struct flock64' */
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLK64		13
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLKW64		14
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* for F_[GET|SET]FL */
274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FD_CLOEXEC	1	/* actually anything with low bit set goes */
275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_LINUX_SPECIFIC_BASE	1024
277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/resource.h
280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_DATA		2	/* max data size */
283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_STACK	3	/* max stack size */
284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_CORE		4	/* max core file size */
285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_NOFILE	7	/* max number of open files */
286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/socket.h
289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SOL_SOCKET	1
292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SO_TYPE	3
294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/sockios.h
297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCSPGRP           0x8902
300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGPGRP           0x8904
301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGSTAMP          0x8906      /* Get stamp (timeval) */
302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGSTAMPNS        0x8907      /* Get stamp (timespec) */
303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/stat.h
306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_stat {
309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_dev;
310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_ino;
311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short st_mode;
312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short st_nlink;
313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short st_uid;
314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short st_gid;
315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_rdev;
316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_size;
317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_blksize;
318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_blocks;
319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_atime;
320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_atime_nsec;
321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_mtime;
322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_mtime_nsec;
323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_ctime;
324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  st_ctime_nsec;
325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused4;
326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused5;
327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_stat64 {
330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long long	st_dev;
331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char	__pad0[4];
332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define STAT64_HAS_BROKEN_ST_INO	1
334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__st_ino;
335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_mode;
337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_nlink;
338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_uid;
340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_gid;
341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long long	st_rdev;
343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char	__pad3[4];
344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long long	st_size;
346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_blksize;
347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_blocks;	/* Number 512-byte blocks allocated. */
349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__pad4;		/* future possible st_blocks high bits */
350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_atime;
352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_atime_nsec;
353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_mtime;
355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_mtime_nsec;
356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_ctime;
358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_ctime_nsec;
359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long long	st_ino;
361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/statfs.h
365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// [[Nb: asm-i386/statfs.h just #include asm-generic/statfs.h directly]]
368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_statfs {
369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_type;
370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_bsize;
371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_blocks;
372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_bfree;
373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_bavail;
374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_files;
375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_ffree;
376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_fsid_t f_fsid;
377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_namelen;
378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_frsize;
379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32 f_spare[5];
380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/termios.h
384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_winsize {
387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_row;
388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_col;
389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_xpixel;
390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_ypixel;
391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_NCC 8
394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_termio {
395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_iflag;		/* input mode flags */
396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_oflag;		/* output mode flags */
397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_cflag;		/* control mode flags */
398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_lflag;		/* local mode flags */
399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char c_line;		/* line discipline */
400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char c_cc[VKI_NCC];	/* control characters */
401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/termbits.h
406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char   vki_cc_t;
409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int    vki_tcflag_t;
410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_NCCS 19
412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_termios {
413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_iflag;		/* input mode flags */
414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_oflag;		/* output mode flags */
415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_cflag;		/* control mode flags */
416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_lflag;		/* local mode flags */
417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_cc_t c_line;		/* line discipline */
418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_cc_t c_cc[VKI_NCCS];	/* control characters */
419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ioctl.h
423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRBITS		8
426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPEBITS	8
427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZEBITS	14
428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRBITS	2
429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRMASK		((1 << _VKI_IOC_NRBITS)-1)
431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPEMASK	((1 << _VKI_IOC_TYPEBITS)-1)
432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZEMASK	((1 << _VKI_IOC_SIZEBITS)-1)
433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRMASK	((1 << _VKI_IOC_DIRBITS)-1)
434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRSHIFT	0
436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPESHIFT	(_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZESHIFT	(_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRSHIFT	(_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NONE	0U
441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_WRITE	1U
442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_READ	2U
443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC(dir,type,nr,size) \
445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	(((dir)  << _VKI_IOC_DIRSHIFT) | \
446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((type) << _VKI_IOC_TYPESHIFT) | \
447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((nr)   << _VKI_IOC_NRSHIFT) | \
448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((size) << _VKI_IOC_SIZESHIFT))
449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* used to create numbers */
451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IO(type,nr)	_VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOW(type,nr,size)	_VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOWR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* used to decode ioctl numbers.. */
457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIR(nr)	(((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPE(nr)	(((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NR(nr)		(((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZE(nr)	(((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ioctls.h
464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCGETS	0x5401
467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETS	0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */
468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETSW	0x5403
469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETSF	0x5404
470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCGETA	0x5405
471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETA	0x5406
472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETAW	0x5407
473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETAF	0x5408
474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSBRK	0x5409
475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCXONC	0x540A
476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCFLSH	0x540B
477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSCTTY	0x540E
478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGPGRP	0x540F
479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSPGRP	0x5410
480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCOUTQ	0x5411
481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGWINSZ	0x5413
482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSWINSZ	0x5414
483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMGET	0x5415
484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMBIS	0x5416
485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMBIC	0x5417
486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMSET	0x5418
487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIONREAD	0x541B
488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCLINUX	0x541C
489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIONBIO	0x5421
490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSBRKP	0x5425	/* Needed for POSIX tcsendbreak() */
491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGPTN	_VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSPTLCK	_VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIOASYNC	0x5452
495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov// From linux-2.6.39-rc2/arch/arm/include/asm/ioctls.h
501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//----------------------------------------------------------------------
502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_FIOQSIZE 0x545E
504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov//----------------------------------------------------------------------
506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From asm-generic/poll.h
507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* These are specified by iBCS2 */
510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_POLLIN		0x0001
511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_pollfd {
513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	int fd;
514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	short events;
515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	short revents;
516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/user.h
520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct vki_user_fp {
523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	struct vki_fp_reg {
524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		unsigned int sign1:1;
525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		unsigned int unused:15;
526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		unsigned int sign2:1;
527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		unsigned int exponent:14;
528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		unsigned int j:1;
529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		unsigned int mantissa1:31;
530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		unsigned int mantissa0:32;
531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	} fpregs[8];
532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int fpsr:32;
533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int fpcr:32;
534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned char ftype[8];
535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int init_flag;
536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct vki_user_vfp {
539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned long long fpregs[32];
540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned long fpscr;
541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_IWMMXT_SIZE 0x98
544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct vki_iwmmxt_struct {
546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int save[VKI_IWMMXT_SIZE / sizeof(unsigned int)];
547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct vki_crunch_state {
550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int    mvdx[16][2];
551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int    mvax[4][3];
552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int    dspsc[2];
553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov};
554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_CRUNCH_SIZE sizeof(struct vki_crunch_state)
556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_regs_struct {
558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown    long uregs[18];
559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_cpsr	uregs[16]
561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_pc		uregs[15]
562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_lr		uregs[14]
563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_sp		uregs[13]
564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_ip		uregs[12]
565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_fp		uregs[11]
566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r10		uregs[10]
567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r9		uregs[9]
568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r8		uregs[8]
569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r7		uregs[7]
570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r6		uregs[6]
571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r5		uregs[5]
572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r4		uregs[4]
573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r3		uregs[3]
574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r2		uregs[2]
575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r1		uregs[1]
576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_r0		uregs[0]
577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define ARM_ORIG_r0	uregs[17]
578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/elf.h
580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long vki_elf_greg_t;
583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovtypedef struct vki_user_fp vki_elf_fpregset_t;
588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_AT_SYSINFO		32
590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ucontext.h
593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ucontext {
596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		uc_flags;
597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ucontext    *uc_link;
598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_stack_t		uc_stack;
599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_sigcontext	uc_mcontext;
600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_sigset_t		uc_sigmask;	/* mask last for extensibility */
6011b891657a2208341cc71c68ae16eada0bee46d91Jeff Brown	int               __unused1[32 - (sizeof (vki_sigset_t) / sizeof (int))];
602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long     uc_regspace[128] __attribute__((__aligned__(8)));
603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/segment.h
608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_ENTRIES	3
611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_MIN	6
612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_MAX 	(VKI_GDT_ENTRY_TLS_MIN + VKI_GDT_ENTRY_TLS_ENTRIES - 1)
613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ldt.h
616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* [[Nb: This is the structure passed to the modify_ldt syscall.  Just so as
619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   to confuse and annoy everyone, this is _not_ the same as an
620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VgLdtEntry and has to be translated into such.  The logic for doing
621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   so, in vg_ldt.c, is copied from the kernel sources.]] */
622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_desc {
623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  entry_number;
624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long base_addr;
625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  limit;
626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  seg_32bit:1;
627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  contents:2;
628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  read_exec_only:1;
629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  limit_in_pages:1;
630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  seg_not_present:1;
631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  useable:1;
632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // [[Nb: this field is not in the kernel sources, but it has always
633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // been in the Valgrind sources so I will keep it there in case it's
634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // important... this is an x86-defined data structure so who
635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // knows;  maybe it's important to set this field to zero at some
636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // point.  --njn]]
637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  reserved:25;
638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// [[Nb: for our convenience within Valgrind, use a more specific name]]
641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_user_desc vki_modify_ldt_t;
642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ipcbuf.h
645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ipc64_perm
648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_key_t	key;
650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_uid32_t	uid;
651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_gid32_t	gid;
652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_uid32_t	cuid;
653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_gid32_t	cgid;
654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_mode_t	mode;
655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		__pad1;
656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		seq;
657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		__pad2;
658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused1;
659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused2;
660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/sembuf.h
664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_semid64_ds {
667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm sem_perm;		/* permissions .. see ipc.h */
668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	sem_otime;		/* last semop time */
669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused1;
670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	sem_ctime;		/* last change time */
671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused2;
672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	sem_nsems;		/* no. of semaphores in array */
673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused3;
674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused4;
675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/msgbuf.h
679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_msqid64_ds {
682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm msg_perm;
683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_stime;	/* last msgsnd time */
684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused1;
685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_rtime;	/* last msgrcv time */
686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused2;
687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_ctime;	/* last change time */
688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused3;
689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_cbytes;	/* current number of bytes on queue */
690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_qnum;	/* number of messages in queue */
691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_qbytes;	/* max number of bytes on queue */
692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t msg_lspid;	/* pid of last msgsnd */
693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t msg_lrpid;	/* last receive pid */
694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused4;
695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused5;
696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/ipc.h
700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ipc_kludge {
703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_msgbuf __user *msgp;
704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long msgtyp;
705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMOP		 1
708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMGET		 2
709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMCTL		 3
710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMTIMEDOP	 	 4
711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGSND		11
712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGRCV		12
713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGGET		13
714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGCTL		14
715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMAT		21
716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMDT		22
717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMGET		23
718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMCTL		24
719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.8.1/include/asm-i386/shmbuf.h
722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_shmid64_ds {
725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm	shm_perm;	/* operation perms */
726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_size_t		shm_segsz;	/* size of segment (bytes) */
727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_atime;	/* last attach time */
728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused1;
729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_dtime;	/* last detach time */
730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused2;
731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_ctime;	/* last change time */
732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused3;
733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t	shm_cpid;	/* pid of creator */
734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t	shm_lpid;	/* pid of last operator */
735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		shm_nattch;	/* no. of current attaches */
736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused4;
737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused5;
738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_shminfo64 {
741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmax;
742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmin;
743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmni;
744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmseg;
745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmall;
746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused1;
747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused2;
748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused3;
749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused4;
750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// DRM ioctls
754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// jrs 20050207: where did all this stuff come from?  Is it really
757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// i386 specific, or should it go into the linux-generic category?
758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//struct vki_drm_buf_pub {
759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	Int		  idx;	       /**< Index into the master buffer list */
760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	Int		  total;       /**< Buffer size */
761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	Int		  used;	       /**< Amount of buffer in use (for DMA) */
762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	void	  __user *address;     /**< Address of buffer */
763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//};
764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//
765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//struct vki_drm_buf_map {
766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	Int	      count;		/**< Length of the buffer list */
767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	void	      __user *virtual;	/**< Mmap'd area in user-virtual */
768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//	struct vki_drm_buf_pub __user *list;	/**< Buffer information */
769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//};
770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//
771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown///* We need to pay attention to this, because it mmaps memory */
772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_DRM_IOCTL_MAP_BUFS		_VKI_IOWR('d', 0x19, struct vki_drm_buf_map)
773ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
774ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
775ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-i386/ptrace.h
776ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
777ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
778ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_GETREGS            12
779ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_SETREGS            13
780ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_GETFPREGS          14
781ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_SETFPREGS          15
782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_GETWMMXREGS        18
783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_SETWMMXREGS        19
784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_GET_THREAD_AREA    22
785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_SET_SYSCALL        23
786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_GETCRUNCHREGS      25
787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_SETCRUNCHREGS      26
788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_GETVFPREGS         27
789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_SETVFPREGS         28
790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_GETHBPREGS         29
791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_PTRACE_SETHBPREGS         30
792ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
793ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
794ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.15.4/include/asm-i386/vm86.h
795ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
796ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
797ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_PLUS_INSTALL_CHECK	0
798ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_ENTER			1
799ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_ENTER_NO_BYPASS	2
800ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define	VKI_VM86_REQUEST_IRQ		3
801ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_FREE_IRQ		4
802ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_GET_IRQ_BITS		5
803ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_VM86_GET_AND_RESET_IRQ	6
804ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
805ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_vm86_regs {
806ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
807ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * normal regs, with special meaning for the segment descriptors..
808ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
809ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long ebx;
810ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long ecx;
811ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long edx;
812ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long esi;
813ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long edi;
814ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long ebp;
815ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long eax;
816ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long __null_ds;
817ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long __null_es;
818ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long __null_fs;
819ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long __null_gs;
820ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long orig_eax;
821ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long eip;
822ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short cs, __csh;
823ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long eflags;
824ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long esp;
825ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ss, __ssh;
826ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
827ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * these are specific to v86 mode:
828ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
829ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short es, __esh;
830ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ds, __dsh;
831ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short fs, __fsh;
832ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short gs, __gsh;
833ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
834ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
835ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_revectored_struct {
836ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long __map[8];			/* 256 bits */
837ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
838ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
839ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_vm86_struct {
840ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_vm86_regs regs;
841ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long flags;
842ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long screen_bitmap;
843ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long cpu_type;
844ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_revectored_struct int_revectored;
845ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_revectored_struct int21_revectored;
846ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
847ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_vm86plus_info_struct {
849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long force_return_for_pic:1;
850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long vm86dbg_active:1;       /* for debugger */
851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long vm86dbg_TFpendig:1;     /* for debugger */
852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long unused:28;
853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long is_vm86pus:1;	      /* for vm86 internal use */
854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char vm86dbg_intxxtab[32];   /* for debugger */
855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_vm86plus_struct {
858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_vm86_regs regs;
859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long flags;
860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long screen_bitmap;
861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long cpu_type;
862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_revectored_struct int_revectored;
863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_revectored_struct int21_revectored;
864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_vm86plus_info_struct vm86plus;
865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.35.4/arch/arm/include/asm/hwcap.h
869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_HWCAP_NEON      4096
872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// And that's it!
875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // __VKI_ARM_LINUX_H
878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- end                                          vki-arm-linux.h ---*/
881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
882