~bkerensa/ubuntu/raring/valgrind/merge-from-deb

« back to all changes in this revision

Viewing changes to include/vki-ppc32-linux.h

  • Committer: Bazaar Package Importer
  • Author(s): Andrés Roldán
  • Date: 2008-06-13 02:31:40 UTC
  • mto: (1.4.1 upstream) (2.2.1 squeeze)
  • mto: This revision was merged to the branch mainline in revision 24.
  • Revision ID: james.westby@ubuntu.com-20080613023140-iwk33rz9rhvfkr96
Import upstream version 3.3.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
/*--------------------------------------------------------------------*/
3
 
/*--- PPC32/Linux-specific kernel interface.     vki-ppc32-linux.h ---*/
4
 
/*--------------------------------------------------------------------*/
5
 
 
6
 
/*
7
 
   This file is part of Valgrind, a dynamic binary instrumentation
8
 
   framework.
9
 
 
10
 
   Copyright (C) 2005 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 __PPC32_LINUX_VKI_ARCH_H
32
 
#define __PPC32_LINUX_VKI_ARCH_H
33
 
 
34
 
// ppc32 is big-endian.
35
 
#define VKI_BIG_ENDIAN  1
36
 
 
37
 
//----------------------------------------------------------------------
38
 
// From linux-2.6.9/include/asm-ppc/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
 
typedef struct {
57
 
        __vki_u32 u[4];
58
 
} __vki_vector128;
59
 
 
60
 
//----------------------------------------------------------------------
61
 
// From linux-2.6.9/include/asm-ppc/page.h
62
 
//----------------------------------------------------------------------
63
 
 
64
 
/* PAGE_SHIFT determines the page size */
65
 
#define VKI_PAGE_SHIFT  12
66
 
#define VKI_PAGE_SIZE   (1UL << VKI_PAGE_SHIFT)
67
 
 
68
 
//----------------------------------------------------------------------
69
 
// From linux-2.6.9/include/asm-ppc/signal.h
70
 
//----------------------------------------------------------------------
71
 
 
72
 
#define VKI_MINSIGSTKSZ 2048
73
 
 
74
 
#define VKI_SIG_BLOCK         0    /* for blocking signals */
75
 
#define VKI_SIG_UNBLOCK       1    /* for unblocking signals */
76
 
#define VKI_SIG_SETMASK       2    /* for setting the signal mask */
77
 
 
78
 
/* Type of a signal handler.  */
79
 
typedef void __vki_signalfn_t(int);
80
 
typedef __vki_signalfn_t __user *__vki_sighandler_t;
81
 
 
82
 
typedef void __vki_restorefn_t(void);
83
 
typedef __vki_restorefn_t __user *__vki_sigrestore_t;
84
 
 
85
 
#define VKI_SIG_DFL     ((__vki_sighandler_t)0)     /* default signal handling */
86
 
#define VKI_SIG_IGN     ((__vki_sighandler_t)1)     /* ignore signal */
87
 
 
88
 
#define _VKI_NSIG       64
89
 
#define _VKI_NSIG_BPW   32
90
 
#define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
91
 
 
92
 
typedef unsigned long vki_old_sigset_t;         /* at least 32 bits */
93
 
 
94
 
typedef struct {
95
 
        unsigned long sig[_VKI_NSIG_WORDS];
96
 
} vki_sigset_t;
97
 
 
98
 
#define VKI_SIGHUP               1
99
 
#define VKI_SIGINT               2
100
 
#define VKI_SIGQUIT              3
101
 
#define VKI_SIGILL               4
102
 
#define VKI_SIGTRAP              5
103
 
#define VKI_SIGABRT              6
104
 
//#define VKI_SIGIOT             6
105
 
#define VKI_SIGBUS               7
106
 
#define VKI_SIGFPE               8
107
 
#define VKI_SIGKILL              9
108
 
#define VKI_SIGUSR1             10
109
 
#define VKI_SIGSEGV             11
110
 
#define VKI_SIGUSR2             12
111
 
#define VKI_SIGPIPE             13
112
 
#define VKI_SIGALRM             14
113
 
#define VKI_SIGTERM             15
114
 
#define VKI_SIGSTKFLT           16
115
 
#define VKI_SIGCHLD             17
116
 
#define VKI_SIGCONT             18
117
 
#define VKI_SIGSTOP             19
118
 
#define VKI_SIGTSTP             20
119
 
#define VKI_SIGTTIN             21
120
 
#define VKI_SIGTTOU             22
121
 
#define VKI_SIGURG              23
122
 
#define VKI_SIGXCPU             24
123
 
#define VKI_SIGXFSZ             25
124
 
#define VKI_SIGVTALRM           26
125
 
#define VKI_SIGPROF             27
126
 
#define VKI_SIGWINCH            28
127
 
#define VKI_SIGIO               29
128
 
#define VKI_SIGPWR              30
129
 
#define VKI_SIGSYS              31
130
 
#define VKI_SIGUNUSED           31
131
 
 
132
 
/* These should not be considered constants from userland.  */
133
 
#define VKI_SIGRTMIN    32
134
 
// [[This was (_NSIG-1) in 2.4.X... not sure if it matters.]]
135
 
#define VKI_SIGRTMAX    _VKI_NSIG
136
 
 
137
 
#define VKI_SA_NOCLDSTOP        0x00000001
138
 
#define VKI_SA_NOCLDWAIT        0x00000002
139
 
#define VKI_SA_SIGINFO          0x00000004
140
 
#define VKI_SA_ONSTACK          0x08000000
141
 
#define VKI_SA_RESTART          0x10000000
142
 
#define VKI_SA_NODEFER          0x40000000
143
 
#define VKI_SA_RESETHAND        0x80000000
144
 
 
145
 
#define VKI_SA_NOMASK           VKI_SA_NODEFER
146
 
#define VKI_SA_ONESHOT          VKI_SA_RESETHAND
147
 
