Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:32:48

0001 
0002 /*--------------------------------------------------------------------*/
0003 /*--- AMD64/Linux-specific kernel interface.     vki-amd64-linux.h ---*/
0004 /*--------------------------------------------------------------------*/
0005 
0006 /*
0007    This file is part of Valgrind, a dynamic binary instrumentation
0008    framework.
0009 
0010    Copyright (C) 2000-2017 Julian Seward 
0011       jseward@acm.org
0012 
0013    This program is free software; you can redistribute it and/or
0014    modify it under the terms of the GNU General Public License as
0015    published by the Free Software Foundation; either version 2 of the
0016    License, or (at your option) any later version.
0017 
0018    This program is distributed in the hope that it will be useful, but
0019    WITHOUT ANY WARRANTY; without even the implied warranty of
0020    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0021    General Public License for more details.
0022 
0023    You should have received a copy of the GNU General Public License
0024    along with this program; if not, see <http://www.gnu.org/licenses/>.
0025 
0026    The GNU General Public License is contained in the file COPYING.
0027 */
0028 
0029 #ifndef __VKI_AMD64_LINUX_H
0030 #define __VKI_AMD64_LINUX_H
0031 
0032 // AMD64 is little-endian.
0033 #define VKI_LITTLE_ENDIAN  1
0034 
0035 //----------------------------------------------------------------------
0036 // From linux-2.6.9/include/asm-x86_64/types.h
0037 //----------------------------------------------------------------------
0038 
0039 typedef unsigned char __vki_u8;
0040 
0041 typedef __signed__ short __vki_s16;
0042 typedef unsigned short __vki_u16;
0043 
0044 typedef __signed__ int __vki_s32;
0045 typedef unsigned int __vki_u32;
0046 
0047 typedef __signed__ long long __vki_s64;
0048 typedef unsigned long long __vki_u64;
0049 
0050 typedef unsigned short vki_u16;
0051 
0052 typedef unsigned int vki_u32;
0053 
0054 //----------------------------------------------------------------------
0055 // From linux-2.6.9/include/asm-x86_64/page.h
0056 //----------------------------------------------------------------------
0057 
0058 #define VKI_PAGE_SHIFT  12
0059 #define VKI_PAGE_SIZE   (1UL << VKI_PAGE_SHIFT)
0060 #define VKI_MAX_PAGE_SHIFT  VKI_PAGE_SHIFT
0061 #define VKI_MAX_PAGE_SIZE   VKI_PAGE_SIZE
0062 
0063 //----------------------------------------------------------------------
0064 // From linux-2.6.35.4/arch/x86/include/asm/shmparam.h
0065 //----------------------------------------------------------------------
0066 
0067 #define VKI_SHMLBA  VKI_PAGE_SIZE
0068 
0069 //----------------------------------------------------------------------
0070 // From linux-2.6.9/include/asm-x86_64/signal.h
0071 //----------------------------------------------------------------------
0072 
0073 #define _VKI_NSIG   64
0074 #define _VKI_NSIG_BPW   64
0075 #define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
0076 
0077 typedef unsigned long vki_old_sigset_t;     /* at least 32 bits */
0078 
0079 typedef struct {
0080     unsigned long sig[_VKI_NSIG_WORDS];
0081 } vki_sigset_t;
0082 
0083 #define VKI_SIGHUP       1
0084 #define VKI_SIGINT       2
0085 #define VKI_SIGQUIT      3
0086 #define VKI_SIGILL       4
0087 #define VKI_SIGTRAP      5
0088 #define VKI_SIGABRT      6
0089 #define VKI_SIGBUS       7
0090 #define VKI_SIGFPE       8
0091 #define VKI_SIGKILL      9
0092 #define VKI_SIGUSR1     10
0093 #define VKI_SIGSEGV     11
0094 #define VKI_SIGUSR2     12
0095 #define VKI_SIGPIPE     13
0096 #define VKI_SIGALRM     14
0097 #define VKI_SIGTERM     15
0098 #define VKI_SIGSTKFLT       16
0099 #define VKI_SIGCHLD     17
0100 #define VKI_SIGCONT     18
0101 #define VKI_SIGSTOP     19
0102 #define VKI_SIGTSTP     20
0103 #define VKI_SIGTTIN     21
0104 #define VKI_SIGTTOU     22
0105 #define VKI_SIGURG      23
0106 #define VKI_SIGXCPU     24
0107 #define VKI_SIGXFSZ     25
0108 #define VKI_SIGVTALRM       26
0109 #define VKI_SIGPROF     27
0110 #define VKI_SIGWINCH        28
0111 #define VKI_SIGIO       29
0112 #define VKI_SIGPWR      30
0113 #define VKI_SIGSYS      31
0114 #define VKI_SIGUNUSED       31
0115 
0116 #define VKI_SIGRTMIN        32
0117 #define VKI_SIGRTMAX        _VKI_NSIG
0118 
0119 #define VKI_SA_NOCLDSTOP    0x00000001
0120 #define VKI_SA_NOCLDWAIT    0x00000002
0121 #define VKI_SA_SIGINFO      0x00000004
0122 #define VKI_SA_ONSTACK      0x08000000
0123 #define VKI_SA_RESTART      0x10000000
0124 #define VKI_SA_NODEFER      0x40000000
0125 #define VKI_SA_RESETHAND    0x80000000
0126 
0127 #define VKI_SA_NOMASK   VKI_SA_NODEFER
0128 #define VKI_SA_ONESHOT  VKI_SA_RESETHAND
0129 
0130 #define VKI_SA_RESTORER 0x04000000
0131 
0132 #define VKI_SS_ONSTACK  1
0133 #define VKI_SS_DISABLE  2
0134 
0135 #define VKI_MINSIGSTKSZ 2048
0136 
0137 #define VKI_SIG_BLOCK          0    /* for blocking signals */
0138 #define VKI_SIG_UNBLOCK        1    /* for unblocking signals */
0139 #define VKI_SIG_SETMASK        2    /* for setting the signal mask */
0140 
0141 typedef void __vki_signalfn_t(int);
0142 typedef __vki_signalfn_t __user *__vki_sighandler_t;
0143 
0144 typedef void __vki_restorefn_t(void);
0145 typedef __vki_restorefn_t __user *__vki_sigrestore_t;
0146 
0147 #define VKI_SIG_DFL ((__vki_sighandler_t)0) /* default signal handling */
0148 #define VKI_SIG_IGN ((__vki_sighandler_t)1) /* ignore signal */
0149 
0150 struct vki_sigaction_base {
0151         // [[Nb: a 'k' prefix is added to "sa_handler" because
0152         // bits/sigaction.h (which gets dragged in somehow via signal.h)
0153         // #defines it as something else.  Since that is done for glibc's
0154         // purposes, which we don't care about here, we use our own name.]]
0155     __vki_sighandler_t ksa_handler;
0156     unsigned long sa_flags;
0157     __vki_sigrestore_t sa_restorer;
0158     vki_sigset_t sa_mask;       /* mask last for extensibility */
0159 };
0160 
0161 /* On Linux we use the same type for passing sigactions to
0162    and from the kernel.  Hence: */
0163 typedef  struct vki_sigaction_base  vki_sigaction_toK_t;
0164 typedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
0165 
0166 
0167 typedef struct vki_sigaltstack {
0168     void __user *ss_sp;
0169     int ss_flags;
0170     vki_size_t ss_size;
0171 } vki_stack_t;
0172 
0173 //----------------------------------------------------------------------
0174 // From linux-2.6.9/include/asm-x86_64/sigcontext.h
0175 //----------------------------------------------------------------------
0176 
0177 struct _vki_fpstate {
0178     __vki_u16   cwd;
0179     __vki_u16   swd;
0180     __vki_u16   twd;    /* Note this is not the same as the 32bit/x87/FSAVE twd */
0181     __vki_u16   fop;
0182     __vki_u64   rip;
0183     __vki_u64   rdp; 
0184     __vki_u32   mxcsr;
0185     __vki_u32   mxcsr_mask;
0186     __vki_u32   st_space[32];   /* 8*16 bytes for each FP-reg */
0187     __vki_u32   xmm_space[64];  /* 16*16 bytes for each XMM-reg  */
0188     __vki_u32   reserved2[24];
0189 };
0190 
0191 struct vki_sigcontext { 
0192     unsigned long r8;
0193     unsigned long r9;
0194     unsigned long r10;
0195     unsigned long r11;
0196     unsigned long r12;
0197     unsigned long r13;
0198     unsigned long r14;
0199     unsigned long r15;
0200     unsigned long rdi;
0201     unsigned long rsi;
0202     unsigned long rbp;
0203     unsigned long rbx;
0204     unsigned long rdx;
0205     unsigned long rax;
0206     unsigned long rcx;
0207     unsigned long rsp;
0208     unsigned long rip;
0209     unsigned long eflags;       /* RFLAGS */
0210     unsigned short cs;
0211     unsigned short gs;
0212     unsigned short fs;
0213     unsigned short __pad0; 
0214     unsigned long err;
0215     unsigned long trapno;
0216     unsigned long oldmask;
0217     unsigned long cr2;
0218     struct _vki_fpstate __user *fpstate;    /* zero when no FPU context */
0219     unsigned long reserved1[8];
0220 };
0221 
0222 //----------------------------------------------------------------------
0223 // From linux-2.6.9/include/asm-x86_64/mman.h
0224 //----------------------------------------------------------------------
0225 
0226 #define VKI_PROT_READ   0x1     /* page can be read */
0227 #define VKI_PROT_WRITE  0x2     /* page can be written */
0228 #define VKI_PROT_EXEC   0x4     /* page can be executed */
0229 #define VKI_PROT_NONE   0x0     /* page can not be accessed */
0230 #define VKI_PROT_GROWSDOWN  0x01000000  /* mprotect flag: extend change to start of growsdown vma */
0231 #define VKI_PROT_GROWSUP    0x02000000  /* mprotect flag: extend change to end of growsup vma */
0232 
0233 #define VKI_MAP_SHARED  0x01        /* Share changes */
0234 #define VKI_MAP_PRIVATE 0x02        /* Changes are private */
0235 #define VKI_MAP_FIXED   0x10        /* Interpret addr exactly */
0236 #define VKI_MAP_ANONYMOUS   0x20    /* don't use a file */
0237 #define VKI_MAP_32BIT   0x40        /* only give out 32bit addresses */
0238 #define VKI_MAP_NORESERVE       0x4000  /* don't check for reservations */
0239 
0240 //----------------------------------------------------------------------
0241 // From linux-2.6.9/include/asm-x86_64/fcntl.h
0242 //----------------------------------------------------------------------
0243 
0244 #define VKI_O_ACCMODE        03
0245 #define VKI_O_RDONLY         00
0246 #define VKI_O_WRONLY         01
0247 #define VKI_O_RDWR       02
0248 #define VKI_O_CREAT    0100 /* not fcntl */
0249 #define VKI_O_EXCL     0200 /* not fcntl */
0250 #define VKI_O_TRUNC   01000 /* not fcntl */
0251 #define VKI_O_APPEND      02000
0252 #define VKI_O_NONBLOCK    04000
0253 #define VKI_O_DIRECT     040000
0254 #define VKI_O_LARGEFILE 0100000
0255 
0256 #define VKI_AT_FDCWD            -100
0257 
0258 #define VKI_F_DUPFD     0   /* dup */
0259 #define VKI_F_GETFD     1   /* get close_on_exec */
0260 #define VKI_F_SETFD     2   /* set/clear close_on_exec */
0261 #define VKI_F_GETFL     3   /* get file->f_flags */
0262 #define VKI_F_SETFL     4   /* set file->f_flags */
0263 #define VKI_F_GETLK     5
0264 #define VKI_F_SETLK     6
0265 #define VKI_F_SETLKW        7
0266 
0267 #define VKI_F_SETOWN        8   /*  for sockets. */
0268 #define VKI_F_GETOWN        9   /*  for sockets. */
0269 #define VKI_F_SETSIG        10  /*  for sockets. */
0270 #define VKI_F_GETSIG        11  /*  for sockets. */
0271 
0272 #define VKI_F_SETOWN_EX     15
0273 #define VKI_F_GETOWN_EX     16
0274 
0275 #define VKI_F_OFD_GETLK     36
0276 #define VKI_F_OFD_SETLK     37
0277 #define VKI_F_OFD_SETLKW    38
0278 
0279 #define VKI_F_OWNER_TID     0
0280 #define VKI_F_OWNER_PID     1
0281 #define VKI_F_OWNER_PGRP    2
0282 
0283 struct vki_f_owner_ex {
0284     int type;
0285     __vki_kernel_pid_t  pid;
0286 };
0287 
0288 #define VKI_FD_CLOEXEC  1   /* actually anything with low bit set goes */
0289 
0290 #define VKI_F_LINUX_SPECIFIC_BASE   1024
0291 
0292 //----------------------------------------------------------------------
0293 // From linux-2.6.9/include/asm-x86_64/resource.h
0294 //----------------------------------------------------------------------
0295 
0296 #define VKI_RLIMIT_DATA     2   /* max data size */
0297 #define VKI_RLIMIT_STACK    3   /* max stack size */
0298 #define VKI_RLIMIT_CORE     4   /* max core file size */
0299 #define VKI_RLIMIT_NOFILE   7   /* max number of open files */
0300 
0301 //----------------------------------------------------------------------
0302 // From linux-5.0.0/arch/x86/include/uapi/asm/siginfo.h
0303 //----------------------------------------------------------------------
0304 
0305 /* We need that to ensure that sizeof(siginfo) == 128. */
0306 #ifdef __x86_64__
0307 # ifdef __ILP32__
0308 typedef long long __vki_kernel_si_clock_t __attribute__((aligned(4)));
0309 #  define __VKI_ARCH_SI_CLOCK_T             __vki_kernel_si_clock_t
0310 #  define __VKI_ARCH_SI_ATTRIBUTES          __attribute__((aligned(8)))
0311 # else
0312 #  define __VKI_ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
0313 # endif
0314 #endif
0315 
0316 //----------------------------------------------------------------------
0317 // From linux-2.6.9/include/asm-x86_64/socket.h
0318 //----------------------------------------------------------------------
0319 
0320 #define VKI_SOL_SOCKET  1
0321 
0322 #define VKI_SO_TYPE 3
0323 
0324 #define VKI_SO_ATTACH_FILTER    26
0325 
0326 //----------------------------------------------------------------------
0327 // From linux-2.6.9/include/asm-x86_64/sockios.h
0328 //----------------------------------------------------------------------
0329 
0330 #define VKI_SIOCSPGRP       0x8902
0331 #define VKI_SIOCGPGRP       0x8904
0332 #define VKI_SIOCATMARK      0x8905
0333 #define VKI_SIOCGSTAMP      0x8906      /* Get stamp (timeval) */
0334 #define VKI_SIOCGSTAMPNS    0x8907      /* Get stamp (timespec) */
0335 
0336 //----------------------------------------------------------------------
0337 // From linux-2.6.9/include/asm-x86_64/stat.h
0338 //----------------------------------------------------------------------
0339 
0340 struct vki_stat {
0341     unsigned long   st_dev;
0342     unsigned long   st_ino;
0343     unsigned long   st_nlink;
0344 
0345     unsigned int    st_mode;
0346     unsigned int    st_uid;
0347     unsigned int    st_gid;
0348     unsigned int    __pad0;
0349     unsigned long   st_rdev;
0350     long        st_size;
0351     long        st_blksize;
0352     long        st_blocks;  /* Number 512-byte blocks allocated. */
0353 
0354     unsigned long   st_atime;
0355     unsigned long   st_atime_nsec; 
0356     unsigned long   st_mtime;
0357     unsigned long   st_mtime_nsec;
0358     unsigned long   st_ctime;
0359     unsigned long   st_ctime_nsec;
0360     long        __unused0[3];
0361 };
0362 
0363 //----------------------------------------------------------------------
0364 // From linux-2.6.9/include/asm-x86_64/statfs.h
0365 //----------------------------------------------------------------------
0366 
0367 struct vki_statfs {
0368     long f_type;
0369     long f_bsize;
0370     long f_blocks;
0371     long f_bfree;
0372     long f_bavail;
0373     long f_files;
0374     long f_ffree;
0375     __vki_kernel_fsid_t f_fsid;
0376     long f_namelen;
0377     long f_frsize;
0378         long f_flags;
0379         long f_spare[4];
0380 };
0381 
0382 //----------------------------------------------------------------------
0383 // From bits/statfs.h
0384 //----------------------------------------------------------------------
0385 
0386 struct vki_statfs64
0387 {
0388    long f_type;
0389    long f_bsize;
0390    unsigned long f_blocks;
0391    unsigned long f_bfree;
0392    unsigned long f_bavail;
0393    unsigned long f_files;
0394    unsigned long f_ffree;
0395    __vki_kernel_fsid_t f_fsid;
0396    long f_namelen;
0397    long f_frsize;
0398    long f_flags;
0399    long f_spare[4];
0400 };
0401 
0402 //----------------------------------------------------------------------
0403 // From linux-2.6.9/include/asm-x86_64/termios.h
0404 //----------------------------------------------------------------------
0405 
0406 struct vki_winsize {
0407     unsigned short ws_row;
0408     unsigned short ws_col;
0409     unsigned short ws_xpixel;
0410     unsigned short ws_ypixel;
0411 };
0412 
0413 #define VKI_NCC 8
0414 struct vki_termio {
0415     unsigned short c_iflag;     /* input mode flags */
0416     unsigned short c_oflag;     /* output mode flags */
0417     unsigned short c_cflag;     /* control mode flags */
0418     unsigned short c_lflag;     /* local mode flags */
0419     unsigned char c_line;       /* line discipline */
0420     unsigned char c_cc[VKI_NCC];    /* control characters */
0421 };
0422 
0423 //----------------------------------------------------------------------
0424 // From linux-2.6.9/include/asm-x86_64/termbits.h
0425 //----------------------------------------------------------------------
0426 
0427 typedef unsigned char   vki_cc_t;
0428 typedef unsigned int    vki_tcflag_t;
0429 
0430 #define VKI_NCCS 19
0431 struct vki_termios {
0432     vki_tcflag_t c_iflag;       /* input mode flags */
0433     vki_tcflag_t c_oflag;       /* output mode flags */
0434     vki_tcflag_t c_cflag;       /* control mode flags */
0435     vki_tcflag_t c_lflag;       /* local mode flags */
0436     vki_cc_t c_line;        /* line discipline */
0437     vki_cc_t c_cc[VKI_NCCS];    /* control characters */
0438 };
0439 
0440 
0441 //----------------------------------------------------------------------
0442 // From linux-2.6.9/include/asm-x86_64/ioctl.h
0443 //----------------------------------------------------------------------
0444 
0445 #define _VKI_IOC_NRBITS     8
0446 #define _VKI_IOC_TYPEBITS   8
0447 #define _VKI_IOC_SIZEBITS   14
0448 #define _VKI_IOC_DIRBITS    2
0449 
0450 #define _VKI_IOC_SIZEMASK   ((1 << _VKI_IOC_SIZEBITS)-1)
0451 #define _VKI_IOC_DIRMASK    ((1 << _VKI_IOC_DIRBITS)-1)
0452 
0453 #define _VKI_IOC_NRSHIFT    0
0454 #define _VKI_IOC_TYPESHIFT  (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
0455 #define _VKI_IOC_SIZESHIFT  (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
0456 #define _VKI_IOC_DIRSHIFT   (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
0457 
0458 #define _VKI_IOC_NONE   0U
0459 #define _VKI_IOC_WRITE  1U
0460 #define _VKI_IOC_READ   2U
0461 
0462 #define _VKI_IOC(dir,type,nr,size) \
0463     (((dir)  << _VKI_IOC_DIRSHIFT) | \
0464      ((type) << _VKI_IOC_TYPESHIFT) | \
0465      ((nr)   << _VKI_IOC_NRSHIFT) | \
0466      ((size) << _VKI_IOC_SIZESHIFT))
0467 
0468 #define _VKI_IO(type,nr)        _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
0469 #define _VKI_IOR(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr),sizeof(size))
0470 #define _VKI_IOW(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),sizeof(size))
0471 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),sizeof(size))
0472 
0473 #define _VKI_IOC_DIR(nr)        (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
0474 #define _VKI_IOC_SIZE(nr)       (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
0475 
0476 //----------------------------------------------------------------------
0477 // From linux-2.6.9/include/asm-x86_64/ioctls.h
0478 //----------------------------------------------------------------------
0479 
0480 #define VKI_TCGETS  0x5401
0481 #define VKI_TCSETS  0x5402
0482 #define VKI_TCSETSW 0x5403
0483 #define VKI_TCSETSF 0x5404
0484 #define VKI_TCGETA  0x5405
0485 #define VKI_TCSETA  0x5406
0486 #define VKI_TCSETAW 0x5407
0487 #define VKI_TCSETAF 0x5408
0488 #define VKI_TCSBRK  0x5409
0489 #define VKI_TCXONC  0x540A
0490 #define VKI_TCFLSH  0x540B
0491 #define VKI_TIOCSCTTY   0x540E
0492 #define VKI_TIOCGPGRP   0x540F
0493 #define VKI_TIOCSPGRP   0x5410
0494 #define VKI_TIOCOUTQ    0x5411
0495 #define VKI_TIOCGWINSZ  0x5413
0496 #define VKI_TIOCSWINSZ  0x5414
0497 #define VKI_TIOCMGET    0x5415
0498 #define VKI_TIOCMBIS    0x5416
0499 #define VKI_TIOCMBIC    0x5417
0500 #define VKI_TIOCMSET    0x5418
0501 #define VKI_FIONREAD    0x541B
0502 #define VKI_TIOCLINUX   0x541C
0503 #define VKI_FIONBIO 0x5421
0504 #define VKI_TIOCNOTTY   0x5422
0505 #define VKI_TCSBRKP 0x5425  /* Needed for POSIX tcsendbreak() */
0506 #define VKI_TIOCGPTN    _VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
0507 #define VKI_TIOCSPTLCK  _VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
0508 
0509 #define VKI_FIONCLEX    0x5450
0510 #define VKI_FIOCLEX     0x5451
0511 #define VKI_FIOASYNC    0x5452
0512 #define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
0513 
0514 #define VKI_TIOCGICOUNT 0x545D  /* read serial port inline interrupt counts */
0515 
0516 //----------------------------------------------------------------------
0517 // From linux-2.6.9/include/asm-x86_64/poll.h
0518 //----------------------------------------------------------------------
0519 
0520 #define VKI_POLLIN      0x0001
0521 
0522 struct vki_pollfd {
0523     int fd;
0524     short events;
0525     short revents;
0526 };
0527 
0528 //----------------------------------------------------------------------
0529 // From linux-2.6.9/include/asm-x86_64/user.h
0530 //----------------------------------------------------------------------
0531 
0532 struct vki_user_i387_struct {
0533     unsigned short  cwd;
0534     unsigned short  swd;
0535     unsigned short  twd; /* Note this is not the same as the 32bit/x87/FSAVE twd */
0536     unsigned short  fop;
0537     __vki_u64   rip;
0538     __vki_u64   rdp;
0539     __vki_u32   mxcsr;
0540     __vki_u32   mxcsr_mask;
0541     __vki_u32   st_space[32];   /* 8*16 bytes for each FP-reg = 128 bytes */
0542     __vki_u32   xmm_space[64];  /* 16*16 bytes for each XMM-reg = 256 bytes */
0543     __vki_u32   padding[24];
0544 };
0545 
0546 struct vki_user_regs_struct {
0547     unsigned long r15,r14,r13,r12,rbp,rbx,r11,r10;
0548     unsigned long r9,r8,rax,rcx,rdx,rsi,rdi,orig_rax;
0549     unsigned long rip,cs,eflags;
0550     unsigned long rsp,ss;
0551     unsigned long fs_base, gs_base;
0552     unsigned long ds,es,fs,gs; 
0553 }; 
0554 
0555 //----------------------------------------------------------------------
0556 // From linux-2.6.9/include/asm-x86_64/elf.h
0557 //----------------------------------------------------------------------
0558 
0559 typedef unsigned long vki_elf_greg_t;
0560 
0561 #define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
0562 typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
0563 
0564 typedef struct vki_user_i387_struct vki_elf_fpregset_t;
0565 
0566 //----------------------------------------------------------------------
0567 // From linux-2.6.9/include/asm-x86_64/ucontext.h
0568 //----------------------------------------------------------------------
0569 
0570 struct vki_ucontext {
0571     unsigned long       uc_flags;
0572     struct vki_ucontext    *uc_link;
0573     vki_stack_t     uc_stack;
0574     struct vki_sigcontext   uc_mcontext;
0575     vki_sigset_t        uc_sigmask; /* mask last for extensibility */
0576 };
0577 
0578 //----------------------------------------------------------------------
0579 // From linux-2.6.9/include/asm-x86_64/segment.h
0580 //----------------------------------------------------------------------
0581 
0582 #define VKI_GDT_ENTRY_TLS_ENTRIES 3
0583 
0584 #define VKI_GDT_ENTRY_TLS_MIN 11
0585 #define VKI_GDT_ENTRY_TLS_MAX 13
0586 
0587 //----------------------------------------------------------------------
0588 // From linux-2.6.11.9/include/asm-x86_64/prctl.h
0589 //----------------------------------------------------------------------
0590 
0591 #define VKI_ARCH_SET_GS 0x1001
0592 #define VKI_ARCH_SET_FS 0x1002
0593 #define VKI_ARCH_GET_FS 0x1003
0594 #define VKI_ARCH_GET_GS 0x1004
0595 
0596 //----------------------------------------------------------------------
0597 // Originally from linux-2.6.9/include/asm-x86_64/ldt.h
0598 //----------------------------------------------------------------------
0599 
0600 // Note that the type here is very slightly different to the
0601 // type for x86 (the final 'lm' field is added).
0602 /* The explanation is: the final bit is not present in 32 bit code running
0603    on 64 bits kernel. The kernel has to assume this value is 0 whenever
0604    user_desc arrives from a 32-bit program.
0605    See /usr/include/asm/ldt.h. */
0606 
0607 /* [[Nb: This is the structure passed to the modify_ldt syscall.  Just so as
0608    to confuse and annoy everyone, this is _not_ the same as an
0609    VgLdtEntry and has to be translated into such.  The logic for doing
0610    so, in vg_ldt.c, is copied from the kernel sources.]] */
0611 /* Note also that a comment in ldt.h indicates that the below
0612    contains several fields ignored on 64bit, and that modify_ldt
0613    is rather for 32bit. */
0614 struct vki_user_desc {
0615     unsigned int  entry_number;
0616     unsigned int  base_addr;
0617     unsigned int  limit;
0618     unsigned int  seg_32bit:1;
0619     unsigned int  contents:2;
0620     unsigned int  read_exec_only:1;
0621     unsigned int  limit_in_pages:1;
0622     unsigned int  seg_not_present:1;
0623     unsigned int  useable:1;
0624         unsigned int  lm:1;
0625 };
0626 
0627 // [[Nb: for our convenience within Valgrind, use a more specific name]]
0628 typedef struct vki_user_desc vki_modify_ldt_t;
0629 
0630 //----------------------------------------------------------------------
0631 // From linux-2.6.11.2/include/asm-x86_64/ipcbuf.h
0632 //----------------------------------------------------------------------
0633 
0634 struct vki_ipc64_perm
0635 {
0636     __vki_kernel_key_t  key;
0637     __vki_kernel_uid32_t    uid;
0638     __vki_kernel_gid32_t    gid;
0639     __vki_kernel_uid32_t    cuid;
0640     __vki_kernel_gid32_t    cgid;
0641     __vki_kernel_mode_t mode;
0642     unsigned short      __pad1;
0643     unsigned short      seq;
0644     unsigned short      __pad2;
0645     unsigned long       __unused1;
0646     unsigned long       __unused2;
0647 };
0648 
0649 //----------------------------------------------------------------------
0650 // From linux-2.6.11.2/include/asm-x86_64/sembuf.h
0651 //----------------------------------------------------------------------
0652 
0653 struct vki_semid64_ds {
0654     struct vki_ipc64_perm sem_perm;     /* permissions .. see ipc.h */
0655     __vki_kernel_time_t sem_otime;      /* last semop time */
0656     unsigned long   __unused1;
0657     __vki_kernel_time_t sem_ctime;      /* last change time */
0658     unsigned long   __unused2;
0659     unsigned long   sem_nsems;      /* no. of semaphores in array */
0660     unsigned long   __unused3;
0661     unsigned long   __unused4;
0662 };
0663 
0664 //----------------------------------------------------------------------
0665 // From linux-2.6.11.2/include/asm-x86_64/msgbuf.h
0666 //----------------------------------------------------------------------
0667 
0668 struct vki_msqid64_ds {
0669     struct vki_ipc64_perm msg_perm;
0670     __vki_kernel_time_t msg_stime;  /* last msgsnd time */
0671     __vki_kernel_time_t msg_rtime;  /* last msgrcv time */
0672     __vki_kernel_time_t msg_ctime;  /* last change time */
0673     unsigned long  msg_cbytes;  /* current number of bytes on queue */
0674     unsigned long  msg_qnum;    /* number of messages in queue */
0675     unsigned long  msg_qbytes;  /* max number of bytes on queue */
0676     __vki_kernel_pid_t msg_lspid;   /* pid of last msgsnd */
0677     __vki_kernel_pid_t msg_lrpid;   /* last receive pid */
0678     unsigned long  __unused4;
0679     unsigned long  __unused5;
0680 };
0681 
0682 //----------------------------------------------------------------------
0683 // From linux-2.6.11.2/include/asm-x86_64/shmbuf.h
0684 //----------------------------------------------------------------------
0685 
0686 struct vki_shmid64_ds {
0687     struct vki_ipc64_perm   shm_perm;   /* operation perms */
0688     vki_size_t      shm_segsz;  /* size of segment (bytes) */
0689     __vki_kernel_time_t shm_atime;  /* last attach time */
0690     __vki_kernel_time_t shm_dtime;  /* last detach time */
0691     __vki_kernel_time_t shm_ctime;  /* last change time */
0692     __vki_kernel_pid_t  shm_cpid;   /* pid of creator */
0693     __vki_kernel_pid_t  shm_lpid;   /* pid of last operator */
0694     unsigned long       shm_nattch; /* no. of current attaches */
0695     unsigned long       __unused4;
0696     unsigned long       __unused5;
0697 };
0698 
0699 struct vki_shminfo64 {
0700     unsigned long   shmmax;
0701     unsigned long   shmmin;
0702     unsigned long   shmmni;
0703     unsigned long   shmseg;
0704     unsigned long   shmall;
0705     unsigned long   __unused1;
0706     unsigned long   __unused2;
0707     unsigned long   __unused3;
0708     unsigned long   __unused4;
0709 };
0710 
0711 //----------------------------------------------------------------------
0712 // From linux-2.6.12.2/include/asm-x86_64/ptrace.h
0713 //----------------------------------------------------------------------
0714 
0715 #define VKI_PTRACE_GETREGS            12
0716 #define VKI_PTRACE_SETREGS            13
0717 #define VKI_PTRACE_GETFPREGS          14
0718 #define VKI_PTRACE_SETFPREGS          15
0719 
0720 // From /usr/include/asm/ptrace-abit.h
0721 /* only useful for access 32bit programs / kernels */
0722 #define VKI_PTRACE_GET_THREAD_AREA    25
0723 #define VKI_PTRACE_SET_THREAD_AREA    26
0724 
0725 //----------------------------------------------------------------------
0726 // From linux-2.6.8.1/include/asm-generic/errno.h
0727 //----------------------------------------------------------------------
0728 
0729 #define VKI_ENOSYS       38  /* Function not implemented */
0730 #define VKI_EOVERFLOW    75  /* Value too large for defined data type */
0731 
0732 //----------------------------------------------------------------------
0733 // From linux-3.19.0/include/uapi/asm-generic/ioctls.h
0734 //----------------------------------------------------------------------
0735 
0736 #define VKI_TIOCGSERIAL     0x541E
0737 #define VKI_TIOCSSERIAL     0x541F
0738 
0739 //----------------------------------------------------------------------
0740 // And that's it!
0741 //----------------------------------------------------------------------
0742 
0743 #endif // __VKI_AMD64_LINUX_H
0744 
0745 /*--------------------------------------------------------------------*/
0746 /*--- end                                                          ---*/
0747 /*--------------------------------------------------------------------*/