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