//#define VKI_SA_INTERRUPT      0x20000000 /* dummy -- ignored */
148
 
 
149
 
#define VKI_SA_RESTORER         0x04000000
150
 
 
151
 
#define VKI_SS_ONSTACK          1
152
 
#define VKI_SS_DISABLE          2
153
 
 
154
 
struct vki_old_sigaction {
155
 
        // [[Nb: a 'k' prefix is added to "sa_handler" because
156
 
        // bits/sigaction.h (which gets dragged in somehow via signal.h)
157
 
        // #defines it as something else.  Since that is done for glibc's
158
 
        // purposes, which we don't care about here, we use our own name.]]
159
 
        __vki_sighandler_t ksa_handler;
160
 
        vki_old_sigset_t sa_mask;
161
 
        unsigned long sa_flags;
162
 
        __vki_sigrestore_t sa_restorer;
163
 
};
164
 
 
165
 
struct vki_sigaction {
166
 
        // [[See comment about extra 'k' above]]
167
 
        __vki_sighandler_t ksa_handler;
168
 
        unsigned long sa_flags;
169
 
        __vki_sigrestore_t sa_restorer;
170
 
        vki_sigset_t sa_mask;           /* mask last for extensibility */
171
 
};
172
 
 
173
 
typedef struct vki_sigaltstack {
174
 
        void __user *ss_sp;
175
 
        int ss_flags;
176
 
        vki_size_t ss_size;
177
 
} vki_stack_t;
178
 
 
179
 
 
180
 
//----------------------------------------------------------------------
181
 
// From linux-2.6.9/include/asm-ppc/ptrace.h
182
 
//----------------------------------------------------------------------
183
 
 
184
 
struct vki_pt_regs {
185
 
        unsigned long gpr[32];
186
 
        unsigned long nip;
187
 
        unsigned long msr;
188
 
        unsigned long orig_gpr3;        /* Used for restarting system calls */
189
 
        unsigned long ctr;
190
 
        unsigned long link;
191
 
        unsigned long xer;
192
 
        unsigned long ccr;
193
 
        unsigned long mq;               /* 601 only (not used at present) */
194
 
                                        /* Used on APUS to hold IPL value. */
195
 
        unsigned long trap;             /* Reason for being here */
196
 
        /* N.B. for critical exceptions on 4xx, the dar and dsisr
197
 
           fields are overloaded to hold srr0 and srr1. */
198
 
        unsigned long dar;              /* Fault registers */
199
 
        unsigned long dsisr;            /* on 4xx/Book-E used for ESR */
200
 
        unsigned long result;           /* Result of a system call */
201
 
 
202
 
        /* Not in kernel's definition, but apparently needed to stop
203
 
           assertion at coredump-elf.c:267 firing.  These padding
204
 
           words make the struct have the same size as a
205
 
           'vki_elf_greg_t'.  See message from Ghassan Hammouri on
206
 
           valgrind-developers on 6 April 06. */
207
 
        unsigned long pad[4];
208
 
};
209
 
 
210
 
#define vki_user_regs_struct vki_pt_regs
211
 
 
212
 
#define VKI_PT_R0               0
213
 
#define VKI_PT_R1               1
214
 
#define VKI_PT_R2               2
215
 
#define VKI_PT_R3               3
216
 
#define VKI_PT_R4               4
217
 
#define VKI_PT_R5               5
218
 
#define VKI_PT_R6               6
219
 
#define VKI_PT_R7               7
220
 
#define VKI_PT_R8               8
221
 
#define VKI_PT_R9               9
222
 
#define VKI_PT_R10              10
223
 
#define VKI_PT_R11              11
224
 
#define VKI_PT_R12              12
225
 
#define VKI_PT_R13              13
226
 
#define VKI_PT_R14              14
227
 
#define VKI_PT_R15              15
228
 
#define VKI_PT_R16              16
229
 
#define VKI_PT_R17              17
230
 
#define VKI_PT_R18              18
231
 
#define VKI_PT_R19              19
232
 
#define VKI_PT_R20              20
233
 
#define VKI_PT_R21              21
234
 
#define VKI_PT_R22              22
235
 
#define VKI_PT_R23              23
236
 
#define VKI_PT_R24              24
237
 
#define VKI_PT_R25              25
238
 
#define VKI_PT_R26              26
239
 
#define VKI_PT_R27              27
240
 
#define VKI_PT_R28              28
241
 
#define VKI_PT_R29              29
242
 
#define VKI_PT_R30              30
243
 
#define VKI_PT_R31              31
244
 
#define VKI_PT_NIP              32
245
 
#define VKI_PT_MSR              33
246
 
#define VKI_PT_ORIG_R3          34
247
 
#define VKI_PT_CTR              35
248
 
#define VKI_PT_LNK              36
249
 
#define VKI_PT_XER              37
250
 
#define VKI_PT_CCR              38
251
 
#define VKI_PT_MQ               39
252
 
#define VKI_PT_TRAP             40
253
 
#define VKI_PT_DAR              41
254
 
#define VKI_PT_DSISR            42
255
 
#define VKI_PT_RESULT           43
256
 
 
257
 
//----------------------------------------------------------------------
258
 
// From linux-2.6.9/include/asm-ppc/sigcontext.h
259
 
//----------------------------------------------------------------------
260
 
 
261
 
struct vki_sigcontext {
262
 
        unsigned long      _unused[4];
263
 
        int                signal;
264
 
        unsigned long      handler;
265
 
        unsigned long      oldmask;
266
 
        struct vki_pt_regs *regs;
267
 
};
268
 
 
269
 
//----------------------------------------------------------------------
270
 
// From linux-2.6.9/include/asm-ppc/mman.h
271
 
//----------------------------------------------------------------------
272
 
 
273
 
#define VKI_PROT_NONE           0x0      /* No page permissions */
274
 
#define VKI_PROT_READ           0x1      /* page can be read */
275
 
