blob: 3a73e1ad76ed647ce2cbc88425c75396d7572424 [file] [log] [blame]
njnc6168192004-11-29 13:54:10 +00001
2/*--------------------------------------------------------------------*/
njn42c83552005-12-05 20:45:59 +00003/*--- AMD64/Linux-specific kernel interface. vki-amd64-linux.h ---*/
njnc6168192004-11-29 13:54:10 +00004/*--------------------------------------------------------------------*/
5
6/*
njnb9c427c2004-12-01 14:14:42 +00007 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
njnc6168192004-11-29 13:54:10 +00009
sewardj4d474d02008-02-11 11:34:59 +000010 Copyright (C) 2000-2008 Julian Seward
njnc6168192004-11-29 13:54:10 +000011 jseward@acm.org
12
13 This program is free software; you can redistribute it and/or
14 modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of the
16 License, or (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 02111-1307, USA.
27
28 The GNU General Public License is contained in the file COPYING.
29*/
30
njn4de47b12005-05-16 03:25:12 +000031#ifndef __VKI_AMD64_LINUX_H
32#define __VKI_AMD64_LINUX_H
njnc6168192004-11-29 13:54:10 +000033
34// AMD64 is little-endian.
35#define VKI_LITTLE_ENDIAN 1
36
37//----------------------------------------------------------------------
38// From linux-2.6.9/include/asm-x86_64/types.h
39//----------------------------------------------------------------------
40
41typedef unsigned char __vki_u8;
42
43typedef __signed__ short __vki_s16;
44typedef unsigned short __vki_u16;
45
tom1aa57372005-08-28 10:16:29 +000046typedef __signed__ int __vki_s32;
njnc6168192004-11-29 13:54:10 +000047typedef unsigned int __vki_u32;
48
49typedef __signed__ long long __vki_s64;
50typedef unsigned long long __vki_u64;
51
52typedef unsigned short vki_u16;
53
54typedef unsigned int vki_u32;
55
56//----------------------------------------------------------------------
57// From linux-2.6.9/include/asm-x86_64/page.h
58//----------------------------------------------------------------------
59
60#define VKI_PAGE_SHIFT 12
61#define VKI_PAGE_SIZE (1UL << VKI_PAGE_SHIFT)
sewardje66f2e02006-12-30 17:45:08 +000062#define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT
63#define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
njnc6168192004-11-29 13:54:10 +000064
65//----------------------------------------------------------------------
66// From linux-2.6.9/include/asm-x86_64/signal.h
67//----------------------------------------------------------------------
68
69#define _VKI_NSIG 64
70#define _VKI_NSIG_BPW 64
71#define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
72
73typedef unsigned long vki_old_sigset_t; /* at least 32 bits */
74
75typedef struct {
76 unsigned long sig[_VKI_NSIG_WORDS];
77} vki_sigset_t;
78
79#define VKI_SIGHUP 1
80#define VKI_SIGINT 2
81#define VKI_SIGQUIT 3
82#define VKI_SIGILL 4
83#define VKI_SIGTRAP 5
84#define VKI_SIGABRT 6
85#define VKI_SIGBUS 7
86#define VKI_SIGFPE 8
87#define VKI_SIGKILL 9
88#define VKI_SIGUSR1 10
89#define VKI_SIGSEGV 11
90#define VKI_SIGUSR2 12
91#define VKI_SIGPIPE 13
92#define VKI_SIGALRM 14
93#define VKI_SIGTERM 15
94#define VKI_SIGSTKFLT 16
95#define VKI_SIGCHLD 17
96#define VKI_SIGCONT 18
97#define VKI_SIGSTOP 19
98#define VKI_SIGTSTP 20
99#define VKI_SIGTTIN 21
100#define VKI_SIGTTOU 22
101#define VKI_SIGURG 23
102#define VKI_SIGXCPU 24
103#define VKI_SIGXFSZ 25
104#define VKI_SIGVTALRM 26
105#define VKI_SIGPROF 27
106#define VKI_SIGWINCH 28
107#define VKI_SIGIO 29
108#define VKI_SIGPWR 30
109#define VKI_SIGSYS 31
110#define VKI_SIGUNUSED 31
111
112#define VKI_SIGRTMIN 32
113#define VKI_SIGRTMAX _VKI_NSIG
114
115#define VKI_SA_NOCLDSTOP 0x00000001
116#define VKI_SA_NOCLDWAIT 0x00000002
117#define VKI_SA_SIGINFO 0x00000004
118#define VKI_SA_ONSTACK 0x08000000
119#define VKI_SA_RESTART 0x10000000
120#define VKI_SA_NODEFER 0x40000000
121#define VKI_SA_RESETHAND 0x80000000
122
123#define VKI_SA_NOMASK VKI_SA_NODEFER
124#define VKI_SA_ONESHOT VKI_SA_RESETHAND
125
126#define VKI_SA_RESTORER 0x04000000
127
128#define VKI_SS_ONSTACK 1
129#define VKI_SS_DISABLE 2
130
131#define VKI_MINSIGSTKSZ 2048
132
133#define VKI_SIG_BLOCK 0 /* for blocking signals */
134#define VKI_SIG_UNBLOCK 1 /* for unblocking signals */
135#define VKI_SIG_SETMASK 2 /* for setting the signal mask */
136
137typedef void __vki_signalfn_t(int);
138typedef __vki_signalfn_t __user *__vki_sighandler_t;
139
140typedef void __vki_restorefn_t(void);
141typedef __vki_restorefn_t __user *__vki_sigrestore_t;
142
143#define VKI_SIG_DFL ((__vki_sighandler_t)0) /* default signal handling */
144#define VKI_SIG_IGN ((__vki_sighandler_t)1) /* ignore signal */
145
146struct vki_sigaction {
147 // [[Nb: a 'k' prefix is added to "sa_handler" because
148 // bits/sigaction.h (which gets dragged in somehow via signal.h)
149 // #defines it as something else. Since that is done for glibc's
150 // purposes, which we don't care about here, we use our own name.]]
151 __vki_sighandler_t ksa_handler;
152 unsigned long sa_flags;
153 __vki_sigrestore_t sa_restorer;
154 vki_sigset_t sa_mask; /* mask last for extensibility */
155};
156
157typedef struct vki_sigaltstack {
158 void __user *ss_sp;
159 int ss_flags;
160 vki_size_t ss_size;
161} vki_stack_t;
162
163//----------------------------------------------------------------------
164// From linux-2.6.9/include/asm-x86_64/sigcontext.h
165//----------------------------------------------------------------------
166
167struct _vki_fpstate {
168 __vki_u16 cwd;
169 __vki_u16 swd;
170 __vki_u16 twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */
171 __vki_u16 fop;
172 __vki_u64 rip;
173 __vki_u64 rdp;
174 __vki_u32 mxcsr;
175 __vki_u32 mxcsr_mask;
176 __vki_u32 st_space[32]; /* 8*16 bytes for each FP-reg */
177 __vki_u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg */
178 __vki_u32 reserved2[24];
179};
180
181struct vki_sigcontext {
182 unsigned long r8;
183 unsigned long r9;
184 unsigned long r10;
185 unsigned long r11;
186 unsigned long r12;
187 unsigned long r13;
188 unsigned long r14;
189 unsigned long r15;
190 unsigned long rdi;
191 unsigned long rsi;
192 unsigned long rbp;
193 unsigned long rbx;
194 unsigned long rdx;
195 unsigned long rax;
196 unsigned long rcx;
197 unsigned long rsp;
198 unsigned long rip;
199 unsigned long eflags; /* RFLAGS */
200 unsigned short cs;
201 unsigned short gs;
202 unsigned short fs;
203 unsigned short __pad0;
204 unsigned long err;
205 unsigned long trapno;
206 unsigned long oldmask;
207 unsigned long cr2;
208 struct _vki_fpstate __user *fpstate; /* zero when no FPU context */
209 unsigned long reserved1[8];
210};
211
212//----------------------------------------------------------------------
213// From linux-2.6.9/include/asm-x86_64/mman.h
214//----------------------------------------------------------------------
215
216#define VKI_PROT_READ 0x1 /* page can be read */
217#define VKI_PROT_WRITE 0x2 /* page can be written */
218#define VKI_PROT_EXEC 0x4 /* page can be executed */
sewardj4d89e302005-03-16 22:04:40 +0000219#define VKI_PROT_NONE 0x0 /* page can not be accessed */
tom65505192005-11-08 16:51:55 +0000220#define VKI_PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */
221#define VKI_PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */
njnc6168192004-11-29 13:54:10 +0000222
223#define VKI_MAP_SHARED 0x01 /* Share changes */
224#define VKI_MAP_PRIVATE 0x02 /* Changes are private */
225#define VKI_MAP_FIXED 0x10 /* Interpret addr exactly */
226#define VKI_MAP_ANONYMOUS 0x20 /* don't use a file */
rjwalshd804ab82005-06-19 17:52:41 +0000227#define VKI_MAP_NORESERVE 0x4000 /* don't check for reservations */
njnc6168192004-11-29 13:54:10 +0000228
229//----------------------------------------------------------------------
230// From linux-2.6.9/include/asm-x86_64/fcntl.h
231//----------------------------------------------------------------------
232
233#define VKI_O_RDONLY 00
234#define VKI_O_WRONLY 01
sewardj45f4e7c2005-09-27 19:20:21 +0000235#define VKI_O_RDWR 02
njnc6168192004-11-29 13:54:10 +0000236#define VKI_O_CREAT 0100 /* not fcntl */
237#define VKI_O_EXCL 0200 /* not fcntl */
238#define VKI_O_TRUNC 01000 /* not fcntl */
239#define VKI_O_APPEND 02000
240#define VKI_O_NONBLOCK 04000
njn28d2e642006-04-12 11:10:46 +0000241#define VKI_O_LARGEFILE 0100000
njnc6168192004-11-29 13:54:10 +0000242
dirkc9d66c02007-01-31 23:06:08 +0000243#define VKI_AT_FDCWD -100
244
njnc6168192004-11-29 13:54:10 +0000245#define VKI_F_DUPFD 0 /* dup */
246#define VKI_F_GETFD 1 /* get close_on_exec */
247#define VKI_F_SETFD 2 /* set/clear close_on_exec */
248#define VKI_F_GETFL 3 /* get file->f_flags */
249#define VKI_F_SETFL 4 /* set file->f_flags */
250#define VKI_F_GETLK 5
251#define VKI_F_SETLK 6
252#define VKI_F_SETLKW 7
253
254#define VKI_F_SETOWN 8 /* for sockets. */
255#define VKI_F_GETOWN 9 /* for sockets. */
256#define VKI_F_SETSIG 10 /* for sockets. */
257#define VKI_F_GETSIG 11 /* for sockets. */
258
259#define VKI_FD_CLOEXEC 1 /* actually anything with low bit set goes */
260
261#define VKI_F_LINUX_SPECIFIC_BASE 1024
262
263//----------------------------------------------------------------------
264// From linux-2.6.9/include/asm-x86_64/resource.h
265//----------------------------------------------------------------------
266
267#define VKI_RLIMIT_DATA 2 /* max data size */
268#define VKI_RLIMIT_STACK 3 /* max stack size */
269#define VKI_RLIMIT_CORE 4 /* max core file size */
270#define VKI_RLIMIT_NOFILE 7 /* max number of open files */
271
272//----------------------------------------------------------------------
273// From linux-2.6.9/include/asm-x86_64/socket.h
274//----------------------------------------------------------------------
275
276#define VKI_SOL_SOCKET 1
277
278#define VKI_SO_TYPE 3
279
280//----------------------------------------------------------------------
281// From linux-2.6.9/include/asm-x86_64/sockios.h
282//----------------------------------------------------------------------
283
284#define VKI_SIOCSPGRP 0x8902
285#define VKI_SIOCGPGRP 0x8904
286#define VKI_SIOCGSTAMP 0x8906 /* Get stamp */
287
288//----------------------------------------------------------------------
289// From linux-2.6.9/include/asm-x86_64/stat.h
290//----------------------------------------------------------------------
291
292struct vki_stat {
293 unsigned long st_dev;
294 unsigned long st_ino;
295 unsigned long st_nlink;
296
297 unsigned int st_mode;
298 unsigned int st_uid;
299 unsigned int st_gid;
300 unsigned int __pad0;
301 unsigned long st_rdev;
302 long st_size;
303 long st_blksize;
304 long st_blocks; /* Number 512-byte blocks allocated. */
305
306 unsigned long st_atime;
307 unsigned long st_atime_nsec;
308 unsigned long st_mtime;
309 unsigned long st_mtime_nsec;
310 unsigned long st_ctime;
311 unsigned long st_ctime_nsec;
312 long __unused[3];
313};
314
315//----------------------------------------------------------------------
316// From linux-2.6.9/include/asm-x86_64/statfs.h
317//----------------------------------------------------------------------
318
319struct vki_statfs {
320 long f_type;
321 long f_bsize;
322 long f_blocks;
323 long f_bfree;
324 long f_bavail;
325 long f_files;
326 long f_ffree;
327 __vki_kernel_fsid_t f_fsid;
328 long f_namelen;
329 long f_frsize;
330 long f_spare[5];
331};
332
333//----------------------------------------------------------------------
334// From linux-2.6.9/include/asm-x86_64/termios.h
335//----------------------------------------------------------------------
336
337struct vki_winsize {
338 unsigned short ws_row;
339 unsigned short ws_col;
340 unsigned short ws_xpixel;
341 unsigned short ws_ypixel;
342};
343
344#define VKI_NCC 8
345struct vki_termio {
346 unsigned short c_iflag; /* input mode flags */
347 unsigned short c_oflag; /* output mode flags */
348 unsigned short c_cflag; /* control mode flags */
349 unsigned short c_lflag; /* local mode flags */
350 unsigned char c_line; /* line discipline */
351 unsigned char c_cc[VKI_NCC]; /* control characters */
352};
353
354//----------------------------------------------------------------------
355// From linux-2.6.9/include/asm-x86_64/termbits.h
356//----------------------------------------------------------------------
357
358typedef unsigned char vki_cc_t;
359typedef unsigned int vki_tcflag_t;
360
361#define VKI_NCCS 19
362struct vki_termios {
363 vki_tcflag_t c_iflag; /* input mode flags */
364 vki_tcflag_t c_oflag; /* output mode flags */
365 vki_tcflag_t c_cflag; /* control mode flags */
366 vki_tcflag_t c_lflag; /* local mode flags */
367 vki_cc_t c_line; /* line discipline */
368 vki_cc_t c_cc[VKI_NCCS]; /* control characters */
369};
370
371
372//----------------------------------------------------------------------
373// From linux-2.6.9/include/asm-x86_64/ioctl.h
374//----------------------------------------------------------------------
375
376#define _VKI_IOC_NRBITS 8
377#define _VKI_IOC_TYPEBITS 8
378#define _VKI_IOC_SIZEBITS 14
379#define _VKI_IOC_DIRBITS 2
380
381#define _VKI_IOC_SIZEMASK ((1 << _VKI_IOC_SIZEBITS)-1)
382#define _VKI_IOC_DIRMASK ((1 << _VKI_IOC_DIRBITS)-1)
383
384#define _VKI_IOC_NRSHIFT 0
385#define _VKI_IOC_TYPESHIFT (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
386#define _VKI_IOC_SIZESHIFT (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
387#define _VKI_IOC_DIRSHIFT (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
388
389#define _VKI_IOC_NONE 0U
390#define _VKI_IOC_WRITE 1U
391#define _VKI_IOC_READ 2U
392
393#define _VKI_IOC(dir,type,nr,size) \
394 (((dir) << _VKI_IOC_DIRSHIFT) | \
395 ((type) << _VKI_IOC_TYPESHIFT) | \
396 ((nr) << _VKI_IOC_NRSHIFT) | \
397 ((size) << _VKI_IOC_SIZESHIFT))
398
399#define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
400#define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr),sizeof(size))
401#define _VKI_IOW(type,nr,size) _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),sizeof(size))
402#define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),sizeof(size))
403
404#define _VKI_IOC_DIR(nr) (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
405#define _VKI_IOC_SIZE(nr) (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
406
407//----------------------------------------------------------------------
408// From linux-2.6.9/include/asm-x86_64/ioctls.h
409//----------------------------------------------------------------------
410
411#define VKI_TCGETS 0x5401
412#define VKI_TCSETS 0x5402
413#define VKI_TCSETSW 0x5403
414#define VKI_TCSETSF 0x5404
415#define VKI_TCGETA 0x5405
416#define VKI_TCSETA 0x5406
417#define VKI_TCSETAW 0x5407
418#define VKI_TCSETAF 0x5408
419#define VKI_TCSBRK 0x5409
420#define VKI_TCXONC 0x540A
421#define VKI_TCFLSH 0x540B
422#define VKI_TIOCSCTTY 0x540E
423#define VKI_TIOCGPGRP 0x540F
424#define VKI_TIOCSPGRP 0x5410
425#define VKI_TIOCOUTQ 0x5411
426#define VKI_TIOCGWINSZ 0x5413
427#define VKI_TIOCSWINSZ 0x5414
tom62ba7582005-07-28 16:26:34 +0000428#define VKI_TIOCMGET 0x5415
njnc6168192004-11-29 13:54:10 +0000429#define VKI_TIOCMBIS 0x5416
430#define VKI_TIOCMBIC 0x5417
431#define VKI_TIOCMSET 0x5418
432#define VKI_FIONREAD 0x541B
433#define VKI_TIOCLINUX 0x541C
434#define VKI_FIONBIO 0x5421
435#define VKI_TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */
436#define VKI_TIOCGPTN _VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
437#define VKI_TIOCSPTLCK _VKI_IOW('T',0x31, int) /* Lock/unlock Pty */
438
439#define VKI_FIOASYNC 0x5452
tom1b96ee62006-02-11 16:31:54 +0000440#define VKI_TIOCSERGETLSR 0x5459 /* Get line status register */
tom5d2af672006-02-11 13:29:09 +0000441
tom1ecb5402006-02-12 08:50:45 +0000442#define VKI_TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
njnc6168192004-11-29 13:54:10 +0000443
444//----------------------------------------------------------------------
445// From linux-2.6.9/include/asm-x86_64/poll.h
446//----------------------------------------------------------------------
447
448#define VKI_POLLIN 0x0001
449
450struct vki_pollfd {
451 int fd;
452 short events;
453 short revents;
454};
455
456//----------------------------------------------------------------------
457// From linux-2.6.9/include/asm-x86_64/user.h
458//----------------------------------------------------------------------
459
tom2af58f22005-07-22 15:04:14 +0000460struct vki_user_i387_struct {
461 unsigned short cwd;
462 unsigned short swd;
463 unsigned short twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */
464 unsigned short fop;
465 __vki_u64 rip;
466 __vki_u64 rdp;
467 __vki_u32 mxcsr;
468 __vki_u32 mxcsr_mask;
469 __vki_u32 st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
470 __vki_u32 xmm_space[64]; /* 16*16 bytes for each XMM-reg = 256 bytes */
471 __vki_u32 padding[24];
472};
473
njnc6168192004-11-29 13:54:10 +0000474struct vki_user_regs_struct {
475 unsigned long r15,r14,r13,r12,rbp,rbx,r11,r10;
476 unsigned long r9,r8,rax,rcx,rdx,rsi,rdi,orig_rax;
477 unsigned long rip,cs,eflags;
478 unsigned long rsp,ss;
479 unsigned long fs_base, gs_base;
480 unsigned long ds,es,fs,gs;
481};
482
483//----------------------------------------------------------------------
484// From linux-2.6.9/include/asm-x86_64/elf.h
485//----------------------------------------------------------------------
486
487typedef unsigned long vki_elf_greg_t;
488
489#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
490typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
491
tomf4c23102005-10-31 17:05:21 +0000492typedef struct vki_user_i387_struct vki_elf_fpregset_t;
493
njnc6168192004-11-29 13:54:10 +0000494//----------------------------------------------------------------------
495// From linux-2.6.9/include/asm-x86_64/ucontext.h
496//----------------------------------------------------------------------
497
498struct vki_ucontext {
499 unsigned long uc_flags;
500 struct vki_ucontext *uc_link;
501 vki_stack_t uc_stack;
502 struct vki_sigcontext uc_mcontext;
503 vki_sigset_t uc_sigmask; /* mask last for extensibility */
504};
505
506//----------------------------------------------------------------------
507// From linux-2.6.9/include/asm-x86_64/segment.h
508//----------------------------------------------------------------------
509
510#define VKI_GDT_ENTRY_TLS_ENTRIES 3
511
512#define VKI_GDT_ENTRY_TLS_MIN 11
513#define VKI_GDT_ENTRY_TLS_MAX 13
514
tomf5e7ee22005-06-13 08:46:57 +0000515//----------------------------------------------------------------------
516// From linux-2.6.11.9/include/asm-x86_64/prctl.h
517//----------------------------------------------------------------------
518
sewardjf25e9022005-06-09 14:17:47 +0000519#define VKI_ARCH_SET_GS 0x1001
520#define VKI_ARCH_SET_FS 0x1002
521#define VKI_ARCH_GET_FS 0x1003
522#define VKI_ARCH_GET_GS 0x1004
523
njnc6168192004-11-29 13:54:10 +0000524//----------------------------------------------------------------------
525// From linux-2.6.9/include/asm-x86_64/ldt.h
526//----------------------------------------------------------------------
527
528// I think this LDT stuff will have to be reinstated for amd64, but I'm not
njna22a93a2004-11-29 17:28:41 +0000529// certain. (Nb: The sys_arch_prctl seems to have replaced
530// [gs]et_thread_area syscalls.)
531//
532// Note that the type here is very slightly different to the
njnc6168192004-11-29 13:54:10 +0000533// type for x86 (the final 'lm' field is added); I'm not sure about the
534// significance of that... --njn
535
536#if 0
537/* [[Nb: This is the structure passed to the modify_ldt syscall. Just so as
538 to confuse and annoy everyone, this is _not_ the same as an
539 VgLdtEntry and has to be translated into such. The logic for doing
540 so, in vg_ldt.c, is copied from the kernel sources.]] */
541struct vki_user_desc {
542 unsigned int entry_number;
543 unsigned long base_addr;
544 unsigned int limit;
545 unsigned int seg_32bit:1;
546 unsigned int contents:2;
547 unsigned int read_exec_only:1;
548 unsigned int limit_in_pages:1;
549 unsigned int seg_not_present:1;
550 unsigned int useable:1;
551 unsigned int lm:1;
552};
553
554// [[Nb: for our convenience within Valgrind, use a more specific name]]
555typedef struct vki_user_desc vki_modify_ldt_t;
556#endif
557
sewardj4d89e302005-03-16 22:04:40 +0000558typedef void vki_modify_ldt_t;
559
njnc6168192004-11-29 13:54:10 +0000560//----------------------------------------------------------------------
sewardjb369c5e2005-03-24 17:52:02 +0000561// From linux-2.6.11.2/include/asm-x86_64/ipcbuf.h
562//----------------------------------------------------------------------
563
564struct vki_ipc64_perm
565{
566 __vki_kernel_key_t key;
567 __vki_kernel_uid32_t uid;
568 __vki_kernel_gid32_t gid;
569 __vki_kernel_uid32_t cuid;
570 __vki_kernel_gid32_t cgid;
571 __vki_kernel_mode_t mode;
572 unsigned short __pad1;
573 unsigned short seq;
574 unsigned short __pad2;
575 unsigned long __unused1;
576 unsigned long __unused2;
577};
578
579//----------------------------------------------------------------------
580// From linux-2.6.11.2/include/asm-x86_64/sembuf.h
581//----------------------------------------------------------------------
582
583struct vki_semid64_ds {
584 struct vki_ipc64_perm sem_perm; /* permissions .. see ipc.h */
585 __vki_kernel_time_t sem_otime; /* last semop time */
586 unsigned long __unused1;
587 __vki_kernel_time_t sem_ctime; /* last change time */
588 unsigned long __unused2;
589 unsigned long sem_nsems; /* no. of semaphores in array */
590 unsigned long __unused3;
591 unsigned long __unused4;
592};
593
594//----------------------------------------------------------------------
595// From linux-2.6.11.2/include/asm-x86_64/msgbuf.h
596//----------------------------------------------------------------------
597
598struct vki_msqid64_ds {
599 struct vki_ipc64_perm msg_perm;
600 __vki_kernel_time_t msg_stime; /* last msgsnd time */
601 __vki_kernel_time_t msg_rtime; /* last msgrcv time */
602 __vki_kernel_time_t msg_ctime; /* last change time */
603 unsigned long msg_cbytes; /* current number of bytes on queue */
604 unsigned long msg_qnum; /* number of messages in queue */
605 unsigned long msg_qbytes; /* max number of bytes on queue */
606 __vki_kernel_pid_t msg_lspid; /* pid of last msgsnd */
607 __vki_kernel_pid_t msg_lrpid; /* last receive pid */
608 unsigned long __unused4;
609 unsigned long __unused5;
610};
611
612//----------------------------------------------------------------------
613// From linux-2.6.11.2/include/asm-x86_64/shmbuf.h
614//----------------------------------------------------------------------
615
616struct vki_shmid64_ds {
617 struct vki_ipc64_perm shm_perm; /* operation perms */
618 vki_size_t shm_segsz; /* size of segment (bytes) */
619 __vki_kernel_time_t shm_atime; /* last attach time */
620 __vki_kernel_time_t shm_dtime; /* last detach time */
621 __vki_kernel_time_t shm_ctime; /* last change time */
622 __vki_kernel_pid_t shm_cpid; /* pid of creator */
623 __vki_kernel_pid_t shm_lpid; /* pid of last operator */
624 unsigned long shm_nattch; /* no. of current attaches */
625 unsigned long __unused4;
626 unsigned long __unused5;
627};
628
629struct vki_shminfo64 {
630 unsigned long shmmax;
631 unsigned long shmmin;
632 unsigned long shmmni;
633 unsigned long shmseg;
634 unsigned long shmall;
635 unsigned long __unused1;
636 unsigned long __unused2;
637 unsigned long __unused3;
638 unsigned long __unused4;
639};
640
641//----------------------------------------------------------------------
tom2af58f22005-07-22 15:04:14 +0000642// From linux-2.6.12.2/include/asm-x86_64/ptrace.h
643//----------------------------------------------------------------------
644
645#define VKI_PTRACE_GETREGS 12
646#define VKI_PTRACE_SETREGS 13
647#define VKI_PTRACE_GETFPREGS 14
648#define VKI_PTRACE_SETFPREGS 15
649
650//----------------------------------------------------------------------
njnc6168192004-11-29 13:54:10 +0000651// And that's it!
652//----------------------------------------------------------------------
653
njn4de47b12005-05-16 03:25:12 +0000654#endif // __VKI_AMD64_LINUX_H
njnc6168192004-11-29 13:54:10 +0000655
656/*--------------------------------------------------------------------*/
657/*--- end ---*/
658/*--------------------------------------------------------------------*/