1436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*--------------------------------------------------------------------*/
3436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*--- ARM64/Linux-specific kernel interface.     vki-arm64-linux.h ---*/
4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*--------------------------------------------------------------------*/
5436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
6436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*
7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   This file is part of Valgrind, a dynamic binary instrumentation
8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   framework.
9436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   Copyright (C) 2013-2013 OpenWorks
11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov      info@open-works.net
12436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   This program is free software; you can redistribute it and/or
14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   modify it under the terms of the GNU General Public License as
15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   published by the Free Software Foundation; either version 2 of the
16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   License, or (at your option) any later version.
17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   This program is distributed in the hope that it will be useful, but
19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   WITHOUT ANY WARRANTY; without even the implied warranty of
20436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   General Public License for more details.
22436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
23436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   You should have received a copy of the GNU General Public License
24436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   along with this program; if not, write to the Free Software
25436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   02111-1307, USA.
27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   The GNU General Public License is contained in the file COPYING.
29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov*/
30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#ifndef __VKI_ARM64_LINUX_H
32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define __VKI_ARM64_LINUX_H
33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// ARM64 is little-endian.
35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_LITTLE_ENDIAN  1
36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.9.9/include/uapi/asm-generic/int-ll64.h
39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned char __vki_u8;
42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef __signed__ short __vki_s16;
44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned short __vki_u16;
45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef __signed__ int __vki_s32;
47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned int __vki_u32;
48436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
49436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef __signed__ long long __vki_s64;
50436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned long long __vki_u64;
51436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned short vki_u16;
53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
54436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned int vki_u32;
55436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
56436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
57436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.9.9/arch/arm64/include/asm/page.h
58436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
59436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
60436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* Looks like arm64 can do both 4k and 64k pages, so we
61436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   use the at-startup detection scheme that ppc32/64 do. */
62436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovextern UWord VKI_PAGE_SHIFT;
63436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovextern UWord VKI_PAGE_SIZE;
64436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MAX_PAGE_SHIFT	16
65436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MAX_PAGE_SIZE	(1UL << VKI_MAX_PAGE_SHIFT)
66436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
67436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
68436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/arch/arm64/include/asm/shmparam.h
69436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
70436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
71436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// Trying to make sense of this .. it seems as if, for doing
72436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// shared memory with 64 bit processes, VKI_PAGE_SIZE is good
73436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// enough.  But if sharing with a 32 bit process then we need
74436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// the old-style 16k value (4 * VKI_PAGE_SIZE) to be safe.
75436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// (From reading between the lines of arch/arm64/include/asm/shmparam.h)
76436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SHMLBA  (4 * VKI_PAGE_SIZE)
77436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
78436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
79436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/signal.h
80436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
81436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
82436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_NSIG	64
83436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_NSIG_BPW	64
84436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_NSIG_WORDS	(_VKI_NSIG / _VKI_NSIG_BPW)
85436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
86436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned long vki_old_sigset_t;
87436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
88436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef struct {
89436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long sig[_VKI_NSIG_WORDS];
90436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} vki_sigset_t;
91436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
92436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGHUP		 1
93436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGINT		 2
94436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGQUIT		 3
95436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGILL		 4
96436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGTRAP		 5
97436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGABRT		 6
98436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGBUS		 7
99436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGFPE		 8
100436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGKILL		 9
101436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGUSR1		10
102436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGSEGV		11
103436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGUSR2		12
104436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGPIPE		13
105436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGALRM		14
106436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGTERM		15
107436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGSTKFLT		16
108436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGCHLD		17
109436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGCONT		18
110436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGSTOP		19
111436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGTSTP		20
112436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGTTIN		21
113436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGTTOU		22
114436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGURG		23
115436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGXCPU		24
116436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGXFSZ		25
117436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGVTALRM		26
118436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGPROF		27
119436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGWINCH		28
120436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGIO		29
121436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGPWR		30
122436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGSYS		31
123436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define	VKI_SIGUNUSED		31
124436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
125436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGRTMIN		32
126436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIGRTMAX		_VKI_NSIG
127436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
128436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_NOCLDSTOP	0x00000001
129436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_NOCLDWAIT	0x00000002
130436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_SIGINFO		0x00000004
131436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_ONSTACK		0x08000000
132436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_RESTART		0x10000000
133436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_NODEFER		0x40000000
134436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_RESETHAND	0x80000000
135436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
136436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_NOMASK	VKI_SA_NODEFER
137436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_ONESHOT	VKI_SA_RESETHAND
138436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
139436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// This is obsolete and should not be defined for new archs
140436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SA_RESTORER	0x04000000
141436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
142436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SS_ONSTACK	1
143436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SS_DISABLE	2
144436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
145436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MINSIGSTKSZ	2048
146436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
147436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIG_BLOCK          0	/* for blocking signals */
148436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIG_UNBLOCK        1	/* for unblocking signals */
149436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIG_SETMASK        2	/* for setting the signal mask */
150436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
151436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef void __vki_signalfn_t(int);
152436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef __vki_signalfn_t __user *__vki_sighandler_t;
153436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
154436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef void __vki_restorefn_t(void);
155436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef __vki_restorefn_t __user *__vki_sigrestore_t;
156436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
157436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIG_DFL	((__vki_sighandler_t)0)	/* default signal handling */
158436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIG_IGN	((__vki_sighandler_t)1)	/* ignore signal */
159436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
160436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_sigaction_base {
161436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        // [[Nb: a 'k' prefix is added to "sa_handler" because
162436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        // bits/sigaction.h (which gets dragged in somehow via signal.h)
163436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        // #defines it as something else.  Since that is done for glibc's
164436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        // purposes, which we don't care about here, we use our own name.]]
165436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_sighandler_t ksa_handler;
166436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long sa_flags;
167436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_sigrestore_t sa_restorer; // I don't think arm64 has this
168436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_sigset_t sa_mask;		/* mask last for extensibility */
169436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
170436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
171436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* On Linux we use the same type for passing sigactions to
172436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   and from the kernel.  Hence: */
173436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef  struct vki_sigaction_base  vki_sigaction_toK_t;
174436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
175436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
176436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
177436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef struct vki_sigaltstack {
178436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	void __user *ss_sp;
179436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	int ss_flags;
180436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_size_t ss_size;
181436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} vki_stack_t;
182436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
183436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
184436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/arch/arm64/include/uapi/asm/sigcontext.h
185436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
186436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
187436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_sigcontext {
188436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64 fault_address;
189436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        /* AArch64 registers */
190436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64 regs[31];
191436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64 sp;
192436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64 pc;
193436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64 pstate;
194436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        /* 4K reserved for FP/SIMD state and future expansion */
195436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u8 __reserved[4096] __attribute__((__aligned__(16)));
196436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
197436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
198436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
199436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/uapi/include/asm-generic/mman-common.h
200436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
201436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
202436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PROT_READ	0x1		/* page can be read */
203436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PROT_WRITE	0x2		/* page can be written */
204436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PROT_EXEC	0x4		/* page can be executed */
205436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PROT_NONE	0x0		/* page can not be accessed */
206436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PROT_GROWSDOWN	0x01000000	/* mprotect flag: extend change to start of growsdown vma */
207436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PROT_GROWSUP	0x02000000	/* mprotect flag: extend change to end of growsup vma */
208436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
209436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MAP_SHARED	0x01		/* Share changes */
210436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MAP_PRIVATE	0x02		/* Changes are private */
211436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MAP_FIXED	0x10		/* Interpret addr exactly */
212436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MAP_ANONYMOUS	0x20	/* don't use a file */
213436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_MAP_NORESERVE       0x4000  /* don't check for reservations */
214436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
215436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
216436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/uapi/include/asm-generic/fcntl.h
217436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
218436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
219436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_ACCMODE	     03
220436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_RDONLY	     00
221436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_WRONLY	     01
222436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_RDWR	     02
223436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_CREAT	   0100	/* not fcntl */
224436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_EXCL	   0200	/* not fcntl */
225436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_TRUNC	  01000	/* not fcntl */
226436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_APPEND	  02000
227436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_NONBLOCK	  04000
228436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_O_LARGEFILE	0100000
229436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
230436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_AT_FDCWD            -100
231436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
232436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_DUPFD		0	/* dup */
233436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_GETFD		1	/* get close_on_exec */
234436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_SETFD		2	/* set/clear close_on_exec */
235436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_GETFL		3	/* get file->f_flags */
236436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_SETFL		4	/* set file->f_flags */
237436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_GETLK		5
238436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_SETLK		6
239436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_SETLKW		7
240436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
241436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_SETOWN		8	/*  for sockets. */
242436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_GETOWN		9	/*  for sockets. */
243436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_SETSIG		10	/*  for sockets. */
244436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_GETSIG		11	/*  for sockets. */
245436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
246436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_SETOWN_EX		15
247436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_GETOWN_EX		16
248436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
249436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_OWNER_TID		0
250436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_OWNER_PID		1
251436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_OWNER_PGRP	2
252436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
253436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_f_owner_ex {
254436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	int	type;
255436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_pid_t	pid;
256436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
257436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
258436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FD_CLOEXEC	1	/* actually anything with low bit set goes */
259436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
260436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_F_LINUX_SPECIFIC_BASE	1024
261436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
262436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
263436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/resource.h
264436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
265436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
266436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_RLIMIT_DATA		2	/* max data size */
267436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_RLIMIT_STACK	3	/* max stack size */
268436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_RLIMIT_CORE		4	/* max core file size */
269436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_RLIMIT_NOFILE	7	/* max number of open files */
270436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
271436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
272436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/socket.h
273436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
274436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
275436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SOL_SOCKET	1
276436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
277436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SO_TYPE	3
278436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
279436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SO_ATTACH_FILTER	26
280436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
281436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
282436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/sockios.h
283436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
284436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
285436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIOCSPGRP		0x8902
286436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIOCGPGRP		0x8904
287436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIOCGSTAMP		0x8906		/* Get stamp (timeval) */
288436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_SIOCGSTAMPNS	0x8907		/* Get stamp (timespec) */
289436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
290436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
291436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/stat.h
292436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
293436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
294436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_stat {
295436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned long   st_dev;
296436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned long   st_ino;
297436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned int    st_mode;
298436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned int    st_nlink;
299436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned int    st_uid;
300436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned int    st_gid;
301436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned long   st_rdev;
302436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned long   __pad1;
303436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        long            st_size;
304436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        int             st_blksize;
305436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        int             __pad2;
306436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        long            st_blocks;
307436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        long            st_atime;
308436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned long   st_atime_nsec;
309436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        long            st_mtime;
310436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned long   st_mtime_nsec;
311436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        long            st_ctime;
312436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned long   st_ctime_nsec;
313436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned int    __unused4;
314436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned int    __unused5;
315436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
316436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
317436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
318436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/statfs.h
319436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
320436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
321436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_statfs {
322436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_type;
323436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_bsize;
324436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_blocks;
325436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_bfree;
326436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_bavail;
327436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_files;
328436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_ffree;
329436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_fsid_t f_fsid;
330436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_namelen;
331436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_frsize;
332436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_flags;
333436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	long f_spare[4];
334436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
335436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
336436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
337436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/termios.h
338436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
339436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
340436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_winsize {
341436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short ws_row;
342436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short ws_col;
343436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short ws_xpixel;
344436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short ws_ypixel;
345436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
346436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
347436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_NCC 8
348436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_termio {
349436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short c_iflag;		/* input mode flags */
350436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short c_oflag;		/* output mode flags */
351436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short c_cflag;		/* control mode flags */
352436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short c_lflag;		/* local mode flags */
353436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned char c_line;		/* line discipline */
354436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned char c_cc[VKI_NCC];	/* control characters */
355436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
356436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
357436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
358436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/termbits.h
359436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
360436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
361436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned char	vki_cc_t;
362436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned int	vki_tcflag_t;
363436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
364436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_NCCS 19
365436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_termios {
366436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_tcflag_t c_iflag;		/* input mode flags */
367436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_tcflag_t c_oflag;		/* output mode flags */
368436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_tcflag_t c_cflag;		/* control mode flags */
369436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_tcflag_t c_lflag;		/* local mode flags */
370436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_cc_t c_line;		/* line discipline */
371436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_cc_t c_cc[VKI_NCCS];	/* control characters */
372436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
373436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
374436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
375436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.9.9/include/uapi/asm-generic/ioctl.h
376436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
377436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
378436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_NRBITS		8
379436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_TYPEBITS	8
380436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_SIZEBITS	14
381436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_DIRBITS	2
382436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
383436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_SIZEMASK	((1 << _VKI_IOC_SIZEBITS)-1)
384436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_DIRMASK	((1 << _VKI_IOC_DIRBITS)-1)
385436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
386436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_NRSHIFT	0
387436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_TYPESHIFT	(_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
388436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_SIZESHIFT	(_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
389436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_DIRSHIFT	(_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
390436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
391436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_NONE	0U
392436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_WRITE	1U
393436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_READ	2U
394436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
395436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC(dir,type,nr,size) \
396436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	(((dir)  << _VKI_IOC_DIRSHIFT) | \
397436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	 ((type) << _VKI_IOC_TYPESHIFT) | \
398436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	 ((nr)   << _VKI_IOC_NRSHIFT) | \
399436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	 ((size) << _VKI_IOC_SIZESHIFT))
400436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
401436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IO(type,nr)	_VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
402436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ,(type),(nr),sizeof(size))
403436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOW(type,nr,size)	_VKI_IOC(_VKI_IOC_WRITE,(type),(nr),sizeof(size))
404436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOWR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),sizeof(size))
405436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
406436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_DIR(nr)		(((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
407436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define _VKI_IOC_SIZE(nr)		(((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
408436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
409436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
410436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/ioctls.h
411436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
412436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
413436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCGETS	0x5401
414436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCSETS	0x5402
415436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCSETSW	0x5403
416436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCSETSF	0x5404
417436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCGETA	0x5405
418436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCSETA	0x5406
419436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCSETAW	0x5407
420436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCSETAF	0x5408
421436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCSBRK	0x5409
422436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCXONC	0x540A
423436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCFLSH	0x540B
424436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCSCTTY	0x540E
425436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCGPGRP	0x540F
426436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCSPGRP	0x5410
427436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCOUTQ	0x5411
428436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCGWINSZ	0x5413
429436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCSWINSZ	0x5414
430436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCMGET	0x5415
431436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCMBIS	0x5416
432436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCMBIC	0x5417
433436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCMSET	0x5418
434436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIONREAD	0x541B
435436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCLINUX	0x541C
436436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIONBIO	0x5421
437436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TCSBRKP	0x5425
438436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCGPTN	_VKI_IOR('T',0x30, unsigned int)
439436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCSPTLCK	_VKI_IOW('T',0x31, int)
440436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
441436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIONCLEX    0x5450
442436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIOCLEX     0x5451
443436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_FIOASYNC	0x5452
444436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCSERGETLSR   0x5459
445436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
446436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_TIOCGICOUNT	0x545D
447436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
448436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
449436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.9.9/include/uapi/asm-generic/poll.h
450436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
451436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
452436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_POLLIN		0x0001
453436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
454436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_pollfd {
455436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	int fd;
456436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	short events;
457436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	short revents;
458436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
459436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
460436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
461436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/arch/arm64/include/uapi/asm/ptrace.h
462436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
463436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
464436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ struct vki_user_i387_struct {
465436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned short	cwd;
466436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned short	swd;
467436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned short	twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */
468436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned short	fop;
469436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	__vki_u64	rip;
470436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	__vki_u64	rdp;
471436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	__vki_u32	mxcsr;
472436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	__vki_u32	mxcsr_mask;
473436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	__vki_u32	st_space[32];	/* 8*16 bytes for each FP-reg = 128 bytes */
474436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	__vki_u32	xmm_space[64];	/* 16*16 bytes for each XMM-reg = 256 bytes */
475436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	__vki_u32	padding[24];
476436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ };
477436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
478436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ struct vki_user_regs_struct {
479436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned long r15,r14,r13,r12,rbp,rbx,r11,r10;
480436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned long r9,r8,rax,rcx,rdx,rsi,rdi,orig_rax;
481436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned long rip,cs,eflags;
482436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned long rsp,ss;
483436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ   	unsigned long fs_base, gs_base;
484436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned long ds,es,fs,gs;
485436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ };
486436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
487436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_user_pt_regs {
488436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64           regs[31];
489436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64           sp;
490436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64           pc;
491436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u64           pstate;
492436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
493436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
494436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/* I think that the new name in the kernel for these is "user_pt_regs"
495436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   and the old name is "user_regs_struct".  Unfortunately can't clone
496436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   a 'struct' type using 'typedef' and still have a 'struct' type, so
497436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov   use a blunter instrument instead. */
498436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define vki_user_regs_struct vki_user_pt_regs
499436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
500436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_user_fpsimd_state {
501436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __uint128_t     vregs[32];
502436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u32           fpsr;
503436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u32           fpcr;
504436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
505436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
506436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
507436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.9.9/arch/arm64/include/asm/elf.h
508436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
509436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
510436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef unsigned long vki_elf_greg_t;
511436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
512436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_ELF_NGREG (sizeof (struct vki_user_pt_regs) / sizeof(vki_elf_greg_t))
513436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
514436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
515436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef struct vki_user_fpsimd_state vki_elf_fpregset_t;
516436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
517436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
518436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/arch/arm64/include/asm/ucontext.h
519436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
520436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
521436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_ucontext {
522436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned long           uc_flags;
523436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        struct vki_ucontext    *uc_link;
524436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        vki_stack_t             uc_stack;
525436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        vki_sigset_t            uc_sigmask;
526436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        /* glibc uses a 1024-bit sigset_t */
527436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        __vki_u8                __unused[1024 / 8 - sizeof(vki_sigset_t)];
528436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        /* last for future expansion */
529436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        struct vki_sigcontext   uc_mcontext;
530436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
531436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
532436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ //----------------------------------------------------------------------
533436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // From linux-2.6.9/include/asm-x86_64/segment.h
534436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ //----------------------------------------------------------------------
535436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
536436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ #define VKI_GDT_ENTRY_TLS_ENTRIES 3
537436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
538436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ #define VKI_GDT_ENTRY_TLS_MIN 11
539436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ #define VKI_GDT_ENTRY_TLS_MAX 13
540436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
541436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ //----------------------------------------------------------------------
542436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // From linux-2.6.11.9/include/asm-x86_64/prctl.h
543436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ //----------------------------------------------------------------------
544436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
545436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ #define VKI_ARCH_SET_GS 0x1001
546436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ #define VKI_ARCH_SET_FS 0x1002
547436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ #define VKI_ARCH_GET_FS 0x1003
548436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ #define VKI_ARCH_GET_GS 0x1004
549436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
550436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ //----------------------------------------------------------------------
551436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // From linux-2.6.9/include/asm-x86_64/ldt.h
552436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ //----------------------------------------------------------------------
553436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
554436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // I think this LDT stuff will have to be reinstated for amd64, but I'm not
555436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // certain.  (Nb: The sys_arch_prctl seems to have replaced
556436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // [gs]et_thread_area syscalls.)
557436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ //
558436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // Note that the type here is very slightly different to the
559436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // type for x86 (the final 'lm' field is added);  I'm not sure about the
560436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // significance of that... --njn
561436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
562436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ /* [[Nb: This is the structure passed to the modify_ldt syscall.  Just so as
563436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ    to confuse and annoy everyone, this is _not_ the same as an
564436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ    VgLdtEntry and has to be translated into such.  The logic for doing
565436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ    so, in vg_ldt.c, is copied from the kernel sources.]] */
566436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ /* Note also that a comment in ldt.h indicates that the below
567436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ    contains several fields ignored on 64bit, and that modify_ldt
568436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ    is rather for 32bit. */
569436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ struct vki_user_desc {
570436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned int  entry_number;
571436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned long base_addr;
572436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned int  limit;
573436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned int  seg_32bit:1;
574436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned int  contents:2;
575436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned int  read_exec_only:1;
576436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned int  limit_in_pages:1;
577436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned int  seg_not_present:1;
578436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ 	unsigned int  useable:1;
579436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ         unsigned int  lm:1;
580436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ };
581436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ
582436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ // [[Nb: for our convenience within Valgrind, use a more specific name]]
583436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//ZZ typedef struct vki_user_desc vki_modify_ldt_t;
584436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
585436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
586436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/asm-generic/ipcbuf.h
587436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
588436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
589436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_ipc64_perm
590436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{
591436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_key_t	key;
592436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_uid32_t	uid;
593436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_gid32_t	gid;
594436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_uid32_t	cuid;
595436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_gid32_t	cgid;
596436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_mode_t	mode;
597436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov        unsigned char           __pad1[4 - sizeof(__vki_kernel_mode_t)];
598436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short		seq;
599436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned short		__pad2;
600436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long		__unused1;
601436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long		__unused2;
602436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
603436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
604436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
605436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/sembuf.h
606436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
607436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
608436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_semid64_ds {
609436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	struct vki_ipc64_perm sem_perm;		/* permissions .. see ipc.h */
610436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_time_t	sem_otime;		/* last semop time */
611436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_time_t	sem_ctime;		/* last change time */
612436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	sem_nsems;		/* no. of semaphores in array */
613436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	__unused3;
614436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	__unused4;
615436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
616436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
617436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
618436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/msgbuf.h
619436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
620436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
621436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_msqid64_ds {
622436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	struct vki_ipc64_perm msg_perm;
623436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_time_t msg_stime;	/* last msgsnd time */
624436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_time_t msg_rtime;	/* last msgrcv time */
625436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_time_t msg_ctime;	/* last change time */
626436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long  msg_cbytes;	/* current number of bytes on queue */
627436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long  msg_qnum;	/* number of messages in queue */
628436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long  msg_qbytes;	/* max number of bytes on queue */
629436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_pid_t msg_lspid;	/* pid of last msgsnd */
630436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_pid_t msg_lrpid;	/* last receive pid */
631436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long  __unused4;
632436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long  __unused5;
633436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
634436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
635436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
636436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.10.5/include/uapi/asm-generic/shmbuf.h
637436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
638436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
639436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_shmid64_ds {
640436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	struct vki_ipc64_perm	shm_perm;	/* operation perms */
641436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	vki_size_t		shm_segsz;	/* size of segment (bytes) */
642436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_time_t	shm_atime;	/* last attach time */
643436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_time_t	shm_dtime;	/* last detach time */
644436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_time_t	shm_ctime;	/* last change time */
645436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_pid_t	shm_cpid;	/* pid of creator */
646436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	__vki_kernel_pid_t	shm_lpid;	/* pid of last operator */
647436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long		shm_nattch;	/* no. of current attaches */
648436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long		__unused4;
649436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long		__unused5;
650436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
651436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
652436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovstruct vki_shminfo64 {
653436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	shmmax;
654436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	shmmin;
655436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	shmmni;
656436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	shmseg;
657436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	shmall;
658436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	__unused1;
659436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	__unused2;
660436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	__unused3;
661436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov	unsigned long	__unused4;
662436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov};
663436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
664436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
665436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// From linux-3.9.9/arch/arm64/include/asm/ptrace.h
666436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
667436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
668436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PTRACE_GETREGS            12
669436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#define VKI_PTRACE_SETREGS            13
670436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//#define VKI_PTRACE_GETFPREGS          14
671436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//#define VKI_PTRACE_SETFPREGS          15
672346e8e970c8b76ed70a8afcf23f8532a592ff73eDmitriy Ivanov#define VKI_PTRACE_GET_THREAD_AREA   22
673346e8e970c8b76ed70a8afcf23f8532a592ff73eDmitriy Ivanov#define VKI_PTRACE_SET_SYSCALL   23
674346e8e970c8b76ed70a8afcf23f8532a592ff73eDmitriy Ivanov#define VKI_PTRACE_GETVFPREGS    27
675346e8e970c8b76ed70a8afcf23f8532a592ff73eDmitriy Ivanov#define VKI_PTRACE_SETVFPREGS    28
676346e8e970c8b76ed70a8afcf23f8532a592ff73eDmitriy Ivanov#define VKI_PTRACE_GETHBPREGS    29
677346e8e970c8b76ed70a8afcf23f8532a592ff73eDmitriy Ivanov#define VKI_PTRACE_SETHBPREGS    30
678346e8e970c8b76ed70a8afcf23f8532a592ff73eDmitriy Ivanov
679436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
680436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
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//----------------------------------------------------------------------
688436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov// And that's it!
689436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov//----------------------------------------------------------------------
690436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
691436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#endif // __VKI_ARM64_LINUX_H
692436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov
693436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*--------------------------------------------------------------------*/
694436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*--- end                                                          ---*/
695436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov/*--------------------------------------------------------------------*/
696