#define VKI_PROT_WRITE          0x2      /* page can be written */
276
 
#define VKI_PROT_EXEC           0x4      /* page can be executed */
277
 
#define VKI_PROT_GROWSDOWN      0x01000000      /* mprotect flag: extend change to start of growsdown vma */
278
 
#define VKI_PROT_GROWSUP        0x02000000      /* mprotect flag: extend change to end of growsup vma */
279
 
 
280
 
#define VKI_MAP_SHARED          0x01     /* Share changes */
281
 
#define VKI_MAP_PRIVATE         0x02     /* Changes are private */
282
 
//#define VKI_MAP_TYPE          0x0f     /* Mask for type of mapping */
283
 
#define VKI_MAP_FIXED           0x10     /* Interpret addr exactly */
284
 
#define VKI_MAP_ANONYMOUS       0x20     /* don't use a file */
285
 
#define VKI_MAP_NORESERVE       0x40     /* don't reserve swap pages */
286
 
 
287
 
//----------------------------------------------------------------------
288
 
// From linux-2.6.9/include/asm-ppc/fcntl.h
289
 
//----------------------------------------------------------------------
290
 
 
291
 
#define VKI_O_RDONLY               00
292
 
#define VKI_O_WRONLY               01
293
 
#define VKI_O_RDWR                 02
294
 
#define VKI_O_CREAT              0100           /* not fcntl */
295
 
#define VKI_O_EXCL               0200           /* not fcntl */
296
 
#define VKI_O_TRUNC             01000           /* not fcntl */
297
 
#define VKI_O_APPEND            02000
298
 
#define VKI_O_NONBLOCK          04000
299
 
#define VKI_O_LARGEFILE     0200000
300
 
 
301
 
#define VKI_F_DUPFD              0                      /* dup */
302
 
#define VKI_F_GETFD              1                      /* get close_on_exec */
303
 
#define VKI_F_SETFD              2                      /* set/clear close_on_exec */
304
 
#define VKI_F_GETFL              3                      /* get file->f_flags */
305
 
#define VKI_F_SETFL              4                      /* set file->f_flags */
306
 
#define VKI_F_GETLK              5
307
 
#define VKI_F_SETLK              6
308
 
#define VKI_F_SETLKW             7
309
 
 
310
 
#define VKI_F_SETOWN             8                      /*  for sockets. */
311
 
#define VKI_F_GETOWN             9                      /*  for sockets. */
312
 
#define VKI_F_SETSIG            10                      /*  for sockets. */
313
 
#define VKI_F_GETSIG            11                      /*  for sockets. */
314
 
 
315
 
#define VKI_F_GETLK64           12                      /*  using 'struct flock64' */
316
 
#define VKI_F_SETLK64           13
317
 
#define VKI_F_SETLKW64          14
318
 
 
319
 
/* for F_[GET|SET]FL */
320
 
#define VKI_FD_CLOEXEC   1              /* actually anything with low bit set goes */
321
 
 
322
 
#define VKI_F_LINUX_SPECIFIC_BASE       1024
323
 
 
324
 
//----------------------------------------------------------------------
325
 
// From linux-2.6.9/include/asm-ppc/resource.h
326
 
//----------------------------------------------------------------------
327
 
 
328
 
#define VKI_RLIMIT_DATA         2   /* max data size */
329
 
#define VKI_RLIMIT_STACK        3   /* max stack size */
330
 
#define VKI_RLIMIT_CORE         4   /* max core file size */
331
 
#define VKI_RLIMIT_NOFILE       7   /* max number of open files */
332
 
 
333
 
//----------------------------------------------------------------------
334
 
// From linux-2.6.9/include/asm-ppc/socket.h
335
 
//----------------------------------------------------------------------
336
 
 
337
 
#define VKI_SOL_SOCKET  1
338
 
#define VKI_SO_TYPE     3
339
 
 
340
 
#define VKI_SIOCSPGRP   0x8902
341
 
#define VKI_SIOCGPGRP   0x8904
342
 
#define VKI_SIOCGSTAMP  0x8906          /* Get stamp */
343
 
 
344
 
//----------------------------------------------------------------------
345
 
// From linux-2.6.10/include/asm-ppc/stat.h
346
 
//----------------------------------------------------------------------
347
 
 
348
 
//.. #define VKI_S_IFMT         00170000
349
 
//.. #define VKI_S_IFSOCK        0140000
350
 
//.. #define VKI_S_IFLNK         0120000
351
 
//.. #define VKI_S_IFREG         0100000
352
 
//.. #define VKI_S_IFBLK         0060000
353
 
//.. #define VKI_S_IFDIR         0040000
354
 
//.. #define VKI_S_IFCHR         0020000
355
 
//.. #define VKI_S_IFIFO         0010000
356
 
//.. #define VKI_S_ISUID         0004000
357
 
//.. #define VKI_S_ISGID         0002000
358
 
//.. #define VKI_S_ISVTX         0001000
359
 
//.. 
360
 
//.. #define VKI_S_ISLNK(m)     (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
361
 
//.. #define VKI_S_ISREG(m)     (((m) & VKI_S_IFMT) == VKI_S_IFREG)
362
 
//.. #define VKI_S_ISDIR(m)     (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
363
 
//.. #define VKI_S_ISCHR(m)     (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
364
 
//.. #define VKI_S_ISBLK(m)     (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
365
 
//.. #define VKI_S_ISFIFO(m)    (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
366
 
//.. #define VKI_S_ISSOCK(m)    (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
367
 
 
368
 
struct vki_stat {
369
 
   unsigned             st_dev;
370
 
   unsigned long        st_ino;
371
 
   unsigned int         st_mode;
372
 
   unsigned short       st_nlink;
373
 
   unsigned int         st_uid;
374
 
   unsigned int         st_gid;
375
 
   unsigned             st_rdev;
376
 
   long                 st_size;
377
 
