blob: 5d6df36c6772c7d46f99f1490509c26ed865c0f6 [file] [log] [blame]
nethercote73b526f2004-10-31 18:48:21 +00001
2/*--------------------------------------------------------------------*/
njn4de47b12005-05-16 03:25:12 +00003/*--- Linux-specific kernel interface. vki-linux.h ---*/
nethercote73b526f2004-10-31 18:48:21 +00004/*--------------------------------------------------------------------*/
5
6/*
njnb9c427c2004-12-01 14:14:42 +00007 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
nethercote73b526f2004-10-31 18:48:21 +00009
njn53612422005-03-12 16:22:54 +000010 Copyright (C) 2000-2005 Julian Seward
nethercote73b526f2004-10-31 18:48:21 +000011 jseward@acm.org
12
13 This program is free software; you can redistribute it and/or
14 modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of the
16 License, or (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 02111-1307, USA.
27
28 The GNU General Public License is contained in the file COPYING.
29*/
30
31/* This file defines types and constants for the kernel interface, and to
32 make that clear everything is prefixed VKI_/vki_.
33
34 All code is copied verbatim from kernel source files, except that:
35 - VKI_/vki_ prefixes are added
36 - a few extra constants are defined (eg. VKI_MAP_NOSYMS); these are
37 marked 'internal'
38 - some extra explanatory comments are included; they are all within
39 "[[ ]]"
40 - for some types, we only care about the size; for a few of them (big
41 ones that are painful to fully drag in here), a VKI_SIZEOF_* constant
42 is used.
43
44 The files the code is taken from is indicated.
45
46 Note especially that the types are not the glibc versions, many of which
47 are different to those in here.
48
njnac7924c2005-05-02 13:24:14 +000049 Also note that this file contains all the generic header info, ie. that
sewardjedef1462005-05-02 17:11:58 +000050 from linux/include/linux/ *.h. The arch-specific header info, eg. that
njn4de47b12005-05-16 03:25:12 +000051 from linux/include/asm-i386/ *.h, is in vki-$PLATFORM.h and
52 vki_posixtypes-$PLATFORM.h. (Two files are required to avoid
njnac7924c2005-05-02 13:24:14 +000053 circular dependencies between the generic VKI header and the
54 arch-specific VKI header. It's possible in the future, as more stuff
55 gets pulled in, that we might have to split files up some more to avoid
56 further circular dependencies.)
57
nethercote73b526f2004-10-31 18:48:21 +000058 Finally, note that it is assumed that __KERNEL__ is set for all these
59 definitions, which affects some of them.
60*/
61
njn4de47b12005-05-16 03:25:12 +000062#ifndef __VKI_LINUX_H
63#define __VKI_LINUX_H
nethercote73b526f2004-10-31 18:48:21 +000064
65//----------------------------------------------------------------------
66// Arch-specific POSIX types
67//----------------------------------------------------------------------
68
njn4de47b12005-05-16 03:25:12 +000069#if defined(VGA_x86)
70# include "vki_posixtypes-x86-linux.h"
71#elif defined(VGA_amd64)
72# include "vki_posixtypes-amd64-linux.h"
cerion85665ca2005-06-20 15:51:07 +000073#elif defined(VGA_ppc32)
74# include "vki_posixtypes-ppc32-linux.h"
njn4de47b12005-05-16 03:25:12 +000075#else
76# error Unknown platform
77#endif
nethercote73b526f2004-10-31 18:48:21 +000078
79//----------------------------------------------------------------------
80// From linux-2.6.8.1/include/linux/compiler.h
81//----------------------------------------------------------------------
82
83# define __user
84
85# define __attribute_const__ /* unimplemented */
86
87//----------------------------------------------------------------------
88// From linux-2.6.8.1/include/linux/posix_types.h
89//----------------------------------------------------------------------
90
nethercotef1049bf2004-11-14 17:03:47 +000091#undef __VKI_NFDBITS
92#define __VKI_NFDBITS (8 * sizeof(unsigned long))
93
94#undef __VKI_FD_SETSIZE
95#define __VKI_FD_SETSIZE 1024
96
97#undef __VKI_FDSET_LONGS
98#define __VKI_FDSET_LONGS (__VKI_FD_SETSIZE/__VKI_NFDBITS)
99
100#undef __VKI_FDELT
101#define __VKI_FDELT(d) ((d) / __VKI_NFDBITS)
102
103#undef __VKI_FDMASK
104#define __VKI_FDMASK(d) (1UL << ((d) % __VKI_NFDBITS))
105
106typedef struct {
107 unsigned long fds_bits [__VKI_FDSET_LONGS];
108} __vki_kernel_fd_set;
109
nethercote73b526f2004-10-31 18:48:21 +0000110typedef int __vki_kernel_key_t;
nethercote330abb52004-11-16 12:58:04 +0000111typedef int __vki_kernel_mqd_t;
nethercote73b526f2004-10-31 18:48:21 +0000112
113//----------------------------------------------------------------------
114// From linux-2.6.8.1/include/linux/types.h
115//----------------------------------------------------------------------
116
nethercotef1049bf2004-11-14 17:03:47 +0000117typedef __vki_kernel_fd_set vki_fd_set;
nethercote73b526f2004-10-31 18:48:21 +0000118typedef __vki_kernel_mode_t vki_mode_t;
119typedef __vki_kernel_off_t vki_off_t;
120typedef __vki_kernel_pid_t vki_pid_t;
121typedef __vki_kernel_key_t vki_key_t;
122typedef __vki_kernel_suseconds_t vki_suseconds_t;
123typedef __vki_kernel_timer_t vki_timer_t;
nethercote92b2fd52004-11-16 16:15:41 +0000124typedef __vki_kernel_clockid_t vki_clockid_t;
nethercote330abb52004-11-16 12:58:04 +0000125typedef __vki_kernel_mqd_t vki_mqd_t;
nethercote73b526f2004-10-31 18:48:21 +0000126
127// [[Nb: it's a bit unclear due to a #ifdef, but I think this is right. --njn]]
128typedef __vki_kernel_uid32_t vki_uid_t;
129typedef __vki_kernel_gid32_t vki_gid_t;
130
nethercotec6851dd2004-11-11 18:00:47 +0000131typedef __vki_kernel_old_uid_t vki_old_uid_t;
132typedef __vki_kernel_old_gid_t vki_old_gid_t;
133
nethercote73b526f2004-10-31 18:48:21 +0000134typedef __vki_kernel_loff_t vki_loff_t;
135
136typedef __vki_kernel_size_t vki_size_t;
137typedef __vki_kernel_time_t vki_time_t;
138typedef __vki_kernel_clock_t vki_clock_t;
139typedef __vki_kernel_caddr_t vki_caddr_t;
140
nethercote5b653bc2004-11-15 14:32:12 +0000141typedef unsigned long vki_u_long;
142
nethercote7f7e4d12004-11-15 12:28:58 +0000143typedef unsigned int vki_uint;
144
nethercote73b526f2004-10-31 18:48:21 +0000145//----------------------------------------------------------------------
146// Now the rest of the arch-specific stuff
147//----------------------------------------------------------------------
148
njn4de47b12005-05-16 03:25:12 +0000149#if defined(VGA_x86)
150# include "vki-x86-linux.h"
151#elif defined(VGA_amd64)
152# include "vki-amd64-linux.h"
cerion85665ca2005-06-20 15:51:07 +0000153#elif defined(VGA_ppc32)
154# include "vki-ppc32-linux.h"
njn4de47b12005-05-16 03:25:12 +0000155#else
156# error Unknown platform
157#endif
nethercote73b526f2004-10-31 18:48:21 +0000158
159//----------------------------------------------------------------------
160// From linux-2.6.8.1/include/linux/limits.h
161//----------------------------------------------------------------------
162
163#define VKI_PATH_MAX 4096 /* # chars in a path name including nul */
164
165//----------------------------------------------------------------------
166// From linux-2.6.8.1/include/linux/kernel.h
167//----------------------------------------------------------------------
168
169struct vki_sysinfo {
170 long uptime; /* Seconds since boot */
171 unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
172 unsigned long totalram; /* Total usable main memory size */
173 unsigned long freeram; /* Available memory size */
174 unsigned long sharedram; /* Amount of shared memory */
175 unsigned long bufferram; /* Memory used by buffers */
176 unsigned long totalswap; /* Total swap space size */
177 unsigned long freeswap; /* swap space still available */
178 unsigned short procs; /* Number of current processes */
179 unsigned short pad; /* explicit padding for m68k */
180 unsigned long totalhigh; /* Total high memory size */
181 unsigned long freehigh; /* Available high memory size */
182 unsigned int mem_unit; /* Memory unit size in bytes */
183 char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
184};
185
186//----------------------------------------------------------------------
187// From linux-2.6.8.1/include/linux/byteorder/swab.h
188//----------------------------------------------------------------------
189
190#define ___vki_swab16(x) \
191({ \
192 __vki_u16 __x = (x); \
193 ((__vki_u16)( \
194 (((__vki_u16)(__x) & (__vki_u16)0x00ffU) << 8) | \
195 (((__vki_u16)(__x) & (__vki_u16)0xff00U) >> 8) )); \
196})
197
198/*
199 * provide defaults when no architecture-specific optimization is detected
200 */
201#ifndef __vki_arch__swab16
202# define __vki_arch__swab16(x) ({ __vki_u16 __tmp = (x) ; ___vki_swab16(__tmp); })
203#endif
204
205// [[Nb: using the non-OPTIMIZE version here -- easier to understand, and
206// we don't need the optimised version as we use this very rarely]]
207# define __vki_swab16(x) __vki_fswab16(x)
208
209static __inline__ __attribute_const__ __vki_u16 __vki_fswab16(__vki_u16 x)
210{
211 return __vki_arch__swab16(x);
212}
213
214//----------------------------------------------------------------------
215// From linux-2.6.8.1/include/linux/byteorder/little_endian.h
216//----------------------------------------------------------------------
217
218#ifdef VKI_LITTLE_ENDIAN
219#define __vki_be16_to_cpu(x) __vki_swab16((x))
220#endif // VKI_LITTLE_ENDIAN
221
222//----------------------------------------------------------------------
223// From linux-2.6.8.1/include/linux/byteorder/big_endian.h
224//----------------------------------------------------------------------
225
226#ifdef VKI_BIG_ENDIAN
227#define __vki_be16_to_cpu(x) ((__vki_u16)(x))
228#endif // VKI_BIG_ENDIAN
229
230//----------------------------------------------------------------------
231// From linux-2.6.8.1/include/linux/byteorder/generic.h
232//----------------------------------------------------------------------
233
234#define ___vki_ntohs(x) __vki_be16_to_cpu(x)
235
236#define vki_ntohs(x) ___vki_ntohs(x)
237
238//----------------------------------------------------------------------
239// From linux-2.6.8.1/include/linux/time.h
240//----------------------------------------------------------------------
241
242struct vki_timespec {
243 vki_time_t tv_sec; /* seconds */
244 long tv_nsec; /* nanoseconds */
245};
246
247struct vki_timeval {
248 vki_time_t tv_sec; /* seconds */
249 vki_suseconds_t tv_usec; /* microseconds */
250};
251
252struct vki_timezone {
253 int tz_minuteswest; /* minutes west of Greenwich */
254 int tz_dsttime; /* type of dst correction */
255};
256
257struct vki_itimerspec {
258 struct vki_timespec it_interval; /* timer period */
259 struct vki_timespec it_value; /* timer expiration */
260};
261
262struct vki_itimerval {
263 struct vki_timeval it_interval; /* timer interval */
264 struct vki_timeval it_value; /* current value */
265};
266
267//----------------------------------------------------------------------
268// From linux-2.6.8.1/include/linux/timex.h
269//----------------------------------------------------------------------
270
271struct vki_timex {
272 unsigned int modes; /* mode selector */
273 long offset; /* time offset (usec) */
274 long freq; /* frequency offset (scaled ppm) */
275 long maxerror; /* maximum error (usec) */
276 long esterror; /* estimated error (usec) */
277 int status; /* clock command/status */
278 long constant; /* pll time constant */
279 long precision; /* clock precision (usec) (read only) */
280 long tolerance; /* clock frequency tolerance (ppm)
281 * (read only)
282 */
283 struct vki_timeval time; /* (read only) */
284 long tick; /* (modified) usecs between clock ticks */
285
286 long ppsfreq; /* pps frequency (scaled ppm) (ro) */
287 long jitter; /* pps jitter (us) (ro) */
288 int shift; /* interval duration (s) (shift) (ro) */
289 long stabil; /* pps stability (scaled ppm) (ro) */
290 long jitcnt; /* jitter limit exceeded (ro) */
291 long calcnt; /* calibration intervals (ro) */
292 long errcnt; /* calibration errors (ro) */
293 long stbcnt; /* stability limit exceeded (ro) */
294
295 int :32; int :32; int :32; int :32;
296 int :32; int :32; int :32; int :32;
297 int :32; int :32; int :32; int :32;
298};
299
300//#define ADJ_OFFSET 0x0001 /* time offset */
301#define ADJ_FREQUENCY 0x0002 /* frequency offset */
302#define ADJ_MAXERROR 0x0004 /* maximum time error */
303#define ADJ_ESTERROR 0x0008 /* estimated time error */
304#define ADJ_STATUS 0x0010 /* clock status */
305#define ADJ_TIMECONST 0x0020 /* pll time constant */
306#define ADJ_TICK 0x4000 /* tick value */
307//#define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */
308
309//----------------------------------------------------------------------
310// From linux-2.6.8.1/include/linux/times.h
311//----------------------------------------------------------------------
312
313struct vki_tms {
314 vki_clock_t tms_utime;
315 vki_clock_t tms_stime;
316 vki_clock_t tms_cutime;
317 vki_clock_t tms_cstime;
318};
319
320//----------------------------------------------------------------------
321// From linux-2.6.8.1/include/linux/utime.h
322//----------------------------------------------------------------------
323
324struct vki_utimbuf {
325 vki_time_t actime;
326 vki_time_t modtime;
327};
328
329//----------------------------------------------------------------------
330// From linux-2.6.8.1/include/linux/sched.h
331//----------------------------------------------------------------------
332
sewardjb5f6f512005-03-10 23:59:00 +0000333#define VKI_CSIGNAL 0x000000ff /* signal mask to be sent at exit */
nethercote73b526f2004-10-31 18:48:21 +0000334#define VKI_CLONE_VM 0x00000100 /* set if VM shared between processes */
335#define VKI_CLONE_FS 0x00000200 /* set if fs info shared between processes */
336#define VKI_CLONE_FILES 0x00000400 /* set if open files shared between processes */
337#define VKI_CLONE_SIGHAND 0x00000800 /* set if signal handlers and blocked signals shared */
sewardjb5f6f512005-03-10 23:59:00 +0000338#define VKI_CLONE_VFORK 0x00004000 /* set if the parent wants the child to wake it up on mm_release */
339#define VKI_CLONE_PARENT 0x00008000 /* set if we want to have the same parent as the cloner */
nethercote73b526f2004-10-31 18:48:21 +0000340#define VKI_CLONE_THREAD 0x00010000 /* Same thread group? */
sewardjb5f6f512005-03-10 23:59:00 +0000341#define VKI_CLONE_SYSVSEM 0x00040000 /* share system V SEM_UNDO semantics */
342#define VKI_CLONE_SETTLS 0x00080000 /* create a new TLS for the child */
nethercote73b526f2004-10-31 18:48:21 +0000343#define VKI_CLONE_PARENT_SETTID 0x00100000 /* set the TID in the parent */
344#define VKI_CLONE_CHILD_CLEARTID 0x00200000 /* clear the TID in the child */
345#define VKI_CLONE_DETACHED 0x00400000 /* Unused, ignored */
346#define VKI_CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */
347
348struct vki_sched_param {
349 int sched_priority;
350};
351
352//----------------------------------------------------------------------
353// From linux-2.6.8.1/include/asm-generic/siginfo.h
354//----------------------------------------------------------------------
355
356typedef union vki_sigval {
357 int sival_int;
358 void __user *sival_ptr;
359} vki_sigval_t;
360
361#ifndef __VKI_ARCH_SI_PREAMBLE_SIZE
362#define __VKI_ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
363#endif
364
365#define VKI_SI_MAX_SIZE 128
366
367#ifndef VKI_SI_PAD_SIZE
368#define VKI_SI_PAD_SIZE ((VKI_SI_MAX_SIZE - __VKI_ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
369#endif
370
371#ifndef __VKI_ARCH_SI_UID_T
372#define __VKI_ARCH_SI_UID_T vki_uid_t
373#endif
374
375#ifndef __VKI_ARCH_SI_BAND_T
376#define __VKI_ARCH_SI_BAND_T long
377#endif
378
379// [[Nb: this type changed between 2.4 and 2.6, but not in a way that
380// affects Valgrind.]]
381typedef struct vki_siginfo {
382 int si_signo;
383 int si_errno;
384 int si_code;
385
386 union {
387 int _pad[VKI_SI_PAD_SIZE];
388
389 /* kill() */
390 struct {
391 vki_pid_t _pid; /* sender's pid */
392 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
393 } _kill;
394
395 /* POSIX.1b timers */
396 struct {
397 vki_timer_t _tid; /* timer id */
398 int _overrun; /* overrun count */
399 char _pad[sizeof( __VKI_ARCH_SI_UID_T) - sizeof(int)];
400 vki_sigval_t _sigval; /* same as below */
401 int _sys_private; /* not to be passed to user */
402 } _timer;
403
404 /* POSIX.1b signals */
405 struct {
406 vki_pid_t _pid; /* sender's pid */
407 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
408 vki_sigval_t _sigval;
409 } _rt;
410
411 /* SIGCHLD */
412 struct {
413 vki_pid_t _pid; /* which child */
414 __VKI_ARCH_SI_UID_T _uid; /* sender's uid */
415 int _status; /* exit code */
416 vki_clock_t _utime;
417 vki_clock_t _stime;
418 } _sigchld;
419
420 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
421 struct {
422 void __user *_addr; /* faulting insn/memory ref. */
423#ifdef __ARCH_SI_TRAPNO
424 int _trapno; /* TRAP # which caused the signal */
425#endif
426 } _sigfault;
427
428 /* SIGPOLL */
429 struct {
430 __VKI_ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
431 int _fd;
432 } _sigpoll;
433 } _sifields;
434} vki_siginfo_t;
435
436/*
437 * si_code values
438 * Digital reserves positive values for kernel-generated signals.
439 */
440#define VKI_SI_USER 0 /* sent by kill, sigsend, raise */
441#define VKI_SI_TKILL -6 /* sent by tkill system call */
442
tome7203a82005-07-20 13:45:43 +0000443/*
444 * This works because the alignment is ok on all current architectures
445 * but we leave open this being overridden in the future
446 */
447#ifndef VKI___ARCH_SIGEV_PREAMBLE_SIZE
448#define VKI___ARCH_SIGEV_PREAMBLE_SIZE (sizeof(int) * 2 + sizeof(vki_sigval_t))
nethercote73b526f2004-10-31 18:48:21 +0000449#endif
450
tome7203a82005-07-20 13:45:43 +0000451#define VKI_SIGEV_MAX_SIZE 64
452#define VKI_SIGEV_PAD_SIZE ((VKI_SIGEV_MAX_SIZE - VKI___ARCH_SIGEV_PREAMBLE_SIZE) \
453 / sizeof(int))
nethercote73b526f2004-10-31 18:48:21 +0000454
455typedef struct vki_sigevent {
456 vki_sigval_t sigev_value;
457 int sigev_signo;
458 int sigev_notify;
459 union {
460 int _pad[VKI_SIGEV_PAD_SIZE];
461 int _tid;
462
463 struct {
464 void (*_function)(vki_sigval_t);
465 void *_attribute; /* really pthread_attr_t */
466 } _sigev_thread;
467 } _sigev_un;
468} vki_sigevent_t;
469
nethercote73b526f2004-10-31 18:48:21 +0000470//----------------------------------------------------------------------
471// From elsewhere...
472//----------------------------------------------------------------------
473
474// [[The kernel actually uses the numbers 0,1,2 directly here, believe it or
475// not. So we introduce our own constants, based on the glibc ones.]]
476#define VKI_SEEK_SET 0
477#define VKI_SEEK_CUR 1
478#define VKI_SEEK_END 2
479
480// [[Our own additional mmap flags]]
481#define VKI_MAP_NOSYMS 0x40000000 // internal: disable symbol loading
482#define VKI_MAP_CLIENT 0x80000000 // internal: distinguish client mappings
483
484//----------------------------------------------------------------------
485// From linux-2.6.8.1/include/linux/net.h
486//----------------------------------------------------------------------
487
488#define VKI_SYS_SOCKET 1 /* sys_socket(2) */
489#define VKI_SYS_BIND 2 /* sys_bind(2) */
490#define VKI_SYS_CONNECT 3 /* sys_connect(2) */
491#define VKI_SYS_LISTEN 4 /* sys_listen(2) */
492#define VKI_SYS_ACCEPT 5 /* sys_accept(2) */
493#define VKI_SYS_GETSOCKNAME 6 /* sys_getsockname(2) */
494#define VKI_SYS_GETPEERNAME 7 /* sys_getpeername(2) */
495#define VKI_SYS_SOCKETPAIR 8 /* sys_socketpair(2) */
496#define VKI_SYS_SEND 9 /* sys_send(2) */
497#define VKI_SYS_RECV 10 /* sys_recv(2) */
498#define VKI_SYS_SENDTO 11 /* sys_sendto(2) */
499#define VKI_SYS_RECVFROM 12 /* sys_recvfrom(2) */
500#define VKI_SYS_SHUTDOWN 13 /* sys_shutdown(2) */
501#define VKI_SYS_SETSOCKOPT 14 /* sys_setsockopt(2) */
502#define VKI_SYS_GETSOCKOPT 15 /* sys_getsockopt(2) */
503#define VKI_SYS_SENDMSG 16 /* sys_sendmsg(2) */
504#define VKI_SYS_RECVMSG 17 /* sys_recvmsg(2) */
505
njnca0518d2004-11-26 19:34:36 +0000506enum vki_sock_type {
507 VKI_SOCK_STREAM = 1,
508 // [[others omitted]]
509};
510
nethercote73b526f2004-10-31 18:48:21 +0000511//----------------------------------------------------------------------
512// From linux-2.6.8.1/include/linux/uio.h
513//----------------------------------------------------------------------
514
515struct vki_iovec
516{
517 void __user *iov_base; /* BSD uses caddr_t (1003.1g requires void *) */
518 __vki_kernel_size_t iov_len; /* Must be size_t (1003.1g) */
519};
520
521//----------------------------------------------------------------------
522// From linux-2.6.8.1/include/linux/socket.h
523//----------------------------------------------------------------------
524
525// [[Resolved arbitrarily; doesn't really matter whether it's '__inline__'
526// or 'inline']]
527#define __KINLINE static __inline__
528
529typedef unsigned short vki_sa_family_t;
530
531struct vki_sockaddr {
532 vki_sa_family_t sa_family; /* address family, AF_xxx */
533 char sa_data[14]; /* 14 bytes of protocol address */
534};
535
536struct vki_msghdr {
537 void * msg_name; /* Socket name */
538 int msg_namelen; /* Length of name */
539 struct vki_iovec * msg_iov; /* Data blocks */
540 __vki_kernel_size_t msg_iovlen; /* Number of blocks */
541 void * msg_control; /* Per protocol magic (eg BSD file descriptor passing) */
542 __vki_kernel_size_t msg_controllen; /* Length of cmsg list */
543 unsigned msg_flags;
544};
545
546struct vki_cmsghdr {
547 __vki_kernel_size_t cmsg_len; /* data byte count, including hdr */
548 int cmsg_level; /* originating protocol */
549 int cmsg_type; /* protocol-specific type */
550};
551
552#define __VKI_CMSG_NXTHDR(ctl, len, cmsg) __vki_cmsg_nxthdr((ctl),(len),(cmsg))
553#define VKI_CMSG_NXTHDR(mhdr, cmsg) vki_cmsg_nxthdr((mhdr), (cmsg))
554
555#define VKI_CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
556
557#define VKI_CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + VKI_CMSG_ALIGN(sizeof(struct vki_cmsghdr))))
558
559#define __VKI_CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct vki_cmsghdr) ? \
560 (struct vki_cmsghdr *)(ctl) : \
561 (struct vki_cmsghdr *)NULL)
562#define VKI_CMSG_FIRSTHDR(msg) __VKI_CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
563
564// [[Urgh, this is revolting...]
565__KINLINE struct vki_cmsghdr * __vki_cmsg_nxthdr(void *__ctl, __vki_kernel_size_t __size,
566 struct vki_cmsghdr *__cmsg)
567{
568 struct vki_cmsghdr * __ptr;
569
570 __ptr = (struct vki_cmsghdr*)(((unsigned char *) __cmsg) + VKI_CMSG_ALIGN(__cmsg->cmsg_len));
571 if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
572 return (struct vki_cmsghdr *)0;
573
574 return __ptr;
575}
576
577__KINLINE struct vki_cmsghdr * vki_cmsg_nxthdr (struct vki_msghdr *__msg, struct vki_cmsghdr *__cmsg)
578{
579 return __vki_cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
580}
581
582#define VKI_SCM_RIGHTS 0x01 /* rw: access rights (array of int) */
583
584#define VKI_AF_UNIX 1 /* Unix domain sockets */
585#define VKI_AF_INET 2 /* Internet IP Protocol */
586#define VKI_AF_INET6 10 /* IP version 6 */
587
588#define VKI_MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */
589
tom1aa57372005-08-28 10:16:29 +0000590#define VKI_SOL_SCTP 132
591
nethercote73b526f2004-10-31 18:48:21 +0000592//----------------------------------------------------------------------
593// From linux-2.6.8.1/include/linux/in.h
594//----------------------------------------------------------------------
595
596struct vki_in_addr {
597 __vki_u32 s_addr;
598};
599
600/* Structure describing an Internet (IP) socket address. */
601#define __VKI_SOCK_SIZE__ 16 /* sizeof(struct sockaddr) */
602struct vki_sockaddr_in {
603 vki_sa_family_t sin_family; /* Address family */
604 unsigned short int sin_port; /* Port number */
605 struct vki_in_addr sin_addr; /* Internet address */
606
607 /* Pad to size of `struct sockaddr'. */
608 unsigned char __pad[__VKI_SOCK_SIZE__ - sizeof(short int) -
609 sizeof(unsigned short int) - sizeof(struct vki_in_addr)];
610};
611
612//----------------------------------------------------------------------
613// From linux-2.6.8.1/include/linux/in6.h
614//----------------------------------------------------------------------
615
616struct vki_in6_addr
617{
618 union
619 {
620 __vki_u8 u6_addr8[16];
621 __vki_u16 u6_addr16[8];
622 __vki_u32 u6_addr32[4];
623 } vki_in6_u;
624#define vki_s6_addr vki_in6_u.u6_addr8
625#define vki_s6_addr16 vki_in6_u.u6_addr16
626#define vki_s6_addr32 vki_in6_u.u6_addr32
627};
628
629struct vki_sockaddr_in6 {
630 unsigned short int sin6_family; /* AF_INET6 */
631 __vki_u16 sin6_port; /* Transport layer port # */
632 __vki_u32 sin6_flowinfo; /* IPv6 flow information */
633 struct vki_in6_addr sin6_addr; /* IPv6 address */
634 __vki_u32 sin6_scope_id; /* scope id (new in RFC2553) */
635};
636
637//----------------------------------------------------------------------
638// From linux-2.6.8.1/include/linux/un.h
639//----------------------------------------------------------------------
640
641#define VKI_UNIX_PATH_MAX 108
642
643struct vki_sockaddr_un {
644 vki_sa_family_t sun_family; /* AF_UNIX */
645 char sun_path[VKI_UNIX_PATH_MAX]; /* pathname */
646};
647
648//----------------------------------------------------------------------
649// From linux-2.6.8.1/include/linux/if.h
650//----------------------------------------------------------------------
651
652#define VKI_IFNAMSIZ 16
653
654struct vki_ifmap
655{
656 unsigned long mem_start;
657 unsigned long mem_end;
658 unsigned short base_addr;
659 unsigned char irq;
660 unsigned char dma;
661 unsigned char port;
662 /* 3 bytes spare */
663};
664
665struct vki_if_settings
666{
667 unsigned int type; /* Type of physical device or protocol */
668 unsigned int size; /* Size of the data allocated by the caller */
669 union {
670 // [[Nb: converted these all to void* to avoid pulling in
671 // unnecessary headers]]]
672 /* {atm/eth/dsl}_settings anyone ? */
673 void /*raw_hdlc_proto */__user *raw_hdlc;
674 void /*cisco_proto */__user *cisco;
675 void /*fr_proto */__user *fr;
676 void /*fr_proto_pvc */__user *fr_pvc;
677 void /*fr_proto_pvc_info */__user *fr_pvc_info;
678
679 /* interface settings */
680 void /*sync_serial_settings */__user *sync;
681 void /*te1_settings */__user *te1;
682 } ifs_ifsu;
683};
684
685struct vki_ifreq
686{
687#define VKI_IFHWADDRLEN 6
688 union
689 {
690 char ifrn_name[VKI_IFNAMSIZ]; /* if name, e.g. "en0" */
691 } ifr_ifrn;
692
693 union {
694 struct vki_sockaddr ifru_addr;
695 struct vki_sockaddr ifru_dstaddr;
696 struct vki_sockaddr ifru_broadaddr;
697 struct vki_sockaddr ifru_netmask;
698 struct vki_sockaddr ifru_hwaddr;
699 short ifru_flags;
700 int ifru_ivalue;
701 int ifru_mtu;
702 struct vki_ifmap ifru_map;
703 char ifru_slave[VKI_IFNAMSIZ]; /* Just fits the size */
704 char ifru_newname[VKI_IFNAMSIZ];
705 void __user * ifru_data;
706 struct vki_if_settings ifru_settings;
707 } ifr_ifru;
708};
709
710#define vki_ifr_name ifr_ifrn.ifrn_name /* interface name */
711#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
712#define ifr_addr ifr_ifru.ifru_addr /* address */
713#define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-p lnk */
714#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
715#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
716#define vki_ifr_flags ifr_ifru.ifru_flags /* flags */
717#define vki_ifr_metric ifr_ifru.ifru_ivalue /* metric */
718#define vki_ifr_mtu ifr_ifru.ifru_mtu /* mtu */
719#define ifr_map ifr_ifru.ifru_map /* device map */
720#define ifr_slave ifr_ifru.ifru_slave /* slave device */
721#define vki_ifr_data ifr_ifru.ifru_data /* for use by interface */
722#define vki_ifr_ifindex ifr_ifru.ifru_ivalue /* interface index */
723#define ifr_bandwidth ifr_ifru.ifru_ivalue /* link bandwidth */
724#define ifr_qlen ifr_ifru.ifru_ivalue /* Queue length */
725#define ifr_newname ifr_ifru.ifru_newname /* New name */
726#define ifr_settings ifr_ifru.ifru_settings /* Device/proto settings*/
727
728struct vki_ifconf
729{
730 int ifc_len; /* size of buffer */
731 union
732 {
733 char __user *ifcu_buf;
734 struct vki_ifreq __user *ifcu_req;
735 } ifc_ifcu;
736};
737#define vki_ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
738
739//----------------------------------------------------------------------
740// From linux-2.6.8.1/include/linux/if_arp.h
741//----------------------------------------------------------------------
742
743struct vki_arpreq {
744 struct vki_sockaddr arp_pa; /* protocol address */
745 struct vki_sockaddr arp_ha; /* hardware address */
746 int arp_flags; /* flags */
747 struct vki_sockaddr arp_netmask; /* netmask (only for proxy arps) */
748 char arp_dev[16];
749};
750
751//----------------------------------------------------------------------
752// From linux-2.6.8.1/include/linux/route.h
753//----------------------------------------------------------------------
754
755struct vki_rtentry
756{
757 unsigned long rt_pad1;
758 struct vki_sockaddr rt_dst; /* target address */
759 struct vki_sockaddr rt_gateway; /* gateway addr (RTF_GATEWAY) */
760 struct vki_sockaddr rt_genmask; /* target network mask (IP) */
761 unsigned short rt_flags;
762 short rt_pad2;
763 unsigned long rt_pad3;
764 void *rt_pad4;
765 short rt_metric; /* +1 for binary compatibility! */
766 char __user *rt_dev; /* forcing the device at add */
767 unsigned long rt_mtu; /* per route MTU/Window */
768// [[Not important for Valgrind]]
769//#ifndef __KERNEL__
770//#define rt_mss rt_mtu /* Compatibility :-( */
771//#endif
772 unsigned long rt_window; /* Window clamping */
773 unsigned short rt_irtt; /* Initial RTT */
774};
775
776//----------------------------------------------------------------------
tom1aa57372005-08-28 10:16:29 +0000777// From linux-2.6.13-rc5/include/net/sctp/user.h
778//----------------------------------------------------------------------
779
780typedef __vki_s32 vki_sctp_assoc_t;
781
782enum vki_sctp_optname {
783 VKI_SCTP_RTOINFO,
784#define VKI_SCTP_RTOINFO VKI_SCTP_RTOINFO
785 VKI_SCTP_ASSOCINFO,
786#define VKI_SCTP_ASSOCINFO VKI_SCTP_ASSOCINFO
787 VKI_SCTP_INITMSG,
788#define VKI_SCTP_INITMSG VKI_SCTP_INITMSG
789 VKI_SCTP_NODELAY, /* Get/set nodelay option. */
790#define VKI_SCTP_NODELAY VKI_SCTP_NODELAY
791 VKI_SCTP_AUTOCLOSE,
792#define VKI_SCTP_AUTOCLOSE VKI_SCTP_AUTOCLOSE
793 VKI_SCTP_SET_PEER_PRIMARY_ADDR,
794#define VKI_SCTP_SET_PEER_PRIMARY_ADDR VKI_SCTP_SET_PEER_PRIMARY_ADDR
795 VKI_SCTP_PRIMARY_ADDR,
796#define VKI_SCTP_PRIMARY_ADDR VKI_SCTP_PRIMARY_ADDR
797 VKI_SCTP_ADAPTION_LAYER,
798#define VKI_SCTP_ADAPTION_LAYER VKI_SCTP_ADAPTION_LAYER
799 VKI_SCTP_DISABLE_FRAGMENTS,
800#define VKI_SCTP_DISABLE_FRAGMENTS VKI_SCTP_DISABLE_FRAGMENTS
801 VKI_SCTP_PEER_ADDR_PARAMS,
802#define VKI_SCTP_PEER_ADDR_PARAMS VKI_SCTP_PEER_ADDR_PARAMS
803 VKI_SCTP_DEFAULT_SEND_PARAM,
804#define VKI_SCTP_DEFAULT_SEND_PARAM VKI_SCTP_DEFAULT_SEND_PARAM
805 VKI_SCTP_EVENTS,
806#define VKI_SCTP_EVENTS VKI_SCTP_EVENTS
807 VKI_SCTP_I_WANT_MAPPED_V4_ADDR, /* Turn on/off mapped v4 addresses */
808#define VKI_SCTP_I_WANT_MAPPED_V4_ADDR VKI_SCTP_I_WANT_MAPPED_V4_ADDR
809 VKI_SCTP_MAXSEG, /* Get/set maximum fragment. */
810#define VKI_SCTP_MAXSEG VKI_SCTP_MAXSEG
811 VKI_SCTP_STATUS,
812#define VKI_SCTP_STATUS VKI_SCTP_STATUS
813 VKI_SCTP_GET_PEER_ADDR_INFO,
814#define VKI_SCTP_GET_PEER_ADDR_INFO VKI_SCTP_GET_PEER_ADDR_INFO
815
816 /* Internal Socket Options. Some of the sctp library functions are
817 * implemented using these socket options.
818 */
819 VKI_SCTP_SOCKOPT_BINDX_ADD = 100,/* BINDX requests for adding addresses. */
820#define VKI_SCTP_SOCKOPT_BINDX_ADD VKI_SCTP_SOCKOPT_BINDX_ADD
821 VKI_SCTP_SOCKOPT_BINDX_REM, /* BINDX requests for removing addresses. */
822#define VKI_SCTP_SOCKOPT_BINDX_REM VKI_SCTP_SOCKOPT_BINDX_REM
823 VKI_SCTP_SOCKOPT_PEELOFF, /* peel off association. */
824#define VKI_SCTP_SOCKOPT_PEELOFF VKI_SCTP_SOCKOPT_PEELOFF
825 VKI_SCTP_GET_PEER_ADDRS_NUM, /* Get number of peer addresss. */
826#define VKI_SCTP_GET_PEER_ADDRS_NUM VKI_SCTP_GET_PEER_ADDRS_NUM
827 VKI_SCTP_GET_PEER_ADDRS, /* Get all peer addresss. */
828#define VKI_SCTP_GET_PEER_ADDRS VKI_SCTP_GET_PEER_ADDRS
829 VKI_SCTP_GET_LOCAL_ADDRS_NUM, /* Get number of local addresss. */
830#define VKI_SCTP_GET_LOCAL_ADDRS_NUM VKI_SCTP_GET_LOCAL_ADDRS_NUM
831 VKI_SCTP_GET_LOCAL_ADDRS, /* Get all local addresss. */
832#define VKI_SCTP_GET_LOCAL_ADDRS VKI_SCTP_GET_LOCAL_ADDRS
833 VKI_SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */
834#define VKI_SCTP_SOCKOPT_CONNECTX VKI_SCTP_SOCKOPT_CONNECTX
835};
836
837struct vki_sctp_getaddrs {
838 vki_sctp_assoc_t assoc_id;
839 int addr_num;
840 struct vki_sockaddr *addrs;
841};
842
843//----------------------------------------------------------------------
nethercote73b526f2004-10-31 18:48:21 +0000844// From linux-2.6.8.1/include/linux/resource.h
845//----------------------------------------------------------------------
846
847struct vki_rusage {
848 struct vki_timeval ru_utime; /* user time used */
849 struct vki_timeval ru_stime; /* system time used */
850 long ru_maxrss; /* maximum resident set size */
851 long ru_ixrss; /* integral shared memory size */
852 long ru_idrss; /* integral unshared data size */
853 long ru_isrss; /* integral unshared stack size */
854 long ru_minflt; /* page reclaims */
855 long ru_majflt; /* page faults */
856 long ru_nswap; /* swaps */
857 long ru_inblock; /* block input operations */
858 long ru_oublock; /* block output operations */
859 long ru_msgsnd; /* messages sent */
860 long ru_msgrcv; /* messages received */
861 long ru_nsignals; /* signals received */
862 long ru_nvcsw; /* voluntary context switches */
863 long ru_nivcsw; /* involuntary " */
864};
865
866struct vki_rlimit {
867 unsigned long rlim_cur;
868 unsigned long rlim_max;
869};
870
871//----------------------------------------------------------------------
872// From linux-2.6.8.1/include/linux/elfcore.h
873//----------------------------------------------------------------------
874
875struct vki_elf_siginfo
876{
877 int si_signo; /* signal number */
878 int si_code; /* extra code */
879 int si_errno; /* errno */
880};
881
882// [[Removed some commented out lines here]]
883struct vki_elf_prstatus
884{
885 struct vki_elf_siginfo pr_info; /* Info associated with signal */
886 short pr_cursig; /* Current signal */
887 unsigned long pr_sigpend; /* Set of pending signals */
888 unsigned long pr_sighold; /* Set of held signals */
889 vki_pid_t pr_pid;
890 vki_pid_t pr_ppid;
891 vki_pid_t pr_pgrp;
892 vki_pid_t pr_sid;
893 struct vki_timeval pr_utime; /* User time */
894 struct vki_timeval pr_stime; /* System time */
895 struct vki_timeval pr_cutime; /* Cumulative user time */
896 struct vki_timeval pr_cstime; /* Cumulative system time */
897 vki_elf_gregset_t pr_reg; /* GP registers */
898 int pr_fpvalid; /* True if math co-processor being used. */
899};
900
901#define VKI_ELF_PRARGSZ (80) /* Number of chars for args */
902
903struct vki_elf_prpsinfo
904{
905 char pr_state; /* numeric process state */
906 char pr_sname; /* char for pr_state */
907 char pr_zomb; /* zombie */
908 char pr_nice; /* nice val */
909 unsigned long pr_flag; /* flags */
910 __vki_kernel_uid_t pr_uid;
911 __vki_kernel_gid_t pr_gid;
912 vki_pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid;
913 /* Lots missing */
914 char pr_fname[16]; /* filename of executable */
915 char pr_psargs[VKI_ELF_PRARGSZ]; /* initial part of arg list */
916};
917
918//----------------------------------------------------------------------
njn40e73582005-06-24 21:41:28 +0000919// From linux-2.6.12.1/include/linux/eventpoll.h
nethercote73b526f2004-10-31 18:48:21 +0000920//----------------------------------------------------------------------
921
njn40e73582005-06-24 21:41:28 +0000922/* Valid opcodes to issue to sys_epoll_ctl() */
923#define VKI_EPOLL_CTL_ADD 1
924#define VKI_EPOLL_CTL_DEL 2
925#define VKI_EPOLL_CTL_MOD 3
926
nethercote73b526f2004-10-31 18:48:21 +0000927#ifdef __x86_64__
928#define VKI_EPOLL_PACKED __attribute__((packed))
929#else
930#define VKI_EPOLL_PACKED
931#endif
932
njn40e73582005-06-24 21:41:28 +0000933struct vki_epoll_event {
nethercote73b526f2004-10-31 18:48:21 +0000934 __vki_u32 events;
935 __vki_u64 data;
936} VKI_EPOLL_PACKED;
937
938
939//----------------------------------------------------------------------
940// From linux-2.6.8.1/include/linux/mqueue.h
941//----------------------------------------------------------------------
942
943struct vki_mq_attr {
944 long mq_flags; /* message queue flags */
945 long mq_maxmsg; /* maximum number of messages */
946 long mq_msgsize; /* maximum message size */
947 long mq_curmsgs; /* number of messages currently queued */
948 long __reserved[4]; /* ignored for input, zeroed for output */
949};
950
951//----------------------------------------------------------------------
952// From linux-2.6.8.1/include/linux/utsname.h
953//----------------------------------------------------------------------
954
nethercote73b526f2004-10-31 18:48:21 +0000955struct vki_new_utsname {
956 char sysname[65];
957 char nodename[65];
958 char release[65];
959 char version[65];
960 char machine[65];
961 char domainname[65];
962};
963
964//----------------------------------------------------------------------
965// From linux-2.6.8.1/include/linux/mii.h
966//----------------------------------------------------------------------
967
968/* This structure is used in all SIOCxMIIxxx ioctl calls */
969struct vki_mii_ioctl_data {
970 vki_u16 phy_id;
971 vki_u16 reg_num;
972 vki_u16 val_in;
973 vki_u16 val_out;
974};
975
976//----------------------------------------------------------------------
977// From linux-2.6.8.1/include/linux/capability.h
978//----------------------------------------------------------------------
979
980// [[capget()/capset() man page says this, ominously:
981//
982// The kernel API is likely to change and use of these functions (in
983// particular the format of the cap_user_*_t types) is subject to
984// change with each kernel revision.
985//
986// However, the format hasn't changed since at least Linux 2.4.6.]]
987
988typedef struct __vki_user_cap_header_struct {
989 __vki_u32 version;
990 int pid;
991} __user *vki_cap_user_header_t;
992
993typedef struct __vki_user_cap_data_struct {
994 __vki_u32 effective;
995 __vki_u32 permitted;
996 __vki_u32 inheritable;
997} __user *vki_cap_user_data_t;
998
999
1000//----------------------------------------------------------------------
1001// From linux-2.6.8.1/include/linux/module.h
1002//----------------------------------------------------------------------
1003
1004// [[We do a VKI_SIZEOF_* here because this type is so big, and its size
1005// depends on the word size, so see vki_arch.h]]
1006
1007//----------------------------------------------------------------------
1008// From linux-2.6.8.1/include/linux/ipc.h
1009//----------------------------------------------------------------------
1010
1011/* Obsolete, used only for backwards compatibility and libc5 compiles */
1012struct vki_ipc_perm
1013{
1014 __vki_kernel_key_t key;
1015 __vki_kernel_uid_t uid;
1016 __vki_kernel_gid_t gid;
1017 __vki_kernel_uid_t cuid;
1018 __vki_kernel_gid_t cgid;
1019 __vki_kernel_mode_t mode;
1020 unsigned short seq;
1021};
1022
1023#define VKI_IPC_CREAT 00001000 /* create if key is nonexistent */
1024#define VKI_IPC_EXCL 00002000 /* fail if key exists */
1025#define VKI_IPC_NOWAIT 00004000 /* return error on wait */
1026
1027//#define VKI_IPC_RMID 0 /* remove resource */
1028#define VKI_IPC_SET 1 /* set ipc_perm options */
1029#define VKI_IPC_STAT 2 /* get ipc_perm options */
1030#define VKI_IPC_INFO 3 /* see ipcs */
1031
1032#define VKI_IPC_64 0x0100 /* New version (support 32-bit UIDs, bigger
1033 message sizes, etc. */
1034
1035//----------------------------------------------------------------------
1036// From linux-2.6.8.1/include/linux/sem.h
1037//----------------------------------------------------------------------
1038
1039#define VKI_GETALL 13 /* get all semval's */
1040#define VKI_SETVAL 16 /* set semval */
1041#define VKI_SETALL 17 /* set all semval's */
1042
1043#define VKI_SEM_STAT 18
1044#define VKI_SEM_INFO 19
1045
1046/* Obsolete, used only for backwards compatibility and libc5 compiles */
1047struct vki_semid_ds {
1048 struct vki_ipc_perm sem_perm; /* permissions .. see ipc.h */
1049 __vki_kernel_time_t sem_otime; /* last semop time */
1050 __vki_kernel_time_t sem_ctime; /* last change time */
1051 // [[Use void* to avoid excess header copying]]
1052 void/*struct sem */*sem_base; /* ptr to first semaphore in array */
1053 void/*struct sem_queue */*sem_pending; /* pending operations to be processed */
1054 void/*struct sem_queue */**sem_pending_last; /* last pending operation */
1055 void/*struct sem_undo */*undo; /* undo requests on this array */
1056 unsigned short sem_nsems; /* no. of semaphores in array */
1057};
1058
1059struct vki_sembuf {
1060 unsigned short sem_num; /* semaphore index in array */
1061 short sem_op; /* semaphore operation */
1062 short sem_flg; /* operation flags */
1063};
1064
1065union vki_semun {
1066 int val; /* value for SETVAL */
1067 struct vki_semid_ds __user *buf; /* buffer for IPC_STAT & IPC_SET */
1068 unsigned short __user *array; /* array for GETALL & SETALL */
1069 struct vki_seminfo __user *__buf; /* buffer for IPC_INFO */
1070 void __user *__pad;
1071};
1072
1073struct vki_seminfo {
1074 int semmap;
1075 int semmni;
1076 int semmns;
1077 int semmnu;
1078 int semmsl;
1079 int semopm;
1080 int semume;
1081 int semusz;
1082 int semvmx;
1083 int semaem;
1084};
1085
1086//----------------------------------------------------------------------
1087// From linux-2.6.8.1/include/asm-generic/errno-base.h
1088//----------------------------------------------------------------------
1089
1090#define VKI_EPERM 1 /* Operation not permitted */
1091#define VKI_ESRCH 3 /* No such process */
1092#define VKI_EINTR 4 /* Interrupted system call */
1093#define VKI_EBADF 9 /* Bad file number */
sewardjb5f6f512005-03-10 23:59:00 +00001094#define VKI_EAGAIN 11 /* Try again */
1095#define VKI_EWOULDBLOCK VKI_EAGAIN
nethercote73b526f2004-10-31 18:48:21 +00001096#define VKI_ENOMEM 12 /* Out of memory */
1097#define VKI_EACCES 13 /* Permission denied */
1098#define VKI_EFAULT 14 /* Bad address */
1099#define VKI_EEXIST 17 /* File exists */
1100#define VKI_EINVAL 22 /* Invalid argument */
1101#define VKI_EMFILE 24 /* Too many open files */
1102
1103//----------------------------------------------------------------------
1104// From linux-2.6.8.1/include/asm-generic/errno.h
1105//----------------------------------------------------------------------
1106
1107#define VKI_ENOSYS 38 /* Function not implemented */
1108
1109//----------------------------------------------------------------------
1110// From linux-2.6.8.1/include/linux/wait.h
1111//----------------------------------------------------------------------
1112
1113#define VKI_WNOHANG 0x00000001
1114
1115#define __VKI_WALL 0x40000000 /* Wait on all children, regardless of type */
1116#define __VKI_WCLONE 0x80000000 /* Wait only on non-SIGCHLD children */
1117
1118//----------------------------------------------------------------------
1119// From linux-2.6.8.1/include/linux/mman.h
1120//----------------------------------------------------------------------
1121
1122#define VKI_MREMAP_MAYMOVE 1
1123#define VKI_MREMAP_FIXED 2
1124
1125//----------------------------------------------------------------------
sewardjb5f6f512005-03-10 23:59:00 +00001126// From linux-2.6.10-rc3-mm1/include/linux/futex.h
nethercote73b526f2004-10-31 18:48:21 +00001127//----------------------------------------------------------------------
1128
1129#define VKI_FUTEX_WAIT (0)
sewardjb5f6f512005-03-10 23:59:00 +00001130#define VKI_FUTEX_WAKE (1)
nethercote73b526f2004-10-31 18:48:21 +00001131#define VKI_FUTEX_FD (2)
1132#define VKI_FUTEX_REQUEUE (3)
sewardjb5f6f512005-03-10 23:59:00 +00001133#define VKI_FUTEX_CMP_REQUEUE (4)
nethercote73b526f2004-10-31 18:48:21 +00001134
1135//----------------------------------------------------------------------
1136// From linux-2.6.8.1/include/linux/errno.h
1137//----------------------------------------------------------------------
1138
1139#define VKI_ERESTARTSYS 512
1140
1141//----------------------------------------------------------------------
1142// From linux-2.6.8.1/include/linux/stat.h
1143//----------------------------------------------------------------------
1144
njn09b84802005-08-27 17:20:53 +00001145#define VKI_S_IFMT 00170000
1146#define VKI_S_IFSOCK 0140000
1147#define VKI_S_IFLNK 0120000
1148#define VKI_S_IFREG 0100000
1149#define VKI_S_IFBLK 0060000
1150#define VKI_S_IFDIR 0040000
1151#define VKI_S_IFCHR 0020000
1152#define VKI_S_IFIFO 0010000
1153#define VKI_S_ISUID 0004000
1154#define VKI_S_ISGID 0002000
1155#define VKI_S_ISVTX 0001000
1156
1157#define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
1158#define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) == VKI_S_IFREG)
1159#define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
1160#define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
1161#define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
1162#define VKI_S_ISFIFO(m) (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
1163#define VKI_S_ISSOCK(m) (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
1164
nethercote73b526f2004-10-31 18:48:21 +00001165#define VKI_S_IRUSR 00400
1166#define VKI_S_IWUSR 00200
1167
1168//----------------------------------------------------------------------
1169// From linux-2.6.8.1/include/linux/dirent.h
1170//----------------------------------------------------------------------
1171
1172struct vki_dirent {
1173 long d_ino;
1174 __vki_kernel_off_t d_off;
1175 unsigned short d_reclen;
1176 char d_name[256]; /* We must not include limits.h! */
1177};
1178
1179//----------------------------------------------------------------------
njncfb8ad52004-11-23 14:57:49 +00001180// From linux-2.6.8.1/include/linux/fcntl.h
1181//----------------------------------------------------------------------
1182
1183#define VKI_F_SETLEASE (VKI_F_LINUX_SPECIFIC_BASE+0)
1184#define VKI_F_GETLEASE (VKI_F_LINUX_SPECIFIC_BASE+1)
1185
1186#define VKI_F_NOTIFY (VKI_F_LINUX_SPECIFIC_BASE+2)
1187
1188//----------------------------------------------------------------------
nethercote73b526f2004-10-31 18:48:21 +00001189// From linux-2.6.8.1/include/linux/sysctl.h
1190//----------------------------------------------------------------------
1191
1192struct __vki_sysctl_args {
1193 int __user *name;
1194 int nlen;
1195 void __user *oldval;
1196 vki_size_t __user *oldlenp;
1197 void __user *newval;
1198 vki_size_t newlen;
1199 unsigned long __unused[4];
1200};
1201
1202//----------------------------------------------------------------------
1203// From linux-2.6.8.1/include/linux/aio_abi.h
1204//----------------------------------------------------------------------
1205
1206typedef unsigned long vki_aio_context_t;
1207
1208enum {
1209 VKI_IOCB_CMD_PREAD = 0,
1210 VKI_IOCB_CMD_PWRITE = 1,
1211};
1212
1213/* read() from /dev/aio returns these structures. */
1214struct vki_io_event {
1215 __vki_u64 data; /* the data field from the iocb */
1216 __vki_u64 obj; /* what iocb this event came from */
1217 // [[Nb: These fields renamed from 'res' and 'res2' because 'res' is
1218 // a macro in vg_syscalls.c!]]
1219 __vki_s64 result; /* result code for this event */
1220 __vki_s64 result2; /* secondary result */
1221};
1222
nethercote73b526f2004-10-31 18:48:21 +00001223#if defined(VKI_LITTLE_ENDIAN)
cerion85665ca2005-06-20 15:51:07 +00001224# define VKI_PADDED(x,y) x, y
nethercote73b526f2004-10-31 18:48:21 +00001225#elif defined(VKI_BIG_ENDIAN)
cerion85665ca2005-06-20 15:51:07 +00001226# define VKI_PADDED(x,y) y, x
nethercote73b526f2004-10-31 18:48:21 +00001227#else
1228#error edit for your odd byteorder.
1229#endif
1230
1231struct vki_iocb {
1232 /* these are internal to the kernel/libc. */
1233 __vki_u64 aio_data; /* data to be returned in event's data */
1234 __vki_u32 VKI_PADDED(aio_key, aio_reserved1);
1235 /* the kernel sets aio_key to the req # */
1236
1237 /* common fields */
1238 __vki_u16 aio_lio_opcode; /* see IOCB_CMD_ above */
1239 __vki_s16 aio_reqprio;
1240 __vki_u32 aio_fildes;
1241
1242 __vki_u64 aio_buf;
1243 __vki_u64 aio_nbytes;
1244 __vki_s64 aio_offset;
1245
1246 /* extra parameters */
1247 __vki_u64 aio_reserved2; /* TODO: use this for a (struct sigevent *) */
1248 __vki_u64 aio_reserved3;
1249}; /* 64 bytes */
1250
1251//----------------------------------------------------------------------
1252// From linux-2.6.8.1/include/linux/aio.h
1253//----------------------------------------------------------------------
1254
1255struct vki_aio_ring {
1256 unsigned id; /* kernel internal index number */
1257 unsigned nr; /* number of io_events */
1258 unsigned head;
1259 unsigned tail;
1260
1261 unsigned magic;
1262 unsigned compat_features;
1263 unsigned incompat_features;
1264 unsigned header_length; /* size of aio_ring */
1265
1266 struct vki_io_event io_events[0];
1267}; /* 128 bytes + ring size */
1268
1269//----------------------------------------------------------------------
1270// From linux-2.6.8.1/include/linux/msg.h
1271//----------------------------------------------------------------------
1272
1273#define VKI_MSG_STAT 11
1274#define VKI_MSG_INFO 12
1275
1276struct vki_msqid_ds {
1277 struct vki_ipc_perm msg_perm;
1278 struct vki_msg *msg_first; /* first message on queue,unused */
1279 struct vki_msg *msg_last; /* last message in queue,unused */
1280 __vki_kernel_time_t msg_stime; /* last msgsnd time */
1281 __vki_kernel_time_t msg_rtime; /* last msgrcv time */
1282 __vki_kernel_time_t msg_ctime; /* last change time */
1283 unsigned long msg_lcbytes; /* Reuse junk fields for 32 bit */
1284 unsigned long msg_lqbytes; /* ditto */
1285 unsigned short msg_cbytes; /* current number of bytes on queue */
1286 unsigned short msg_qnum; /* number of messages in queue */
1287 unsigned short msg_qbytes; /* max number of bytes on queue */
1288 __vki_kernel_ipc_pid_t msg_lspid; /* pid of last msgsnd */
1289 __vki_kernel_ipc_pid_t msg_lrpid; /* last receive pid */
1290};
1291
1292struct vki_msgbuf {
1293 long mtype; /* type of message */
1294 char mtext[1]; /* message text */
1295};
1296
1297struct vki_msginfo {
1298 int msgpool;
1299 int msgmap;
1300 int msgmax;
1301 int msgmnb;
1302 int msgmni;
1303 int msgssz;
1304 int msgtql;
1305 unsigned short msgseg;
1306};
1307
1308//----------------------------------------------------------------------
1309// From linux-2.6.8.1/include/linux/shm.h
1310//----------------------------------------------------------------------
1311
1312struct vki_shmid_ds {
1313 struct vki_ipc_perm shm_perm; /* operation perms */
1314 int shm_segsz; /* size of segment (bytes) */
1315 __vki_kernel_time_t shm_atime; /* last attach time */
1316 __vki_kernel_time_t shm_dtime; /* last detach time */
1317 __vki_kernel_time_t shm_ctime; /* last change time */
1318 __vki_kernel_ipc_pid_t shm_cpid; /* pid of creator */
1319 __vki_kernel_ipc_pid_t shm_lpid; /* pid of last operator */
1320 unsigned short shm_nattch; /* no. of current attaches */
1321 unsigned short shm_unused; /* compatibility */
1322 void *shm_unused2; /* ditto - used by DIPC */
1323 void *shm_unused3; /* unused */
1324};
1325
1326#define VKI_SHM_STAT 13
1327#define VKI_SHM_INFO 14
1328
1329/* Obsolete, used only for backwards compatibility */
1330struct vki_shminfo {
1331 int shmmax;
1332 int shmmin;
1333 int shmmni;
1334 int shmseg;
1335 int shmall;
1336};
1337
1338struct vki_shm_info {
1339 int used_ids;
1340 unsigned long shm_tot; /* total allocated shm */
1341 unsigned long shm_rss; /* total resident shm */
1342 unsigned long shm_swp; /* total swapped shm */
1343 unsigned long swap_attempts;
1344 unsigned long swap_successes;
1345};
1346
1347//----------------------------------------------------------------------
1348// From linux-2.6.8.1/include/linux/rtc.h
1349//----------------------------------------------------------------------
1350
1351struct vki_rtc_time {
1352 int tm_sec;
1353 int tm_min;
1354 int tm_hour;
1355 int tm_mday;
1356 int tm_mon;
1357 int tm_year;
1358 int tm_wday;
1359 int tm_yday;
1360 int tm_isdst;
1361};
1362
1363#define VKI_RTC_AIE_ON _VKI_IO('p', 0x01) /* Alarm int. enable on */
1364#define VKI_RTC_AIE_OFF _VKI_IO('p', 0x02) /* ... off */
1365#define VKI_RTC_UIE_ON _VKI_IO('p', 0x03) /* Update int. enable on*/
1366#define VKI_RTC_UIE_OFF _VKI_IO('p', 0x04) /* ... off */
1367#define VKI_RTC_PIE_ON _VKI_IO('p', 0x05) /* Periodic int. enable on*/
1368#define VKI_RTC_PIE_OFF _VKI_IO('p', 0x06) /* ... off */
1369
1370#define VKI_RTC_ALM_SET _VKI_IOW('p', 0x07, struct vki_rtc_time) /* Set alarm time */
1371#define VKI_RTC_ALM_READ _VKI_IOR('p', 0x08, struct vki_rtc_time) /* Read alarm time */
1372#define VKI_RTC_RD_TIME _VKI_IOR('p', 0x09, struct vki_rtc_time) /* Read RTC time */
1373//#define RTC_SET_TIME _IOW('p', 0x0a, struct rtc_time) /* Set RTC time */
1374#define VKI_RTC_IRQP_READ _VKI_IOR('p', 0x0b, unsigned long) /* Read IRQ rate */
1375#define VKI_RTC_IRQP_SET _VKI_IOW('p', 0x0c, unsigned long) /* Set IRQ rate */
1376
1377//----------------------------------------------------------------------
1378// From linux-2.6.8.1/include/linux/isdn.h
1379//----------------------------------------------------------------------
1380
nethercote95a97862004-11-06 16:31:43 +00001381// [[Nb: Resolved this for the common case where CONFIG_COBALT_MICRO_SERVER
1382// is not defined]]
1383#define VKI_ISDN_MAX_CHANNELS 64
1384
nethercote73b526f2004-10-31 18:48:21 +00001385#define VKI_IIOCGETCPS _VKI_IO('I',21)
1386
1387#define VKI_IIOCNETGPN _VKI_IO('I',34)
1388
1389#define VKI_ISDN_MSNLEN 32
1390
1391typedef struct {
1392 char name[10];
1393 char phone[VKI_ISDN_MSNLEN];
1394 int outgoing;
1395} vki_isdn_net_ioctl_phone;
1396
1397//----------------------------------------------------------------------
1398// From linux-2.6.8.1/include/linux/sockios.h
1399//----------------------------------------------------------------------
1400
1401#define VKI_SIOCOUTQ VKI_TIOCOUTQ
1402
1403#define VKI_SIOCADDRT 0x890B /* add routing table entry */
1404#define VKI_SIOCDELRT 0x890C /* delete routing table entry */
1405
1406#define VKI_SIOCGIFNAME 0x8910 /* get iface name */
1407#define VKI_SIOCGIFCONF 0x8912 /* get iface list */
1408#define VKI_SIOCGIFFLAGS 0x8913 /* get flags */
1409#define VKI_SIOCSIFFLAGS 0x8914 /* set flags */
1410#define VKI_SIOCGIFADDR 0x8915 /* get PA address */
1411#define VKI_SIOCSIFADDR 0x8916 /* set PA address */
1412#define VKI_SIOCGIFDSTADDR 0x8917 /* get remote PA address */
1413#define VKI_SIOCSIFDSTADDR 0x8918 /* set remote PA address */
1414#define VKI_SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */
1415#define VKI_SIOCSIFBRDADDR 0x891a /* set broadcast PA address */
1416#define VKI_SIOCGIFNETMASK 0x891b /* get network PA mask */
1417#define VKI_SIOCSIFNETMASK 0x891c /* set network PA mask */
1418#define VKI_SIOCGIFMETRIC 0x891d /* get metric */
1419#define VKI_SIOCSIFMETRIC 0x891e /* set metric */
1420#define VKI_SIOCGIFMTU 0x8921 /* get MTU size */
1421#define VKI_SIOCSIFMTU 0x8922 /* set MTU size */
1422#define VKI_SIOCSIFHWADDR 0x8924 /* set hardware address */
1423#define VKI_SIOCGIFHWADDR 0x8927 /* Get hardware address */
1424#define VKI_SIOCGIFINDEX 0x8933 /* name -> if_index mapping */
1425
1426#define VKI_SIOCGIFTXQLEN 0x8942 /* Get the tx queue length */
1427#define VKI_SIOCSIFTXQLEN 0x8943 /* Set the tx queue length */
1428
1429#define VKI_SIOCGMIIPHY 0x8947 /* Get address of MII PHY in use. */
1430#define VKI_SIOCGMIIREG 0x8948 /* Read MII PHY register. */
1431#define VKI_SIOCSMIIREG 0x8949 /* Write MII PHY register. */
1432
1433#define VKI_SIOCDARP 0x8953 /* delete ARP table entry */
1434#define VKI_SIOCGARP 0x8954 /* get ARP table entry */
1435#define VKI_SIOCSARP 0x8955 /* set ARP table entry */
1436
1437#define VKI_SIOCDRARP 0x8960 /* delete RARP table entry */
1438#define VKI_SIOCGRARP 0x8961 /* get RARP table entry */
1439#define VKI_SIOCSRARP 0x8962 /* set RARP table entry */
1440
1441#define VKI_SIOCGIFMAP 0x8970 /* Get device parameters */
1442#define VKI_SIOCSIFMAP 0x8971 /* Set device parameters */
1443
1444//----------------------------------------------------------------------
1445// From linux-2.6.8.1/include/linux/ppdev.h
1446//----------------------------------------------------------------------
1447
1448#define VKI_PP_MAJOR 99
1449
1450#define VKI_PP_IOCTL 'p'
1451
1452/* Set mode for read/write (e.g. IEEE1284_MODE_EPP) */
1453#define VKI_PPSETMODE _VKI_IOW(VKI_PP_IOCTL, 0x80, int)
1454
1455/* Read status */
1456#define VKI_PPRSTATUS _VKI_IOR(VKI_PP_IOCTL, 0x81, unsigned char)
1457//#define PPWSTATUS OBSOLETE__IOW(PP_IOCTL, 0x82, unsigned char)
1458
1459/* Read/write control */
1460#define VKI_PPRCONTROL _VKI_IOR(VKI_PP_IOCTL, 0x83, unsigned char)
1461#define VKI_PPWCONTROL _VKI_IOW(VKI_PP_IOCTL, 0x84, unsigned char)
1462
1463struct vki_ppdev_frob_struct {
1464 unsigned char mask;
1465 unsigned char val;
1466};
1467#define VKI_PPFCONTROL _VKI_IOW(VKI_PP_IOCTL, 0x8e, struct vki_ppdev_frob_struct)
1468
1469/* Read/write data */
1470#define VKI_PPRDATA _VKI_IOR(VKI_PP_IOCTL, 0x85, unsigned char)
1471#define VKI_PPWDATA _VKI_IOW(VKI_PP_IOCTL, 0x86, unsigned char)
1472
1473/* Claim the port to start using it */
1474#define VKI_PPCLAIM _VKI_IO(VKI_PP_IOCTL, 0x8b)
1475
1476/* Release the port when you aren't using it */
1477#define VKI_PPRELEASE _VKI_IO(VKI_PP_IOCTL, 0x8c)
1478
1479/* Yield the port (release it if another driver is waiting,
1480 * then reclaim) */
1481#define VKI_PPYIELD _VKI_IO(VKI_PP_IOCTL, 0x8d)
1482
1483/* Register device exclusively (must be before PPCLAIM). */
1484#define VKI_PPEXCL _VKI_IO(VKI_PP_IOCTL, 0x8f)
1485
1486/* Data line direction: non-zero for input mode. */
1487#define VKI_PPDATADIR _VKI_IOW(VKI_PP_IOCTL, 0x90, int)
1488
1489/* Negotiate a particular IEEE 1284 mode. */
1490#define VKI_PPNEGOT _VKI_IOW(VKI_PP_IOCTL, 0x91, int)
1491
1492/* Set control lines when an interrupt occurs. */
1493#define VKI_PPWCTLONIRQ _VKI_IOW(VKI_PP_IOCTL, 0x92, unsigned char)
1494
1495/* Clear (and return) interrupt count. */
1496#define VKI_PPCLRIRQ _VKI_IOR(VKI_PP_IOCTL, 0x93, int)
1497
1498/* Set the IEEE 1284 phase that we're in (e.g. IEEE1284_PH_FWD_IDLE) */
1499#define VKI_PPSETPHASE _VKI_IOW(VKI_PP_IOCTL, 0x94, int)
1500
1501/* Set and get port timeout (struct timeval's) */
1502#define VKI_PPGETTIME _VKI_IOR(VKI_PP_IOCTL, 0x95, struct vki_timeval)
1503#define VKI_PPSETTIME _VKI_IOW(VKI_PP_IOCTL, 0x96, struct vki_timeval)
1504
1505#define VKI_PPGETMODES _VKI_IOR(VKI_PP_IOCTL, 0x97, unsigned int)
1506
1507#define VKI_PPGETMODE _VKI_IOR(VKI_PP_IOCTL, 0x98, int)
1508#define VKI_PPGETPHASE _VKI_IOR(VKI_PP_IOCTL, 0x99, int)
1509
1510#define VKI_PPGETFLAGS _VKI_IOR(VKI_PP_IOCTL, 0x9a, int)
1511#define VKI_PPSETFLAGS _VKI_IOW(VKI_PP_IOCTL, 0x9b, int)
1512
1513//----------------------------------------------------------------------
1514// From linux-2.6.8.1/include/linux/fs.h
1515//----------------------------------------------------------------------
1516
tomedd26f12005-07-28 16:10:42 +00001517#define VKI_BLKROSET _VKI_IO(0x12,93) /* set device read-only (0 = read-write) */
1518#define VKI_BLKROGET _VKI_IO(0x12,94) /* get read-only status (0 = read_write) */
nethercote95a97862004-11-06 16:31:43 +00001519#define VKI_BLKGETSIZE _VKI_IO(0x12,96) /* return device size /512 (long *arg) */
tomedd26f12005-07-28 16:10:42 +00001520#define VKI_BLKRASET _VKI_IO(0x12,98) /* set read ahead for block device */
1521#define VKI_BLKRAGET _VKI_IO(0x12,99) /* get current read ahead setting */
1522#define VKI_BLKFRASET _VKI_IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
1523#define VKI_BLKFRAGET _VKI_IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
1524#define VKI_BLKSECTGET _VKI_IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
1525#define VKI_BLKSSZGET _VKI_IO(0x12,104)/* get block device sector size */
1526#define VKI_BLKBSZGET _VKI_IOR(0x12,112,vki_size_t)
1527#define VKI_BLKBSZSET _VKI_IOW(0x12,113,vki_size_t)
1528#define VKI_BLKGETSIZE64 _VKI_IOR(0x12,114,vki_size_t) /* return device size in bytes (u64 *arg) */
nethercote95a97862004-11-06 16:31:43 +00001529
nethercote73b526f2004-10-31 18:48:21 +00001530#define VKI_FIBMAP _VKI_IO(0x00,1) /* bmap access */
1531#define VKI_FIGETBSZ _VKI_IO(0x00,2) /* get the block size used for bmap */
1532
1533//----------------------------------------------------------------------
1534// From linux-2.6.8.1/include/scsi/sg.h
1535//----------------------------------------------------------------------
1536
1537typedef struct vki_sg_io_hdr
1538{
1539 int interface_id; /* [i] 'S' for SCSI generic (required) */
1540 int dxfer_direction; /* [i] data transfer direction */
1541 unsigned char cmd_len; /* [i] SCSI command length ( <= 16 bytes) */
1542 unsigned char mx_sb_len; /* [i] max length to write to sbp */
1543 unsigned short iovec_count; /* [i] 0 implies no scatter gather */
1544 unsigned int dxfer_len; /* [i] byte count of data transfer */
1545 void __user *dxferp; /* [i], [*io] points to data transfer memory
1546 or scatter gather list */
1547 unsigned char __user *cmdp; /* [i], [*i] points to command to perform */
1548 void __user *sbp; /* [i], [*o] points to sense_buffer memory */
1549 unsigned int timeout; /* [i] MAX_UINT->no timeout (unit: millisec) */
1550 unsigned int flags; /* [i] 0 -> default, see SG_FLAG... */
1551 int pack_id; /* [i->o] unused internally (normally) */
1552 void __user * usr_ptr; /* [i->o] unused internally */
1553 unsigned char status; /* [o] scsi status */
1554 unsigned char masked_status;/* [o] shifted, masked scsi status */
1555 unsigned char msg_status; /* [o] messaging level data (optional) */
1556 unsigned char sb_len_wr; /* [o] byte count actually written to sbp */
1557 unsigned short host_status; /* [o] errors from host adapter */
1558 unsigned short driver_status;/* [o] errors from software driver */
1559 int resid; /* [o] dxfer_len - actual_transferred */
1560 unsigned int duration; /* [o] time taken by cmd (unit: millisec) */
1561 unsigned int info; /* [o] auxiliary information */
1562} vki_sg_io_hdr_t; /* 64 bytes long (on i386) */
1563
1564typedef struct vki_sg_scsi_id { /* used by SG_GET_SCSI_ID ioctl() */
1565 int host_no; /* as in "scsi<n>" where 'n' is one of 0, 1, 2 etc */
1566 int channel;
1567 int scsi_id; /* scsi id of target device */
1568 int lun;
1569 int scsi_type; /* TYPE_... defined in scsi/scsi.h */
1570 short h_cmd_per_lun;/* host (adapter) maximum commands per lun */
1571 short d_queue_depth;/* device (or adapter) maximum queue length */
1572 int unused[2]; /* probably find a good use, set 0 for now */
1573} vki_sg_scsi_id_t; /* 32 bytes long on i386 */
1574
1575#define VKI_SG_EMULATED_HOST 0x2203 /* true for emulated host adapter (ATAPI) */
1576
1577#define VKI_SG_SET_RESERVED_SIZE 0x2275 /* request a new reserved buffer size */
1578#define VKI_SG_GET_RESERVED_SIZE 0x2272 /* actual size of reserved buffer */
1579
1580#define VKI_SG_GET_SCSI_ID 0x2276 /* Yields fd's bus, chan, dev, lun + type */
1581
1582#define VKI_SG_GET_SG_TABLESIZE 0x227F /* 0 implies can't do scatter gather */
1583
1584#define VKI_SG_GET_VERSION_NUM 0x2282 /* Example: version 2.1.34 yields 20134 */
1585
1586#define VKI_SG_IO 0x2285 /* similar effect as write() followed by read() */
1587
1588#define VKI_SG_SET_TIMEOUT 0x2201 /* unit: jiffies (10ms on i386) */
1589#define VKI_SG_GET_TIMEOUT 0x2202 /* yield timeout as _return_ value */
1590
1591//#define SG_GET_COMMAND_Q 0x2270 /* Yields 0 (queuing off) or 1 (on) */
1592#define VKI_SG_SET_COMMAND_Q 0x2271 /* Change queuing state with 0 or 1 */
1593
1594//----------------------------------------------------------------------
1595// From linux-2.6.8.1/include/linux/cdrom.h
1596//----------------------------------------------------------------------
1597
1598#define VKI_CDROMPLAYMSF 0x5303 /* Play Audio MSF (struct cdrom_msf) */
1599#define VKI_CDROMREADTOCHDR 0x5305 /* Read TOC header
1600 (struct cdrom_tochdr) */
1601#define VKI_CDROMREADTOCENTRY 0x5306 /* Read TOC entry
1602 (struct cdrom_tocentry) */
1603#define VKI_CDROMSUBCHNL 0x530b /* Read subchannel data
1604 (struct cdrom_subchnl) */
1605#define VKI_CDROMREADMODE2 0x530c /* Read CDROM mode 2 data (2336 Bytes)
1606 (struct cdrom_read) */
1607#define VKI_CDROMREADAUDIO 0x530e /* (struct cdrom_read_audio) */
1608#define VKI_CDROMMULTISESSION 0x5310 /* Obtain the start-of-last-session
1609 address of multi session disks
1610 (struct cdrom_multisession) */
1611#define VKI_CDROM_GET_MCN 0x5311 /* Obtain the "Universal Product Code"
1612 if available (struct cdrom_mcn) */
1613#define VKI_CDROMVOLREAD 0x5313 /* Get the drive's volume setting
1614 (struct cdrom_volctrl) */
1615#define VKI_CDROM_CLEAR_OPTIONS 0x5321 /* Clear behavior options */
1616#define VKI_CDROM_DRIVE_STATUS 0x5326 /* Get tray position, etc. */
1617
1618#define VKI_CDROM_SEND_PACKET 0x5393 /* send a packet to the drive */
1619
1620struct vki_cdrom_msf0
1621{
1622 __vki_u8 minute;
1623 __vki_u8 second;
1624 __vki_u8 frame;
1625};
1626
1627union vki_cdrom_addr
1628{
1629 struct vki_cdrom_msf0 msf;
1630 int lba;
1631};
1632
1633struct vki_cdrom_msf
1634{
1635 __vki_u8 cdmsf_min0; /* start minute */
1636 __vki_u8 cdmsf_sec0; /* start second */
1637 __vki_u8 cdmsf_frame0; /* start frame */
1638 __vki_u8 cdmsf_min1; /* end minute */
1639 __vki_u8 cdmsf_sec1; /* end second */
1640 __vki_u8 cdmsf_frame1; /* end frame */
1641};
1642
1643struct vki_cdrom_tochdr
1644{
1645 __vki_u8 cdth_trk0; /* start track */
1646 __vki_u8 cdth_trk1; /* end track */
1647};
1648
1649struct vki_cdrom_volctrl
1650{
1651 __vki_u8 channel0;
1652 __vki_u8 channel1;
1653 __vki_u8 channel2;
1654 __vki_u8 channel3;
1655};
1656
1657struct vki_cdrom_subchnl
1658{
1659 __vki_u8 cdsc_format;
1660 __vki_u8 cdsc_audiostatus;
1661 __vki_u8 cdsc_adr: 4;
1662 __vki_u8 cdsc_ctrl: 4;
1663 __vki_u8 cdsc_trk;
1664 __vki_u8 cdsc_ind;
1665 union vki_cdrom_addr cdsc_absaddr;
1666 union vki_cdrom_addr cdsc_reladdr;
1667};
1668
1669struct vki_cdrom_tocentry
1670{
1671 __vki_u8 cdte_track;
1672 __vki_u8 cdte_adr :4;
1673 __vki_u8 cdte_ctrl :4;
1674 __vki_u8 cdte_format;
1675 union vki_cdrom_addr cdte_addr;
1676 __vki_u8 cdte_datamode;
1677};
1678
1679struct vki_cdrom_read
1680{
1681 int cdread_lba;
1682 char *cdread_bufaddr;
1683 int cdread_buflen;
1684};
1685
1686struct vki_cdrom_read_audio
1687{
1688 union vki_cdrom_addr addr; /* frame address */
1689 __vki_u8 addr_format; /* CDROM_LBA or CDROM_MSF */
1690 int nframes; /* number of 2352-byte-frames to read at once */
1691 __vki_u8 __user *buf; /* frame buffer (size: nframes*2352 bytes) */
1692};
1693
1694struct vki_cdrom_multisession
1695{
1696 union vki_cdrom_addr addr; /* frame address: start-of-last-session
1697 (not the new "frame 16"!). Only valid
1698 if the "xa_flag" is true. */
1699 __vki_u8 xa_flag; /* 1: "is XA disk" */
1700 __vki_u8 addr_format; /* CDROM_LBA or CDROM_MSF */
1701};
1702
1703struct vki_cdrom_mcn
1704{
1705 __vki_u8 medium_catalog_number[14]; /* 13 ASCII digits, null-terminated */
1706};
1707
1708#define VKI_CDROM_PACKET_SIZE 12
1709
1710struct vki_cdrom_generic_command
1711{
1712 unsigned char cmd[VKI_CDROM_PACKET_SIZE];
1713 unsigned char __user *buffer;
1714 unsigned int buflen;
1715 int stat;
1716 // [[replace with void* to reduce inclusion amounts]]
1717 void/*struct vki_request_sense */__user *sense;
1718 unsigned char data_direction;
1719 int quiet;
1720 int timeout;
1721 void __user *reserved[1]; /* unused, actually */
1722};
1723
1724#define VKI_CD_SYNC_SIZE 12 /* 12 sync bytes per raw data frame */
1725#define VKI_CD_HEAD_SIZE 4 /* header (address) bytes per raw data frame */
1726#define VKI_CD_FRAMESIZE_RAW 2352 /* bytes per frame, "raw" mode */
1727#define VKI_CD_FRAMESIZE_RAW0 (VKI_CD_FRAMESIZE_RAW-VKI_CD_SYNC_SIZE-VKI_CD_HEAD_SIZE) /*2336*/
1728
1729//----------------------------------------------------------------------
1730// From linux-2.6.8.1/include/linux/soundcard.h
1731//----------------------------------------------------------------------
1732
1733#ifndef _VKI_SIOWR
1734#if defined(_VKI_IOWR) && (defined(_AIX) || (!defined(sun) && !defined(sparc) && !defined(__sparc__) && !defined(__INCioctlh) && !defined(__Lynx__)))
1735/* Use already defined ioctl defines if they exist (except with Sun or Sparc) */
1736#define _VKI_SIO _VKI_IO
1737#define _VKI_SIOR _VKI_IOR
1738#define _VKI_SIOW _VKI_IOW
1739#define _VKI_SIOWR _VKI_IOWR
1740#else
1741// [[Valgrind: Install this case if/when necessary]
1742#error Valgrind: Cannot handle sparc/sun case yet...
1743# endif /* _IOWR */
1744#endif /* !_VKI_SIOWR */
1745
1746#define VKI_SNDCTL_SEQ_CTRLRATE _VKI_SIOWR('Q', 3, int) /* Set/get timer resolution (HZ) */
1747#define VKI_SNDCTL_SEQ_GETOUTCOUNT _VKI_SIOR ('Q', 4, int)
1748#define VKI_SNDCTL_SEQ_GETINCOUNT _VKI_SIOR ('Q', 5, int)
1749#define VKI_SNDCTL_SEQ_PERCMODE _VKI_SIOW ('Q', 6, int)
1750#define VKI_SNDCTL_SEQ_TESTMIDI _VKI_SIOW ('Q', 8, int)
1751#define VKI_SNDCTL_SEQ_RESETSAMPLES _VKI_SIOW ('Q', 9, int)
1752#define VKI_SNDCTL_SEQ_NRSYNTHS _VKI_SIOR ('Q',10, int)
1753#define VKI_SNDCTL_SEQ_NRMIDIS _VKI_SIOR ('Q',11, int)
1754#define VKI_SNDCTL_SEQ_GETTIME _VKI_SIOR ('Q',19, int)
1755
1756#define VKI_SNDCTL_TMR_TIMEBASE _VKI_SIOWR('T', 1, int)
1757#define VKI_SNDCTL_TMR_TEMPO _VKI_SIOWR('T', 5, int)
1758#define VKI_SNDCTL_TMR_SOURCE _VKI_SIOWR('T', 6, int)
1759
1760#define VKI_SNDCTL_MIDI_PRETIME _VKI_SIOWR('m', 0, int)
1761#define VKI_SNDCTL_MIDI_MPUMODE _VKI_SIOWR('m', 1, int)
1762
1763#define VKI_SNDCTL_DSP_RESET _VKI_SIO ('P', 0)
1764#define VKI_SNDCTL_DSP_SYNC _VKI_SIO ('P', 1)
1765#define VKI_SNDCTL_DSP_SPEED _VKI_SIOWR('P', 2, int)
1766#define VKI_SNDCTL_DSP_STEREO _VKI_SIOWR('P', 3, int)
1767#define VKI_SNDCTL_DSP_GETBLKSIZE _VKI_SIOWR('P', 4, int)
1768#define VKI_SNDCTL_DSP_CHANNELS _VKI_SIOWR('P', 6, int)
1769#define VKI_SOUND_PCM_WRITE_FILTER _VKI_SIOWR('P', 7, int)
1770#define VKI_SNDCTL_DSP_POST _VKI_SIO ('P', 8)
1771#define VKI_SNDCTL_DSP_SUBDIVIDE _VKI_SIOWR('P', 9, int)
1772#define VKI_SNDCTL_DSP_SETFRAGMENT _VKI_SIOWR('P',10, int)
1773
1774#define VKI_SNDCTL_DSP_GETFMTS _VKI_SIOR ('P',11, int) /* Returns a mask */
1775
1776typedef struct vki_audio_buf_info {
1777 int fragments; /* # of available fragments (partially usend ones not counted) */
1778 int fragstotal; /* Total # of fragments allocated */
1779 int fragsize; /* Size of a fragment in bytes */
1780
1781 int bytes; /* Available space in bytes (includes partially used fragments) */
1782 /* Note! 'bytes' could be more than fragments*fragsize */
1783 } vki_audio_buf_info;
1784
1785#define VKI_SNDCTL_DSP_GETOSPACE _VKI_SIOR ('P',12, vki_audio_buf_info)
1786#define VKI_SNDCTL_DSP_GETISPACE _VKI_SIOR ('P',13, vki_audio_buf_info)
1787//#define VKI_SNDCTL_DSP_NONBLOCK _VKI_SIO ('P',14)
1788#define VKI_SNDCTL_DSP_GETCAPS _VKI_SIOR ('P',15, int)
1789
1790#define VKI_SNDCTL_DSP_GETTRIGGER _VKI_SIOR ('P',16, int)
1791#define VKI_SNDCTL_DSP_SETTRIGGER _VKI_SIOW ('P',16, int)
1792
1793#define VKI_SNDCTL_DSP_SETSYNCRO _VKI_SIO ('P', 21)
1794#define VKI_SNDCTL_DSP_SETDUPLEX _VKI_SIO ('P', 22)
1795#define VKI_SNDCTL_DSP_GETODELAY _VKI_SIOR ('P', 23, int)
1796
nethercote95a97862004-11-06 16:31:43 +00001797#define VKI_SNDCTL_DSP_GETCHANNELMASK _VKI_SIOWR('P', 64, int)
1798#define VKI_SNDCTL_DSP_BIND_CHANNEL _VKI_SIOWR('P', 65, int)
1799
nethercote73b526f2004-10-31 18:48:21 +00001800#define VKI_SNDCTL_DSP_SETSPDIF _VKI_SIOW ('P', 66, int)
1801#define VKI_SNDCTL_DSP_GETSPDIF _VKI_SIOR ('P', 67, int)
1802
1803#define VKI_SOUND_PCM_READ_RATE _VKI_SIOR ('P', 2, int)
1804#define VKI_SOUND_PCM_READ_CHANNELS _VKI_SIOR ('P', 6, int)
1805#define VKI_SOUND_PCM_READ_BITS _VKI_SIOR ('P', 5, int)
1806#define VKI_SOUND_PCM_READ_FILTER _VKI_SIOR ('P', 7, int)
1807
1808
1809//----------------------------------------------------------------------
1810// From linux-2.6.8.1/include/linux/hdreg.h
1811//----------------------------------------------------------------------
1812
tom2c2bc252005-07-28 16:13:42 +00001813struct vki_hd_geometry {
1814 unsigned char heads;
1815 unsigned char sectors;
1816 unsigned short cylinders;
1817 unsigned long start;
1818};
1819
1820#define VKI_HDIO_GETGEO 0x0301 /* get device geometry */
nethercote73b526f2004-10-31 18:48:21 +00001821#define VKI_HDIO_GET_IDENTITY 0x030d /* get IDE identification info */
1822
1823// [[Nb: done like this because the original type is a huge struct that will
1824// always be the same size.]]
1825#define VKI_SIZEOF_STRUCT_HD_DRIVEID 512
1826
1827//----------------------------------------------------------------------
1828// From linux-2.6.8.1/include/linux/fb.h
1829//----------------------------------------------------------------------
1830
1831#define VKI_FBIOGET_VSCREENINFO 0x4600
1832#define VKI_FBIOGET_FSCREENINFO 0x4602
1833
1834struct vki_fb_fix_screeninfo {
1835 char id[16]; /* identification string eg "TT Builtin" */
1836 unsigned long smem_start; /* Start of frame buffer mem */
1837 /* (physical address) */
1838 __vki_u32 smem_len; /* Length of frame buffer mem */
1839 __vki_u32 type; /* see FB_TYPE_* */
1840 __vki_u32 type_aux; /* Interleave for interleaved Planes */
1841 __vki_u32 visual; /* see FB_VISUAL_* */
1842 __vki_u16 xpanstep; /* zero if no hardware panning */
1843 __vki_u16 ypanstep; /* zero if no hardware panning */
1844 __vki_u16 ywrapstep; /* zero if no hardware ywrap */
1845 __vki_u32 line_length; /* length of a line in bytes */
1846 unsigned long mmio_start; /* Start of Memory Mapped I/O */
1847 /* (physical address) */
1848 __vki_u32 mmio_len; /* Length of Memory Mapped I/O */
1849 __vki_u32 accel; /* Indicate to driver which */
1850 /* specific chip/card we have */
1851 __vki_u16 reserved[3]; /* Reserved for future compatibility */
1852};
1853
1854struct vki_fb_bitfield {
1855 __vki_u32 offset; /* beginning of bitfield */
1856 __vki_u32 length; /* length of bitfield */
1857 __vki_u32 msb_right; /* != 0 : Most significant bit is */
1858 /* right */
1859};
1860
1861struct vki_fb_var_screeninfo {
1862 __vki_u32 xres; /* visible resolution */
1863 __vki_u32 yres;
1864 __vki_u32 xres_virtual; /* virtual resolution */
1865 __vki_u32 yres_virtual;
1866 __vki_u32 xoffset; /* offset from virtual to visible */
1867 __vki_u32 yoffset; /* resolution */
1868
1869 __vki_u32 bits_per_pixel; /* guess what */
1870 __vki_u32 grayscale; /* != 0 Graylevels instead of colors */
1871
1872 struct vki_fb_bitfield red; /* bitfield in fb mem if true color, */
1873 struct vki_fb_bitfield green; /* else only length is significant */
1874 struct vki_fb_bitfield blue;
1875 struct vki_fb_bitfield transp; /* transparency */
1876
1877 __vki_u32 nonstd; /* != 0 Non standard pixel format */
1878
1879 __vki_u32 activate; /* see FB_ACTIVATE_* */
1880
1881 __vki_u32 height; /* height of picture in mm */
1882 __vki_u32 width; /* width of picture in mm */
1883
1884 __vki_u32 accel_flags; /* (OBSOLETE) see fb_info.flags */
1885
1886 /* Timing: All values in pixclocks, except pixclock (of course) */
1887 __vki_u32 pixclock; /* pixel clock in ps (pico seconds) */
1888 __vki_u32 left_margin; /* time from sync to picture */
1889 __vki_u32 right_margin; /* time from picture to sync */
1890 __vki_u32 upper_margin; /* time from sync to picture */
1891 __vki_u32 lower_margin;
1892 __vki_u32 hsync_len; /* length of horizontal sync */
1893 __vki_u32 vsync_len; /* length of vertical sync */
1894 __vki_u32 sync; /* see FB_SYNC_* */
1895 __vki_u32 vmode; /* see FB_VMODE_* */
1896 __vki_u32 rotate; /* angle we rotate counter clockwise */
1897 __vki_u32 reserved[5]; /* Reserved for future compatibility */
1898};
1899
thughesb3d3bcf2004-11-13 00:36:15 +00001900//----------------------------------------------------------------------
1901// From linux-2.6.9/include/linux/kb.h
1902//----------------------------------------------------------------------
1903
1904#define VKI_GIO_FONT 0x4B60 /* gets font in expanded form */
1905#define VKI_PIO_FONT 0x4B61 /* use font in expanded form */
1906
1907#define VKI_GIO_FONTX 0x4B6B /* get font using struct consolefontdesc */
1908#define VKI_PIO_FONTX 0x4B6C /* set font using struct consolefontdesc */
1909struct vki_consolefontdesc {
1910 unsigned short charcount; /* characters in font (256 or 512) */
1911 unsigned short charheight; /* scan lines per character (1-32) */
1912 char __user *chardata; /* font data in expanded form */
1913};
1914
1915#define VKI_PIO_FONTRESET 0x4B6D /* reset to default font */
1916
1917#define VKI_GIO_CMAP 0x4B70 /* gets colour palette on VGA+ */
1918#define VKI_PIO_CMAP 0x4B71 /* sets colour palette on VGA+ */
1919
1920#define VKI_KIOCSOUND 0x4B2F /* start sound generation (0 for off) */
1921#define VKI_KDMKTONE 0x4B30 /* generate tone */
1922
1923#define VKI_KDGETLED 0x4B31 /* return current led state */
1924#define VKI_KDSETLED 0x4B32 /* set led state [lights, not flags] */
1925
1926#define VKI_KDGKBTYPE 0x4B33 /* get keyboard type */
1927
1928#define VKI_KDADDIO 0x4B34 /* add i/o port as valid */
1929#define VKI_KDDELIO 0x4B35 /* del i/o port as valid */
1930#define VKI_KDENABIO 0x4B36 /* enable i/o to video board */
1931#define VKI_KDDISABIO 0x4B37 /* disable i/o to video board */
1932
1933#define VKI_KDSETMODE 0x4B3A /* set text/graphics mode */
1934#define VKI_KDGETMODE 0x4B3B /* get current mode */
1935
1936#define VKI_KDMAPDISP 0x4B3C /* map display into address space */
1937#define VKI_KDUNMAPDISP 0x4B3D /* unmap display from address space */
1938
1939#define VKI_E_TABSZ 256
1940#define VKI_GIO_SCRNMAP 0x4B40 /* get screen mapping from kernel */
1941#define VKI_PIO_SCRNMAP 0x4B41 /* put screen mapping table in kernel */
1942#define VKI_GIO_UNISCRNMAP 0x4B69 /* get full Unicode screen mapping */
1943#define VKI_PIO_UNISCRNMAP 0x4B6A /* set full Unicode screen mapping */
1944
1945#define VKI_GIO_UNIMAP 0x4B66 /* get unicode-to-font mapping from kernel */
1946#define VKI_PIO_UNIMAP 0x4B67 /* put unicode-to-font mapping in kernel */
1947#define VKI_PIO_UNIMAPCLR 0x4B68 /* clear table, possibly advise hash algorithm */
1948
1949#define VKI_KDGKBMODE 0x4B44 /* gets current keyboard mode */
1950#define VKI_KDSKBMODE 0x4B45 /* sets current keyboard mode */
1951
1952#define VKI_KDGKBMETA 0x4B62 /* gets meta key handling mode */
1953#define VKI_KDSKBMETA 0x4B63 /* sets meta key handling mode */
1954
1955#define VKI_KDGKBLED 0x4B64 /* get led flags (not lights) */
1956#define VKI_KDSKBLED 0x4B65 /* set led flags (not lights) */
1957
1958struct vki_kbentry {
1959 unsigned char kb_table;
1960 unsigned char kb_index;
1961 unsigned short kb_value;
1962};
1963#define VKI_KDGKBENT 0x4B46 /* gets one entry in translation table */
1964#define VKI_KDSKBENT 0x4B47 /* sets one entry in translation table */
1965
1966struct vki_kbsentry {
1967 unsigned char kb_func;
1968 unsigned char kb_string[512];
1969};
1970#define VKI_KDGKBSENT 0x4B48 /* gets one function key string entry */
1971#define VKI_KDSKBSENT 0x4B49 /* sets one function key string entry */
1972
1973struct vki_kbdiacr {
1974 unsigned char diacr, base, result;
1975};
1976struct vki_kbdiacrs {
1977 unsigned int kb_cnt; /* number of entries in following array */
1978 struct vki_kbdiacr kbdiacr[256]; /* MAX_DIACR from keyboard.h */
1979};
1980#define VKI_KDGKBDIACR 0x4B4A /* read kernel accent table */
1981#define VKI_KDSKBDIACR 0x4B4B /* write kernel accent table */
1982
1983struct vki_kbkeycode {
1984 unsigned int scancode, keycode;
1985};
1986#define VKI_KDGETKEYCODE 0x4B4C /* read kernel keycode table entry */
1987#define VKI_KDSETKEYCODE 0x4B4D /* write kernel keycode table entry */
1988
1989#define VKI_KDSIGACCEPT 0x4B4E /* accept kbd generated signals */
1990
1991struct vki_kbd_repeat {
1992 int delay; /* in msec; <= 0: don't change */
1993 int period; /* in msec; <= 0: don't change */
1994 /* earlier this field was misnamed "rate" */
1995};
1996#define VKI_KDKBDREP 0x4B52 /* set keyboard delay/repeat rate;
1997 * actually used values are returned */
1998
1999#define VKI_KDFONTOP 0x4B72 /* font operations */
2000
nethercote5b653bc2004-11-15 14:32:12 +00002001//----------------------------------------------------------------------
2002// From linux-2.6.9/include/linux/kb.h
2003//----------------------------------------------------------------------
2004
2005typedef __vki_kernel_uid32_t vki_qid_t; /* Type in which we store ids in memory */
2006
njnca0518d2004-11-26 19:34:36 +00002007//----------------------------------------------------------------------
2008// From linux-2.6.9/include/linux/ptrace.h
2009//----------------------------------------------------------------------
2010
2011#define VKI_PTRACE_PEEKTEXT 1
2012#define VKI_PTRACE_PEEKDATA 2
2013#define VKI_PTRACE_PEEKUSR 3
nethercote5b653bc2004-11-15 14:32:12 +00002014
njn4de47b12005-05-16 03:25:12 +00002015#endif // __VKI_LINUX_H
nethercote73b526f2004-10-31 18:48:21 +00002016
2017/*--------------------------------------------------------------------*/
2018/*--- end ---*/
2019/*--------------------------------------------------------------------*/