Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-01-07 10:24:21

0001 
0002 /*--------------------------------------------------------------------*/
0003 /*--- riscv64/Linux-specific kernel interface. vki-riscv64-linux.h ---*/
0004 /*--------------------------------------------------------------------*/
0005 
0006 /*
0007    This file is part of Valgrind, a dynamic binary instrumentation
0008    framework.
0009 
0010    Copyright (C) 2020-2023 Petr Pavlu
0011       petr.pavlu@dagobah.cz
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_RISCV64_LINUX_H
0030 #define __VKI_RISCV64_LINUX_H
0031 
0032 // riscv64 is little-endian.
0033 #define VKI_LITTLE_ENDIAN  1
0034 
0035 //----------------------------------------------------------------------
0036 // From linux-6.0/include/uapi/asm-generic/int-ll64.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-6.0/arch/riscv/include/asm/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-6.0/include/asm-generic/shmparam.h
0065 //----------------------------------------------------------------------
0066 
0067 #define VKI_SHMLBA VKI_PAGE_SIZE    /* attach addr a multiple of this */
0068 
0069 //----------------------------------------------------------------------
0070 // From linux-6.0/include/uapi/asm-generic/signal-defs.h
0071 //----------------------------------------------------------------------
0072 
0073 #define VKI_SIG_BLOCK          0    /* for blocking signals */
0074 #define VKI_SIG_UNBLOCK        1    /* for unblocking signals */
0075 #define VKI_SIG_SETMASK        2    /* for setting the signal mask */
0076 
0077 typedef void __vki_signalfn_t(int);
0078 typedef __vki_signalfn_t __user *__vki_sighandler_t;
0079 
0080 #define VKI_SIG_DFL ((__vki_sighandler_t)0) /* default signal handling */
0081 #define VKI_SIG_IGN ((__vki_sighandler_t)1) /* ignore signal */
0082 
0083 //----------------------------------------------------------------------
0084 // From linux-6.0/include/uapi/asm-generic/signal.h
0085 //----------------------------------------------------------------------
0086 
0087 #define _VKI_NSIG   64
0088 #define _VKI_NSIG_BPW   64
0089 #define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
0090 
0091 typedef unsigned long vki_old_sigset_t;
0092 
0093 typedef struct {
0094     unsigned long sig[_VKI_NSIG_WORDS];
0095 } vki_sigset_t;
0096 
0097 #define VKI_SIGHUP       1
0098 #define VKI_SIGINT       2
0099 #define VKI_SIGQUIT      3
0100 #define VKI_SIGILL       4
0101 #define VKI_SIGTRAP      5
0102 #define VKI_SIGABRT      6
0103 #define VKI_SIGBUS       7
0104 #define VKI_SIGFPE       8
0105 #define VKI_SIGKILL      9
0106 #define VKI_SIGUSR1     10
0107 #define VKI_SIGSEGV     11
0108 #define VKI_SIGUSR2     12
0109 #define VKI_SIGPIPE     13
0110 #define VKI_SIGALRM     14
0111 #define VKI_SIGTERM     15
0112 #define VKI_SIGSTKFLT       16
0113 #define VKI_SIGCHLD     17
0114 #define VKI_SIGCONT     18
0115 #define VKI_SIGSTOP     19
0116 #define VKI_SIGTSTP     20
0117 #define VKI_SIGTTIN     21
0118 #define VKI_SIGTTOU     22
0119 #define VKI_SIGURG      23
0120 #define VKI_SIGXCPU     24
0121 #define VKI_SIGXFSZ     25
0122 #define VKI_SIGVTALRM       26
0123 #define VKI_SIGPROF     27
0124 #define VKI_SIGWINCH        28
0125 #define VKI_SIGIO       29
0126 #define VKI_SIGPWR      30
0127 #define VKI_SIGSYS      31
0128 #define VKI_SIGUNUSED       31
0129 
0130 #define VKI_SIGRTMIN        32
0131 #define VKI_SIGRTMAX        _VKI_NSIG
0132 
0133 #define VKI_SA_NOCLDSTOP    0x00000001
0134 #define VKI_SA_NOCLDWAIT    0x00000002
0135 #define VKI_SA_SIGINFO      0x00000004
0136 #define VKI_SA_ONSTACK      0x08000000
0137 #define VKI_SA_RESTART      0x10000000
0138 #define VKI_SA_NODEFER      0x40000000
0139 #define VKI_SA_RESETHAND    0x80000000
0140 
0141 #define VKI_SA_NOMASK   VKI_SA_NODEFER
0142 #define VKI_SA_ONESHOT  VKI_SA_RESETHAND
0143 
0144 #define VKI_MINSIGSTKSZ 2048
0145 
0146 struct vki_sigaction_base {
0147     __vki_sighandler_t ksa_handler;
0148     unsigned long sa_flags;
0149     vki_sigset_t sa_mask;
0150 };
0151 
0152 /* On Linux we use the same type for passing sigactions to
0153    and from the kernel.  Hence: */
0154 typedef  struct vki_sigaction_base  vki_sigaction_toK_t;
0155 typedef  struct vki_sigaction_base  vki_sigaction_fromK_t;
0156 
0157 typedef struct vki_sigaltstack {
0158     void __user *ss_sp;
0159     int ss_flags;
0160     vki_size_t ss_size;
0161 } vki_stack_t;
0162 
0163 //----------------------------------------------------------------------
0164 // From linux-6.0/include/uapi/linux/signal.h
0165 //----------------------------------------------------------------------
0166 
0167 #define VKI_SS_ONSTACK  1
0168 #define VKI_SS_DISABLE  2
0169 
0170 //----------------------------------------------------------------------
0171 // From linux-6.0/include/uapi/asm-generic/mman-common.h
0172 //----------------------------------------------------------------------
0173 
0174 #define VKI_PROT_READ   0x1     /* page can be read */
0175 #define VKI_PROT_WRITE  0x2     /* page can be written */
0176 #define VKI_PROT_EXEC   0x4     /* page can be executed */
0177 #define VKI_PROT_NONE   0x0     /* page can not be accessed */
0178 #define VKI_PROT_GROWSDOWN  0x01000000  /* mprotect flag: extend change to start of growsdown vma */
0179 #define VKI_PROT_GROWSUP    0x02000000  /* mprotect flag: extend change to end of growsup vma */
0180 
0181 #define VKI_MAP_FIXED   0x10        /* Interpret addr exactly */
0182 #define VKI_MAP_ANONYMOUS   0x20    /* don't use a file */
0183 
0184 //----------------------------------------------------------------------
0185 // From linux-6.0/include/uapi/asm-generic/mman.h
0186 //----------------------------------------------------------------------
0187 
0188 #define VKI_MAP_NORESERVE       0x4000  /* don't check for reservations */
0189 
0190 //----------------------------------------------------------------------
0191 // From linux-6.0/include/uapi/linux/mman.h
0192 //----------------------------------------------------------------------
0193 
0194 #define VKI_MAP_SHARED  0x01        /* Share changes */
0195 #define VKI_MAP_PRIVATE 0x02        /* Changes are private */
0196 
0197 //----------------------------------------------------------------------
0198 // From linux-6.0/include/uapi/asm-generic/fcntl.h
0199 //----------------------------------------------------------------------
0200 
0201 #define VKI_O_ACCMODE        03
0202 #define VKI_O_RDONLY         00
0203 #define VKI_O_WRONLY         01
0204 #define VKI_O_RDWR       02
0205 #define VKI_O_CREAT    0100 /* not fcntl */
0206 #define VKI_O_EXCL     0200 /* not fcntl */
0207 #define VKI_O_TRUNC   01000 /* not fcntl */
0208 #define VKI_O_APPEND      02000
0209 #define VKI_O_NONBLOCK    04000
0210 #define VKI_O_LARGEFILE 0100000
0211 #define VKI_O_DIRECT   00040000
0212 
0213 #define VKI_F_DUPFD     0   /* dup */
0214 #define VKI_F_GETFD     1   /* get close_on_exec */
0215 #define VKI_F_SETFD     2   /* set/clear close_on_exec */
0216 #define VKI_F_GETFL     3   /* get file->f_flags */
0217 #define VKI_F_SETFL     4   /* set file->f_flags */
0218 #define VKI_F_GETLK     5
0219 #define VKI_F_SETLK     6
0220 #define VKI_F_SETLKW        7
0221 
0222 #define VKI_F_SETOWN        8   /*  for sockets. */
0223 #define VKI_F_GETOWN        9   /*  for sockets. */
0224 #define VKI_F_SETSIG        10  /*  for sockets. */
0225 #define VKI_F_GETSIG        11  /*  for sockets. */
0226 
0227 #define VKI_F_SETOWN_EX     15
0228 #define VKI_F_GETOWN_EX     16
0229 
0230 #define VKI_F_OFD_GETLK     36
0231 #define VKI_F_OFD_SETLK     37
0232 #define VKI_F_OFD_SETLKW    38
0233 
0234 struct vki_f_owner_ex {
0235     int type;
0236     __vki_kernel_pid_t  pid;
0237 };
0238 
0239 #define VKI_FD_CLOEXEC  1   /* actually anything with low bit set goes */
0240 
0241 #define VKI_F_LINUX_SPECIFIC_BASE   1024
0242 
0243 //----------------------------------------------------------------------
0244 // From linux-6.0/include/uapi/linux/fcntl.h
0245 //----------------------------------------------------------------------
0246 
0247 #define VKI_AT_FDCWD        -100
0248 
0249 //----------------------------------------------------------------------
0250 // From linux-6.0/include/uapi/asm-generic/resource.h
0251 //----------------------------------------------------------------------
0252 
0253 #define VKI_RLIMIT_DATA     2   /* max data size */
0254 #define VKI_RLIMIT_STACK    3   /* max stack size */
0255 #define VKI_RLIMIT_CORE     4   /* max core file size */
0256 #define VKI_RLIMIT_NOFILE   7   /* max number of open files */
0257 
0258 //----------------------------------------------------------------------
0259 // From linux-6.0/include/uapi/asm-generic/socket.h
0260 //----------------------------------------------------------------------
0261 
0262 #define VKI_SOL_SOCKET  1
0263 
0264 #define VKI_SO_TYPE 3
0265 
0266 #define VKI_SO_ATTACH_FILTER    26
0267 
0268 //----------------------------------------------------------------------
0269 // From linux-6.0/include/uapi/asm-generic/sockios.h
0270 //----------------------------------------------------------------------
0271 
0272 #define VKI_SIOCSPGRP       0x8902
0273 #define VKI_SIOCGPGRP       0x8904
0274 #define VKI_SIOCATMARK      0x8905
0275 #define VKI_SIOCGSTAMP      0x8906      /* Get stamp (timeval) */
0276 #define VKI_SIOCGSTAMPNS    0x8907      /* Get stamp (timespec) */
0277 
0278 //----------------------------------------------------------------------
0279 // From linux-6.0/include/uapi/asm-generic/stat.h
0280 //----------------------------------------------------------------------
0281 
0282 struct vki_stat {
0283     unsigned long   st_dev;     /* Device.  */
0284     unsigned long   st_ino;     /* File serial number.  */
0285     unsigned int    st_mode;    /* File mode.  */
0286     unsigned int    st_nlink;   /* Link count.  */
0287     unsigned int    st_uid;     /* User ID of the file's owner.  */
0288     unsigned int    st_gid;     /* Group ID of the file's group. */
0289     unsigned long   st_rdev;    /* Device number, if device.  */
0290     unsigned long   __pad1;
0291     long        st_size;    /* Size of file, in bytes.  */
0292     int     st_blksize; /* Optimal block size for I/O.  */
0293     int     __pad2;
0294     long        st_blocks;  /* Number 512-byte blocks allocated. */
0295     long        st_atime;   /* Time of last access.  */
0296     unsigned long   st_atime_nsec;
0297     long        st_mtime;   /* Time of last modification.  */
0298     unsigned long   st_mtime_nsec;
0299     long        st_ctime;   /* Time of last status change.  */
0300     unsigned long   st_ctime_nsec;
0301     unsigned int    __unused4;
0302     unsigned int    __unused5;
0303 };
0304 
0305 //----------------------------------------------------------------------
0306 // From linux-6.0/include/uapi/asm-generic/statfs.h
0307 //----------------------------------------------------------------------
0308 
0309 struct vki_statfs {
0310     long f_type;
0311     long f_bsize;
0312     long f_blocks;
0313     long f_bfree;
0314     long f_bavail;
0315     long f_files;
0316     long f_ffree;
0317     __vki_kernel_fsid_t f_fsid;
0318     long f_namelen;
0319     long f_frsize;
0320     long f_flags;
0321     long f_spare[4];
0322 };
0323 
0324 //----------------------------------------------------------------------
0325 // From linux-6.0/include/uapi/asm-generic/termios.h
0326 //----------------------------------------------------------------------
0327 
0328 struct vki_winsize {
0329     unsigned short ws_row;
0330     unsigned short ws_col;
0331     unsigned short ws_xpixel;
0332     unsigned short ws_ypixel;
0333 };
0334 
0335 #define VKI_NCC 8
0336 struct vki_termio {
0337     unsigned short c_iflag;     /* input mode flags */
0338     unsigned short c_oflag;     /* output mode flags */
0339     unsigned short c_cflag;     /* control mode flags */
0340     unsigned short c_lflag;     /* local mode flags */
0341     unsigned char c_line;       /* line discipline */
0342     unsigned char c_cc[VKI_NCC];    /* control characters */
0343 };
0344 
0345 //----------------------------------------------------------------------
0346 // From linux-6.0/include/uapi/asm-generic/termbits.h
0347 //----------------------------------------------------------------------
0348 
0349 typedef unsigned char   vki_cc_t;
0350 typedef unsigned int    vki_tcflag_t;
0351 
0352 #define VKI_NCCS 19
0353 struct vki_termios {
0354     vki_tcflag_t c_iflag;       /* input mode flags */
0355     vki_tcflag_t c_oflag;       /* output mode flags */
0356     vki_tcflag_t c_cflag;       /* control mode flags */
0357     vki_tcflag_t c_lflag;       /* local mode flags */
0358     vki_cc_t c_line;        /* line discipline */
0359     vki_cc_t c_cc[VKI_NCCS];    /* control characters */
0360 };
0361 
0362 //----------------------------------------------------------------------
0363 // From linux-6.0/include/uapi/asm-generic/ioctl.h
0364 //----------------------------------------------------------------------
0365 
0366 #define _VKI_IOC_NRBITS     8
0367 #define _VKI_IOC_TYPEBITS   8
0368 #define _VKI_IOC_SIZEBITS   14
0369 #define _VKI_IOC_DIRBITS    2
0370 
0371 #define _VKI_IOC_SIZEMASK   ((1 << _VKI_IOC_SIZEBITS)-1)
0372 #define _VKI_IOC_DIRMASK    ((1 << _VKI_IOC_DIRBITS)-1)
0373 
0374 #define _VKI_IOC_NRSHIFT    0
0375 #define _VKI_IOC_TYPESHIFT  (_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
0376 #define _VKI_IOC_SIZESHIFT  (_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
0377 #define _VKI_IOC_DIRSHIFT   (_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
0378 
0379 #define _VKI_IOC_NONE   0U
0380 #define _VKI_IOC_WRITE  1U
0381 #define _VKI_IOC_READ   2U
0382 
0383 #define _VKI_IOC(dir,type,nr,size) \
0384     (((dir)  << _VKI_IOC_DIRSHIFT) | \
0385      ((type) << _VKI_IOC_TYPESHIFT) | \
0386      ((nr)   << _VKI_IOC_NRSHIFT) | \
0387      ((size) << _VKI_IOC_SIZESHIFT))
0388 
0389 #define _VKI_IO(type,nr)    _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
0390 #define _VKI_IOR(type,nr,size)  _VKI_IOC(_VKI_IOC_READ,(type),(nr),sizeof(size))
0391 #define _VKI_IOW(type,nr,size)  _VKI_IOC(_VKI_IOC_WRITE,(type),(nr),sizeof(size))
0392 #define _VKI_IOWR(type,nr,size) _VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),sizeof(size))
0393 
0394 #define _VKI_IOC_DIR(nr)        (((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
0395 #define _VKI_IOC_SIZE(nr)       (((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
0396 
0397 //----------------------------------------------------------------------
0398 // From linux-3.10.5/include/uapi/asm-generic/ioctls.h
0399 //----------------------------------------------------------------------
0400 
0401 #define VKI_TCGETS  0x5401
0402 #define VKI_TCSETS  0x5402
0403 #define VKI_TCSETSW 0x5403
0404 #define VKI_TCSETSF 0x5404
0405 #define VKI_TCGETA  0x5405
0406 #define VKI_TCSETA  0x5406
0407 #define VKI_TCSETAW 0x5407
0408 #define VKI_TCSETAF 0x5408
0409 #define VKI_TCSBRK  0x5409
0410 #define VKI_TCXONC  0x540A
0411 #define VKI_TCFLSH  0x540B
0412 #define VKI_TIOCSCTTY   0x540E
0413 #define VKI_TIOCGPGRP   0x540F
0414 #define VKI_TIOCSPGRP   0x5410
0415 #define VKI_TIOCOUTQ    0x5411
0416 #define VKI_TIOCGWINSZ  0x5413
0417 #define VKI_TIOCSWINSZ  0x5414
0418 #define VKI_TIOCMGET    0x5415
0419 #define VKI_TIOCMBIS    0x5416
0420 #define VKI_TIOCMBIC    0x5417
0421 #define VKI_TIOCMSET    0x5418
0422 #define VKI_FIONREAD    0x541B
0423 #define VKI_TIOCLINUX   0x541C
0424 #define VKI_TIOCGSERIAL 0x541E
0425 #define VKI_TIOCSSERIAL 0x541F
0426 #define VKI_FIONBIO 0x5421
0427 #define VKI_TIOCNOTTY   0x5422
0428 #define VKI_TCSBRKP 0x5425  /* Needed for POSIX tcsendbreak() */
0429 #define VKI_TIOCGPTN    _VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
0430 #define VKI_TIOCSPTLCK  _VKI_IOW('T',0x31, int) /* Lock/unlock Pty */
0431 
0432 #define VKI_FIONCLEX    0x5450
0433 #define VKI_FIOCLEX     0x5451
0434 #define VKI_FIOASYNC    0x5452
0435 #define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
0436 
0437 #define VKI_TIOCGICOUNT 0x545D  /* read serial port inline interrupt counts */
0438 
0439 //----------------------------------------------------------------------
0440 // From linux-6.0/include/uapi/asm-generic/poll.h
0441 //----------------------------------------------------------------------
0442 
0443 #define VKI_POLLIN      0x0001
0444 
0445 struct vki_pollfd {
0446     int fd;
0447     short events;
0448     short revents;
0449 };
0450 
0451 //----------------------------------------------------------------------
0452 // From linux-6.0/arch/riscv/include/uapi/asm/ptrace.h
0453 //----------------------------------------------------------------------
0454 
0455 struct vki_user_regs_struct {
0456     unsigned long pc;
0457     unsigned long ra;
0458     unsigned long sp;
0459     unsigned long gp;
0460     unsigned long tp;
0461     unsigned long t0;
0462     unsigned long t1;
0463     unsigned long t2;
0464     unsigned long s0;
0465     unsigned long s1;
0466     unsigned long a0;
0467     unsigned long a1;
0468     unsigned long a2;
0469     unsigned long a3;
0470     unsigned long a4;
0471     unsigned long a5;
0472     unsigned long a6;
0473     unsigned long a7;
0474     unsigned long s2;
0475     unsigned long s3;
0476     unsigned long s4;
0477     unsigned long s5;
0478     unsigned long s6;
0479     unsigned long s7;
0480     unsigned long s8;
0481     unsigned long s9;
0482     unsigned long s10;
0483     unsigned long s11;
0484     unsigned long t3;
0485     unsigned long t4;
0486     unsigned long t5;
0487     unsigned long t6;
0488 };
0489 
0490 struct __vki_riscv_f_ext_state {
0491     __vki_u32 f[32];
0492     __vki_u32 fcsr;
0493 };
0494 
0495 struct __vki_riscv_d_ext_state {
0496     __vki_u64 f[32];
0497     __vki_u32 fcsr;
0498 };
0499 
0500 struct __vki_riscv_q_ext_state {
0501     __vki_u64 f[64] __attribute__((aligned(16)));
0502     __vki_u32 fcsr;
0503     __vki_u32 reserved[3];
0504 };
0505 
0506 union __vki_riscv_fp_state {
0507     struct __vki_riscv_f_ext_state f;
0508     struct __vki_riscv_d_ext_state d;
0509     struct __vki_riscv_q_ext_state q;
0510 };
0511 
0512 //----------------------------------------------------------------------
0513 // From linux-6.0/arch/riscv/include/uapi/asm/sigcontext.h
0514 //----------------------------------------------------------------------
0515 
0516 struct vki_sigcontext {
0517     struct vki_user_regs_struct sc_regs;
0518     union __vki_riscv_fp_state sc_fpregs;
0519 };
0520 
0521 //----------------------------------------------------------------------
0522 // From linux-6.0/arch/riscv/include/uapi/asm/elf.h
0523 //----------------------------------------------------------------------
0524 
0525 typedef unsigned long vki_elf_greg_t;
0526 typedef struct vki_user_regs_struct vki_elf_gregset_t;
0527 #define VKI_ELF_NGREG (sizeof (struct vki_elf_gregset_t) / sizeof(vki_elf_greg_t))
0528 
0529 typedef union __vki_riscv_fp_state vki_elf_fpregset_t;
0530 
0531 //----------------------------------------------------------------------
0532 // From linux-6.0/arch/riscv/include/uapi/asm/ucontext.h
0533 //----------------------------------------------------------------------
0534 
0535 struct vki_ucontext {
0536     unsigned long       uc_flags;
0537     struct vki_ucontext *uc_link;
0538     vki_stack_t     uc_stack;
0539     vki_sigset_t        uc_sigmask;
0540     __vki_u8        __unused[1024 / 8 - sizeof(vki_sigset_t)];
0541     struct vki_sigcontext   uc_mcontext;
0542 };
0543 
0544 typedef char vki_modify_ldt_t;
0545 
0546 //----------------------------------------------------------------------
0547 // From linux-6.0/include/uapi/asm-generic/ipcbuf.h
0548 //----------------------------------------------------------------------
0549 
0550 struct vki_ipc64_perm {
0551     __vki_kernel_key_t  key;
0552     __vki_kernel_uid32_t    uid;
0553     __vki_kernel_gid32_t    gid;
0554     __vki_kernel_uid32_t    cuid;
0555     __vki_kernel_gid32_t    cgid;
0556     __vki_kernel_mode_t mode;
0557         unsigned char           __pad1[4 - sizeof(__vki_kernel_mode_t)];
0558     unsigned short      seq;
0559     unsigned short      __pad2;
0560     unsigned long       __unused1;
0561     unsigned long       __unused2;
0562 };
0563 
0564 //----------------------------------------------------------------------
0565 // From linux-6.0/include/uapi/asm-generic/sembuf.h
0566 //----------------------------------------------------------------------
0567 
0568 struct vki_semid64_ds {
0569     struct vki_ipc64_perm sem_perm;     /* permissions .. see ipc.h */
0570     __vki_kernel_time_t sem_otime;      /* last semop time */
0571     __vki_kernel_time_t sem_ctime;      /* last change time */
0572     unsigned long   sem_nsems;      /* no. of semaphores in array */
0573     unsigned long   __unused3;
0574     unsigned long   __unused4;
0575 };
0576 
0577 //----------------------------------------------------------------------
0578 // From linux-6.0/include/uapi/asm-generic/msgbuf.h
0579 //----------------------------------------------------------------------
0580 
0581 struct vki_msqid64_ds {
0582     struct vki_ipc64_perm msg_perm;
0583     __vki_kernel_time_t msg_stime;  /* last msgsnd time */
0584     __vki_kernel_time_t msg_rtime;  /* last msgrcv time */
0585     __vki_kernel_time_t msg_ctime;  /* last change time */
0586     unsigned long  msg_cbytes;  /* current number of bytes on queue */
0587     unsigned long  msg_qnum;    /* number of messages in queue */
0588     unsigned long  msg_qbytes;  /* max number of bytes on queue */
0589     __vki_kernel_pid_t msg_lspid;   /* pid of last msgsnd */
0590     __vki_kernel_pid_t msg_lrpid;   /* last receive pid */
0591     unsigned long  __unused4;
0592     unsigned long  __unused5;
0593 };
0594 
0595 //----------------------------------------------------------------------
0596 // From linux-6.0/include/uapi/asm-generic/shmbuf.h
0597 //----------------------------------------------------------------------
0598 
0599 struct vki_shmid64_ds {
0600     struct vki_ipc64_perm   shm_perm;   /* operation perms */
0601     vki_size_t      shm_segsz;  /* size of segment (bytes) */
0602     __vki_kernel_time_t shm_atime;  /* last attach time */
0603     __vki_kernel_time_t shm_dtime;  /* last detach time */
0604     __vki_kernel_time_t shm_ctime;  /* last change time */
0605     __vki_kernel_pid_t  shm_cpid;   /* pid of creator */
0606     __vki_kernel_pid_t  shm_lpid;   /* pid of last operator */
0607     unsigned long       shm_nattch; /* no. of current attaches */
0608     unsigned long       __unused4;
0609     unsigned long       __unused5;
0610 };
0611 
0612 struct vki_shminfo64 {
0613     unsigned long   shmmax;
0614     unsigned long   shmmin;
0615     unsigned long   shmmni;
0616     unsigned long   shmseg;
0617     unsigned long   shmall;
0618     unsigned long   __unused1;
0619     unsigned long   __unused2;
0620     unsigned long   __unused3;
0621     unsigned long   __unused4;
0622 };
0623 
0624 //----------------------------------------------------------------------
0625 // From linux-6.0/include/uapi/asm-generic/errno.h
0626 //----------------------------------------------------------------------
0627 
0628 #define VKI_ENOSYS      38  /* Invalid system call number */
0629 #define VKI_EOVERFLOW       75  /* Value too large for defined data type */
0630 
0631 #endif // __VKI_RISCV64_LINUX_H
0632 
0633 /*--------------------------------------------------------------------*/
0634 /*--- end                                      vki-riscv64-linux.h ---*/
0635 /*--------------------------------------------------------------------*/