   unsigned long        st_blksize;
378
 
   unsigned long        st_blocks;
379
 
   unsigned long        st_atime;
380
 
   unsigned long        st_atime_nsec;
381
 
   unsigned long        st_mtime;
382
 
   unsigned long        st_mtime_nsec;
383
 
   unsigned long        st_ctime;
384
 
   unsigned long        st_ctime_nsec;
385
 
   unsigned long        __unused4;
386
 
   unsigned long        __unused5;
387
 
};
388
 
 
389
 
struct vki_stat64 {
390
 
   unsigned long long   st_dev;
391
 
   unsigned long long   st_ino;
392
 
   unsigned int         st_mode;
393
 
   unsigned int         st_nlink;
394
 
   unsigned int         st_uid;
395
 
   unsigned int         st_gid;
396
 
   unsigned long long   st_rdev;
397
 
   unsigned short int   __pad2;
398
 
   long long            st_size;
399
 
   long                 st_blksize;
400
 
 
401
 
   long long            st_blocks;
402
 
   long                 st_atime;
403
 
   unsigned long        st_atime_nsec;
404
 
   long                 st_mtime;
405
 
   unsigned long int    st_mtime_nsec;
406
 
   long                 st_ctime;
407
 
   unsigned long int    st_ctime_nsec;
408
 
   unsigned long int    __unused4;
409
 
   unsigned long int    __unused5;
410
 
};
411
 
 
412
 
 
413
 
//----------------------------------------------------------------------
414
 
// From linux-2.6.9/include/asm-ppc/statfs.h
415
 
//----------------------------------------------------------------------
416
 
 
417
 
// [[Nb: asm-ppc/statfs.h just #include asm-generic/statfs.h directly]]
418
 
struct vki_statfs {
419
 
   __vki_u32 f_type;
420
 
   __vki_u32 f_bsize;
421
 
   __vki_u32 f_blocks;
422
 
   __vki_u32 f_bfree;
423
 
   __vki_u32 f_bavail;
424
 
   __vki_u32 f_files;
425
 
   __vki_u32 f_ffree;
426
 
   __vki_kernel_fsid_t f_fsid;
427
 
   __vki_u32 f_namelen;
428
 
   __vki_u32 f_frsize;
429
 
   __vki_u32 f_spare[5];
430
 
};
431
 
 
432
 
//----------------------------------------------------------------------
433
 
// From linux-2.6.9/include/asm-ppc/termios.h
434
 
//----------------------------------------------------------------------
435
 
 
436
 
struct vki_winsize {
437
 
   unsigned short ws_row;
438
 
   unsigned short ws_col;
439
 
   unsigned short ws_xpixel;
440
 
   unsigned short ws_ypixel;
441
 
};
442
 
 
443
 
#define NCC 10
444
 
struct vki_termio {
445
 
   unsigned short       c_iflag;                /* input mode flags */
446
 
   unsigned short       c_oflag;                /* output mode flags */
447
 
   unsigned short       c_cflag;                /* control mode flags */
448
 
   unsigned short       c_lflag;                /* local mode flags */
449
 
   unsigned char        c_line;                 /* line discipline */
450
 
   unsigned char        c_cc[NCC];              /* control characters */
451
 
};
452
 
 
453
 
//----------------------------------------------------------------------
454
 
// From linux-2.6.9/include/asm-ppc/termbits.h
455
 
//----------------------------------------------------------------------
456
 
 
457
 
typedef unsigned char   vki_cc_t;
458
 
typedef unsigned int    vki_speed_t;
459
 
typedef unsigned int    vki_tcflag_t;
460
 
 
461
 
#define NCCS 19
462
 
struct vki_termios {
463
 
        vki_tcflag_t    c_iflag;                /* input mode flags */
464
 
        vki_tcflag_t    c_oflag;                /* output mode flags */
465
 
        vki_tcflag_t    c_cflag;                /* control mode flags */
466
 
        vki_tcflag_t    c_lflag;                /* local mode flags */
467
 
        vki_cc_t        c_cc[NCCS];             /* control characters */
468
 
        vki_cc_t        c_line;                 /* line discipline (== c_cc[19]) */
469
 
        vki_speed_t     c_ispeed;               /* input speed */
470
 
        vki_speed_t     c_ospeed;               /* output speed */
471
 
};
472
 
 
473
 
//----------------------------------------------------------------------
474
 
// From linux-2.6.9/include/asm-ppc/ioctl.h
475
 
//----------------------------------------------------------------------
476
 
 
477
 
#define _VKI_IOC_NRBITS          8
478
 
#define _VKI_IOC_TYPEBITS        8
479
 
#define _VKI_IOC_SIZEBITS       13
480
 
#define _VKI_IOC_DIRBITS         3
481
 
 
482
 
#define _VKI_IOC_NRMASK         ((1 << _VKI_IOC_NRBITS)-1)
483
 
#define _VKI_IOC_TYPEMASK       ((1 << _VKI_IOC_TYPEBITS)-1)
484
 
#define _VKI_IOC_SIZEMASK       ((1 << _VKI_IOC_SIZEBITS)-1)
485
 
#define _VKI_IOC_DIRMASK        ((1 << _VKI_IOC_DIRBITS)-1)
486
 
 
487
 
#define _VKI_IOC_NRSHIFT        0
488
 
#define _VKI_IOC_TYPESHIFT      (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
489
 
#define _VKI_IOC_SIZESHIFT      (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
490
 
#define _VKI_IOC_DIRSHIFT       (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
491
 
 
492
 
#define _VKI_IOC_NONE   1U
493
 
#define _VKI_IOC_READ   2U
494
 
#define _VKI_IOC_WRITE  4U
495
 
 
496
 
