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