UPDATE : valgrind version update and add files for SDK package
[sdk/tools/upstream/valgrind.git] / include / vki / vki-s390x-linux.h
1
2 /*--------------------------------------------------------------------*/
3 /*--- s390x/Linux-specific kernel interface.     vki-s390x-linux.h ---*/
4 /*--------------------------------------------------------------------*/
5
6 /*
7    This file is part of Valgrind, a dynamic binary instrumentation
8    framework.
9
10    Copyright IBM Corp. 2010-2013
11
12    This program is free software; you can redistribute it and/or
13    modify it under the terms of the GNU General Public License as
14    published by the Free Software Foundation; either version 2 of the
15    License, or (at your option) any later version.
16
17    This program is distributed in the hope that it will be useful, but
18    WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20    General Public License for more details.
21
22    You should have received a copy of the GNU General Public License
23    along with this program; if not, write to the Free Software
24    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
25    02111-1307, USA.
26
27    The GNU General Public License is contained in the file COPYING.
28 */
29
30 /* Contributed by Florian Krohm and Volker Sameske */
31
32 #ifndef __VKI_S390X_LINUX_H
33 #define __VKI_S390X_LINUX_H
34
35 #define __force
36
37 //----------------------------------------------------------------------
38 // From linux-2.6.16.60/include/asm-s390/types.h
39 //----------------------------------------------------------------------
40
41 typedef __signed__ char __vki_s8;
42 typedef unsigned char __vki_u8;
43
44 typedef __signed__ short __vki_s16;
45 typedef unsigned short __vki_u16;
46
47 typedef __signed__ int __vki_s32;
48 typedef unsigned int __vki_u32;
49
50 typedef __signed__ long __vki_s64;
51 typedef unsigned long __vki_u64;
52
53 typedef unsigned short vki_u16;
54
55 typedef unsigned int vki_u32;
56
57 //----------------------------------------------------------------------
58 // From linux-2.6.16.60/include/asm-s390/page.h
59 //----------------------------------------------------------------------
60
61 /* PAGE_SHIFT determines the page size */
62 #define VKI_PAGE_SHIFT  12
63 #define VKI_PAGE_SIZE   (1UL << VKI_PAGE_SHIFT)
64
65 //----------------------------------------------------------------------
66 // From linux-2.6.16.60/include/asm-s390/siginfo.h
67 //----------------------------------------------------------------------
68
69 /* We need that to ensure that sizeof(siginfo) == 128. */
70 #ifdef __s390x__
71 #define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
72 #endif
73
74 //----------------------------------------------------------------------
75 // From linux-2.6.16.60/include/asm-s390/sigcontext.h
76 //----------------------------------------------------------------------
77
78 #define __VKI_NUM_GPRS 16
79 #define __VKI_NUM_FPRS 16
80 #define __VKI_NUM_ACRS 16
81
82 #ifndef VGA_s390x
83
84 /* Has to be at least _NSIG_WORDS from asm/signal.h */
85 #define _VKI_SIGCONTEXT_NSIG    64
86 #define _VKI_SIGCONTEXT_NSIG_BPW        32
87 /* Size of stack frame allocated when calling signal handler. */
88 #define __VKI_SIGNAL_FRAMESIZE  96
89
90 #else /* VGA_s390x */
91
92 /* Has to be at least _NSIG_WORDS from asm/signal.h */
93 #define _VKI_SIGCONTEXT_NSIG    64
94 #define _VKI_SIGCONTEXT_NSIG_BPW        64
95 /* Size of stack frame allocated when calling signal handler. */
96 #define __VKI_SIGNAL_FRAMESIZE  160
97
98 #endif /* VGA_s390x */
99
100
101 #define _VKI_SIGCONTEXT_NSIG_WORDS      (_VKI_SIGCONTEXT_NSIG / _VKI_SIGCONTEXT_NSIG_BPW)
102 #define _VKI_SIGMASK_COPY_SIZE  (sizeof(unsigned long)*_VKI_SIGCONTEXT_NSIG_WORDS)
103
104 typedef struct
105 {
106         unsigned long mask;
107         unsigned long addr;
108 } __attribute__ ((aligned(8))) _vki_psw_t;
109
110 typedef struct
111 {
112         _vki_psw_t psw;
113         unsigned long gprs[__VKI_NUM_GPRS];
114         unsigned int  acrs[__VKI_NUM_ACRS];
115 } _vki_s390_regs_common;
116
117 typedef struct
118 {
119         unsigned int fpc;
120         double   fprs[__VKI_NUM_FPRS];
121 } _vki_s390_fp_regs;
122
123 typedef struct
124 {
125         _vki_s390_regs_common regs;
126         _vki_s390_fp_regs     fpregs;
127 } _vki_sigregs;
128
129
130 struct vki_sigcontext
131 {
132         unsigned long   oldmask[_VKI_SIGCONTEXT_NSIG_WORDS];
133         _vki_sigregs    __user *sregs;
134 };
135
136
137 //----------------------------------------------------------------------
138 // From linux-2.6.16.60/include/asm-s390/signal.h
139 //----------------------------------------------------------------------
140
141 #define _VKI_NSIG           _VKI_SIGCONTEXT_NSIG
142 #define _VKI_NSIG_BPW       _VKI_SIGCONTEXT_NSIG_BPW
143 #define _VKI_NSIG_WORDS     _VKI_SIGCONTEXT_NSIG_WORDS
144
145 typedef unsigned long vki_old_sigset_t;
146
147 typedef struct {
148         unsigned long sig[_VKI_NSIG_WORDS];
149 } vki_sigset_t;
150
151 #define VKI_SIGHUP           1
152 #define VKI_SIGINT           2
153 #define VKI_SIGQUIT          3
154 #define VKI_SIGILL           4
155 #define VKI_SIGTRAP          5
156 #define VKI_SIGABRT          6
157 #define VKI_SIGIOT           6
158 #define VKI_SIGBUS           7
159 #define VKI_SIGFPE           8
160 #define VKI_SIGKILL          9
161 #define VKI_SIGUSR1         10
162 #define VKI_SIGSEGV         11
163 #define VKI_SIGUSR2         12
164 #define VKI_SIGPIPE         13
165 #define VKI_SIGALRM         14
166 #define VKI_SIGTERM         15
167 #define VKI_SIGSTKFLT       16
168 #define VKI_SIGCHLD         17
169 #define VKI_SIGCONT         18
170 #define VKI_SIGSTOP         19
171 #define VKI_SIGTSTP         20
172 #define VKI_SIGTTIN         21
173 #define VKI_SIGTTOU         22
174 #define VKI_SIGURG          23
175 #define VKI_SIGXCPU         24
176 #define VKI_SIGXFSZ         25
177 #define VKI_SIGVTALRM       26
178 #define VKI_SIGPROF         27
179 #define VKI_SIGWINCH        28
180 #define VKI_SIGIO           29
181 #define VKI_SIGPOLL         VKI_SIGIO
182 /*
183 #define VKI_SIGLOST         29
184 */
185 #define VKI_SIGPWR          30
186 #define VKI_SIGSYS          31
187 #define VKI_SIGUNUSED       31
188
189 /* These should not be considered constants from userland.  */
190 #define VKI_SIGRTMIN        32
191 #define VKI_SIGRTMAX        _VKI_NSIG
192
193 /*
194  * SA_FLAGS values:
195  *
196  * SA_ONSTACK indicates that a registered stack_t will be used.
197  * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
198  * SA_RESTART flag to get restarting signals (which were the default long ago)
199  * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
200  * SA_RESETHAND clears the handler when the signal is delivered.
201  * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
202  * SA_NODEFER prevents the current signal from being masked in the handler.
203  *
204  * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
205  * Unix names RESETHAND and NODEFER respectively.
206  */
207 #define VKI_SA_NOCLDSTOP    0x00000001
208 #define VKI_SA_NOCLDWAIT    0x00000002
209 #define VKI_SA_SIGINFO      0x00000004
210 #define VKI_SA_ONSTACK      0x08000000
211 #define VKI_SA_RESTART      0x10000000
212 #define VKI_SA_NODEFER      0x40000000
213 #define VKI_SA_RESETHAND    0x80000000
214
215 #define VKI_SA_NOMASK       VKI_SA_NODEFER
216 #define VKI_SA_ONESHOT      VKI_SA_RESETHAND
217 #define VKI_SA_INTERRUPT    0x20000000 /* dummy -- ignored */
218
219 #define VKI_SA_RESTORER     0x04000000
220
221 /*
222  * sigaltstack controls
223  */
224 #define VKI_SS_ONSTACK      1
225 #define VKI_SS_DISABLE      2
226
227 #define VKI_MINSIGSTKSZ     2048
228 #define VKI_SIGSTKSZ        8192
229
230
231 /* Next lines asm-generic/signal.h */
232 #define VKI_SIG_BLOCK          0 /* for blocking signals */
233 #define VKI_SIG_UNBLOCK        1 /* for unblocking signals */
234 #define VKI_SIG_SETMASK        2 /* for setting the signal mask */
235
236 typedef void __vki_signalfn_t(int);
237 typedef __vki_signalfn_t __user *__vki_sighandler_t;
238
239 /* default signal handling */
240 #define VKI_SIG_DFL ((__force __vki_sighandler_t)0)
241 /* ignore signal */
242 #define VKI_SIG_IGN ((__force __vki_sighandler_t)1)
243 /* error return from signal */
244 #define VKI_SIG_ERR ((__force __vki_sighandler_t)-1)
245 /* Back to asm-s390/signal.h */
246
247 struct vki_old_sigaction {
248         // [[Nb: a 'k' prefix is added to "sa_handler" because
249         // bits/sigaction.h (which gets dragged in somehow via signal.h)
250         // #defines it as something else.  Since that is done for glibc's
251         // purposes, which we don't care about here, we use our own name.]]
252         __vki_sighandler_t ksa_handler;
253         vki_old_sigset_t sa_mask;
254         unsigned long sa_flags;
255         void (*sa_restorer)(void);
256 };
257
258 struct vki_sigaction {
259         // [[See comment about extra 'k' above]]
260         __vki_sighandler_t ksa_handler;
261         unsigned long sa_flags;
262         void (*sa_restorer)(void);
263         vki_sigset_t sa_mask;               /* mask last for extensibility */
264 };
265
266 struct vki_k_sigaction {
267         struct vki_sigaction sa;
268 };
269
270
271 /* On Linux we use the same type for passing sigactions to
272    and from the kernel.  Hence: */
273 typedef  struct vki_sigaction  vki_sigaction_toK_t;
274 typedef  struct vki_sigaction  vki_sigaction_fromK_t;
275
276
277 typedef struct vki_sigaltstack {
278         void __user *ss_sp;
279         int ss_flags;
280         vki_size_t ss_size;
281 } vki_stack_t;
282
283
284 //----------------------------------------------------------------------
285 // From linux-2.6.16.60/include/asm-s390/mman.h
286 //----------------------------------------------------------------------
287
288 #define VKI_PROT_NONE   0x0             /* No page permissions */
289 #define VKI_PROT_READ   0x1             /* page can be read */
290 #define VKI_PROT_WRITE  0x2             /* page can be written */
291 #define VKI_PROT_EXEC   0x4             /* page can be executed */
292 #define VKI_PROT_GROWSDOWN 0x01000000   /* mprotect flag: extend
293                                            change to start of
294                                            growsdown vma */
295 #define VKI_PROT_GROWSUP   0x02000000   /* mprotect flag:
296                                            extend change to end
297                                            of growsup vma */
298
299 #define VKI_MAP_SHARED          0x0001  /* Share changes */
300 #define VKI_MAP_PRIVATE         0x0002  /*  */
301 #define VKI_MAP_FIXED           0x0010  /*  */
302 #define VKI_MAP_ANONYMOUS       0x0020  /*  */
303
304
305 //----------------------------------------------------------------------
306 // From linux-2.6.16.60/include/asm-s390/fcntl.h
307 //----------------------------------------------------------------------
308
309 #define VKI_O_RDONLY        00000000
310 #define VKI_O_WRONLY        00000001
311 #define VKI_O_RDWR          00000002
312 #define VKI_O_ACCMODE       00000003
313 #define VKI_O_CREAT         00000100        /* not fcntl */
314 #define VKI_O_EXCL          00000200        /* not fcntl */
315 #define VKI_O_NOCTTY        00000400        /* not fcntl */
316 #define VKI_O_TRUNC         00001000        /* not fcntl */
317 #define VKI_O_APPEND        00002000
318 #define VKI_O_NONBLOCK      00004000
319
320 #define VKI_AT_FDCWD            -100
321
322 #define VKI_F_DUPFD     0       /* dup */
323 #define VKI_F_GETFD     1       /* get close_on_exec */
324 #define VKI_F_SETFD     2       /* set/clear close_on_exec */
325 #define VKI_F_GETFL     3       /* get file->f_flags */
326 #define VKI_F_SETFL     4       /* set file->f_flags */
327 #define VKI_F_GETLK     5
328 #define VKI_F_SETLK     6
329 #define VKI_F_SETLKW    7
330 #define VKI_F_SETOWN    8       /* for sockets. */
331 #define VKI_F_GETOWN    9       /* for sockets. */
332 #define VKI_F_SETSIG    10      /* for sockets. */
333 #define VKI_F_GETSIG    11      /* for sockets. */
334
335 #define VKI_F_SETOWN_EX         15
336 #define VKI_F_GETOWN_EX         16
337
338 #define VKI_F_OWNER_TID         0
339 #define VKI_F_OWNER_PID         1
340 #define VKI_F_OWNER_PGRP        2
341
342 struct vki_f_owner_ex {
343         int     type;
344         __vki_kernel_pid_t      pid;
345 };
346
347 #define VKI_FD_CLOEXEC  1  /* actually anything with low bit set goes */
348
349 #define VKI_F_LINUX_SPECIFIC_BASE   1024
350
351
352 //----------------------------------------------------------------------
353 // From linux-2.6.16.60/include/asm-s390x/resource.h
354 //----------------------------------------------------------------------
355
356 // which just does #include <asm-generic/resource.h>
357
358 #define VKI_RLIMIT_DATA             2       /* max data size */
359 #define VKI_RLIMIT_STACK            3       /* max stack size */
360 #define VKI_RLIMIT_CORE             4       /* max core file size */
361 #define VKI_RLIMIT_NOFILE           7       /* max number of open files */
362
363
364 //----------------------------------------------------------------------
365 // From linux-2.6.16.60/include/asm-s390/socket.h
366 //----------------------------------------------------------------------
367
368 #define VKI_SOL_SOCKET      1
369
370 #define VKI_SO_TYPE         3
371
372 #define VKI_SO_ATTACH_FILTER        26
373
374 //----------------------------------------------------------------------
375 // From linux-2.6.16.60/include/asm-s390/sockios.h
376 //----------------------------------------------------------------------
377
378 #define VKI_SIOCSPGRP       0x8902
379 #define VKI_SIOCGPGRP       0x8904
380 #define VKI_SIOCGSTAMP      0x8906          /* Get stamp (timeval) */
381 /* since 2.6.22 */
382 #define VKI_SIOCGSTAMPNS    0x8907          /* Get stamp (timespec) */
383
384
385 //----------------------------------------------------------------------
386 // From linux-2.6.16.60/include/asm-s390/stat.h
387 //----------------------------------------------------------------------
388
389 #ifndef VGA_s390x
390 struct vki_stat {
391         unsigned short st_dev;
392         unsigned short __pad1;
393         unsigned long  st_ino;
394         unsigned short st_mode;
395         unsigned short st_nlink;
396         unsigned short st_uid;
397         unsigned short st_gid;
398         unsigned short st_rdev;
399         unsigned short __pad2;
400         unsigned long  st_size;
401         unsigned long  st_blksize;
402         unsigned long  st_blocks;
403         unsigned long  st_atime;
404         unsigned long  st_atime_nsec;
405         unsigned long  st_mtime;
406         unsigned long  st_mtime_nsec;
407         unsigned long  st_ctime;
408         unsigned long  st_ctime_nsec;
409         unsigned long  __unused4;
410         unsigned long  __unused5;
411 };
412
413 /* This matches struct stat64 in glibc2.1, hence the absolutely
414  * insane amounts of padding around dev_t's.
415  */
416 struct vki_stat64 {
417         unsigned long long      st_dev;
418         unsigned int    __pad1;
419         unsigned long   __st_ino;
420         unsigned int    st_mode;
421         unsigned int    st_nlink;
422         unsigned long   st_uid;
423         unsigned long   st_gid;
424         unsigned long long      st_rdev;
425         unsigned int    __pad3;
426         long long       st_size;
427         unsigned long   st_blksize;
428         unsigned char   __pad4[4];
429         unsigned long   __pad5;     /* future possible st_blocks high bits */
430         unsigned long   st_blocks;  /* Number 512-byte blocks allocated. */
431         unsigned long   st_atime;
432         unsigned long   st_atime_nsec;
433         unsigned long   st_mtime;
434         unsigned long   st_mtime_nsec;
435         unsigned long   st_ctime;
436         unsigned long   st_ctime_nsec;  /* will be high 32 bits of ctime someday */
437         unsigned long long      st_ino;
438 };
439
440 #else
441
442 struct vki_stat {
443         unsigned long  st_dev;
444         unsigned long  st_ino;
445         unsigned long  st_nlink;
446         unsigned int   st_mode;
447         unsigned int   st_uid;
448         unsigned int   st_gid;
449         unsigned int   __pad1;
450         unsigned long  st_rdev;
451         unsigned long  st_size;
452         unsigned long  st_atime;
453         unsigned long  st_atime_nsec;
454         unsigned long  st_mtime;
455         unsigned long  st_mtime_nsec;
456         unsigned long  st_ctime;
457         unsigned long  st_ctime_nsec;
458         unsigned long  st_blksize;
459         long           st_blocks;
460         unsigned long  __unused[3];
461 };
462
463 #endif /* VGA_s390x */
464
465
466 //----------------------------------------------------------------------
467 // From linux-2.6.16.60/include/asm-s390/statfs.h
468 //----------------------------------------------------------------------
469
470 struct vki_statfs {
471         int  f_type;
472         int  f_bsize;
473         long f_blocks;
474         long f_bfree;
475         long f_bavail;
476         long f_files;
477         long f_ffree;
478         __vki_kernel_fsid_t f_fsid;
479         int  f_namelen;
480         int  f_frsize;
481         int  f_spare[5];
482 };
483
484
485 //----------------------------------------------------------------------
486 // From linux-2.6.16.60/include/asm-s390/termios.h
487 //----------------------------------------------------------------------
488
489 struct vki_winsize {
490         unsigned short ws_row;
491         unsigned short ws_col;
492         unsigned short ws_xpixel;
493         unsigned short ws_ypixel;
494 };
495
496 #define VKI_NCC 8
497 struct vki_termio {
498         unsigned short c_iflag;         /* input mode flags */
499         unsigned short c_oflag;         /* output mode flags */
500         unsigned short c_cflag;         /* control mode flags */
501         unsigned short c_lflag;         /* local mode flags */
502         unsigned char c_line;           /* line discipline */
503         unsigned char c_cc[VKI_NCC];    /* control characters */
504 };
505
506
507 //----------------------------------------------------------------------
508 // From linux-2.6.16.60/include/asm-s390/termbits.h
509 //----------------------------------------------------------------------
510
511 typedef unsigned char   vki_cc_t;
512 typedef unsigned int    vki_tcflag_t;
513
514 #define VKI_NCCS 19
515 struct vki_termios {
516         vki_tcflag_t c_iflag;           /* input mode flags */
517         vki_tcflag_t c_oflag;           /* output mode flags */
518         vki_tcflag_t c_cflag;           /* control mode flags */
519         vki_tcflag_t c_lflag;           /* local mode flags */
520         vki_cc_t c_line;                /* line discipline */
521         vki_cc_t c_cc[VKI_NCCS];        /* control characters */
522 };
523
524
525 //----------------------------------------------------------------------
526 // From linux-2.6.16.60/include/asm-s390/ioctl.h
527 //----------------------------------------------------------------------
528
529 #define _VKI_IOC_NRBITS         8
530 #define _VKI_IOC_TYPEBITS       8
531 #define _VKI_IOC_SIZEBITS       14
532 #define _VKI_IOC_DIRBITS        2
533
534 #define _VKI_IOC_NRMASK         ((1 << _VKI_IOC_NRBITS)-1)
535 #define _VKI_IOC_TYPEMASK       ((1 << _VKI_IOC_TYPEBITS)-1)
536 #define _VKI_IOC_SIZEMASK       ((1 << _VKI_IOC_SIZEBITS)-1)
537 #define _VKI_IOC_DIRMASK        ((1 << _VKI_IOC_DIRBITS)-1)
538
539 #define _VKI_IOC_NRSHIFT        0
540 #define _VKI_IOC_TYPESHIFT      (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
541 #define _VKI_IOC_SIZESHIFT      (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
542 #define _VKI_IOC_DIRSHIFT       (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
543
544 #define _VKI_IOC_NONE   0U
545 #define _VKI_IOC_WRITE  1U
546 #define _VKI_IOC_READ   2U
547
548 #define _VKI_IOC(dir,type,nr,size) \
549         (((dir)  << _VKI_IOC_DIRSHIFT) | \
550          ((type) << _VKI_IOC_TYPESHIFT) | \
551          ((nr)   << _VKI_IOC_NRSHIFT) | \
552          ((size) << _VKI_IOC_SIZESHIFT))
553
554 /* used to create numbers */
555 #define _VKI_IO(type,nr)        _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
556 #define _VKI_IOR(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
557 #define _VKI_IOW(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
558 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
559
560 /* used to decode ioctl numbers.. */
561 #define _VKI_IOC_DIR(nr)        (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
562 #define _VKI_IOC_TYPE(nr)       (((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
563 #define _VKI_IOC_NR(nr)         (((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
564 #define _VKI_IOC_SIZE(nr)       (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
565
566 //----------------------------------------------------------------------
567 // From linux-2.6.16.60/include/asm-s390/ioctls.h
568 //----------------------------------------------------------------------
569
570 /* 0x54 is just a magic number to make these relatively unique ('T') */
571
572 #define VKI_TCGETS      0x5401
573 #define VKI_TCSETS      0x5402
574 #define VKI_TCSETSW     0x5403
575 #define VKI_TCSETSF     0x5404
576 #define VKI_TCGETA      0x5405
577 #define VKI_TCSETA      0x5406
578 #define VKI_TCSETAW     0x5407
579 #define VKI_TCSETAF     0x5408
580 #define VKI_TCSBRK      0x5409
581 #define VKI_TCXONC      0x540A
582 #define VKI_TCFLSH      0x540B
583
584 #define VKI_TIOCSCTTY   0x540E
585 #define VKI_TIOCGPGRP   0x540F
586 #define VKI_TIOCSPGRP   0x5410
587 #define VKI_TIOCOUTQ    0x5411
588
589 #define VKI_TIOCGWINSZ  0x5413
590 #define VKI_TIOCSWINSZ  0x5414
591 #define VKI_TIOCMGET    0x5415
592 #define VKI_TIOCMBIS    0x5416
593 #define VKI_TIOCMBIC    0x5417
594 #define VKI_TIOCMSET    0x5418
595
596 #define VKI_FIONREAD    0x541B
597 #define VKI_TIOCLINUX   0x541C
598
599 #define VKI_FIONBIO     0x5421
600
601 #define VKI_TCSBRKP     0x5425  /* Needed for POSIX tcsendbreak() */
602
603 #define VKI_TIOCGPTN    _VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
604 #define VKI_TIOCSPTLCK  _VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
605
606 #define VKI_FIONCLEX    0x5450
607 #define VKI_FIOCLEX     0x5451
608 #define VKI_FIOASYNC    0x5452
609
610 #define VKI_TIOCSERGETLSR       0x5459 /* Get line status register */
611
612 #define VKI_TIOCGICOUNT 0x545D  /* read serial port inline interrupt counts */
613
614 //----------------------------------------------------------------------
615 // From linux-2.6.39-rc2/arch/s390/include/asm/ioctls.h
616 //----------------------------------------------------------------------
617
618 #define VKI_FIOQSIZE 0x545E
619
620 //----------------------------------------------------------------------
621 // From linux-2.6.16.60/include/asm-s390/poll.h
622 //----------------------------------------------------------------------
623
624 struct vki_pollfd {
625         int fd;
626         short events;
627         short revents;
628 };
629
630 #define VKI_POLLIN          0x0001
631
632 //----------------------------------------------------------------------
633 // From linux-2.6.16.60/include/asm-s390/ptrace.h
634 //----------------------------------------------------------------------
635 #define VKI_NUM_GPRS    16
636 #define VKI_NUM_FPRS    16
637 #define VKI_NUM_CRS     16
638 #define VKI_NUM_ACRS    16
639
640 typedef union
641 {
642         float   f;
643         double  d;
644         __vki_u64   ui;
645         struct
646         {
647                 __vki_u32 hi;
648                 __vki_u32 lo;
649         } fp;
650 } vki_freg_t;
651
652 typedef struct
653 {
654         __vki_u32   fpc;
655         vki_freg_t  fprs[VKI_NUM_FPRS];
656 } vki_s390_fp_regs;
657
658 typedef struct
659 {
660         unsigned long mask;
661         unsigned long addr;
662 } __attribute__ ((aligned(8))) vki_psw_t;
663
664 typedef struct
665 {
666         vki_psw_t psw;
667         unsigned long gprs[VKI_NUM_GPRS];
668         unsigned int  acrs[VKI_NUM_ACRS];
669         unsigned long orig_gpr2;
670 } vki_s390_regs;
671
672 /*
673  * Now for the program event recording (trace) definitions.
674  */
675 typedef struct
676 {
677         unsigned long cr[3];
678 } vki_per_cr_words;
679
680 typedef struct
681 {
682 #ifdef VGA_s390x
683         unsigned                       : 32;
684 #endif /* VGA_s390x */
685         unsigned em_branching          : 1;
686         unsigned em_instruction_fetch  : 1;
687         /*
688          * Switching on storage alteration automatically fixes
689          * the storage alteration event bit in the users std.
690          */
691         unsigned em_storage_alteration : 1;
692         unsigned em_gpr_alt_unused     : 1;
693         unsigned em_store_real_address : 1;
694         unsigned                       : 3;
695         unsigned branch_addr_ctl       : 1;
696         unsigned                       : 1;
697         unsigned storage_alt_space_ctl : 1;
698         unsigned                       : 21;
699         unsigned long starting_addr;
700         unsigned long ending_addr;
701 } vki_per_cr_bits;
702
703 typedef struct
704 {
705         unsigned short perc_atmid;
706         unsigned long address;
707         unsigned char access_id;
708 } vki_per_lowcore_words;
709
710 typedef struct
711 {
712         unsigned perc_branching          : 1;
713         unsigned perc_instruction_fetch  : 1;
714         unsigned perc_storage_alteration : 1;
715         unsigned perc_gpr_alt_unused     : 1;
716         unsigned perc_store_real_address : 1;
717         unsigned                         : 3;
718         unsigned atmid_psw_bit_31        : 1;
719         unsigned atmid_validity_bit      : 1;
720         unsigned atmid_psw_bit_32        : 1;
721         unsigned atmid_psw_bit_5         : 1;
722         unsigned atmid_psw_bit_16        : 1;
723         unsigned atmid_psw_bit_17        : 1;
724         unsigned si                      : 2;
725         unsigned long address;
726         unsigned                         : 4;
727         unsigned access_id               : 4;
728 } vki_per_lowcore_bits;
729
730 typedef struct
731 {
732         union {
733                 vki_per_cr_words   words;
734                 vki_per_cr_bits    bits;
735         } control_regs;
736         /*
737          * Use these flags instead of setting em_instruction_fetch
738          * directly they are used so that single stepping can be
739          * switched on & off while not affecting other tracing
740          */
741         unsigned  single_step       : 1;
742         unsigned  instruction_fetch : 1;
743         unsigned                    : 30;
744         /*
745          * These addresses are copied into cr10 & cr11 if single
746          * stepping is switched off
747          */
748         unsigned long starting_addr;
749         unsigned long ending_addr;
750         union {
751                 vki_per_lowcore_words words;
752                 vki_per_lowcore_bits  bits;
753         } lowcore;
754 } vki_per_struct;
755
756 /*
757  * The user_regs_struct defines the way the user registers are
758  * store on the stack for signal handling.
759  */
760 struct vki_user_regs_struct
761 {
762         vki_psw_t psw;
763         unsigned long gprs[VKI_NUM_GPRS];
764         unsigned int  acrs[VKI_NUM_ACRS];
765         unsigned long orig_gpr2;
766         vki_s390_fp_regs fp_regs;
767         /*
768          * These per registers are in here so that gdb can modify them
769          * itself as there is no "official" ptrace interface for hardware
770          * watchpoints. This is the way intel does it.
771          */
772         vki_per_struct per_info;
773         unsigned long ieee_instruction_pointer;
774         /* Used to give failing instruction back to user for ieee exceptions */
775 };
776
777 typedef struct
778 {
779         unsigned int  vki_len;
780         unsigned long vki_kernel_addr;
781         unsigned long vki_process_addr;
782 } vki_ptrace_area;
783
784 /*
785  * S/390 specific non posix ptrace requests
786  */
787 #define VKI_PTRACE_PEEKUSR_AREA       0x5000
788 #define VKI_PTRACE_POKEUSR_AREA       0x5001
789
790 //----------------------------------------------------------------------
791 // From linux-2.6.16.60/include/asm-s390/elf.h
792 //----------------------------------------------------------------------
793
794 typedef vki_s390_fp_regs vki_elf_fpregset_t;
795 typedef vki_s390_regs vki_elf_gregset_t;
796
797
798 //----------------------------------------------------------------------
799 // From linux-2.6.16.60/include/asm-s390/ucontext.h
800 //----------------------------------------------------------------------
801
802 struct vki_ucontext {
803         unsigned long         uc_flags;
804         struct vki_ucontext  *uc_link;
805         vki_stack_t           uc_stack;
806         _vki_sigregs          uc_mcontext;
807         vki_sigset_t          uc_sigmask; /* mask last for extensibility */
808 };
809
810 //----------------------------------------------------------------------
811 // From linux-2.6.16.60/include/asm-s390/ipcbuf.h
812 //----------------------------------------------------------------------
813
814 struct vki_ipc64_perm
815 {
816         __vki_kernel_key_t      key;
817         __vki_kernel_uid32_t    uid;
818         __vki_kernel_gid32_t    gid;
819         __vki_kernel_uid32_t    cuid;
820         __vki_kernel_gid32_t    cgid;
821         __vki_kernel_mode_t     mode;
822         unsigned short          __pad1;
823         unsigned short          seq;
824 #ifndef VGA_s390x
825         unsigned short          __pad2;
826 #endif /* ! VGA_s390x */
827         unsigned long           __unused1;
828         unsigned long           __unused2;
829 };
830
831
832 //----------------------------------------------------------------------
833 // From linux-2.6.16.60/include/asm-s390/sembuf.h
834 //----------------------------------------------------------------------
835
836 struct vki_semid64_ds {
837         struct vki_ipc64_perm sem_perm;         /* permissions .. see ipc.h */
838         __vki_kernel_time_t   sem_otime;        /* last semop time */
839 #ifndef VGA_s390x
840         unsigned long   __unused1;
841 #endif /* ! VGA_s390x */
842         __vki_kernel_time_t   sem_ctime;        /* last change time */
843 #ifndef VGA_s390x
844         unsigned long   __unused2;
845 #endif /* ! VGA_s390x */
846         unsigned long   sem_nsems;              /* no. of semaphores in array */
847         unsigned long   __unused3;
848         unsigned long   __unused4;
849 };
850
851
852 //----------------------------------------------------------------------
853 // From linux-2.6.16.60/include/asm-s390/msgbuf.h
854 //----------------------------------------------------------------------
855
856 struct vki_msqid64_ds {
857         struct vki_ipc64_perm msg_perm;
858         __vki_kernel_time_t msg_stime;  /* last msgsnd time */
859 #ifndef VGA_s390x
860         unsigned long   __unused1;
861 #endif /* ! VGA_s390x */
862         __vki_kernel_time_t msg_rtime;  /* last msgrcv time */
863 #ifndef VGA_s390x
864         unsigned long   __unused2;
865 #endif /* ! VGA_s390x */
866         __vki_kernel_time_t msg_ctime;  /* last change time */
867 #ifndef VGA_s390x
868         unsigned long   __unused3;
869 #endif /* ! VGA_s390x */
870         unsigned long  msg_cbytes;      /* current number of bytes on queue */
871         unsigned long  msg_qnum;        /* number of messages in queue */
872         unsigned long  msg_qbytes;      /* max number of bytes on queue */
873         __vki_kernel_pid_t msg_lspid;   /* pid of last msgsnd */
874         __vki_kernel_pid_t msg_lrpid;   /* last receive pid */
875         unsigned long  __unused4;
876         unsigned long  __unused5;
877 };
878
879
880 //----------------------------------------------------------------------
881 // From linux-2.6.16.60/include/asm-s390/ipc.h
882 //----------------------------------------------------------------------
883
884 struct vki_ipc_kludge {
885         struct vki_msgbuf __user *msgp;
886         long msgtyp;
887 };
888
889 #define VKI_SEMOP        1
890 #define VKI_SEMGET       2
891 #define VKI_SEMCTL       3
892 #define VKI_SEMTIMEDOP   4
893 #define VKI_MSGSND      11
894 #define VKI_MSGRCV      12
895 #define VKI_MSGGET      13
896 #define VKI_MSGCTL      14
897 #define VKI_SHMAT       21
898 #define VKI_SHMDT       22
899 #define VKI_SHMGET      23
900 #define VKI_SHMCTL      24
901
902
903 //----------------------------------------------------------------------
904 // From linux-2.6.16.60/include/asm-s390/shmbuf.h
905 //----------------------------------------------------------------------
906
907 struct vki_shmid64_ds {
908         struct vki_ipc64_perm   shm_perm;       /* operation perms */
909         vki_size_t              shm_segsz;      /* size of segment (bytes) */
910         __vki_kernel_time_t     shm_atime;      /* last attach time */
911 #ifndef VGA_s390x
912         unsigned long           __unused1;
913 #endif /* ! VGA_s390x */
914         __vki_kernel_time_t     shm_dtime;      /* last detach time */
915 #ifndef VGA_s390x
916         unsigned long           __unused2;
917 #endif /* ! VGA_s390x */
918         __vki_kernel_time_t     shm_ctime;      /* last change time */
919 #ifndef VGA_s390x
920         unsigned long           __unused3;
921 #endif /* ! VGA_s390x */
922         __vki_kernel_pid_t      shm_cpid;       /* pid of creator */
923         __vki_kernel_pid_t      shm_lpid;       /* pid of last operator */
924         unsigned long           shm_nattch;     /* no. of current attaches */
925         unsigned long           __unused4;
926         unsigned long           __unused5;
927 };
928
929 struct vki_shminfo64 {
930         unsigned long   shmmax;
931         unsigned long   shmmin;
932         unsigned long   shmmni;
933         unsigned long   shmseg;
934         unsigned long   shmall;
935         unsigned long   __unused1;
936         unsigned long   __unused2;
937         unsigned long   __unused3;
938         unsigned long   __unused4;
939 };
940
941
942 //----------------------------------------------------------------------
943 // The following are defined in the VKI namespace but are nowhere found
944 // in the linux headers.
945 //----------------------------------------------------------------------
946 #define VKI_BIG_ENDIAN      1
947 #define VKI_MAX_PAGE_SHIFT  VKI_PAGE_SHIFT
948 #define VKI_MAX_PAGE_SIZE   VKI_PAGE_SIZE
949
950 //----------------------------------------------------------------------
951 // From linux-2.6.35.4/arch/s390x/include/asm/shmparam.h
952 //----------------------------------------------------------------------
953
954 #define VKI_SHMLBA  VKI_PAGE_SIZE
955
956 /* If a system call returns a value >= VKI_MAX_ERRNO then that is considered
957    an error condition. I.e. the system call failed. */
958 #define VKI_MAX_ERRNO       -125
959
960 #endif // __VKI_S390X_LINUX_H
961
962 /*--------------------------------------------------------------------*/
963 /*--- end                                                          ---*/
964 /*--------------------------------------------------------------------*/