#define _VKI_IOC(dir,type,nr,size) \
497
 
        (((dir)  << _VKI_IOC_DIRSHIFT) | \
498
 
         ((type) << _VKI_IOC_TYPESHIFT) | \
499
 
         ((nr)   << _VKI_IOC_NRSHIFT) | \
500
 
         ((size) << _VKI_IOC_SIZESHIFT))
501
 
 
502
 
/* provoke compile error for invalid uses of size argument */
503
 
extern unsigned int __VKI_invalid_size_argument_for_IOC;
504
 
#define _VKI_IOC_TYPECHECK(t) \
505
 
        ((sizeof(t) == sizeof(t[1]) && \
506
 
          sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) ? \
507
 
          sizeof(t) : __VKI_invalid_size_argument_for_IOC)
508
 
 
509
 
/* used to create numbers */
510
 
#define _VKI_IO(type,nr)                        _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
511
 
#define _VKI_IOR(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
512
 
#define _VKI_IOW(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
513
 
#define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
514
 
 
515
 
/* used to decode them.. */
516
 
#define _VKI_IOC_DIR(nr)                (((nr) >> _VKI_IOC_DIRSHIFT)  & _VKI_IOC_DIRMASK)
517
 
//.. #define _VKI_IOC_TYPE(nr)          (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
518
 
//.. #define _VKI_IOC_NR(nr)            (((nr) >> _VKI_IOC_NRSHIFT)   & _VKI_IOC_NRMASK)
519
 
#define _VKI_IOC_SIZE(nr)               (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
520
 
 
521
 
//----------------------------------------------------------------------
522
 
// From linux-2.6.9/include/asm-ppc/ioctls.h
523
 
//----------------------------------------------------------------------
524
 
 
525
 
//#define VKI_FIOCLEX           _VKI_IO('f', 1)
526
 
//#define VKI_FIONCLEX          _VKI_IO('f', 2)
527
 
#define VKI_FIOASYNC            _VKI_IOW('f', 125, int)
528
 
#define VKI_FIONBIO             _VKI_IOW('f', 126, int)
529
 
#define VKI_FIONREAD            _VKI_IOR('f', 127, int)
530
 
//#define VKI_TIOCINQ           VKI_FIONREAD
531
 
//#define VKI_FIOQSIZE          _VKI_IOR('f', 128, vki_loff_t)
532
 
 
533
 
//#define VKI_TIOCGETP          _VKI_IOR('t', 8, struct vki_sgttyb)
534
 
//#define VKI_TIOCSETP          _VKI_IOW('t', 9, struct vki_sgttyb)
535
 
//#define VKI_TIOCSETN          _VKI_IOW('t', 10, struct vki_sgttyb)    /* TIOCSETP wo flush */
536
 
 
537
 
//#define VKI_TIOCSETC          _VKI_IOW('t', 17, struct vki_tchars)
538
 
//#define VKI_TIOCGETC          _VKI_IOR('t', 18, struct vki_tchars)
539
 
#define VKI_TCGETS              _VKI_IOR('t', 19, struct vki_termios)
540
 
#define VKI_TCSETS              _VKI_IOW('t', 20, struct vki_termios)
541
 
#define VKI_TCSETSW             _VKI_IOW('t', 21, struct vki_termios)
542
 
#define VKI_TCSETSF             _VKI_IOW('t', 22, struct vki_termios)
543
 
 
544
 
#define VKI_TCGETA              _VKI_IOR('t', 23, struct vki_termio)
545
 
#define VKI_TCSETA              _VKI_IOW('t', 24, struct vki_termio)
546
 
#define VKI_TCSETAW             _VKI_IOW('t', 25, struct vki_termio)
547
 
#define VKI_TCSETAF             _VKI_IOW('t', 28, struct vki_termio)
548
 
 
549
 
#define VKI_TCSBRK              _VKI_IO('t', 29)
550
 
#define VKI_TCXONC              _VKI_IO('t', 30)
551
 
#define VKI_TCFLSH              _VKI_IO('t', 31)
552
 
 
553
 
#define VKI_TIOCSWINSZ          _VKI_IOW('t', 103, struct vki_winsize)
554
 
#define VKI_TIOCGWINSZ          _VKI_IOR('t', 104, struct vki_winsize)
555
 
//#define VKI_TIOCSTART         _VKI_IO('t', 110)          /* start output, like ^Q */
556
 
//#define VKI_TIOCSTOP          _VKI_IO('t', 111)          /* stop output, like ^S */
557
 
#define VKI_TIOCOUTQ            _VKI_IOR('t', 115, int)    /* output queue size */
558
 
 
559
 
//#define VKI_TIOCGLTC          _VKI_IOR('t', 116, struct vki_ltchars)
560
 
//#define VKI_TIOCSLTC          _VKI_IOW('t', 117, struct vki_ltchars)
561
 
#define VKI_TIOCSPGRP           _VKI_IOW('t', 118, int)
562
 
#define VKI_TIOCGPGRP           _VKI_IOR('t', 119, int)
563
 
 
564
 
//#define VKI_TIOCEXCL          0x540C
565
 
//#define VKI_TIOCNXCL          0x540D
566
 
#define VKI_TIOCSCTTY           0x540E
567
 
 
568
 
//#define VKI_TIOCSTI           0x5412
569
 
#define VKI_TIOCMGET            0x5415
570
 
#define VKI_TIOCMBIS            0x5416
571
 
#define VKI_TIOCMBIC            0x5417
572
 
#define VKI_TIOCMSET            0x5418
573
 
//# define VKI_TIOCM_LE         0x001
574
 
//# define VKI_TIOCM_DTR        0x002
575
 
//# define VKI_TIOCM_RTS        0x004
576
 
//# define VKI_TIOCM_ST         0x008
577
 
//# define VKI_TIOCM_SR         0x010
578
 
//# define VKI_TIOCM_CTS        0x020
579
 
//# define VKI_TIOCM_CAR        0x040
580
 
//# define VKI_TIOCM_RNG        0x080
581
 
//# define VKI_TIOCM_DSR        0x100
582
 
