1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- PPC64/Linux-specific kernel interface.     vki-ppc64-linux.h ---*/
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This file is part of Valgrind, a dynamic binary instrumentation
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   framework.
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   Copyright (C) 2005-2011 Julian Seward
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown      jseward@acm.org
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This program is free software; you can redistribute it and/or
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   modify it under the terms of the GNU General Public License as
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   published by the Free Software Foundation; either version 2 of the
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   License, or (at your option) any later version.
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   This program is distributed in the hope that it will be useful, but
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   WITHOUT ANY WARRANTY; without even the implied warranty of
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   General Public License for more details.
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   You should have received a copy of the GNU General Public License
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   along with this program; if not, write to the Free Software
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   02111-1307, USA.
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   The GNU General Public License is contained in the file COPYING.
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#ifndef __VKI_PPC64_LINUX_H
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define __VKI_PPC64_LINUX_H
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// ppc64 is big-endian.
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_BIG_ENDIAN  1
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/types.h
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ char __vki_s8;
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char __vki_u8;
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ short __vki_s16;
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short __vki_u16;
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ int __vki_s32;
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int __vki_u32;
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __signed__ long __vki_s64;
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long __vki_u64;
52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct {
54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_u32 u[4];
55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} __attribute((aligned(16))) __vki_vector128;
56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned short vki_u16;
58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int vki_u32;
60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/page.h
63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* PAGE_SHIFT determines the page size, unfortunately
66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   page size might vary between 32-bit and 64-bit ppc kernels */
67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern unsigned long VKI_PAGE_SHIFT;
68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownextern unsigned long VKI_PAGE_SIZE;
69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAX_PAGE_SHIFT	16
70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAX_PAGE_SIZE	(1UL << VKI_MAX_PAGE_SHIFT)
71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.35.4/arch/powerpc/include/asm/shmparam.h
74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMLBA  VKI_PAGE_SIZE
77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/signal.h
80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MINSIGSTKSZ     2048
83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Next 9 non-blank lines asm-generic/signal.h */
85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_BLOCK          0 /* for blocking signals */
86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_UNBLOCK        1 /* for unblocking signals */
87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_SETMASK        2 /* for setting the signal mask */
88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void __vki_signalfn_t(int);
90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_signalfn_t __user *__vki_sighandler_t;
91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef void __vki_restorefn_t(void);
93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_restorefn_t __user *__vki_sigrestore_t;
94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_DFL ((__vki_sighandler_t)0)     /* default signal handling */
96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIG_IGN ((__vki_sighandler_t)1)     /* ignore signal */
97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Back in asm-ppc64/signal.h */
99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG           64
100ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG_BPW       64
101ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_NSIG_WORDS     (_VKI_NSIG / _VKI_NSIG_BPW)
102ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
103ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long vki_old_sigset_t;             /* at least 32 bits */
104ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
105ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct {
106ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long sig[_VKI_NSIG_WORDS];
107ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} vki_sigset_t;
108ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
109ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGHUP           1
110ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGINT           2
111ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGQUIT          3
112ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGILL           4
113ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTRAP          5
114ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGABRT          6
115ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGIOT           6
116ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGBUS           7
117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGFPE           8
118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGKILL          9
119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUSR1         10
120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSEGV         11
121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUSR2         12
122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPIPE         13
123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGALRM         14
124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTERM         15
125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSTKFLT       16
126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGCHLD         17
127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGCONT         18
128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSTOP         19
129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTSTP         20
130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTTIN         21
131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGTTOU         22
132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGURG          23
133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGXCPU         24
134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGXFSZ         25
135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGVTALRM       26
136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPROF         27
137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGWINCH        28
138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGIO           29
139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPOLL         VKI_SIGIO
140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGPWR          30
141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGSYS          31
142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGUNUSED       31
143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* These should not be considered constants from userland.  */
145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGRTMIN        32
146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIGRTMAX        _VKI_NSIG
147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOCLDSTOP    0x00000001u
149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOCLDWAIT    0x00000002u
150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_SIGINFO      0x00000004u
151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_ONSTACK      0x08000000u
152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESTART      0x10000000u
153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NODEFER      0x40000000u
154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESETHAND    0x80000000u
155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_NOMASK       VKI_SA_NODEFER
157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_ONESHOT      VKI_SA_RESETHAND
158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//#define VKI_SA_INTERRUPT    0x20000000u /* dummy -- ignored */
159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SA_RESTORER     0x04000000u
161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SS_ONSTACK      1
163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SS_DISABLE      2
164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// See comments on corresponding decls in vki-x86-linux.h re ksa_handler
166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_old_sigaction {
167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_sighandler_t ksa_handler;
168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_old_sigset_t sa_mask;
169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long sa_flags;
170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_sigrestore_t sa_restorer;
171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_sigaction_base {
174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_sighandler_t ksa_handler;
175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long sa_flags;
176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_sigrestore_t sa_restorer;
177ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_sigset_t sa_mask;               /* mask last for extensibility */
178ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
179ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
180ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* On Linux we use the same type for passing sigactions to
181ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   and from the kernel.  Hence: */
182ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef  struct vki_sigaction_base  vki_sigaction_toK_t;
183ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
184ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
185ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
186ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef struct vki_sigaltstack {
187ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  void __user *ss_sp;
188ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int ss_flags;
189ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_size_t ss_size;
190ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} vki_stack_t;
191ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
192ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
193ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/ptrace.h
194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PPC_REG unsigned long
197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_pt_regs {
198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG gpr[32];
199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG nip;
200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG msr;
201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG orig_gpr3;      /* Used for restarting system calls */
202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG ctr;
203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG link;
204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG xer;
205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG ccr;
206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG softe;          /* Soft enabled/disabled */
207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG trap;           /* Reason for being here */
208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG dar;            /* Fault registers */
209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG dsisr;
210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  VKI_PPC_REG result;         /* Result of a system call */
211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  /* Not in kernel's definition, but apparently needed to stop
213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     assertion at coredump-elf.c:267 firing.  These padding words make
214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     the struct have the same size as a 'vki_elf_greg_t'.  See message
215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     from Ghassan Hammouri on valgrind-developers on 6 April 06, and
216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     also the analogous kludge for ppc32-linux (svn r5852 and bug
217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown     #121617). */
218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long pad[4];
219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Kludge?  I don't know where this came from or if it is right. */
222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define vki_user_regs_struct vki_pt_regs
223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R0   0
225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R1   1
226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R2   2
227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R3   3
228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R4   4
229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R5   5
230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R6   6
231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R7   7
232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R8   8
233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R9   9
234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R10  10
235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R11  11
236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R12  12
237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R13  13
238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R14  14
239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R15  15
240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R16  16
241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R17  17
242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R18  18
243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R19  19
244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R20  20
245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R21  21
246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R22  22
247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R23  23
248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R24  24
249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R25  25
250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R26  26
251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R27  27
252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R28  28
253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R29  29
254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R30  30
255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_R31  31
256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_NIP  32
257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_MSR  33
258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_ORIG_R3 34
259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_CTR  35
260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_LNK  36
261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_XER  37
262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_CCR  38
263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_SOFTE 39
264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PT_RESULT 43
265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/elf.h
268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ELF_NGREG       48      /* includes nip, msr, lr, etc. */
271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ELF_NFPREG      33      /* includes fpscr */
272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_ELF_NVRREG      34      /* includes vscr & vrsave in split vectors */
273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned long vki_elf_greg_t64;
275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef vki_elf_greg_t64 vki_elf_gregset_t64[VKI_ELF_NGREG];
276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef vki_elf_gregset_t64 vki_elf_gregset_t;
278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef double vki_elf_fpreg_t;
280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef vki_elf_fpreg_t vki_elf_fpregset_t[VKI_ELF_NFPREG];
281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* Altivec registers */
283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * The entries with indexes 0-31 contain the corresponding vector registers.
285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * The entry with index 32 contains the vscr as the last word (offset 12)
286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * within the quadword.  This allows the vscr to be stored as either a
287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * quadword (since it must be copied via a vector register to/from storage)
288ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * or as a word.  The entry with index 33 contains the vrsave as the first
289ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * word (offset 0) within the quadword.
290ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
291ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * This definition of the VMX state is compatible with the current PPC32
292ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * ptrace interface.  This allows signal handling and ptrace to use the same
293ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * structures.  This also simplifies the implementation of a bi-arch
294ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * (combined (32- and 64-bit) gdb.
295ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *
296ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Note that it's _not_ compatible with 32 bits ucontext which stuffs the
297ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * vrsave along with vscr and so only uses 33 vectors for the register set
298ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
299ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef __vki_vector128 vki_elf_vrreg_t;
300ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef vki_elf_vrreg_t vki_elf_vrregset_t[VKI_ELF_NVRREG];
301ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
302ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
303ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/sigcontext.h
304ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
305ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
306ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_sigcontext {
307ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long       _unused[4];
308ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int                 signal;
309ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int                 _pad0;
310ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long       handler;
311ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long       oldmask;
312ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct vki_pt_regs  __user *regs;
313ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_elf_gregset_t   gp_regs;
314ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_elf_fpregset_t  fp_regs;
315ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  /*
316ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * To maintain compatibility with current implementations the sigcontext is
317ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * extended by appending a pointer (v_regs) to a quadword type (elf_vrreg_t)
318ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * followed by an unstructured (vmx_reserve) field of 69 doublewords.  This
319ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * allows the array of vector registers to be quadword aligned independent of
320ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * the alignment of the containing sigcontext or ucontext. It is the
321ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * responsibility of the code setting the sigcontext to set this pointer to
322ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * either NULL (if this processor does not support the VMX feature) or the
323ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * address of the first quadword within the allocated (vmx_reserve) area.
324ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   *
325ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * The pointer (v_regs) of vector type (elf_vrreg_t) is type compatible with
326ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * an array of 34 quadword entries (elf_vrregset_t).  The entries with
327ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * indexes 0-31 contain the corresponding vector registers.  The entry with
328ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * index 32 contains the vscr as the last word (offset 12) within the
329ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * quadword.  This allows the vscr to be stored as either a quadword (since
330ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * it must be copied via a vector register to/from storage) or as a word.
331ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * The entry with index 33 contains the vrsave as the first word (offset 0)
332ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   * within the quadword.
333ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   */
334ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_elf_vrreg_t  __user *v_regs;
335ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long             vmx_reserve[VKI_ELF_NVRREG+VKI_ELF_NVRREG+1];
336ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
337ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
338ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
339ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/mman.h
340ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
341ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
342ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_NONE       0x0             /* page can not be accessed */
343ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_READ       0x1             /* page can be read */
344ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_WRITE      0x2             /* page can be written */
345ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_EXEC       0x4             /* page can be executed */
346ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_GROWSDOWN  0x01000000      /* mprotect flag: extend
347ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown					       change to start of
348ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown					       growsdown vma */
349ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_PROT_GROWSUP    0x02000000      /* mprotect flag: extend
350ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown					       change to end of
351ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown					       growsup vma */
352ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
353ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_SHARED      0x01            /* Share changes */
354ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_PRIVATE     0x02            /* Changes are private */
355ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_FIXED       0x10            /* Interpret addr exactly */
356ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_ANONYMOUS   0x20            /* don't use a file */
357ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MAP_NORESERVE   0x40            /* don't reserve swap pages */
358ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
359ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
360ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/fcntl.h
361ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
362ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
363ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_RDONLY             00
364ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_WRONLY             01
365ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_RDWR               02
366ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_CREAT            0100 /* not fcntl */
367ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_EXCL             0200 /* not fcntl */
368ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_TRUNC           01000 /* not fcntl */
369ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_APPEND          02000
370ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_NONBLOCK        04000
371ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_O_LARGEFILE     0200000
372ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
373ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_AT_FDCWD            -100
374ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
375ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_DUPFD         0       /* dup */
376ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETFD         1       /* get close_on_exec */
377ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETFD         2       /* set/clear close_on_exec */
378ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETFL         3       /* get file->f_flags */
379ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETFL         4       /* set file->f_flags */
380ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETLK         5
381ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLK         6
382ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETLKW        7
383ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
384ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETOWN        8       /*  for sockets. */
385ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETOWN        9       /*  for sockets. */
386ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_SETSIG        10      /*  for sockets. */
387ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_GETSIG        11      /*  for sockets. */
388ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
389ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* for F_[GET|SET]FL */
390ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FD_CLOEXEC  1  /* actually anything with low bit set goes */
391ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
392ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_F_LINUX_SPECIFIC_BASE   1024
393ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
394ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
395ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/resource.h
396ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
397ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
398ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// which just does #include <asm-generic/resource.h>
399ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
400ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_DATA             2       /* max data size */
401ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_STACK            3       /* max stack size */
402ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_CORE             4       /* max core file size */
403ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_RLIMIT_NOFILE           7       /* max number of open files */
404ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
405ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
406ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/socket.h
407ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
408ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
409ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SOL_SOCKET      1
410ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
411ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SO_TYPE         3
412ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
413ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
414ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/sockios.h
415ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
416ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
417ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCSPGRP       0x8902
418ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGPGRP       0x8904
419ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGSTAMP      0x8906          /* Get stamp (timeval) */
420ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SIOCGSTAMPNS    0x8907          /* Get stamp (timespec) */
421ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
422ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
423ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/stat.h
424ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
425ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
426ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_stat {
427ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_dev;
428ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_ino;
429ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_nlink;
430ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int    st_mode;
431ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int    st_uid;
432ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int    st_gid;
433ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_rdev;
434ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long            st_size;
435ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_blksize;
436ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_blocks;
437ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_atime;
438ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_atime_nsec;
439ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_mtime;
440ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_mtime_nsec;
441ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_ctime;
442ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   st_ctime_nsec;
443ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   __unused4;
444ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   __unused5;
445ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   __unused6;
446ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
447ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
448ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_STAT_HAVE_NSEC 1
449ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
450ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* This matches struct stat64 in glibc2.1. Only used for 32 bit. */
451ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_stat64 {
452ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long st_dev;           /* Device.  */
453ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long st_ino;           /* File serial number.  */
454ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int st_mode;           /* File mode.  */
455ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int st_nlink;          /* Link count.  */
456ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int st_uid;            /* User ID of the file's owner.  */
457ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int st_gid;            /* Group ID of the file's group. */
458ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long st_rdev;          /* Device number, if device.  */
459ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short __pad2;
460ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long st_size;                   /* Size of file, in bytes.  */
461ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int  st_blksize;                /* Optimal block size for I/O.  */
462ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
463ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long st_blocks;                 /* Number 512-byte blocks allocated. */
464ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int   st_atime;                 /* Time of last access.  */
465ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int   st_atime_nsec;
466ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int   st_mtime;                 /* Time of last modification.  */
467ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int   st_mtime_nsec;
468ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int   st_ctime;                 /* Time of last status change.  */
469ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int   st_ctime_nsec;
470ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int   __unused4;
471ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int   __unused5;
472ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
473ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
474ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
475ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/statfs.h
476ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
477ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
478ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_statfs {
479ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_type;
480ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_bsize;
481ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_blocks;
482ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_bfree;
483ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_bavail;
484ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_files;
485ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_ffree;
486ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_fsid_t f_fsid;
487ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_namelen;
488ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_frsize;
489ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long f_spare[5];
490ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
491ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
492ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
493ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/termios.h
494ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
495ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
496ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_winsize {
497ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short ws_row;
498ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short ws_col;
499ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short ws_xpixel;
500ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short ws_ypixel;
501ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
502ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
503ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_NCC 10
504ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_termio {
505ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short c_iflag;         /* input mode flags */
506ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short c_oflag;         /* output mode flags */
507ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short c_cflag;         /* control mode flags */
508ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned short c_lflag;         /* local mode flags */
509ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned char c_line;           /* line discipline */
510ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned char c_cc[VKI_NCC];    /* control characters */
511ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
512ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
513ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
514ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/termbits.h
515ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
516ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
517ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned char   vki_cc_t;
518ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int    vki_speed_t;
519ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Browntypedef unsigned int    vki_tcflag_t;
520ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
521ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_NCCS 19
522ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_termios {
523ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_tcflag_t c_iflag;               /* input mode flags */
524ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_tcflag_t c_oflag;               /* output mode flags */
525ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_tcflag_t c_cflag;               /* control mode flags */
526ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_tcflag_t c_lflag;               /* local mode flags */
527ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_cc_t c_cc[VKI_NCCS];            /* control characters */
528ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_cc_t c_line;                    /* line discipline (== c_cc[19]) */
529ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_speed_t c_ispeed;               /* input speed */
530ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_speed_t c_ospeed;               /* output speed */
531ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
532ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
533ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
534ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/ioctl.h
535ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
536ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
537ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRBITS     8
538ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPEBITS   8
539ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZEBITS   13
540ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRBITS    3
541ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
542ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRMASK     ((1 << _VKI_IOC_NRBITS)-1)
543ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPEMASK   ((1 << _VKI_IOC_TYPEBITS)-1)
544ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZEMASK   ((1 << _VKI_IOC_SIZEBITS)-1)
545ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRMASK    ((1 << _VKI_IOC_DIRBITS)-1)
546ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
547ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NRSHIFT    0
548ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPESHIFT  (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
549ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZESHIFT  (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
550ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIRSHIFT   (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
551ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
552ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*
553ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * Direction bits _IOC_NONE could be 0, but OSF/1 gives it a bit.
554ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * And this turns out useful to catch old ioctl numbers in header
555ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown * files for us.
556ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown */
557ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NONE       1U
558ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_READ       2U
559ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_WRITE      4U
560ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
561ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC(dir,type,nr,size) \
562ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        (((dir)  << _VKI_IOC_DIRSHIFT) | \
563ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ((type) << _VKI_IOC_TYPESHIFT) | \
564ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ((nr)   << _VKI_IOC_NRSHIFT) | \
565ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown         ((size) << _VKI_IOC_SIZESHIFT))
566ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
567ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* used to create numbers */
568ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IO(type,nr)            _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
569ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOR(type,nr,size)      _VKI_IOC(_VKI_IOC_READ,(type),(nr), \
570ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                       (_VKI_IOC_TYPECHECK(size)))
571ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOW(type,nr,size)      _VKI_IOC(_VKI_IOC_WRITE,(type),(nr), \
572ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                       (_VKI_IOC_TYPECHECK(size)))
573ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOWR(type,nr,size)     _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE, \
574ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                       (type),(nr),(_VKI_IOC_TYPECHECK(size)))
575ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOR_BAD(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr), \
576ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                       sizeof(size))
577ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOW_BAD(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr), \
578ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                       sizeof(size))
579ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOWR_BAD(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE, \
580ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                                       (type),(nr),sizeof(size))
581ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
582ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* used to decode them.. */
583ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_DIR(nr)        (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
584ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_TYPE(nr)       (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
585ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_NR(nr)         (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
586ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define _VKI_IOC_SIZE(nr)       (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
587ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
588ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
589ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/ioctls.h
590ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
591ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
592ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCGETS          _VKI_IOR('t', 19, struct vki_termios)
593ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETS          _VKI_IOW('t', 20, struct vki_termios)
594ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETSW         _VKI_IOW('t', 21, struct vki_termios)
595ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETSF         _VKI_IOW('t', 22, struct vki_termios)
596ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCGETA          _VKI_IOR('t', 23, struct vki_termio)
597ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETA          _VKI_IOW('t', 24, struct vki_termio)
598ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETAW         _VKI_IOW('t', 25, struct vki_termio)
599ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSETAF         _VKI_IOW('t', 28, struct vki_termio)
600ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSBRK          _VKI_IO('t', 29)
601ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCXONC          _VKI_IO('t', 30)
602ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCFLSH          _VKI_IO('t', 31)
603ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSCTTY       0x540E
604ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGPGRP       _VKI_IOR('t', 119, int)
605ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSPGRP       _VKI_IOW('t', 118, int)
606ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCOUTQ        _VKI_IOR('t', 115, int)     /* output queue size */
607ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGWINSZ      _VKI_IOR('t', 104, struct vki_winsize)
608ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSWINSZ      _VKI_IOW('t', 103, struct vki_winsize)
609ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMGET        0x5415
610ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMBIS        0x5416
611ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMBIC        0x5417
612ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCMSET        0x5418
613ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIONREAD        _VKI_IOR('f', 127, int)
614ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCLINUX       0x541C
615ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIONBIO         _VKI_IOW('f', 126, int)
616ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TCSBRKP         0x5425  /* Needed for POSIX tcsendbreak() */
617ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGPTN        _VKI_IOR('T',0x30, unsigned int)
618ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                            /* Get Pty Number (of pty-mux device) */
619ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSPTLCK      _VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
620ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_FIOASYNC        _VKI_IOW('f', 125, int)
621ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
622ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_TIOCGICOUNT	    0x545D /* read serial port inline interrupt counts */
623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define VKI_FIOQSIZE        _VKI_IOR('f', 128, vki_loff_t)
624ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
625ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
626ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/poll.h
627ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
628ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
629ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_POLLIN          0x0001
630ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
631ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_pollfd {
632ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  int fd;
633ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  short events;
634ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  short revents;
635ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
636ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
637ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
638ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/user.h
639ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
640ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
641ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Not sure what's needed from here
642ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
643ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
644ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/elf.h
645ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
646ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
647ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Not sure what's needed from here
648ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
649ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
650ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/ucontext.h
651ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
652ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
653ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ucontext {
654ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         uc_flags;
655ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct vki_ucontext  *uc_link;
656ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_stack_t           uc_stack;
657ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_sigset_t          uc_sigmask;
658ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_sigset_t          __unused[15]; /* Allow for uc_sigmask growth */
659ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct vki_sigcontext uc_mcontext;  /* last for extensibility */
660ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
661ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
662ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
663ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/ipcbuf.h
664ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
665ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
666ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ipc64_perm
667ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
668ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_key_t  key;
669ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_uid_t  uid;
670ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_gid_t  gid;
671ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_uid_t  cuid;
672ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_gid_t  cgid;
673ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_mode_t mode;
674ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int        seq;
675ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned int        __pad1;
676ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long       __unused1;
677ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long       __unused2;
678ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
679ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
680ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
681ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/sembuf.h
682ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
683ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
684ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_semid64_ds {
685ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct vki_ipc64_perm sem_perm;     /* permissions .. see ipc.h */
686ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_time_t   sem_otime;      /* last semop time */
687ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_time_t   sem_ctime;      /* last change time */
688ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         sem_nsems;      /* no. of semaphores in array */
689ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         __unused1;
690ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         __unused2;
691ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
692ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
693ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
694ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/msgbuf.h
695ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
696ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
697ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_msqid64_ds {
698ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct vki_ipc64_perm msg_perm;
699ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_time_t   msg_stime;      /* last msgsnd time */
700ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_time_t   msg_rtime;      /* last msgrcv time */
701ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_time_t   msg_ctime;      /* last change time */
702ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         msg_cbytes;      /* current number of bytes on queue */
703ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         msg_qnum;        /* number of messages in queue */
704ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         msg_qbytes;      /* max number of bytes on queue */
705ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_pid_t    msg_lspid;       /* pid of last msgsnd */
706ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_pid_t    msg_lrpid;       /* last receive pid */
707ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         __unused1;
708ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long         __unused2;
709ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
710ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
711ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
712ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/ipc.h
713ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
714ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
715ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// this just does #include <asm-generic/ipc.h>
716ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
717ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_ipc_kludge {
718ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct vki_msgbuf __user *msgp;
719ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  long msgtyp;
720ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
721ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
722ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMOP            1
723ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMGET           2
724ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMCTL           3
725ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SEMTIMEDOP       4
726ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGSND          11
727ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGRCV          12
728ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGGET          13
729ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_MSGCTL          14
730ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMAT           21
731ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMDT           22
732ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMGET          23
733ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define VKI_SHMCTL          24
734ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
735ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
736ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// From linux-2.6.13/include/asm-ppc64/shmbuf.h
737ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
738ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
739ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_shmid64_ds {
740ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  struct vki_ipc64_perm       shm_perm;       /* operation perms */
741ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_time_t         shm_atime;      /* last attach time */
742ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_time_t         shm_dtime;      /* last detach time */
743ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_time_t         shm_ctime;      /* last change time */
744ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  vki_size_t                  shm_segsz;      /* size of segment (bytes) */
745ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_pid_t          shm_cpid;       /* pid of creator */
746ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  __vki_kernel_pid_t          shm_lpid;       /* pid of last operator */
747ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long               shm_nattch;     /* no. of current attaches */
748ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long               __unused1;
749ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long               __unused2;
750ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
751ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
752ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownstruct vki_shminfo64 {
753ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   shmmax;
754ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   shmmin;
755ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   shmmni;
756ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   shmseg;
757ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   shmall;
758ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   __unused1;
759ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   __unused2;
760ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   __unused3;
761ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown  unsigned long   __unused4;
762ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown};
763ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
764ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
765ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// end
766ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown//----------------------------------------------------------------------
767ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
768ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif // __VKI_PPC64_LINUX_H
769ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
770ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
771ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--- end                                                          ---*/
772ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/*--------------------------------------------------------------------*/
773