1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- AMD64/Linux-specific kernel interface.     vki-amd64-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_AMD64_LINUX_H
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define __VKI_AMD64_LINUX_H
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// AMD64 is little-endian.
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_LITTLE_ENDIAN  1
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/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.9/include/asm-x86_64/page.h
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PAGE_SHIFT	12
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PAGE_SIZE	(1UL << VKI_PAGE_SHIFT)
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAX_PAGE_SHIFT	VKI_PAGE_SHIFT
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAX_PAGE_SIZE	VKI_PAGE_SIZE
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.35.4/arch/x86/include/asm/shmparam.h
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMLBA  VKI_PAGE_SIZE
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/signal.h
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG	64
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG_BPW	64
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG_WORDS	(_VKI_NSIG / _VKI_NSIG_BPW)
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long vki_old_sigset_t;		/* at least 32 bits */
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct {
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long sig[_VKI_NSIG_WORDS];
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} vki_sigset_t;
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGHUP		 1
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGINT		 2
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGQUIT		 3
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGILL		 4
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTRAP		 5
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGABRT		 6
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGBUS		 7
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGFPE		 8
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGKILL		 9
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUSR1		10
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSEGV		11
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUSR2		12
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPIPE		13
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGALRM		14
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTERM		15
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSTKFLT		16
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGCHLD		17
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGCONT		18
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSTOP		19
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTSTP		20
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTTIN		21
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTTOU		22
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGURG		23
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGXCPU		24
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGXFSZ		25
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGVTALRM		26
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPROF		27
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGWINCH		28
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGIO		29
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPWR		30
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSYS		31
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define	VKI_SIGUNUSED		31
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGRTMIN		32
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGRTMAX		_VKI_NSIG
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOCLDSTOP	0x00000001
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOCLDWAIT	0x00000002
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_SIGINFO		0x00000004
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_ONSTACK		0x08000000
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESTART		0x10000000
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NODEFER		0x40000000
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESETHAND	0x80000000
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOMASK	VKI_SA_NODEFER
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_ONESHOT	VKI_SA_RESETHAND
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESTORER	0x04000000
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SS_ONSTACK	1
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SS_DISABLE	2
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MINSIGSTKSZ	2048
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_BLOCK          0	/* for blocking signals */
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_UNBLOCK        1	/* for unblocking signals */
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_SETMASK        2	/* for setting the signal mask */
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void __vki_signalfn_t(int);
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_signalfn_t __user *__vki_sighandler_t;
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void __vki_restorefn_t(void);
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_restorefn_t __user *__vki_sigrestore_t;
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_DFL	((__vki_sighandler_t)0)	/* default signal handling */
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_IGN	((__vki_sighandler_t)1)	/* ignore signal */
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_sigaction_base {
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // [[Nb: a 'k' prefix is added to "sa_handler" because
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // bits/sigaction.h (which gets dragged in somehow via signal.h)
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // #defines it as something else.  Since that is done for glibc's
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        // purposes, which we don't care about here, we use our own name.]]
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_sighandler_t ksa_handler;
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long sa_flags;
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_sigrestore_t sa_restorer;
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_sigset_t sa_mask;		/* mask last for extensibility */
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* On Linux we use the same type for passing sigactions to
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   and from the kernel.  Hence: */
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef  struct vki_sigaction_base  vki_sigaction_toK_t;
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_sigaltstack {
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	void __user *ss_sp;
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	int ss_flags;
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_size_t ss_size;
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} vki_stack_t;
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/sigcontext.h
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct _vki_fpstate {
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u16	cwd;
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u16	swd;
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u16	twd;	/* Note this is not the same as the 32bit/x87/FSAVE twd */
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u16	fop;
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u64	rip;
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u64	rdp;
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	mxcsr;
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	mxcsr_mask;
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	st_space[32];	/* 8*16 bytes for each FP-reg */
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	xmm_space[64];	/* 16*16 bytes for each XMM-reg  */
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	reserved2[24];
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_sigcontext {
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r8;
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r9;
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r10;
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r11;
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r12;
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r13;
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r14;
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r15;
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rdi;
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rsi;
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rbp;
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rbx;
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rdx;
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rax;
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rcx;
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rsp;
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rip;
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long eflags;		/* RFLAGS */
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short cs;
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short gs;
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short fs;
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short __pad0;
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long err;
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long trapno;
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long oldmask;
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long cr2;
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct _vki_fpstate __user *fpstate;	/* zero when no FPU context */
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long reserved1[8];
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/mman.h
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_READ	0x1		/* page can be read */
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_WRITE	0x2		/* page can be written */
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_EXEC	0x4		/* page can be executed */
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_NONE	0x0		/* page can not be accessed */
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_SHARED	0x01		/* Share changes */
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_PRIVATE	0x02		/* Changes are private */
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_FIXED	0x10		/* Interpret addr exactly */
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_ANONYMOUS	0x20	/* don't use a file */
239436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MAP_32BIT	0x40		/* only give out 32bit addresses */
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_NORESERVE       0x4000  /* don't check for reservations */
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/fcntl.h
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
246436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_ACCMODE	     03
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_RDONLY	     00
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_WRONLY	     01
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_RDWR	     02
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_CREAT	   0100	/* not fcntl */
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_EXCL	   0200	/* not fcntl */
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_TRUNC	  01000	/* not fcntl */
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_APPEND	  02000
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_NONBLOCK	  04000
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_LARGEFILE	0100000
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_AT_FDCWD            -100
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_DUPFD		0	/* dup */
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETFD		1	/* get close_on_exec */
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETFD		2	/* set/clear close_on_exec */
262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETFL		3	/* get file->f_flags */
263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETFL		4	/* set file->f_flags */
264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETLK		5
265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLK		6
266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLKW		7
267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETOWN		8	/*  for sockets. */
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETOWN		9	/*  for sockets. */
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETSIG		10	/*  for sockets. */
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETSIG		11	/*  for sockets. */
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
273663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_SETOWN_EX		15
274663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_GETOWN_EX		16
275663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
276663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_OWNER_TID		0
277663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_OWNER_PID		1
278663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng#define VKI_F_OWNER_PGRP	2
279663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
280663860b1408516d02ebfcb3a9999a134e6cfb223Ben Chengstruct vki_f_owner_ex {
281663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	int	type;
282663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	__vki_kernel_pid_t	pid;
283663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng};
284663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FD_CLOEXEC	1	/* actually anything with low bit set goes */
286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_LINUX_SPECIFIC_BASE	1024
288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/resource.h
291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_DATA		2	/* max data size */
294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_STACK	3	/* max stack size */
295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_CORE		4	/* max core file size */
296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_NOFILE	7	/* max number of open files */
297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/socket.h
300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SOL_SOCKET	1
303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SO_TYPE	3
305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
306436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SO_ATTACH_FILTER	26
307436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/sockios.h
310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCSPGRP		0x8902
313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGPGRP		0x8904
314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGSTAMP		0x8906		/* Get stamp (timeval) */
315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGSTAMPNS	0x8907		/* Get stamp (timespec) */
316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/stat.h
319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_stat {
322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_dev;
323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_ino;
324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_nlink;
325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_mode;
327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_uid;
328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	st_gid;
329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int	__pad0;
330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_rdev;
331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long		st_size;
332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long		st_blksize;
333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long		st_blocks;	/* Number 512-byte blocks allocated. */
334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_atime;
336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long 	st_atime_nsec;
337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_mtime;
338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_mtime_nsec;
339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	st_ctime;
340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long   st_ctime_nsec;
341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  	long		__unused[3];
342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/statfs.h
346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_statfs {
349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_type;
350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_bsize;
351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_blocks;
352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_bfree;
353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_bavail;
354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_files;
355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_ffree;
356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_fsid_t f_fsid;
357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_namelen;
358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_frsize;
359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	long f_spare[5];
360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/termios.h
364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_winsize {
367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_row;
368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_col;
369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_xpixel;
370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short ws_ypixel;
371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_NCC 8
374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_termio {
375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_iflag;		/* input mode flags */
376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_oflag;		/* output mode flags */
377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_cflag;		/* control mode flags */
378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short c_lflag;		/* local mode flags */
379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char c_line;		/* line discipline */
380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned char c_cc[VKI_NCC];	/* control characters */
381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/termbits.h
385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char	vki_cc_t;
388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int	vki_tcflag_t;
389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_NCCS 19
391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_termios {
392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_iflag;		/* input mode flags */
393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_oflag;		/* output mode flags */
394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_cflag;		/* control mode flags */
395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_tcflag_t c_lflag;		/* local mode flags */
396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_cc_t c_line;		/* line discipline */
397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_cc_t c_cc[VKI_NCCS];	/* control characters */
398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/ioctl.h
403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRBITS		8
406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPEBITS	8
407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZEBITS	14
408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRBITS	2
409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZEMASK	((1 << _VKI_IOC_SIZEBITS)-1)
411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRMASK	((1 << _VKI_IOC_DIRBITS)-1)
412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRSHIFT	0
414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPESHIFT	(_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZESHIFT	(_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRSHIFT	(_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NONE	0U
419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_WRITE	1U
420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_READ	2U
421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC(dir,type,nr,size) \
423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	(((dir)  << _VKI_IOC_DIRSHIFT) | \
424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((type) << _VKI_IOC_TYPESHIFT) | \
425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((nr)   << _VKI_IOC_NRSHIFT) | \
426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	 ((size) << _VKI_IOC_SIZESHIFT))
427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IO(type,nr)		_VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ,(type),(nr),sizeof(size))
430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOW(type,nr,size)	_VKI_IOC(_VKI_IOC_WRITE,(type),(nr),sizeof(size))
431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOWR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),sizeof(size))
432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIR(nr)		(((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZE(nr)		(((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/ioctls.h
438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCGETS	0x5401
441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETS	0x5402
442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETSW	0x5403
443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETSF	0x5404
444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCGETA	0x5405
445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETA	0x5406
446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETAW	0x5407
447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETAF	0x5408
448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSBRK	0x5409
449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCXONC	0x540A
450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCFLSH	0x540B
451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSCTTY	0x540E
452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGPGRP	0x540F
453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSPGRP	0x5410
454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCOUTQ	0x5411
455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGWINSZ	0x5413
456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSWINSZ	0x5414
457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMGET	0x5415
458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMBIS	0x5416
459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMBIC	0x5417
460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMSET	0x5418
461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIONREAD	0x541B
462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCLINUX	0x541C
463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIONBIO	0x5421
464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSBRKP	0x5425	/* Needed for POSIX tcsendbreak() */
465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGPTN	_VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSPTLCK	_VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
468436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIONCLEX    0x5450
469436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIOCLEX     0x5451
470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIOASYNC	0x5452
471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/poll.h
477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_POLLIN		0x0001
480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_pollfd {
482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	int fd;
483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	short events;
484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	short revents;
485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/user.h
489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_i387_struct {
492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	cwd;
493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	swd;
494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */
495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short	fop;
496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u64	rip;
497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u64	rdp;
498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	mxcsr;
499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	mxcsr_mask;
500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	st_space[32];	/* 8*16 bytes for each FP-reg = 128 bytes */
501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	xmm_space[64];	/* 16*16 bytes for each XMM-reg = 256 bytes */
502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_u32	padding[24];
503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_regs_struct {
506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r15,r14,r13,r12,rbp,rbx,r11,r10;
507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long r9,r8,rax,rcx,rdx,rsi,rdi,orig_rax;
508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rip,cs,eflags;
509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long rsp,ss;
510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  	unsigned long fs_base, gs_base;
511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long ds,es,fs,gs;
512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/elf.h
516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long vki_elf_greg_t;
519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_user_i387_struct vki_elf_fpregset_t;
524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/ucontext.h
527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ucontext {
530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		uc_flags;
531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ucontext    *uc_link;
532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_stack_t		uc_stack;
533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_sigcontext	uc_mcontext;
534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_sigset_t		uc_sigmask;	/* mask last for extensibility */
535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/segment.h
539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_ENTRIES 3
542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_MIN 11
544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_GDT_ENTRY_TLS_MAX 13
545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.11.9/include/asm-x86_64/prctl.h
548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ARCH_SET_GS 0x1001
551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ARCH_SET_FS 0x1002
552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ARCH_GET_FS 0x1003
553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ARCH_GET_GS 0x1004
554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.9/include/asm-x86_64/ldt.h
557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// I think this LDT stuff will have to be reinstated for amd64, but I'm not
560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// certain.  (Nb: The sys_arch_prctl seems to have replaced
561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// [gs]et_thread_area syscalls.)
562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//
563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Note that the type here is very slightly different to the
564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// type for x86 (the final 'lm' field is added);  I'm not sure about the
565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// significance of that... --njn
566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* [[Nb: This is the structure passed to the modify_ldt syscall.  Just so as
568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   to confuse and annoy everyone, this is _not_ the same as an
569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   VgLdtEntry and has to be translated into such.  The logic for doing
570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   so, in vg_ldt.c, is copied from the kernel sources.]] */
571663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng/* Note also that a comment in ldt.h indicates that the below
572663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   contains several fields ignored on 64bit, and that modify_ldt
573663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng   is rather for 32bit. */
574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_user_desc {
575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  entry_number;
576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long base_addr;
577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  limit;
578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  seg_32bit:1;
579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  contents:2;
580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  read_exec_only:1;
581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  limit_in_pages:1;
582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  seg_not_present:1;
583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int  useable:1;
584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        unsigned int  lm:1;
585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// [[Nb: for our convenience within Valgrind, use a more specific name]]
588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_user_desc vki_modify_ldt_t;
589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.11.2/include/asm-x86_64/ipcbuf.h
592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ipc64_perm
595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_key_t	key;
597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_uid32_t	uid;
598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_gid32_t	gid;
599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_uid32_t	cuid;
600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_gid32_t	cgid;
601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_mode_t	mode;
602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		__pad1;
603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		seq;
604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned short		__pad2;
605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused1;
606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused2;
607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.11.2/include/asm-x86_64/sembuf.h
611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_semid64_ds {
614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm sem_perm;		/* permissions .. see ipc.h */
615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	sem_otime;		/* last semop time */
616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused1;
617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	sem_ctime;		/* last change time */
618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused2;
619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	sem_nsems;		/* no. of semaphores in array */
620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused3;
621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused4;
622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
623ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.11.2/include/asm-x86_64/msgbuf.h
626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_msqid64_ds {
629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm msg_perm;
630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_stime;	/* last msgsnd time */
631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_rtime;	/* last msgrcv time */
632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t msg_ctime;	/* last change time */
633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_cbytes;	/* current number of bytes on queue */
634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_qnum;	/* number of messages in queue */
635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  msg_qbytes;	/* max number of bytes on queue */
636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t msg_lspid;	/* pid of last msgsnd */
637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t msg_lrpid;	/* last receive pid */
638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused4;
639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long  __unused5;
640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.11.2/include/asm-x86_64/shmbuf.h
644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_shmid64_ds {
647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	struct vki_ipc64_perm	shm_perm;	/* operation perms */
648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	vki_size_t		shm_segsz;	/* size of segment (bytes) */
649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_atime;	/* last attach time */
650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_dtime;	/* last detach time */
651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_time_t	shm_ctime;	/* last change time */
652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t	shm_cpid;	/* pid of creator */
653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__vki_kernel_pid_t	shm_lpid;	/* pid of last operator */
654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		shm_nattch;	/* no. of current attaches */
655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused4;
656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long		__unused5;
657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_shminfo64 {
660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmax;
661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmin;
662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmmni;
663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmseg;
664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	shmall;
665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused1;
666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused2;
667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused3;
668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned long	__unused4;
669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.12.2/include/asm-x86_64/ptrace.h
673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_GETREGS            12
676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_SETREGS            13
677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_GETFPREGS          14
678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PTRACE_SETFPREGS          15
679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
681436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-2.6.8.1/include/asm-generic/errno.h
682436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
683436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
684436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define	VKI_ENOSYS       38  /* Function not implemented */
685436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define	VKI_EOVERFLOW    75  /* Value too large for defined data type */
686436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
687436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// And that's it!
689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // __VKI_AMD64_LINUX_H
692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- end                                                          ---*/
695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
696