//# define VKI_TIOCM_CD         VKI_TIOCM_CAR
583
 
//# define VKI_TIOCM_RI         VKI_TIOCM_RNG
584
 
 
585
 
//#define VKI_TIOCGSOFTCAR      0x5419
586
 
//#define VKI_TIOCSSOFTCAR      0x541A
587
 
#define VKI_TIOCLINUX           0x541C
588
 
//#define VKI_TIOCCONS          0x541D
589
 
//#define VKI_TIOCGSERIAL       0x541E
590
 
//#define VKI_TIOCSSERIAL       0x541F
591
 
//#define VKI_TIOCPKT           0x5420
592
 
//# define VKI_TIOCPKT_DATA              0
593
 
//# define VKI_TIOCPKT_FLUSHREAD         1
594
 
//# define VKI_TIOCPKT_FLUSHWRITE        2
595
 
//# define VKI_TIOCPKT_STOP              4
596
 
//# define VKI_TIOCPKT_START             8
597
 
//# define VKI_TIOCPKT_NOSTOP           16
598
 
//# define VKI_TIOCPKT_DOSTOP           32
599
 
 
600
 
//#define VKI_TIOCNOTTY         0x5422
601
 
//#define VKI_TIOCSETD          0x5423
602
 
//#define VKI_TIOCGETD          0x5424
603
 
#define VKI_TCSBRKP             0x5425  /* Needed for POSIX tcsendbreak() */
604
 
//#define VKI_TIOCSBRK          0x5427  /* BSD compatibility */
605
 
//#define VKI_TIOCCBRK          0x5428  /* BSD compatibility */
606
 
//#define VKI_TIOCGSID          0x5429  /* Return the session ID of FD */
607
 
#define VKI_TIOCGPTN            _VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
608
 
#define VKI_TIOCSPTLCK          _VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
609
 
 
610
 
//#define VKI_TIOCSERCONFIG     0x5453
611
 
//#define VKI_TIOCSERGWILD      0x5454
612
 
//#define VKI_TIOCSERSWILD      0x5455
613
 
//#define VKI_TIOCGLCKTRMIOS    0x5456
614
 
//#define VKI_TIOCSLCKTRMIOS    0x5457
615
 
//#define VKI_TIOCSERGSTRUCT    0x5458 /* For debugging only */
616
 
#define VKI_TIOCSERGETLSR       0x5459 /* Get line status register */
617
 
  /* ioctl (fd, VKI_TIOCSERGETLSR, &result) where result may be as below */
618
 
//# define VKI_TIOCSER_TEMT     0x01   /* Transmitter physically empty */
619
 
//#define VKI_TIOCSERGETMULTI   0x545A /* Get multiport config  */
620
 
//#define VKI_TIOCSERSETMULTI   0x545B /* Set multiport config */
621
 
 
622
 
//#define VKI_TIOCMIWAIT        0x545C  /* wait for a change on serial input line(s) */
623
 
#define VKI_TIOCGICOUNT         0x545D  /* read serial port inline interrupt counts */
624
 
 
625
 
//----------------------------------------------------------------------
626
 
// From linux-2.6.9/include/asm-ppc/poll.h
627
 
//----------------------------------------------------------------------
628
 
 
629
 
//.. /* These are specified by iBCS2 */
630
 
//.. #define VKI_POLLIN         0x0001
631
 
 
632
 
struct vki_pollfd {
633
 
        int fd;
634
 
        short events;
635
 
        short revents;
636
 
};
637
 
 
638
 
//.. //----------------------------------------------------------------------
639
 
//.. // From linux-2.6.8.1/include/asm-i386/user.h
640
 
//.. //----------------------------------------------------------------------
641
 
//.. 
642
 
//.. struct vki_user_i387_struct {
643
 
//..    long    cwd;
644
 
//..    long    swd;
645
 
//..    long    twd;
646
 
//..    long    fip;
647
 
//..    long    fcs;
648
 
//..    long    foo;
649
 
//..    long    fos;
650
 
//..    long    st_space[20];   /* 8*10 bytes for each FP-reg = 80 bytes */
651
 
//.. };
652
 
//.. 
653
 
//.. struct vki_user_fxsr_struct {
654
 
//..    unsigned short  cwd;
655
 
//..    unsigned short  swd;
656
 
//..    unsigned short  twd;
657
 
//..    unsigned short  fop;
658
 
//..    long    fip;
659
 
//..    long    fcs;
660
 
//..    long    foo;
661
 
//..    long    fos;
662
 
//..    long    mxcsr;
663
 
//..    long    reserved;
664
 
//..    long    st_space[32];   /* 8*16 bytes for each FP-reg = 128 bytes */
665
 
//..    long    xmm_space[32];  /* 8*16 bytes for each XMM-reg = 128 bytes */
666
 
//..    long    padding[56];
667
 
//.. };
668
 
//.. 
669
 
//.. /*
670
 
//..  * This is the old layout of "struct pt_regs", and
671
 
//..  * is still the layout used by user mode (the new
672
 
//..  * pt_regs doesn't have all registers as the kernel
673
 
//..  * doesn't use the extra segment registers)
674
 
//..  */
675
 
//.. struct vki_user_regs_struct {
676
 
//..    long ebx, ecx, edx, esi, edi, ebp, eax;
677
 
//..    unsigned short ds, __ds, es, __es;
678
 
//..    unsigned short fs, __fs, gs, __gs;
679
 
//..    long orig_eax, eip;
680
 
//..    unsigned short cs, __cs;
681
 
//..    long eflags, esp;
682
 
//..    unsigned short ss, __ss;
683
 
//.. };
684
 
 
685
 
//----------------------------------------------------------------------
686
 
// From linux-2.6.9/include/asm-ppc/elf.h
687
 
//----------------------------------------------------------------------
688
 
 
689
 
#define VKI_ELF_NGREG                   48      /* includes nip, msr, lr, etc. */
690
 
