Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /include/valgrind/vki/vki-ppc32-linux.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 
0002 /*--------------------------------------------------------------------*/
0003 /*--- PPC32/Linux-specific kernel interface.     vki-ppc32-linux.h ---*/
0004 /*--------------------------------------------------------------------*/
0005 
0006 /*
0007    This file is part of Valgrind, a dynamic binary instrumentation
0008    framework.
0009 
0010    Copyright (C) 2005-2017 Julian Seward
0011       jseward@acm.org
0012 
0013    This program is free software; you can redistribute it and/or
0014    modify it under the terms of the GNU General Public License as
0015    published by the Free Software Foundation; either version 2 of the
0016    License, or (at your option) any later version.
0017 
0018    This program is distributed in the hope that it will be useful, but
0019    WITHOUT ANY WARRANTY; without even the implied warranty of
0020    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0021    General Public License for more details.
0022 
0023    You should have received a copy of the GNU General Public License
0024    along with this program; if not, see <http://www.gnu.org/licenses/>.
0025 
0026    The GNU General Public License is contained in the file COPYING.
0027 */
0028 
0029 #ifndef __VKI_PPC32_LINUX_H
0030 #define __VKI_PPC32_LINUX_H
0031 
0032 // ppc32 is big-endian.
0033 #define VKI_BIG_ENDIAN  1
0034 
0035 //----------------------------------------------------------------------
0036 // From linux-2.6.9/include/asm-ppc/types.h
0037 //----------------------------------------------------------------------
0038 
0039 typedef unsigned char __vki_u8;
0040 
0041 typedef __signed__ short __vki_s16;
0042 typedef unsigned short __vki_u16;
0043 
0044 typedef __signed__ int __vki_s32;
0045 typedef unsigned int __vki_u32;
0046 
0047 typedef __signed__ long long __vki_s64;
0048 typedef unsigned long long __vki_u64;
0049 
0050 typedef unsigned short vki_u16;
0051 
0052 typedef unsigned int vki_u32;
0053 
0054 typedef struct {
0055         __vki_u32 u[4];
0056 } __vki_vector128;
0057 
0058 //----------------------------------------------------------------------
0059 // From linux-2.6.9/include/asm-ppc/page.h
0060 //----------------------------------------------------------------------
0061 
0062 /* PAGE_SHIFT determines the page size, unfortunately
0063    page size might vary between 32-bit and 64-bit ppc kernels */
0064 extern UWord VKI_PAGE_SHIFT;
0065 extern UWord VKI_PAGE_SIZE;
0066 #define VKI_MAX_PAGE_SHIFT  16
0067 #define VKI_MAX_PAGE_SIZE   (1UL << VKI_MAX_PAGE_SHIFT)
0068 
0069 //----------------------------------------------------------------------
0070 // From linux-2.6.35.4/arch/powerpc/include/asm/shmparam.h
0071 //----------------------------------------------------------------------
0072 
0073 #define VKI_SHMLBA  VKI_PAGE_SIZE
0074 
0075 //----------------------------------------------------------------------
0076 // From linux-2.6.9/include/asm-ppc/signal.h
0077 //----------------------------------------------------------------------
0078 
0079 #define VKI_MINSIGSTKSZ 2048
0080 
0081 #define VKI_SIG_BLOCK         0    /* for blocking signals */
0082 #define VKI_SIG_UNBLOCK       1    /* for unblocking signals */
0083 #define VKI_SIG_SETMASK       2    /* for setting the signal mask */
0084 
0085 /* Type of a signal handler.  */
0086 typedef void __vki_signalfn_t(int);
0087 typedef __vki_signalfn_t __user *__vki_sighandler_t;
0088 
0089 typedef void __vki_restorefn_t(void);
0090 typedef __vki_restorefn_t __user *__vki_sigrestore_t;
0091 
0092 #define VKI_SIG_DFL     ((__vki_sighandler_t)0)     /* default signal handling */
0093 #define VKI_SIG_IGN     ((__vki_sighandler_t)1)     /* ignore signal */
0094 
0095 #define _VKI_NSIG       64
0096 #define _VKI_NSIG_BPW   32
0097 #define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
0098 
0099 typedef unsigned long vki_old_sigset_t;     /* at least 32 bits */
0100 
0101 typedef struct {
0102         unsigned long sig[_VKI_NSIG_WORDS];
0103 } vki_sigset_t;
0104 
0105 #define VKI_SIGHUP       1
0106 #define VKI_SIGINT       2
0107 #define VKI_SIGQUIT      3
0108 #define VKI_SIGILL       4
0109 #define VKI_SIGTRAP      5
0110 #define VKI_SIGABRT      6
0111 //#define VKI_SIGIOT         6
0112 #define VKI_SIGBUS       7
0113 #define VKI_SIGFPE       8
0114 #define VKI_SIGKILL      9
0115 #define VKI_SIGUSR1     10
0116 #define VKI_SIGSEGV     11
0117 #define VKI_SIGUSR2     12
0118 #define VKI_SIGPIPE     13
0119 #define VKI_SIGALRM     14
0120 #define VKI_SIGTERM     15
0121 #define VKI_SIGSTKFLT       16
0122 #define VKI_SIGCHLD     17
0123 #define VKI_SIGCONT     18
0124 #define VKI_SIGSTOP     19
0125 #define VKI_SIGTSTP     20
0126 #define VKI_SIGTTIN     21
0127 #define VKI_SIGTTOU     22
0128 #define VKI_SIGURG      23
0129 #define VKI_SIGXCPU     24
0130 #define VKI_SIGXFSZ     25
0131 #define VKI_SIGVTALRM       26
0132 #define VKI_SIGPROF     27
0133 #define VKI_SIGWINCH        28
0134 #define VKI_SIGIO       29
0135 #define VKI_SIGPWR      30
0136 #define VKI_SIGSYS      31
0137 #define VKI_SIGUNUSED       31
0138 
0139 /* These should not be considered constants from userland.  */
0140 #define VKI_SIGRTMIN    32
0141 // [[This was (_NSIG-1) in 2.4.X... not sure if it matters.]]
0142 #define VKI_SIGRTMAX    _VKI_NSIG
0143 
0144 #define VKI_SA_NOCLDSTOP    0x00000001
0145 #define VKI_SA_NOCLDWAIT    0x00000002
0146 #define VKI_SA_SIGINFO      0x00000004
0147 #define VKI_SA_ONSTACK      0x08000000
0148 #define VKI_SA_RESTART      0x10000000
0149 #define VKI_SA_NODEFER      0x40000000
0150 #define VKI_SA_RESETHAND    0x80000000
0151 
0152 #define VKI_SA_NOMASK       VKI_SA_NODEFER
0153 #define VKI_SA_ONESHOT      VKI_SA_RESETHAND
0154 //#define VKI_SA_INTERRUPT  0x20000000 /* dummy -- ignored */
0155 
0156 #define VKI_SA_RESTORER     0x04000000
0157 
0158 #define VKI_SS_ONSTACK      1
0159 #define VKI_SS_DISABLE      2
0160 
0161 /* These are 'legacy' sigactions in which the size of sa_mask is fixed
0162    (cannot be expanded at any future point) because it is sandwiched
0163    between two other fields.
0164    (there is identical kludgery in vki-x86-linux.h) */
0165 struct vki_old_sigaction {
0166         // [[Nb: a 'k' prefix is added to "sa_handler" because
0167         // bits/sigaction.h (which gets dragged in somehow via signal.h)
0168         // #defines it as something else.  Since that is done for glibc's
0169         // purposes, which we don't care about here, we use our own name.]]
0170         __vki_sighandler_t ksa_handler;
0171         vki_old_sigset_t sa_mask;
0172         unsigned long sa_flags;
0173         __vki_sigrestore_t sa_restorer;
0174 };
0175 
0176 struct vki_sigaction_base {
0177         // [[See comment about extra 'k' above]]
0178     __vki_sighandler_t ksa_handler;
0179     unsigned long sa_flags;
0180     __vki_sigrestore_t sa_restorer;
0181     vki_sigset_t sa_mask;       /* mask last for extensibility */
0182 };
0183 
0184 /* On Linux we use the same type for passing sigactions to
0185    and from the kernel.  Hence: */
0186 typedef  struct vki_sigaction_base  vki_sigaction_toK_t;
0187 typedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
0188 
0189 
0190 typedef struct vki_sigaltstack {
0191     void __user *ss_sp;
0192     int ss_flags;
0193     vki_size_t ss_size;
0194 } vki_stack_t;
0195 
0196 
0197 //----------------------------------------------------------------------
0198 // From linux-2.6.9/include/asm-ppc/ptrace.h
0199 //----------------------------------------------------------------------
0200 
0201 struct vki_pt_regs {
0202         unsigned long gpr[32];
0203         unsigned long nip;
0204         unsigned long msr;
0205         unsigned long orig_gpr3;        /* Used for restarting system calls */
0206         unsigned long ctr;
0207         unsigned long link;
0208         unsigned long xer;
0209         unsigned long ccr;
0210         unsigned long mq;               /* 601 only (not used at present) */
0211                                         /* Used on APUS to hold IPL value. */
0212         unsigned long trap;             /* Reason for being here */
0213         /* N.B. for critical exceptions on 4xx, the dar and dsisr
0214            fields are overloaded to hold srr0 and srr1. */
0215         unsigned long dar;              /* Fault registers */
0216         unsigned long dsisr;            /* on 4xx/Book-E used for ESR */
0217         unsigned long result;           /* Result of a system call */
0218 
0219         /* Not in kernel's definition, but apparently needed to stop
0220            assertion at coredump-elf.c:267 firing.  These padding
0221            words make the struct have the same size as a
0222            'vki_elf_greg_t'.  See message from Ghassan Hammouri on
0223            valgrind-developers on 6 April 06. */
0224         unsigned long pad[4];
0225 };
0226 
0227 #define vki_user_regs_struct vki_pt_regs
0228 
0229 #define VKI_PT_R0       0
0230 #define VKI_PT_R1       1
0231 #define VKI_PT_R2       2
0232 #define VKI_PT_R3       3
0233 #define VKI_PT_R4       4
0234 #define VKI_PT_R5       5
0235 #define VKI_PT_R6       6
0236 #define VKI_PT_R7       7
0237 #define VKI_PT_R8       8
0238 #define VKI_PT_R9       9
0239 #define VKI_PT_R10      10
0240 #define VKI_PT_R11      11
0241 #define VKI_PT_R12      12
0242 #define VKI_PT_R13      13
0243 #define VKI_PT_R14      14
0244 #define VKI_PT_R15      15
0245 #define VKI_PT_R16      16
0246 #define VKI_PT_R17      17
0247 #define VKI_PT_R18      18
0248 #define VKI_PT_R19      19
0249 #define VKI_PT_R20      20
0250 #define VKI_PT_R21      21
0251 #define VKI_PT_R22      22
0252 #define VKI_PT_R23      23
0253 #define VKI_PT_R24      24
0254 #define VKI_PT_R25      25
0255 #define VKI_PT_R26      26
0256 #define VKI_PT_R27      27
0257 #define VKI_PT_R28      28
0258 #define VKI_PT_R29      29
0259 #define VKI_PT_R30      30
0260 #define VKI_PT_R31      31
0261 #define VKI_PT_NIP      32
0262 #define VKI_PT_MSR      33
0263 #define VKI_PT_ORIG_R3      34
0264 #define VKI_PT_CTR      35
0265 #define VKI_PT_LNK      36
0266 #define VKI_PT_XER      37
0267 #define VKI_PT_CCR      38
0268 #define VKI_PT_MQ       39
0269 #define VKI_PT_TRAP     40
0270 #define VKI_PT_DAR      41
0271 #define VKI_PT_DSISR        42
0272 #define VKI_PT_RESULT       43
0273 
0274 //----------------------------------------------------------------------
0275 // From linux-2.6.9/include/asm-ppc/sigcontext.h
0276 //----------------------------------------------------------------------
0277 
0278 struct vki_sigcontext {
0279         unsigned long      _unused[4];
0280         int                signal;
0281         unsigned long      handler;
0282         unsigned long      oldmask;
0283         struct vki_pt_regs *regs;
0284 };
0285 
0286 //----------------------------------------------------------------------
0287 // From linux-2.6.9/include/asm-ppc/mman.h
0288 //----------------------------------------------------------------------
0289 
0290 #define VKI_PROT_NONE       0x0      /* No page permissions */
0291 #define VKI_PROT_READ       0x1      /* page can be read */
0292 #define VKI_PROT_WRITE      0x2      /* page can be written */
0293 #define VKI_PROT_EXEC       0x4      /* page can be executed */
0294 #define VKI_PROT_GROWSDOWN  0x01000000  /* mprotect flag: extend change to start of growsdown vma */
0295 #define VKI_PROT_GROWSUP    0x02000000  /* mprotect flag: extend change to end of growsup vma */
0296 
0297 #define VKI_MAP_SHARED      0x01     /* Share changes */
0298 #define VKI_MAP_PRIVATE     0x02     /* Changes are private */
0299 //#define VKI_MAP_TYPE      0x0f     /* Mask for type of mapping */
0300 #define VKI_MAP_FIXED       0x10     /* Interpret addr exactly */
0301 #define VKI_MAP_ANONYMOUS   0x20     /* don't use a file */
0302 #define VKI_MAP_NORESERVE   0x40     /* don't reserve swap pages */
0303 
0304 //----------------------------------------------------------------------
0305 // From linux-2.6.9/include/asm-ppc/fcntl.h
0306 //----------------------------------------------------------------------
0307 
0308 #define VKI_O_ACCMODE          03
0309 #define VKI_O_RDONLY           00
0310 #define VKI_O_WRONLY           01
0311 #define VKI_O_RDWR         02
0312 #define VKI_O_CREAT      0100       /* not fcntl */
0313 #define VKI_O_EXCL       0200       /* not fcntl */
0314 #define VKI_O_TRUNC     01000       /* not fcntl */
0315 #define VKI_O_APPEND        02000
0316 #define VKI_O_NONBLOCK      04000
0317 #define VKI_O_DIRECT          0400000
0318 #define VKI_O_LARGEFILE       0200000
0319 
0320 #define VKI_AT_FDCWD            -100
0321 
0322 #define VKI_F_DUPFD      0          /* dup */
0323 #define VKI_F_GETFD      1          /* get close_on_exec */
0324 #define VKI_F_SETFD      2          /* set/clear close_on_exec */
0325 #define VKI_F_GETFL      3          /* get file->f_flags */
0326 #define VKI_F_SETFL      4          /* set file->f_flags */
0327 #define VKI_F_GETLK      5
0328 #define VKI_F_SETLK      6
0329 #define VKI_F_SETLKW         7
0330 
0331 #define VKI_F_SETOWN         8          /*  for sockets. */
0332 #define VKI_F_GETOWN         9          /*  for sockets. */
0333 #define VKI_F_SETSIG        10          /*  for sockets. */
0334 #define VKI_F_GETSIG        11          /*  for sockets. */
0335 
0336 #define VKI_F_GETLK64       12          /*  using 'struct flock64' */
0337 #define VKI_F_SETLK64       13
0338 #define VKI_F_SETLKW64      14
0339 
0340 #define VKI_F_SETOWN_EX     15
0341 #define VKI_F_GETOWN_EX     16
0342 
0343 #define VKI_F_OFD_GETLK     36
0344 #define VKI_F_OFD_SETLK     37
0345 #define VKI_F_OFD_SETLKW    38
0346 
0347 #define VKI_F_OWNER_TID     0
0348 #define VKI_F_OWNER_PID     1
0349 #define VKI_F_OWNER_PGRP    2
0350 
0351 struct vki_f_owner_ex {
0352     int type;
0353     __vki_kernel_pid_t  pid;
0354 };
0355 
0356 /* for F_[GET|SET]FL */
0357 #define VKI_FD_CLOEXEC   1      /* actually anything with low bit set goes */
0358 
0359 #define VKI_F_LINUX_SPECIFIC_BASE   1024
0360 
0361 //----------------------------------------------------------------------
0362 // From linux-2.6.9/include/asm-ppc/resource.h
0363 //----------------------------------------------------------------------
0364 
0365 #define VKI_RLIMIT_DATA     2   /* max data size */
0366 #define VKI_RLIMIT_STACK    3   /* max stack size */
0367 #define VKI_RLIMIT_CORE     4   /* max core file size */
0368 #define VKI_RLIMIT_NOFILE   7   /* max number of open files */
0369 
0370 //----------------------------------------------------------------------
0371 // From linux-2.6.9/include/asm-ppc/socket.h
0372 //----------------------------------------------------------------------
0373 
0374 #define VKI_SOL_SOCKET  1
0375 
0376 #define VKI_SO_TYPE 3
0377 
0378 #define VKI_SO_ATTACH_FILTER    26
0379 
0380 //----------------------------------------------------------------------
0381 // From linux-2.6.8.1/include/asm-ppc/sockios.h
0382 //----------------------------------------------------------------------
0383 
0384 #define VKI_SIOCSPGRP       0x8902
0385 #define VKI_SIOCGPGRP       0x8904
0386 #define VKI_SIOCATMARK      0x8905
0387 #define VKI_SIOCGSTAMP      0x8906          /* Get stamp (timeval) */
0388 #define VKI_SIOCGSTAMPNS    0x8907          /* Get stamp (timespec) */
0389 
0390 //----------------------------------------------------------------------
0391 // From linux-2.6.10/include/asm-ppc/stat.h
0392 //----------------------------------------------------------------------
0393 
0394 //.. #define VKI_S_IFMT     00170000
0395 //.. #define VKI_S_IFSOCK    0140000
0396 //.. #define VKI_S_IFLNK     0120000
0397 //.. #define VKI_S_IFREG     0100000
0398 //.. #define VKI_S_IFBLK     0060000
0399 //.. #define VKI_S_IFDIR     0040000
0400 //.. #define VKI_S_IFCHR     0020000
0401 //.. #define VKI_S_IFIFO     0010000
0402 //.. #define VKI_S_ISUID     0004000
0403 //.. #define VKI_S_ISGID     0002000
0404 //.. #define VKI_S_ISVTX     0001000
0405 //.. 
0406 //.. #define VKI_S_ISLNK(m) (((m) & VKI_S_IFMT) == VKI_S_IFLNK)
0407 //.. #define VKI_S_ISREG(m) (((m) & VKI_S_IFMT) == VKI_S_IFREG)
0408 //.. #define VKI_S_ISDIR(m) (((m) & VKI_S_IFMT) == VKI_S_IFDIR)
0409 //.. #define VKI_S_ISCHR(m) (((m) & VKI_S_IFMT) == VKI_S_IFCHR)
0410 //.. #define VKI_S_ISBLK(m) (((m) & VKI_S_IFMT) == VKI_S_IFBLK)
0411 //.. #define VKI_S_ISFIFO(m)    (((m) & VKI_S_IFMT) == VKI_S_IFIFO)
0412 //.. #define VKI_S_ISSOCK(m)    (((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
0413 
0414 struct vki_stat {
0415    unsigned     st_dev;
0416    unsigned long    st_ino;
0417    unsigned int     st_mode;
0418    unsigned short   st_nlink;
0419    unsigned int     st_uid;
0420    unsigned int     st_gid;
0421    unsigned     st_rdev;
0422    long         st_size;
0423    unsigned long    st_blksize;
0424    unsigned long    st_blocks;
0425    unsigned long    st_atime;
0426    unsigned long    st_atime_nsec;
0427    unsigned long    st_mtime;
0428    unsigned long    st_mtime_nsec;
0429    unsigned long    st_ctime;
0430    unsigned long    st_ctime_nsec;
0431    unsigned long    __unused4;
0432    unsigned long    __unused5;
0433 };
0434 
0435 struct vki_stat64 {
0436    unsigned long long   st_dev;
0437    unsigned long long   st_ino;
0438    unsigned int         st_mode;
0439    unsigned int         st_nlink;
0440    unsigned int         st_uid;
0441    unsigned int         st_gid;
0442    unsigned long long   st_rdev;
0443    unsigned short int   __pad2;
0444    long long            st_size;
0445    long                 st_blksize;
0446 
0447    long long            st_blocks;
0448    long                 st_atime;
0449    unsigned long        st_atime_nsec;
0450    long                 st_mtime;
0451    unsigned long int    st_mtime_nsec;
0452    long                 st_ctime;
0453    unsigned long int    st_ctime_nsec;
0454    unsigned long int    __unused4;
0455    unsigned long int    __unused5;
0456 };
0457 
0458 
0459 //----------------------------------------------------------------------
0460 // From linux-2.6.9/include/asm-ppc/statfs.h
0461 //----------------------------------------------------------------------
0462 
0463 // [[Nb: asm-ppc/statfs.h just #include asm-generic/statfs.h directly]]
0464 struct vki_statfs {
0465    __vki_u32 f_type;
0466    __vki_u32 f_bsize;
0467    __vki_u32 f_blocks;
0468    __vki_u32 f_bfree;
0469    __vki_u32 f_bavail;
0470    __vki_u32 f_files;
0471    __vki_u32 f_ffree;
0472    __vki_kernel_fsid_t f_fsid;
0473    __vki_u32 f_namelen;
0474    __vki_u32 f_frsize;
0475    __vki_u32 f_spare[5];
0476 };
0477 
0478 //----------------------------------------------------------------------
0479 // From linux-2.6.9/include/asm-ppc/termios.h
0480 //----------------------------------------------------------------------
0481 
0482 struct vki_winsize {
0483    unsigned short ws_row;
0484    unsigned short ws_col;
0485    unsigned short ws_xpixel;
0486    unsigned short ws_ypixel;
0487 };
0488 
0489 #define NCC 10
0490 struct vki_termio {
0491    unsigned short   c_iflag;        /* input mode flags */
0492    unsigned short   c_oflag;        /* output mode flags */
0493    unsigned short   c_cflag;        /* control mode flags */
0494    unsigned short   c_lflag;        /* local mode flags */
0495    unsigned char    c_line;         /* line discipline */
0496    unsigned char    c_cc[NCC];      /* control characters */
0497 };
0498 
0499 //----------------------------------------------------------------------
0500 // From linux-2.6.9/include/asm-ppc/termbits.h
0501 //----------------------------------------------------------------------
0502 
0503 typedef unsigned char   vki_cc_t;
0504 typedef unsigned int    vki_speed_t;
0505 typedef unsigned int    vki_tcflag_t;
0506 
0507 #define NCCS 19
0508 struct vki_termios {
0509         vki_tcflag_t    c_iflag;        /* input mode flags */
0510         vki_tcflag_t    c_oflag;        /* output mode flags */
0511         vki_tcflag_t    c_cflag;        /* control mode flags */
0512         vki_tcflag_t    c_lflag;        /* local mode flags */
0513         vki_cc_t    c_cc[NCCS];     /* control characters */
0514         vki_cc_t    c_line;         /* line discipline (== c_cc[19]) */
0515         vki_speed_t c_ispeed;       /* input speed */
0516         vki_speed_t c_ospeed;       /* output speed */
0517 };
0518 
0519 //----------------------------------------------------------------------
0520 // From linux-2.6.9/include/asm-ppc/ioctl.h
0521 //----------------------------------------------------------------------
0522 
0523 #define _VKI_IOC_NRBITS      8
0524 #define _VKI_IOC_TYPEBITS    8
0525 #define _VKI_IOC_SIZEBITS   13
0526 #define _VKI_IOC_DIRBITS     3
0527 
0528 #define _VKI_IOC_NRMASK     ((1 << _VKI_IOC_NRBITS)-1)
0529 #define _VKI_IOC_TYPEMASK   ((1 << _VKI_IOC_TYPEBITS)-1)
0530 #define _VKI_IOC_SIZEMASK   ((1 << _VKI_IOC_SIZEBITS)-1)
0531 #define _VKI_IOC_DIRMASK    ((1 << _VKI_IOC_DIRBITS)-1)
0532 
0533 #define _VKI_IOC_NRSHIFT    0
0534 #define _VKI_IOC_TYPESHIFT  (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
0535 #define _VKI_IOC_SIZESHIFT  (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
0536 #define _VKI_IOC_DIRSHIFT   (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
0537 
0538 #define _VKI_IOC_NONE   1U
0539 #define _VKI_IOC_READ   2U
0540 #define _VKI_IOC_WRITE  4U
0541 
0542 #define _VKI_IOC(dir,type,nr,size) \
0543         (((dir)  << _VKI_IOC_DIRSHIFT) | \
0544          ((type) << _VKI_IOC_TYPESHIFT) | \
0545          ((nr)   << _VKI_IOC_NRSHIFT) | \
0546          ((size) << _VKI_IOC_SIZESHIFT))
0547 
0548 /* used to create numbers */
0549 #define _VKI_IO(type,nr)            _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
0550 #define _VKI_IOR(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
0551 #define _VKI_IOW(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
0552 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
0553 
0554 /* used to decode them.. */
0555 #define _VKI_IOC_DIR(nr)        (((nr) >> _VKI_IOC_DIRSHIFT)  & _VKI_IOC_DIRMASK)
0556 //.. #define _VKI_IOC_TYPE(nr)      (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
0557 //.. #define _VKI_IOC_NR(nr)        (((nr) >> _VKI_IOC_NRSHIFT)   & _VKI_IOC_NRMASK)
0558 #define _VKI_IOC_SIZE(nr)       (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
0559 
0560 //----------------------------------------------------------------------
0561 // From linux-2.6.9/include/asm-ppc/ioctls.h
0562 //----------------------------------------------------------------------
0563 
0564 #define VKI_FIOCLEX     _VKI_IO('f', 1)
0565 #define VKI_FIONCLEX        _VKI_IO('f', 2)
0566 #define VKI_FIOASYNC        _VKI_IOW('f', 125, int)
0567 #define VKI_FIONBIO     _VKI_IOW('f', 126, int)
0568 #define VKI_FIONREAD        _VKI_IOR('f', 127, int)
0569 //#define VKI_TIOCINQ       VKI_FIONREAD
0570 #define VKI_FIOQSIZE        _VKI_IOR('f', 128, vki_loff_t)
0571 
0572 //#define VKI_TIOCGETP      _VKI_IOR('t', 8, struct vki_sgttyb)
0573 //#define VKI_TIOCSETP      _VKI_IOW('t', 9, struct vki_sgttyb)
0574 //#define VKI_TIOCSETN      _VKI_IOW('t', 10, struct vki_sgttyb)    /* TIOCSETP wo flush */
0575 
0576 //#define VKI_TIOCSETC      _VKI_IOW('t', 17, struct vki_tchars)
0577 //#define VKI_TIOCGETC      _VKI_IOR('t', 18, struct vki_tchars)
0578 #define VKI_TCGETS      _VKI_IOR('t', 19, struct vki_termios)
0579 #define VKI_TCSETS      _VKI_IOW('t', 20, struct vki_termios)
0580 #define VKI_TCSETSW     _VKI_IOW('t', 21, struct vki_termios)
0581 #define VKI_TCSETSF     _VKI_IOW('t', 22, struct vki_termios)
0582 
0583 #define VKI_TCGETA      _VKI_IOR('t', 23, struct vki_termio)
0584 #define VKI_TCSETA      _VKI_IOW('t', 24, struct vki_termio)
0585 #define VKI_TCSETAW     _VKI_IOW('t', 25, struct vki_termio)
0586 #define VKI_TCSETAF     _VKI_IOW('t', 28, struct vki_termio)
0587 
0588 #define VKI_TCSBRK      _VKI_IO('t', 29)
0589 #define VKI_TCXONC      _VKI_IO('t', 30)
0590 #define VKI_TCFLSH      _VKI_IO('t', 31)
0591 
0592 #define VKI_TIOCSWINSZ      _VKI_IOW('t', 103, struct vki_winsize)
0593 #define VKI_TIOCGWINSZ      _VKI_IOR('t', 104, struct vki_winsize)
0594 //#define VKI_TIOCSTART     _VKI_IO('t', 110)      /* start output, like ^Q */
0595 //#define VKI_TIOCSTOP      _VKI_IO('t', 111)      /* stop output, like ^S */
0596 #define VKI_TIOCOUTQ        _VKI_IOR('t', 115, int)    /* output queue size */
0597 
0598 //#define VKI_TIOCGLTC      _VKI_IOR('t', 116, struct vki_ltchars)
0599 //#define VKI_TIOCSLTC      _VKI_IOW('t', 117, struct vki_ltchars)
0600 #define VKI_TIOCSPGRP       _VKI_IOW('t', 118, int)
0601 #define VKI_TIOCGPGRP       _VKI_IOR('t', 119, int)
0602 
0603 //#define VKI_TIOCEXCL      0x540C
0604 //#define VKI_TIOCNXCL      0x540D
0605 #define VKI_TIOCSCTTY       0x540E
0606 
0607 //#define VKI_TIOCSTI       0x5412
0608 #define VKI_TIOCMGET        0x5415
0609 #define VKI_TIOCMBIS        0x5416
0610 #define VKI_TIOCMBIC        0x5417
0611 #define VKI_TIOCMSET        0x5418
0612 //# define VKI_TIOCM_LE     0x001
0613 //# define VKI_TIOCM_DTR    0x002
0614 //# define VKI_TIOCM_RTS    0x004
0615 //# define VKI_TIOCM_ST     0x008
0616 //# define VKI_TIOCM_SR     0x010
0617 //# define VKI_TIOCM_CTS    0x020
0618 //# define VKI_TIOCM_CAR    0x040
0619 //# define VKI_TIOCM_RNG    0x080
0620 //# define VKI_TIOCM_DSR    0x100
0621 //# define VKI_TIOCM_CD     VKI_TIOCM_CAR
0622 //# define VKI_TIOCM_RI     VKI_TIOCM_RNG
0623 
0624 //#define VKI_TIOCGSOFTCAR  0x5419
0625 //#define VKI_TIOCSSOFTCAR  0x541A
0626 #define VKI_TIOCLINUX       0x541C
0627 //#define VKI_TIOCCONS      0x541D
0628 #define VKI_TIOCGSERIAL 0x541E
0629 #define VKI_TIOCSSERIAL 0x541F
0630 //#define VKI_TIOCPKT       0x5420
0631 //# define VKI_TIOCPKT_DATA      0
0632 //# define VKI_TIOCPKT_FLUSHREAD     1
0633 //# define VKI_TIOCPKT_FLUSHWRITE    2
0634 //# define VKI_TIOCPKT_STOP      4
0635 //# define VKI_TIOCPKT_START         8
0636 //# define VKI_TIOCPKT_NOSTOP       16
0637 //# define VKI_TIOCPKT_DOSTOP       32
0638 
0639 #define VKI_TIOCNOTTY       0x5422
0640 //#define VKI_TIOCSETD      0x5423
0641 //#define VKI_TIOCGETD      0x5424
0642 #define VKI_TCSBRKP     0x5425  /* Needed for POSIX tcsendbreak() */
0643 //#define VKI_TIOCSBRK      0x5427  /* BSD compatibility */
0644 //#define VKI_TIOCCBRK      0x5428  /* BSD compatibility */
0645 //#define VKI_TIOCGSID      0x5429  /* Return the session ID of FD */
0646 #define VKI_TIOCGPTN        _VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
0647 #define VKI_TIOCSPTLCK      _VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
0648 
0649 //#define VKI_TIOCSERCONFIG 0x5453
0650 //#define VKI_TIOCSERGWILD  0x5454
0651 //#define VKI_TIOCSERSWILD      0x5455
0652 //#define VKI_TIOCGLCKTRMIOS    0x5456
0653 //#define VKI_TIOCSLCKTRMIOS    0x5457
0654 //#define VKI_TIOCSERGSTRUCT    0x5458 /* For debugging only */
0655 #define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
0656   /* ioctl (fd, VKI_TIOCSERGETLSR, &result) where result may be as below */
0657 //# define VKI_TIOCSER_TEMT 0x01   /* Transmitter physically empty */
0658 //#define VKI_TIOCSERGETMULTI   0x545A /* Get multiport config  */
0659 //#define VKI_TIOCSERSETMULTI   0x545B /* Set multiport config */
0660 
0661 //#define VKI_TIOCMIWAIT    0x545C  /* wait for a change on serial input line(s) */
0662 #define VKI_TIOCGICOUNT     0x545D  /* read serial port inline interrupt counts */
0663 
0664 //----------------------------------------------------------------------
0665 // From linux-2.6.9/include/asm-ppc/poll.h
0666 //----------------------------------------------------------------------
0667 
0668 //.. /* These are specified by iBCS2 */
0669 //.. #define VKI_POLLIN     0x0001
0670 
0671 struct vki_pollfd {
0672     int fd;
0673     short events;
0674     short revents;
0675 };
0676 
0677 //.. //----------------------------------------------------------------------
0678 //.. // From linux-2.6.8.1/include/asm-i386/user.h
0679 //.. //----------------------------------------------------------------------
0680 //.. 
0681 //.. struct vki_user_i387_struct {
0682 //..    long    cwd;
0683 //..    long    swd;
0684 //..    long    twd;
0685 //..    long    fip;
0686 //..    long    fcs;
0687 //..    long    foo;
0688 //..    long    fos;
0689 //..    long    st_space[20];   /* 8*10 bytes for each FP-reg = 80 bytes */
0690 //.. };
0691 //.. 
0692 //.. struct vki_user_fxsr_struct {
0693 //..    unsigned short  cwd;
0694 //..    unsigned short  swd;
0695 //..    unsigned short  twd;
0696 //..    unsigned short  fop;
0697 //..    long    fip;
0698 //..    long    fcs;
0699 //..    long    foo;
0700 //..    long    fos;
0701 //..    long    mxcsr;
0702 //..    long    reserved;
0703 //..    long    st_space[32];   /* 8*16 bytes for each FP-reg = 128 bytes */
0704 //..    long    xmm_space[32];  /* 8*16 bytes for each XMM-reg = 128 bytes */
0705 //..    long    padding[56];
0706 //.. };
0707 //.. 
0708 //.. /*
0709 //..  * This is the old layout of "struct pt_regs", and
0710 //..  * is still the layout used by user mode (the new
0711 //..  * pt_regs doesn't have all registers as the kernel
0712 //..  * doesn't use the extra segment registers)
0713 //..  */
0714 //.. struct vki_user_regs_struct {
0715 //..    long ebx, ecx, edx, esi, edi, ebp, eax;
0716 //..    unsigned short ds, __ds, es, __es;
0717 //..    unsigned short fs, __fs, gs, __gs;
0718 //..    long orig_eax, eip;
0719 //..    unsigned short cs, __cs;
0720 //..    long eflags, esp;
0721 //..    unsigned short ss, __ss;
0722 //.. };
0723 
0724 //----------------------------------------------------------------------
0725 // From linux-2.6.9/include/asm-ppc/elf.h
0726 //----------------------------------------------------------------------
0727 
0728 #define VKI_ELF_NGREG           48  /* includes nip, msr, lr, etc. */
0729 #define VKI_ELF_NFPREG          33  /* includes fpscr */
0730 #define VKI_ELF_NVRREG          33  /* includes vscr */
0731 
0732 /* General registers */
0733 typedef unsigned long vki_elf_greg_t;
0734 typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
0735 
0736 /* Floating point registers */
0737 typedef double vki_elf_fpreg_t;
0738 typedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];
0739 
0740 /* Altivec registers */
0741 typedef __vki_vector128 vki_elf_vrreg_t;
0742 typedef vki_elf_vrreg_t vki_elf_vrregset_t[VKI_ELF_NVRREG];
0743 
0744 #define VKI_AT_DCACHEBSIZE      19
0745 #define VKI_AT_ICACHEBSIZE      20
0746 #define VKI_AT_UCACHEBSIZE      21
0747 /* A special ignored type value for PPC, for glibc compatibility.  */
0748 #define VKI_AT_IGNOREPPC        22
0749 
0750 /* CAB: Do we want these? */
0751 //#define VKI_AT_SYSINFO        32
0752 //#define VKI_AT_SYSINFO_EHDR       33
0753 
0754 //----------------------------------------------------------------------
0755 // From linux-2.6.9/include/asm-ppc/ucontext.h
0756 //----------------------------------------------------------------------
0757 
0758 struct vki_mcontext {
0759         vki_elf_gregset_t   mc_gregs;
0760         vki_elf_fpregset_t  mc_fregs;
0761         unsigned long       mc_pad[2];
0762         vki_elf_vrregset_t  mc_vregs __attribute__((__aligned__(16)));
0763 };
0764 
0765 struct vki_ucontext {
0766         unsigned long       uc_flags;
0767         struct vki_ucontext __user *uc_link;
0768         vki_stack_t     uc_stack;
0769         int         uc_pad[7];
0770         struct vki_mcontext __user *uc_regs;        /* points to uc_mcontext field */
0771         vki_sigset_t        uc_sigmask;
0772         /* glibc has 1024-bit signal masks, ours are 64-bit */
0773         int         uc_maskext[30];
0774         int         uc_pad2[3];
0775         struct vki_mcontext uc_mcontext;
0776 };
0777 
0778 //.. //----------------------------------------------------------------------
0779 //.. // From linux-2.6.8.1/include/asm-i386/segment.h
0780 //.. //----------------------------------------------------------------------
0781 //.. 
0782 //.. #define VKI_GDT_ENTRY_TLS_ENTRIES  3
0783 //.. #define VKI_GDT_ENTRY_TLS_MIN  6
0784 //.. #define VKI_GDT_ENTRY_TLS_MAX  (VKI_GDT_ENTRY_TLS_MIN + VKI_GDT_ENTRY_TLS_ENTRIES - 1)
0785 
0786 //----------------------------------------------------------------------
0787 // From linux-2.6.9/include/asm-ppc/ldt.h
0788 //----------------------------------------------------------------------
0789 
0790 //.. /* [[Nb: This is the structure passed to the modify_ldt syscall.  Just so as
0791 //..    to confuse and annoy everyone, this is _not_ the same as an
0792 //..    VgLdtEntry and has to be translated into such.  The logic for doing
0793 //..    so, in vg_ldt.c, is copied from the kernel sources.]] */
0794 //.. struct vki_user_desc {
0795 //..    unsigned int    entry_number;
0796 //..    unsigned long   base_addr;
0797 //..    unsigned int    limit;
0798 //..    unsigned int    seg_32bit:1;
0799 //..    unsigned int    contents:2;
0800 //..    unsigned int    read_exec_only:1;
0801 //..    unsigned int    limit_in_pages:1;
0802 //..    unsigned int    seg_not_present:1;
0803 //..    unsigned int    useable:1;
0804 //..         // [[Nb: this field is not in the kernel sources, but it has always
0805 //..         // been in the Valgrind sources so I will keep it there in case it's
0806 //..         // important... this is an x86-defined data structure so who
0807 //..         // knows;  maybe it's important to set this field to zero at some
0808 //..         // point.  --njn]]
0809 //..    unsigned int    reserved:25;
0810 //.. };
0811 //.. 
0812 //.. // [[Nb: for our convenience within Valgrind, use a more specific name]]
0813 
0814 // CAB: TODO
0815 typedef char vki_modify_ldt_t;
0816 
0817 
0818 //----------------------------------------------------------------------
0819 // From linux-2.6.9/include/asm-ppc/ipcbuf.h
0820 //----------------------------------------------------------------------
0821 
0822 struct vki_ipc64_perm
0823 {
0824    __vki_kernel_key_t   key;
0825    __vki_kernel_uid_t   uid;
0826    __vki_kernel_gid_t   gid;
0827    __vki_kernel_uid_t   cuid;
0828    __vki_kernel_gid_t   cgid;
0829    __vki_kernel_mode_t  mode;
0830    unsigned long    seq;
0831    unsigned int     __pad2;
0832    unsigned long long   __unused1;
0833    unsigned long long   __unused2;
0834 };
0835 
0836 //----------------------------------------------------------------------
0837 // From linux-2.6.9/include/asm-ppc/sembuf.h
0838 //----------------------------------------------------------------------
0839 
0840 struct vki_semid64_ds {
0841    struct vki_ipc64_perm    sem_perm;       /* permissions .. see ipc.h */
0842    unsigned int         __unused1;
0843    __vki_kernel_time_t      sem_otime;      /* last semop time */
0844    unsigned int         __unused2;
0845    __vki_kernel_time_t      sem_ctime;      /* last change time */
0846    unsigned long        sem_nsems;      /* no. of semaphores in array */
0847    unsigned long        __unused3;
0848    unsigned long        __unused4;
0849 };
0850 
0851 //----------------------------------------------------------------------
0852 // From linux-2.6.9/include/asm-ppc/msgbuf.h
0853 //----------------------------------------------------------------------
0854 
0855 struct vki_msqid64_ds {
0856    struct vki_ipc64_perm    msg_perm;
0857    unsigned int         __unused1;
0858    __vki_kernel_time_t      msg_stime;      /* last msgsnd time */
0859    unsigned int         __unused2;
0860    __vki_kernel_time_t      msg_rtime;      /* last msgrcv time */
0861    unsigned int         __unused3;
0862    __vki_kernel_time_t      msg_ctime;      /* last change time */
0863    unsigned long        msg_cbytes;     /* current number of bytes on queue */
0864    unsigned long        msg_qnum;       /* number of messages in queue */
0865    unsigned long        msg_qbytes;     /* max number of bytes on queue */
0866    __vki_kernel_pid_t       msg_lspid;      /* pid of last msgsnd */
0867    __vki_kernel_pid_t       msg_lrpid;      /* last receive pid */
0868    unsigned long        __unused4;
0869    unsigned long        __unused5;
0870 };
0871 
0872 //----------------------------------------------------------------------
0873 // From linux-2.6.8.1/include/asm-ppc/ipc.h
0874 //----------------------------------------------------------------------
0875 
0876 struct vki_ipc_kludge {
0877         struct vki_msgbuf __user *msgp;
0878         long msgtyp;
0879 };
0880 
0881 #define VKI_SEMOP            1
0882 #define VKI_SEMGET           2
0883 #define VKI_SEMCTL           3
0884 #define VKI_SEMTIMEDOP       4
0885 #define VKI_MSGSND          11
0886 #define VKI_MSGRCV          12
0887 #define VKI_MSGGET          13
0888 #define VKI_MSGCTL          14
0889 #define VKI_SHMAT           21
0890 #define VKI_SHMDT           22
0891 #define VKI_SHMGET          23
0892 #define VKI_SHMCTL          24
0893 
0894 //----------------------------------------------------------------------
0895 // From linux-2.6.9/include/asm-ppc/shmbuf.h
0896 //----------------------------------------------------------------------
0897 
0898 struct vki_shmid64_ds {
0899    struct vki_ipc64_perm    shm_perm;       /* operation perms */
0900    unsigned int         __unused1;
0901    __vki_kernel_time_t      shm_atime;      /* last attach time */
0902    unsigned int         __unused2;
0903    __vki_kernel_time_t      shm_dtime;      /* last detach time */
0904    unsigned int         __unused3;
0905    __vki_kernel_time_t      shm_ctime;      /* last change time */
0906    unsigned int         __unused4;
0907    vki_size_t           shm_segsz;      /* size of segment (bytes) */
0908    __vki_kernel_pid_t       shm_cpid;       /* pid of creator */
0909    __vki_kernel_pid_t       shm_lpid;       /* pid of last operator */
0910    unsigned long        shm_nattch;     /* no. of current attaches */
0911    unsigned long        __unused5;
0912    unsigned long        __unused6;
0913 };
0914 
0915 struct vki_shminfo64 {
0916    unsigned long    shmmax;
0917    unsigned long    shmmin;
0918    unsigned long    shmmni;
0919    unsigned long    shmseg;
0920    unsigned long    shmall;
0921    unsigned long    __unused1;
0922    unsigned long    __unused2;
0923    unsigned long    __unused3;
0924    unsigned long    __unused4;
0925 };
0926 
0927 //----------------------------------------------------------------------
0928 // From linux-2.6.8.1/include/asm-generic/errno.h
0929 //----------------------------------------------------------------------
0930 
0931 #define VKI_ENOSYS       38  /* Function not implemented */
0932 #define VKI_EOVERFLOW    75  /* Value too large for defined data type */
0933 
0934 //.. //----------------------------------------------------------------------
0935 //.. // DRM ioctls
0936 //.. //----------------------------------------------------------------------
0937 //.. 
0938 //.. // jrs 20050207: where did all this stuff come from?  Is it really
0939 //.. // i386 specific, or should it go into the linux-generic category?
0940 //.. //struct vki_drm_buf_pub {
0941 //.. // Int       idx;         /**< Index into the master buffer list */
0942 //.. // Int       total;       /**< Buffer size */
0943 //.. // Int       used;        /**< Amount of buffer in use (for DMA) */
0944 //.. // void      __user *address;     /**< Address of buffer */
0945 //.. //};
0946 //.. //
0947 //.. //struct vki_drm_buf_map {
0948 //.. // Int       count;        /**< Length of the buffer list */
0949 //.. // void          __user *virtual;  /**< Mmap'd area in user-virtual */
0950 //.. // struct vki_drm_buf_pub __user *list;    /**< Buffer information */
0951 //.. //};
0952 //.. //
0953 //.. ///* We need to pay attention to this, because it mmaps memory */
0954 //.. //#define VKI_DRM_IOCTL_MAP_BUFS       _VKI_IOWR('d', 0x19, struct vki_drm_buf_map)
0955 
0956 //----------------------------------------------------------------------
0957 // And that's it!
0958 //----------------------------------------------------------------------
0959 
0960 #endif // __VKI_PPC32_LINUX_H
0961 
0962 /*--------------------------------------------------------------------*/
0963 /*--- end                                                          ---*/
0964 /*--------------------------------------------------------------------*/