#define VKI_ELF_NFPREG                  33      /* includes fpscr */
691
 
#define VKI_ELF_NVRREG                  33      /* includes vscr */
692
 
 
693
 
/* General registers */
694
 
typedef unsigned long vki_elf_greg_t;
695
 
typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
696
 
 
697
 
/* Floating point registers */
698
 
typedef double vki_elf_fpreg_t;
699
 
typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];
700
 
 
701
 
/* Altivec registers */
702
 
typedef __vki_vector128 vki_elf_vrreg_t;
703
 
typedef vki_elf_vrreg_t vki_elf_vrregset_t[VKI_ELF_NVRREG];
704
 
 
705
 
#define VKI_AT_DCACHEBSIZE              19
706
 
#define VKI_AT_ICACHEBSIZE              20
707
 
#define VKI_AT_UCACHEBSIZE              21
708
 
/* A special ignored type value for PPC, for glibc compatibility.  */
709
 
#define VKI_AT_IGNOREPPC                22
710
 
 
711
 
/* CAB: Do we want these? */
712
 
//#define VKI_AT_SYSINFO                32
713
 
//#define VKI_AT_SYSINFO_EHDR           33
714
 
 
715
 
//----------------------------------------------------------------------
716
 
// From linux-2.6.9/include/asm-ppc/ucontext.h
717
 
//----------------------------------------------------------------------
718
 
 
719
 
struct vki_mcontext {
720
 
        vki_elf_gregset_t       mc_gregs;
721
 
        vki_elf_fpregset_t      mc_fregs;
722
 
        unsigned long           mc_pad[2];
723
 
        vki_elf_vrregset_t      mc_vregs __attribute__((__aligned__(16)));
724
 
};
725
 
 
726
 
struct vki_ucontext {
727
 
        unsigned long           uc_flags;
728
 
        struct vki_ucontext     __user *uc_link;
729
 
        vki_stack_t             uc_stack;
730
 
        int                     uc_pad[7];
731
 
        struct vki_mcontext     __user *uc_regs;                /* points to uc_mcontext field */
732
 
        vki_sigset_t            uc_sigmask;
733
 
        /* glibc has 1024-bit signal masks, ours are 64-bit */
734
 
        int                     uc_maskext[30];
735
 
        int                     uc_pad2[3];
736
 
        struct vki_mcontext     uc_mcontext;
737
 
};
738
 
 
739
 
//.. //----------------------------------------------------------------------
740
 
//.. // From linux-2.6.8.1/include/asm-i386/segment.h
741
 
//.. //----------------------------------------------------------------------
742
 
//.. 
743
 
//.. #define VKI_GDT_ENTRY_TLS_ENTRIES  3
744
 
//.. #define VKI_GDT_ENTRY_TLS_MIN      6
745
 
//.. #define VKI_GDT_ENTRY_TLS_MAX      (VKI_GDT_ENTRY_TLS_MIN + VKI_GDT_ENTRY_TLS_ENTRIES - 1)
746
 
 
747
 
//----------------------------------------------------------------------
748
 
// From linux-2.6.9/include/asm-ppc/ldt.h
749
 
//----------------------------------------------------------------------
750
 
 
751
 
//.. /* [[Nb: This is the structure passed to the modify_ldt syscall.  Just so as
752
 
//..    to confuse and annoy everyone, this is _not_ the same as an
753
 
//..    VgLdtEntry and has to be translated into such.  The logic for doing
754
 
//..    so, in vg_ldt.c, is copied from the kernel sources.]] */
755
 
//.. struct vki_user_desc {
756
 
//..    unsigned int    entry_number;
757
 
//..    unsigned long   base_addr;
758
 
//..    unsigned int    limit;
759
 
//..    unsigned int    seg_32bit:1;
760
 
//..    unsigned int    contents:2;
761
 
//..    unsigned int    read_exec_only:1;
762
 
//..    unsigned int    limit_in_pages:1;
763
 
//..    unsigned int    seg_not_present:1;
764
 
//..    unsigned int    useable:1;
765
 
//..         // [[Nb: this field is not in the kernel sources, but it has always
766
 
//..         // been in the Valgrind sources so I will keep it there in case it's
767
 
//..         // important... this is an x86-defined data structure so who
768
 
//..         // knows;  maybe it's important to set this field to zero at some
769
 
//..         // point.  --njn]]
770
 
//..    unsigned int    reserved:25;
771
 
//.. };
772
 
//.. 
773
 
//.. // [[Nb: for our convenience within Valgrind, use a more specific name]]
774
 
//.. typedef struct vki_user_desc vki_modify_ldt_t;
775
 
 
776
 
// CAB: TODO
777
 
typedef void vki_modify_ldt_t;
778
 
 
779
 
 
780
 
//----------------------------------------------------------------------
781
 
// From linux-2.6.9/include/asm-ppc/ipcbuf.h
782
 
//----------------------------------------------------------------------
783
 
 
784
 
struct vki_ipc64_perm
785
 
{
786
 
   __vki_kernel_key_t   key;
787
 
   __vki_kernel_uid_t   uid;
788
 
   __vki_kernel_gid_t   gid;
789
 
   __vki_kernel_uid_t   cuid;
790
 
   __vki_kernel_gid_t   cgid;
791
 
   __vki_kernel_mode_t  mode;
792
 
   unsigned long        seq;
793
 
   unsigned int         __pad2;
794
 
   unsigned long long   __unused1;
795
 
   unsigned long long   __unused2;
796
 
};
797
 
 
798
 
//----------------------------------------------------------------------
799
 
// From linux-2.6.9/include/asm-ppc/sembuf.h
800
 
//----------------------------------------------------------------------
801
 
 
802
 
struct vki_semid64_ds {
803
 
   struct vki_ipc64_perm        sem_perm;               /* permissions .. see ipc.h */
804
 
   unsigned int                 __unused1;
805
 
   __vki_kernel_time_t          sem_otime;              /* last semop time */
806
 
   unsigned int                 __unused2;
807
 
   __vki_kernel_time_t          sem_ctime;              /* last change time */
808
 
   unsigned long                sem_nsems;              /* no. of semaphores in array */
809
 
   unsigned long                __unused3;
810
 
   unsigned long                __unused4;
811
 
};
812
 
 
813
 
//----------------------------------------------------------------------
814
 
// From linux-2.6.9/include/asm-ppc/msgbuf.h
815
 
//----------------------------------------------------------------------
816
 
 
817
 
struct vki_msqid64_ds {
818
 
   struct vki_ipc64_perm        msg_perm;
819
 
   unsigned int                 __unused1;
820
 
   __vki_kernel_time_t          msg_stime;              /* last msgsnd time */
821
 
   unsigned int                 __unused2;
822
 
   __vki_kernel_time_t          msg_rtime;              /* last msgrcv time */
823
 
   unsigned int                 __unused3;
824
 
   __vki_kernel_time_t          msg_ctime;              /* last change time */
825
 
   unsigned long                msg_cbytes;             /* current number of bytes on queue */
826
 
   unsigned long                msg_qnum;               /* number of messages in queue */
827
 
   unsigned long                msg_qbytes;             /* max number of bytes on queue */
828
 
   __vki_kernel_pid_t           msg_lspid;              /* pid of last msgsnd */
829
 
   __vki_kernel_pid_t           msg_lrpid;              /* last receive pid */
830
 
   unsigned long                __unused4;
831
 
   unsigned long                __unused5;
832
 
};
833
 
 
834
 
//----------------------------------------------------------------------
835
 
// From linux-2.6.8.1/include/asm-ppc/ipc.h
836
 
//----------------------------------------------------------------------
837
 
 
838
 
struct vki_ipc_kludge {
839
 
        struct vki_msgbuf __user *msgp;
840
 
        long msgtyp;
841
 
};
842
 
 
843
 
#define VKI_SEMOP            1
844
 
#define VKI_SEMGET           2
845
 
#define VKI_SEMCTL           3
846
 
#define VKI_SEMTIMEDOP       4
847
 
#define VKI_MSGSND          11
848
 
#define VKI_MSGRCV          12
849
 
#define VKI_MSGGET          13
850
 
#define VKI_MSGCTL          14
851
 
#define VKI_SHMAT           21
852
 
#define VKI_SHMDT           22
853
 
#define VKI_SHMGET          23
854
 
#define VKI_SHMCTL          24
855
 
 
856
 
//----------------------------------------------------------------------
857
 
// From linux-2.6.9/include/asm-ppc/shmbuf.h
858
 
//----------------------------------------------------------------------
859
 
 
860
 
struct vki_shmid64_ds {
861
 
   struct vki_ipc64_perm        shm_perm;               /* operation perms */
862
 
   unsigned int                 __unused1;
863
 
   __vki_kernel_time_t          shm_atime;              /* last attach time */
864
 
   unsigned int                 __unused2;
865
 
   __vki_kernel_time_t          shm_dtime;              /* last detach time */
866
 
   unsigned int                 __unused3;
867
 
   __vki_kernel_time_t          shm_ctime;              /* last change time */
868
 
   unsigned int                 __unused4;
869
 
   vki_size_t                   shm_segsz;              /* size of segment (bytes) */
870
 
   __vki_kernel_pid_t           shm_cpid;               /* pid of creator */
871
 
   __vki_kernel_pid_t           shm_lpid;               /* pid of last operator */
872
 
   unsigned long                shm_nattch;             /* no. of current attaches */
873
 
   unsigned long                __unused5;
874
 
   unsigned long                __unused6;
875
 
};
876
 
 
877
 
struct vki_shminfo64 {
878
 
   unsigned long        shmmax;
879
 
   unsigned long        shmmin;
880
 
   unsigned long        shmmni;
881
 
   unsigned long        shmseg;
882
 
   unsigned long        shmall;
883
 
   unsigned long        __unused1;
884
 
   unsigned long        __unused2;
885
 
   unsigned long        __unused3;
886
 
   unsigned long        __unused4;
887
 
};
888
 
 
889
 
//.. //----------------------------------------------------------------------
890
 
//.. // DRM ioctls
891
 
//.. //----------------------------------------------------------------------
892
 
//.. 
893
 
//.. // jrs 20050207: where did all this stuff come from?  Is it really
894
 
//.. // i386 specific, or should it go into the linux-generic category?
895
 
//.. //struct vki_drm_buf_pub {
896
 
//.. // Int               idx;         /**< Index into the master buffer list */
897
 
//.. // Int               total;       /**< Buffer size */
898
 
//.. // Int               used;        /**< Amount of buffer in use (for DMA) */
899
 
//.. // void      __user *address;     /**< Address of buffer */
900
 
//.. //};
901
 
//.. //
902
 
//.. //struct vki_drm_buf_map {
903
 
//.. // Int           count;            /**< Length of the buffer list */
904
 
//.. // void          __user *virtual;  /**< Mmap'd area in user-virtual */
905
 
//.. // struct vki_drm_buf_pub __user *list;    /**< Buffer information */
906
 
//.. //};
907
 
//.. //
908
 
//.. ///* We need to pay attention to this, because it mmaps memory */
909
 
//.. //#define VKI_DRM_IOCTL_MAP_BUFS           _VKI_IOWR('d', 0x19, struct vki_drm_buf_map)
910
 
 
911
 
//----------------------------------------------------------------------
912
 
// And that's it!
913
 
//----------------------------------------------------------------------
914
 
 
915
 
#endif // __PPC32_LINUX_VKI_ARCH_H
916
 
 
917
 
/*--------------------------------------------------------------------*/
918
 
/*--- end                                                          ---*/
919
 
/*--------------------------------------------------------------------*/