Home | History | Annotate | Download | only in vki
      1 
      2 /*--------------------------------------------------------------------*/
      3 /*--- Solaris-specific kernel interface.             vki-solaris.h ---*/
      4 /*--------------------------------------------------------------------*/
      5 
      6 /*
      7    This file is part of Valgrind, a dynamic binary instrumentation
      8    framework.
      9 
     10    Copyright (C) 2011-2017 Petr Pavlu
     11       setup (at) dagobah.cz
     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 
     31 /* Copyright 2013-2017, Ivo Raisr <ivosh (at) ivosh.net> */
     32 
     33 /* Copyright 2013, OmniTI Computer Consulting, Inc. All rights reserved. */
     34 
     35 /* The purpose of this file is described in vki-linux.h.
     36 
     37    To avoid any copyright issues, vki-solaris.h follows the same approach as
     38    vki-darwin.h (not copying anything from kernel header files but instead
     39    just including them).
     40  */
     41 
     42 #ifndef __VKI_SOLARIS_H
     43 #define __VKI_SOLARIS_H
     44 
     45 #include "../../config.h"
     46 
     47 /* _XOPEN_SOURCE equal to at least '500' is required so that various system
     48    structures have all necessary attributes (for example struct msghdr). */
     49 #if !defined(_XOPEN_SOURCE)
     50 /* Compiler versions c99 and higher require _XOPEN_SOURCE at least '600'. */
     51 #   if (__STDC_VERSION__ - 0 >= 199901L)
     52 #      define _XOPEN_SOURCE 600
     53 #   else
     54 #      define _XOPEN_SOURCE 500
     55 #   endif
     56 #elif (_XOPEN_SOURCE - 0 != 500) && (_XOPEN_SOURCE - 0 != 600) && (_XOPEN_SOURCE - 0 != 700)
     57 #   error "Compiler or options invalid for including this header file."
     58 #endif /* _XOPEN_SOURCE */
     59 
     60 #define __EXTENSIONS__ 1
     61 /* assert _FILE_OFFSET_BITS == 32 */
     62 
     63 #define VKI_PAGE_SHIFT 12
     64 #define VKI_PAGE_SIZE (1UL << VKI_PAGE_SHIFT)
     65 #define VKI_PAGEMASK (~VKI_PAGEOFFSET)
     66 #define VKI_PAGEOFFSET (VKI_PAGE_SIZE - 1)
     67 #define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT
     68 #define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
     69 
     70 
     71 #include <sys/types.h>
     72 #define VKI_UINT_MAX UINT_MAX
     73 #define VKI_UINTPTR_MAX UINTPTR_MAX
     74 #define vki_boolean_t boolean_t
     75 #define vki_datalink_id_t datalink_id_t
     76 #define vki_uint_t uint_t
     77 #define vki_uint32_t uint32_t
     78 #define vki_uint64_t uint64_t
     79 #define vki_ulong_t ulong_t
     80 #define vki_caddr_t caddr_t
     81 #define vki_dev_t dev_t
     82 #define vki_off_t off_t
     83 #define vki_id_t id_t
     84 #define vki_key_t key_t
     85 #define vki_mode_t mode_t
     86 #define vki_o_dev_t o_dev_t
     87 #define vki_projid_t projid_t
     88 #define vki_uid_t uid_t
     89 #define vki_gid_t gid_t
     90 #define vki_pid_t pid_t
     91 #define vki_size_t size_t
     92 #define vki_time_t time_t
     93 #define vki_timer_t timer_t
     94 #define vki_uchar_t uchar_t
     95 
     96 typedef uint32_t vki_u32;
     97 
     98 
     99 #include <sys/types32.h>
    100 #define vki_size32_t size32_t
    101 
    102 
    103 #include <fcntl.h>
    104 #define VKI_SEEK_SET SEEK_SET
    105 
    106 
    107 #include <limits.h>
    108 #define VKI_NGROUPS_MAX NGROUPS_MAX
    109 #define VKI_PATH_MAX PATH_MAX
    110 /* Used in launcher-linux.c which we share with Linux port. */
    111 #define VKI_BINPRM_BUF_SIZE VKI_PATH_MAX
    112 
    113 
    114 #include <ucred.h>
    115 #define vki_ucred_t ucred_t
    116 
    117 
    118 #include <unistd.h>
    119 #define VKI_R_OK R_OK
    120 #define VKI_W_OK W_OK
    121 #define VKI_X_OK X_OK
    122 
    123 
    124 #include <bsm/audit.h>
    125 #define VKI_A_GETAMASK A_GETAMASK
    126 #define VKI_A_GETCAR A_GETCAR
    127 #define VKI_A_GETCLASS A_GETCLASS
    128 #define VKI_A_GETCOND A_GETCOND
    129 #define VKI_A_GETCWD A_GETCWD
    130 #define VKI_A_GETKAUDIT A_GETKAUDIT
    131 #define VKI_A_GETKMASK A_GETKMASK
    132 #define VKI_A_GETPINFO A_GETPINFO
    133 #define VKI_A_GETPINFO_ADDR A_GETPINFO_ADDR
    134 #define VKI_A_GETPOLICY A_GETPOLICY
    135 #define VKI_A_GETQCTRL A_GETQCTRL
    136 #if defined(SOLARIS_AUDITON_STAT)
    137 #define VKI_A_GETSTAT A_GETSTAT
    138 #define VKI_A_SETSTAT A_SETSTAT
    139 #endif /* SOLARIS_AUDITON_STAT */
    140 #define VKI_A_SETAMASK A_SETAMASK
    141 #define VKI_A_SETCLASS A_SETCLASS
    142 #define VKI_A_SETCOND A_SETCOND
    143 #define VKI_A_SETKAUDIT A_SETKAUDIT
    144 #define VKI_A_SETKMASK A_SETKMASK
    145 #define VKI_A_SETPMASK A_SETPMASK
    146 #define VKI_A_SETPOLICY A_SETPOLICY
    147 #define VKI_A_SETQCTRL A_SETQCTRL
    148 #define VKI_A_SETSMASK A_SETSMASK
    149 #define VKI_A_SETUMASK A_SETUMASK
    150 #define VKI_BSM_AUDIT BSM_AUDIT
    151 #define VKI_BSM_AUDITCTL BSM_AUDITCTL
    152 #define VKI_BSM_AUDITDOOR BSM_AUDITDOOR
    153 #define VKI_BSM_GETAUDIT BSM_GETAUDIT
    154 #define VKI_BSM_GETAUDIT_ADDR BSM_GETAUDIT_ADDR
    155 #define VKI_BSM_GETAUID BSM_GETAUID
    156 #define VKI_BSM_SETAUDIT BSM_SETAUDIT
    157 #define VKI_BSM_SETAUDIT_ADDR BSM_SETAUDIT_ADDR
    158 #define VKI_BSM_SETAUID BSM_SETAUID
    159 #define vki_au_evclass_map_t au_evclass_map_t
    160 #define vki_au_id_t au_id_t
    161 #define vki_au_mask_t au_mask_t
    162 #define vki_au_qctrl au_qctrl
    163 #define vki_auditinfo_t auditinfo_t
    164 #define vki_auditinfo_addr_t auditinfo_addr_t
    165 #define vki_auditpinfo auditpinfo
    166 #define vki_auditpinfo_addr auditpinfo_addr
    167 #if defined(SOLARIS_AUDITON_STAT)
    168 #define vki_au_stat_t au_stat_t
    169 #endif /* SOLARIS_AUDITON_STAT */
    170 
    171 
    172 #include <sys/psw.h>
    173 #define VKI_PSL_USER PSL_USER
    174 
    175 
    176 #include <ia32/sys/trap.h>
    177 #define VKI_T_BPTFLT T_BPTFLT
    178 
    179 
    180 /* From <libc/inc/libc_int.h> which is consolidation private. */
    181 #define VKI_CI_BIND_GUARD 4
    182 #define VKI_CI_BIND_CLEAR 5
    183 #define VKI_THR_FLG_RTLD 0x01
    184 
    185 typedef struct {
    186    int ci_tag;
    187    union {
    188       int (*ci_func)(int);
    189       long ci_val;
    190       char *ci_ptr;
    191    } vki_ci_un;
    192 } vki_Lc_interface;
    193 
    194 
    195 /* From <libc/port/gen/getxby_door.h> which is consolidation private. */
    196 #if defined(SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE)
    197 #define VKI_NAME_SERVICE_DOOR "/system/volatile/name_service_door"
    198 #else
    199 #define VKI_NAME_SERVICE_DOOR "/var/run/name_service_door"
    200 #endif /* SOLARIS_NSCD_DOOR_SYSTEM_VOLATILE */
    201 
    202 
    203 #include <nfs/nfs.h>
    204 #include <nfs/nfssys.h>
    205 #define VKI_NFS_REVAUTH NFS_REVAUTH
    206 #define vki_nfs_revauth_args nfs_revauth_args
    207 
    208 
    209 #include <net/if.h>
    210 #define vki_ifconf ifconf
    211 #define vki_ifreq ifreq
    212 #define vki_lifconf lifconf
    213 #define vki_lifnum lifnum
    214 #define vki_lifreq lifreq
    215 
    216 
    217 #include <netinet/in.h>
    218 #define VKI_IPPROTO_TCP IPPROTO_TCP
    219 #define vki_in_addr in_addr
    220 #define vki_sockaddr_in sockaddr_in
    221 #define vki_sockaddr_in6 sockaddr_in6
    222 
    223 #include <netinet/tcp.h>
    224 #define VKI_TCP_NODELAY TCP_NODELAY
    225 
    226 
    227 /* Do not include nss_dbdefs.h if a C++ compiler is used to build a file
    228    which includes vki-solaris.h. This cannot be done because the nss_dbdefs.h
    229    header file uses 'delete' keyword as a method name. */
    230 #if !defined(__cplusplus)
    231 #include <nss_dbdefs.h>
    232 #define VKI_NSCD_CALLCAT_APP NSCD_CALLCAT_APP
    233 #define VKI_NSCDV2CATMASK NSCDV2CATMASK
    234 #define vki_nss_dbd_t nss_dbd_t
    235 #define vki_nss_pheader_t nss_pheader_t
    236 #endif /* !__cplusplus */
    237 
    238 
    239 /* From <repcache_protocol.h> which is consolidation private. */
    240 #include "vki-solaris-repcache.h"
    241 
    242 #include <sys/acl.h>
    243 #define vki_aclent_t aclent_t
    244 #define vki_ace_t ace_t
    245 #define VKI_GETACL GETACL
    246 #define VKI_SETACL SETACL
    247 #define VKI_GETACLCNT GETACLCNT
    248 #define VKI_ACE_GETACL ACE_GETACL
    249 #define VKI_ACE_SETACL ACE_SETACL
    250 #define VKI_ACE_GETACLCNT ACE_GETACLCNT
    251 
    252 
    253 #include <sys/auxv.h>
    254 #define vki_auxv_t auxv_t
    255 #define VKI_AT_NULL AT_NULL
    256 #define VKI_AT_PHDR AT_PHDR
    257 #define VKI_AT_PAGESZ AT_PAGESZ
    258 #define VKI_AT_BASE AT_BASE
    259 #define VKI_AT_FLAGS AT_FLAGS
    260 #define VKI_AT_ENTRY AT_ENTRY
    261 #define VKI_AT_SUN_PLATFORM AT_SUN_PLATFORM
    262 #define VKI_AT_SUN_HWCAP AT_SUN_HWCAP
    263 #define VKI_AT_SUN_EXECNAME AT_SUN_EXECNAME
    264 #define VKI_AT_SUN_AUXFLAGS AT_SUN_AUXFLAGS
    265 #if defined(SOLARIS_RESERVE_SYSSTAT_ADDR)
    266 #define VKI_AT_SUN_SYSSTAT_ADDR AT_SUN_SYSSTAT_ADDR
    267 #endif
    268 #if defined(SOLARIS_RESERVE_SYSSTAT_ZONE_ADDR)
    269 #define VKI_AT_SUN_SYSSTAT_ZONE_ADDR AT_SUN_SYSSTAT_ZONE_ADDR
    270 #endif
    271 
    272 #define VKI_AF_SUN_HWCAPVERIFY AF_SUN_HWCAPVERIFY
    273 
    274 
    275 #include <sys/auxv_386.h>
    276 #define VKI_AV_386_FPU AV_386_FPU
    277 #define VKI_AV_386_TSC AV_386_TSC
    278 #define VKI_AV_386_CX8 AV_386_CX8
    279 #define VKI_AV_386_SEP AV_386_SEP
    280 #define VKI_AV_386_AMD_SYSC AV_386_AMD_SYSC
    281 #define VKI_AV_386_CMOV AV_386_CMOV
    282 #define VKI_AV_386_MMX AV_386_MMX
    283 #define VKI_AV_386_FXSR AV_386_FXSR
    284 #define VKI_AV_386_SSE AV_386_SSE
    285 #define VKI_AV_386_SSE2 AV_386_SSE2
    286 #define VKI_AV_386_SSE3 AV_386_SSE3
    287 #define VKI_AV_386_CX16 AV_386_CX16
    288 #define VKI_AV_386_AHF AV_386_AHF
    289 #define VKI_AV_386_TSCP AV_386_TSCP
    290 #define VKI_AV_386_POPCNT AV_386_POPCNT
    291 #define VKI_AV_386_AMD_LZCNT AV_386_AMD_LZCNT
    292 #define VKI_AV_386_SSSE3 AV_386_SSSE3
    293 #define VKI_AV_386_SSE4_1 AV_386_SSE4_1
    294 #define VKI_AV_386_SSE4_2 AV_386_SSE4_2
    295 #define VKI_AV_386_AES AV_386_AES
    296 #define VKI_AV_386_PCLMULQDQ AV_386_PCLMULQDQ
    297 #define VKI_AV_386_XSAVE AV_386_XSAVE
    298 
    299 
    300 #include <sys/corectl.h>
    301 #define VKI_CC_CONTENT_ANON CC_CONTENT_ANON
    302 #define VKI_CC_CONTENT_DATA CC_CONTENT_DATA
    303 #define VKI_CC_CONTENT_DISM CC_CONTENT_DISM
    304 #define VKI_CC_CONTENT_HEAP CC_CONTENT_HEAP
    305 #define VKI_CC_CONTENT_ISM CC_CONTENT_ISM
    306 #define VKI_CC_CONTENT_RODATA CC_CONTENT_RODATA
    307 #define VKI_CC_CONTENT_SHANON CC_CONTENT_SHANON
    308 #define VKI_CC_CONTENT_SHM CC_CONTENT_SHM
    309 #define VKI_CC_CONTENT_STACK CC_CONTENT_STACK
    310 #define VKI_CC_CONTENT_TEXT CC_CONTENT_TEXT
    311 #define vki_core_content_t core_content_t
    312 
    313 
    314 /* From <sys/crypto/elfsign.h> which is consolidation private. */
    315 #define VKI__PATH_KCFD_DOOR "/system/volatile/kcfd_door"
    316 typedef enum vki_ELFsign_status_e {
    317    VKI_ELFSIGN_UNKNOWN,
    318    VKI_ELFSIGN_SUCCESS,
    319    VKI_ELFSIGN_FAILED,
    320    VKI_ELFSIGN_NOTSIGNED,
    321    VKI_ELFSIGN_INVALID_CERTPATH,
    322    VKI_ELFSIGN_INVALID_ELFOBJ,
    323    VKI_ELFSIGN_UNAVAILABLE
    324 } vki_ELFsign_status_t;
    325 typedef struct vki_kcf_door_arg_s {
    326    short         da_version;
    327    vki_boolean_t da_iskernel;
    328    union {
    329       char filename[MAXPATHLEN];	/* For request */
    330 
    331       struct vki_kcf_door_result_s {	/* For response */
    332          vki_ELFsign_status_t status;
    333          vki_uint32_t         siglen;
    334          vki_uchar_t          signature[1];
    335       } result;
    336    } vki_da_u;
    337 } vki_kcf_door_arg_t;
    338 
    339 
    340 #include <sys/crypto/ioctl.h>
    341 #define VKI_CRYPTO_SUCCESS CRYPTO_SUCCESS
    342 #define VKI_CRYPTO_GET_PROVIDER_LIST CRYPTO_GET_PROVIDER_LIST
    343 #define vki_crypto_provider_id_t crypto_provider_id_t
    344 #define vki_crypto_provider_entry_t crypto_provider_entry_t
    345 #define vki_crypto_get_provider_list_t crypto_get_provider_list_t
    346 
    347 
    348 #include <sys/dditypes.h>
    349 #include <sys/devinfo_impl.h>
    350 #define VKI_DINFOUSRLD DINFOUSRLD
    351 #define VKI_DINFOIDENT DINFOIDENT
    352 
    353 
    354 #include <sys/dirent.h>
    355 #define VKI_MAXGETDENTS_SIZE MAXGETDENTS_SIZE
    356 #define vki_dirent dirent
    357 #define vki_dirent64 dirent64
    358 
    359 
    360 #include <sys/door.h>
    361 #define vki_door_desc_t door_desc_t
    362 #define vki_door_info_t door_info_t
    363 #define vki_door_arg_t door_arg_t
    364 #define vki_door_results door_results
    365 #define vki_door_return_desc_t door_return_desc_t
    366 
    367 #define VKI_DOOR_CREATE DOOR_CREATE
    368 #define VKI_DOOR_REVOKE DOOR_REVOKE
    369 #define VKI_DOOR_INFO DOOR_INFO
    370 #define VKI_DOOR_CALL DOOR_CALL
    371 #define VKI_DOOR_BIND DOOR_BIND
    372 #define VKI_DOOR_UNBIND DOOR_UNBIND
    373 #define VKI_DOOR_UNREFSYS DOOR_UNREFSYS
    374 #define VKI_DOOR_UCRED DOOR_UCRED
    375 #define VKI_DOOR_RETURN DOOR_RETURN
    376 #define VKI_DOOR_GETPARAM DOOR_GETPARAM
    377 #define VKI_DOOR_SETPARAM DOOR_SETPARAM
    378 
    379 
    380 #include <sys/dtrace.h>
    381 #define VKI_DTRACEHIOC_REMOVE DTRACEHIOC_REMOVE
    382 #define VKI_DTRACEHIOC_ADDDOF DTRACEHIOC_ADDDOF
    383 #define vki_dof_helper_t dof_helper_t
    384 
    385 
    386 #include <sys/elf.h>
    387 #define VKI_EI_CLASS EI_CLASS
    388 #define VKI_EI_DATA EI_DATA
    389 #define VKI_EI_MAG0 EI_MAG0
    390 #define VKI_EI_MAG1 EI_MAG1
    391 #define VKI_EI_MAG2 EI_MAG2
    392 #define VKI_EI_MAG3 EI_MAG3
    393 #define VKI_EI_VERSION EI_VERSION
    394 #define VKI_ELFMAG ELFMAG
    395 #define VKI_ELFMAG ELFMAG
    396 #define VKI_ELFMAG0 ELFMAG0
    397 #define VKI_ELFMAG1 ELFMAG1
    398 #define VKI_ELFMAG2 ELFMAG2
    399 #define VKI_ELFMAG3 ELFMAG3
    400 #define VKI_ET_CORE ET_CORE
    401 #define VKI_ET_DYN ET_DYN
    402 #define VKI_ET_EXEC ET_EXEC
    403 #define VKI_EV_CURRENT EV_CURRENT
    404 #define VKI_NT_AUXV NT_AUXV
    405 #define VKI_NT_CONTENT NT_CONTENT
    406 #define VKI_NT_LWPSINFO NT_LWPSINFO
    407 #define VKI_NT_LWPSTATUS NT_LWPSTATUS
    408 #define VKI_NT_PLATFORM NT_PLATFORM
    409 #define VKI_NT_PRCRED NT_PRCRED
    410 #define VKI_NT_PRFPREG NT_PRFPREG
    411 #define VKI_NT_PRPRIV NT_PRPRIV
    412 #define VKI_NT_PRPRIVINFO NT_PRPRIVINFO
    413 #define VKI_NT_PRPSINFO NT_PRPSINFO
    414 #define VKI_NT_PRSTATUS NT_PRSTATUS
    415 #define VKI_NT_PRXREG NT_PRXREG
    416 #define VKI_NT_PSINFO NT_PSINFO
    417 #define VKI_NT_PSTATUS NT_PSTATUS
    418 #define VKI_NT_UTSNAME NT_UTSNAME
    419 #define VKI_NT_ZONENAME NT_ZONENAME
    420 #define VKI_PF_R PF_R
    421 #define VKI_PF_W PF_W
    422 #define VKI_PF_X PF_X
    423 #define VKI_PN_XNUM PN_XNUM
    424 #define VKI_PT_LOAD PT_LOAD
    425 #define VKI_PT_SUNWBSS PT_SUNWBSS
    426 #define VKI_SELFMAG SELFMAG
    427 
    428 #if	VG_WORDSIZE == 8
    429 #define VKI_ESZ(x) Elf64_##x
    430 #elif	VG_WORDSIZE == 4
    431 #define VKI_ESZ(x) Elf32_##x
    432 #else
    433 #error VG_WORDSIZE needs to ==4 or ==8
    434 #endif
    435 
    436 
    437 #include <sys/errno.h>
    438 #define VKI_EPERM EPERM
    439 #define VKI_ENOENT ENOENT
    440 #define VKI_ESRCH ESRCH
    441 #define VKI_EINTR EINTR
    442 #define VKI_EIO EIO
    443 #define VKI_ENXIO ENXIO
    444 #define VKI_E2BIG E2BIG
    445 #define VKI_EBADF EBADF
    446 #define VKI_ECHILD ECHILD
    447 #define VKI_ENOEXEC ENOEXEC
    448 #define VKI_EAGAIN EAGAIN
    449 #define VKI_ENOMEM ENOMEM
    450 #define VKI_EACCES EACCES
    451 #define VKI_EFAULT EFAULT
    452 #define VKI_ENOTBLK ENOTBLK
    453 #define VKI_EBUSY EBUSY
    454 #define VKI_EEXIST EEXIST
    455 #define VKI_EXDEV EXDEV
    456 #define VKI_ENODEV ENODEV
    457 #define VKI_ENOTDIR ENOTDIR
    458 #define VKI_EISDIR EISDIR
    459 #define VKI_EINVAL EINVAL
    460 #define VKI_ENFILE ENFILE
    461 #define VKI_EMFILE EMFILE
    462 #define VKI_ENOTTY ENOTTY
    463 #define VKI_ETXTBSY ETXTBSY
    464 #define VKI_EFBIG EFBIG
    465 #define VKI_ENOSPC ENOSPC
    466 #define VKI_ESPIPE ESPIPE
    467 #define VKI_EROFS EROFS
    468 #define VKI_EMLINK EMLINK
    469 #define VKI_EPIPE EPIPE
    470 #define VKI_EDOM EDOM
    471 #define VKI_ERANGE ERANGE
    472 #define VKI_ENOTSUP ENOTSUP
    473 #define VKI_ENODATA ENODATA
    474 #define VKI_EOVERFLOW EOVERFLOW
    475 #define VKI_ENOSYS ENOSYS
    476 #define VKI_ERESTART ERESTART
    477 #define VKI_EADDRINUSE EADDRINUSE
    478 
    479 
    480 #if defined(SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS)
    481 #include <sys/execx.h>
    482 #define VKI_EXEC_DESCRIPTOR EXEC_DESCRIPTOR
    483 #endif /* SOLARIS_EXECVE_SYSCALL_TAKES_FLAGS */
    484 
    485 
    486 #include <sys/fasttrap.h>
    487 #define VKI_PT_SUNWDTRACE_SIZE PT_SUNWDTRACE_SIZE
    488 
    489 
    490 #include <sys/fcntl.h>
    491 #define VKI_O_RDONLY O_RDONLY
    492 #define VKI_O_WRONLY O_WRONLY
    493 #define VKI_O_RDWR O_RDWR
    494 #define VKI_O_APPEND O_APPEND
    495 #define VKI_O_NONBLOCK O_NONBLOCK
    496 
    497 #define VKI_O_CREAT O_CREAT
    498 #define VKI_O_TRUNC O_TRUNC
    499 #define VKI_O_EXCL O_EXCL
    500 #define VKI_O_LARGEFILE O_LARGEFILE
    501 
    502 #define VKI_F_DUPFD F_DUPFD
    503 #define VKI_F_DUPFD_CLOEXEC F_DUPFD_CLOEXEC
    504 #define VKI_F_GETFD F_GETFD
    505 #define VKI_F_SETFD F_SETFD
    506 #define VKI_F_GETFL F_GETFL
    507 #define VKI_F_GETXFL F_GETXFL
    508 #define VKI_F_SETFL F_SETFL
    509 
    510 /* SVR3 rfs compatibility const, declared only if _KERNEL or _KMEMUSER is
    511    defined. */
    512 #if 0
    513 #define VKI_F_O_GETLK F_O_GETLK
    514 #endif // 0
    515 
    516 #define VKI_F_DUP2FD F_DUP2FD
    517 
    518 /* Mostly unused and kernel-unimplemented commands. In case of F_GETOWN and
    519    F_GETOWN, they are translated by libc in __fcntl() into other syscalls,
    520    that means these two values are never passed to the fcntl handler in the
    521    kernel. F_HASREMOTELOCKS is also special, the fcntl kernel handler doesn't
    522    know about it but it's used inside the kernel. */
    523 #if 0
    524 #define VKI_F_ISSTREAM F_ISSTREAM
    525 #define VKI_F_PRIV F_PRIV
    526 #define VKI_F_NPRIV F_NPRIV
    527 #define VKI_F_QUATACTL F_QUOTACTL
    528 #define VKI_F_BLOCKS F_BLOCKS
    529 #define VKI_F_BLKSIZE F_BLKSIZE
    530 #define VKI_F_GETOWN F_GETOWN
    531 #define VKI_F_SETOWN F_SETOWN
    532 #define VKI_F_REVOKE F_REVOKE
    533 #define VKI_F_HASREMOTELOCKS F_HASREMOTELOCKS
    534 #endif // 0
    535 
    536 #define VKI_F_SETLK F_SETLK
    537 #define VKI_F_SETLKW F_SETLKW
    538 #define VKI_F_ALLOCSP F_ALLOCSP
    539 #define VKI_F_FREESP F_FREESP
    540 #define VKI_F_GETLK F_GETLK
    541 #define VKI_F_SETLK_NBMAND F_SETLK_NBMAND
    542 #if defined(VGP_x86_solaris)
    543 #define VKI_F_SETLK64 F_SETLK64
    544 #define VKI_F_SETLKW64 F_SETLKW64
    545 #define VKI_F_ALLOCSP64 F_ALLOCSP64
    546 #define VKI_F_FREESP64 F_FREESP64
    547 #define VKI_F_GETLK64 F_GETLK64
    548 #define VKI_F_SETLK64_NBMAND F_SETLK64_NBMAND
    549 #endif // defined(VGP_x86_solaris)
    550 
    551 #define VKI_F_SHARE F_SHARE
    552 #define VKI_F_UNSHARE F_UNSHARE
    553 #define VKI_F_SHARE_NBMAND F_SHARE_NBMAND
    554 
    555 #define VKI_F_BADFD F_BADFD
    556 
    557 #define vki_flock flock
    558 #if defined(VGP_x86_solaris)
    559 #define vki_flock64 flock64
    560 #endif // defined(VGP_x86_solaris)
    561 
    562 #define VKI_FD_CLOEXEC FD_CLOEXEC
    563 
    564 #define vki_fshare fshare
    565 
    566 #define VKI_AT_FDCWD AT_FDCWD
    567 
    568 
    569 #include <sys/filio.h>
    570 #define VKI_FIOSETOWN FIOSETOWN
    571 #define VKI_FIOGETOWN FIOGETOWN
    572 
    573 
    574 #include <sys/fs/namenode.h>
    575 #define vki_namefd namefd
    576 
    577 
    578 #include <sys/fstyp.h>
    579 #define VKI_FSTYPSZ FSTYPSZ
    580 #define VKI_GETFSIND GETFSIND
    581 #define VKI_GETFSTYP GETFSTYP
    582 #define VKI_GETNFSTYP GETNFSTYP
    583 
    584 
    585 #include <sys/ioccom.h>
    586 #define _VKI_IOC_DIR(x) ((x) & (IOC_VOID | IOC_OUT | IOC_IN))
    587 #define _VKI_IOC_SIZE(x) (((x) >> 16) & IOCPARM_MASK)
    588 #define _VKI_IOC_NONE 0
    589 #define _VKI_IOC_READ IOC_OUT
    590 #define _VKI_IOC_WRITE IOC_IN
    591 
    592 
    593 #include <sys/ipc.h>
    594 #include <sys/ipc_impl.h>
    595 #define VKI_IPC_RMID IPC_RMID
    596 #define VKI_IPC_SET IPC_SET
    597 #define VKI_IPC_SET64 IPC_SET64
    598 #define VKI_IPC_STAT IPC_STAT
    599 #define VKI_IPC_STAT64 IPC_STAT64
    600 #if defined(SOLARIS_SHM_NEW)
    601 #define VKI_IPC_XSTAT64 IPC_XSTAT64
    602 #endif /* SOLARIS_SHM_NEW */
    603 
    604 #define vki_semid64_ds semid_ds64
    605 
    606 
    607 #include <sys/lgrp_user.h>
    608 #if defined(HAVE_SYS_LGRP_USER_IMPL_H)
    609 /* Include implementation specific header file on newer Solaris. */
    610 #include <sys/lgrp_user_impl.h>
    611 #endif /* HAVE_SYS_LGRP_USER_IMPL_H */
    612 #define VKI_LGRP_SYS_MEMINFO LGRP_SYS_MEMINFO
    613 #define VKI_LGRP_SYS_GENERATION LGRP_SYS_GENERATION
    614 #define VKI_LGRP_SYS_VERSION LGRP_SYS_VERSION
    615 #define VKI_LGRP_SYS_SNAPSHOT LGRP_SYS_SNAPSHOT
    616 #define VKI_LGRP_SYS_AFFINITY_GET LGRP_SYS_AFFINITY_GET
    617 #define VKI_LGRP_SYS_AFFINITY_SET LGRP_SYS_AFFINITY_SET
    618 #define VKI_LGRP_SYS_LATENCY LGRP_SYS_LATENCY
    619 #define VKI_LGRP_SYS_HOME LGRP_SYS_HOME
    620 #define VKI_LGRP_SYS_AFF_INHERIT_GET LGRP_SYS_AFF_INHERIT_GET
    621 #define VKI_LGRP_SYS_AFF_INHERIT_SET LGRP_SYS_AFF_INHERIT_SET
    622 #define VKI_LGRP_SYS_DEVICE_LGRPS LGRP_SYS_DEVICE_LGRPS
    623 #define VKI_LGRP_SYS_MAXSOCKETS_GET LGRP_SYS_MAXSOCKETS_GET
    624 #define vki_lgrp_view_t lgrp_view_t
    625 
    626 
    627 #include <sys/loadavg.h>
    628 #define VKI_LOADAVG_NSTATS LOADAVG_NSTATS
    629 
    630 
    631 #include <sys/lwp.h>
    632 #define VKI_LWP_DAEMON LWP_DAEMON
    633 #define VKI_LWP_FSBASE _LWP_FSBASE
    634 #define VKI_LWP_GSBASE _LWP_GSBASE
    635 #define VKI_LWP_SETPRIVATE _LWP_SETPRIVATE
    636 #define VKI_LWP_GETPRIVATE _LWP_GETPRIVATE
    637 
    638 
    639 #include <sys/mman.h>
    640 #define VKI_PROT_READ PROT_READ
    641 #define VKI_PROT_WRITE PROT_WRITE
    642 #define VKI_PROT_EXEC PROT_EXEC
    643 #define VKI_PROT_NONE PROT_NONE
    644 
    645 #define VKI_MAP_SHARED MAP_SHARED
    646 #define VKI_MAP_PRIVATE MAP_PRIVATE
    647 #define VKI_MAP_FIXED MAP_FIXED
    648 #define VKI_MAP_ANONYMOUS MAP_ANONYMOUS
    649 #define VKI_MAP_ALIGN MAP_ALIGN
    650 #define VKI_MAP_TEXT MAP_TEXT
    651 #define VKI_MAP_INITDATA MAP_INITDATA
    652 
    653 #define VKI_MMOBJ_ALL_FLAGS MMOBJ_ALL_FLAGS
    654 #define VKI_MMOBJ_INTERPRET MMOBJ_INTERPRET
    655 #define VKI_MMOBJ_PADDING MMOBJ_PADDING
    656 #define VKI_MR_PADDING MR_PADDING
    657 #define VKI_MR_HDR_ELF MR_HDR_ELF
    658 #define VKI_MR_GET_TYPE(val) MR_GET_TYPE(val)
    659 #define vki_mmapobj_result_t mmapobj_result_t
    660 
    661 #define vki_memcntl_mha memcntl_mha
    662 #define VKI_MC_LOCKAS MC_LOCKAS
    663 #define VKI_MC_UNLOCKAS MC_UNLOCKAS
    664 #define VKI_MC_HAT_ADVISE MC_HAT_ADVISE
    665 
    666 #define vki_meminfo_t meminfo_t
    667 
    668 
    669 #include <sys/mntio.h>
    670 #define VKI_MNTIOC_GETEXTMNTENT MNTIOC_GETEXTMNTENT
    671 #define VKI_MNTIOC_GETMNTANY MNTIOC_GETMNTANY
    672 
    673 
    674 #include <sys/mnttab.h>
    675 #define vki_extmnttab extmnttab
    676 #define vki_mntentbuf mntentbuf
    677 #define vki_mnttab mnttab
    678 
    679 
    680 #include <sys/modctl.h>
    681 #define VKI_MODLOAD MODLOAD
    682 #define VKI_MODUNLOAD MODUNLOAD
    683 #define VKI_MODINFO MODINFO
    684 
    685 #if defined(SOLARIS_MODCTL_MODNVL)
    686 #define VKI_MODNVL_DEVLINKSYNC MODNVL_DEVLINKSYNC
    687 #define VKI_MODDEVINFO_CACHE_TS MODDEVINFO_CACHE_TS
    688 #if !defined(HAVE_SYS_SYSNVL_H)
    689 #define VKI_MODCTL_NVL_OP_GET MODCTL_NVL_OP_GET
    690 #define VKI_MODCTL_NVL_OP_UPDATE MODCTL_NVL_OP_UPDATE
    691 #endif /* !HAVE_SYS_SYSNVL_H */
    692 #endif /* SOLARIS_MODCTL_MODNVL */
    693 
    694 #define vki_modid_t int
    695 #define vki_modinfo modinfo
    696 
    697 
    698 #include <sys/mount.h>
    699 #define	VKI_MS_DATA MS_DATA
    700 #define	VKI_MS_OPTIONSTR MS_OPTIONSTR
    701 
    702 
    703 #include <sys/poll.h>
    704 #define vki_pollfd pollfd
    705 #define vki_pollfd_t pollfd_t
    706 #define vki_nfds_t nfds_t
    707 
    708 
    709 #include <sys/pool_impl.h>
    710 #define VKI_POOL_STATUSQ POOL_STATUSQ
    711 #define vki_pool_status_t pool_status_t
    712 
    713 
    714 #include <sys/port.h>
    715 #include <sys/port_impl.h>
    716 #define VKI_PORT_SOURCE_FD PORT_SOURCE_FD
    717 #define VKI_PORT_SOURCE_FILE PORT_SOURCE_FILE
    718 
    719 #define vki_port_event_t port_event_t
    720 #define vki_port_notify_t port_notify_t
    721 #define vki_file_obj file_obj
    722 
    723 #define VKI_PORT_CREATE PORT_CREATE
    724 #define VKI_PORT_ASSOCIATE PORT_ASSOCIATE
    725 #define VKI_PORT_DISSOCIATE PORT_DISSOCIATE
    726 #define VKI_PORT_SEND PORT_SEND
    727 #define VKI_PORT_SENDN PORT_SENDN
    728 #define VKI_PORT_GET PORT_GET
    729 #define VKI_PORT_GETN PORT_GETN
    730 #define VKI_PORT_ALERT PORT_ALERT
    731 #define VKI_PORT_DISPATCH PORT_DISPATCH
    732 
    733 #define VKI_PORT_SYS_NOPORT PORT_SYS_NOPORT
    734 #define VKI_PORT_CODE_MASK PORT_CODE_MASK
    735 
    736 
    737 #include <sys/priocntl.h>
    738 #include <sys/rtpriocntl.h>
    739 #include <sys/tspriocntl.h>
    740 #include <sys/iapriocntl.h>
    741 #include <sys/fsspriocntl.h>
    742 #include <sys/fxpriocntl.h>
    743 #define VKI_PC_GETCID PC_GETCID
    744 #define VKI_PC_GETCLINFO PC_GETCLINFO
    745 #define VKI_PC_SETPARMS PC_SETPARMS
    746 #define VKI_PC_GETPARMS PC_GETPARMS
    747 #define VKI_PC_ADMIN PC_ADMIN
    748 #define VKI_PC_GETPRIRANGE PC_GETPRIRANGE
    749 #define VKI_PC_DONICE PC_DONICE
    750 #define VKI_PC_SETXPARMS PC_SETXPARMS
    751 #define VKI_PC_GETXPARMS PC_GETXPARMS
    752 #define VKI_PC_SETDFLCL PC_SETDFLCL
    753 #define VKI_PC_GETDFLCL PC_GETDFLCL
    754 #define VKI_PC_DOPRIO PC_DOPRIO
    755 
    756 #define VKI_PC_CLNMSZ PC_CLNMSZ
    757 
    758 #define VKI_PC_GETNICE PC_GETNICE
    759 #define VKI_PC_SETNICE PC_SETNICE
    760 
    761 #define VKI_PC_GETPRIO PC_GETPRIO
    762 #define VKI_PC_SETPRIO PC_SETPRIO
    763 
    764 #define vki_pcinfo_t pcinfo_t
    765 #define vki_rtinfo_t rtinfo_t
    766 #define vki_tsinfo_t tsinfo_t
    767 #define vki_iainfo_t iainfo_t
    768 #define vki_fssinfo_t fssinfo_t
    769 #define vki_fxinfo_t fxinfo_t
    770 
    771 #define vki_pcparms_t pcparms_t
    772 #define vki_pcnice_t pcnice_t
    773 #define vki_pcprio_t pcprio_t
    774 #define vki_pc_vaparm_t pc_vaparm_t
    775 #define vki_pc_vaparms_t pc_vaparms_t
    776 #define vki_pcpri_t pcpri_t
    777 
    778 #define VKI_PC_KY_CLNAME PC_KY_CLNAME
    779 #define VKI_RT_KY_PRI RT_KY_PRI
    780 #define VKI_RT_KY_TQSECS RT_KY_TQSECS
    781 #define VKI_RT_KY_TQNSECS RT_KY_TQNSECS
    782 #define VKI_RT_KY_TQSIG RT_KY_TQSIG
    783 #define VKI_TS_KY_UPRILIM TS_KY_UPRILIM
    784 #define VKI_TS_KY_UPRI TS_KY_UPRI
    785 #define VKI_IA_KY_UPRILIM IA_KY_UPRILIM
    786 #define VKI_IA_KY_UPRI IA_KY_UPRI
    787 #define VKI_IA_KY_MODE IA_KY_MODE
    788 #define VKI_FSS_KY_UPRILIM FSS_KY_UPRILIM
    789 #define VKI_FSS_KY_UPRI FSS_KY_UPRI
    790 #define VKI_FX_KY_UPRILIM FX_KY_UPRILIM
    791 #define VKI_FX_KY_UPRI FX_KY_UPRI
    792 #define VKI_FX_KY_TQSECS FX_KY_TQSECS
    793 #define VKI_FX_KY_TQNSECS FX_KY_TQNSECS
    794 
    795 
    796 #include <sys/priv.h>
    797 #define vki_priv_impl_info_t priv_impl_info_t
    798 
    799 
    800 #include <sys/proc.h>
    801 #define VKI_SRUN SRUN
    802 #define VKI_SSLEEP SSLEEP
    803 #define VKI_SZOMB SZOMB
    804 
    805 
    806 #include <sys/processor.h>
    807 #define vki_processorid_t processorid_t
    808 
    809 
    810 /* We want the new /proc definitions. */
    811 #define _STRUCTURED_PROC 1
    812 #include <sys/procfs.h>
    813 #define VKI_MA_READ MA_READ
    814 #define VKI_MA_WRITE MA_WRITE
    815 #define VKI_MA_EXEC MA_EXEC
    816 #define VKI_PRNODEV PRNODEV
    817 #define VKI_PR_PCINVAL PR_PCINVAL
    818 #define vki_lwpsinfo_t lwpsinfo_t
    819 #define vki_lwpstatus_t lwpstatus_t
    820 #define vki_prcred_t prcred_t
    821 #define vki_prmap_t prmap_t
    822 #define vki_prpriv_t prpriv_t
    823 #define vki_prxmap_t prxmap_t
    824 #define vki_pstatus_t pstatus_t
    825 #define vki_psinfo_t psinfo_t
    826 
    827 
    828 #include <sys/procfs_isa.h>
    829 #if defined(SOLARIS_PRXREGSET_T)
    830 #define vki_prxregset_t prxregset_t
    831 #endif /* SOLARIS_PRXREGSET_T */
    832 
    833 
    834 #include <sys/procset.h>
    835 #define vki_idtype_t idtype_t
    836 #define VKI_P_PID P_PID
    837 #define VKI_P_PGID P_PGID
    838 #define VKI_P_ALL P_ALL
    839 #define VKI_POP_AND POP_AND
    840 #define vki_procset_t procset_t
    841 
    842 
    843 #include <sys/pset.h>
    844 #define VKI_PSET_CREATE PSET_CREATE
    845 #define VKI_PSET_DESTROY PSET_DESTROY
    846 #define VKI_PSET_ASSIGN PSET_ASSIGN
    847 #define VKI_PSET_INFO PSET_INFO
    848 #define VKI_PSET_BIND PSET_BIND
    849 #define VKI_PSET_GETLOADAVG PSET_GETLOADAVG
    850 #define VKI_PSET_LIST PSET_LIST
    851 #define VKI_PSET_SETATTR PSET_SETATTR
    852 #define VKI_PSET_GETATTR PSET_GETATTR
    853 #define VKI_PSET_ASSIGN_FORCED PSET_ASSIGN_FORCED
    854 #define VKI_PSET_BIND_LWP PSET_BIND_LWP
    855 #if defined(SOLARIS_PSET_GET_NAME)
    856 #define VKI_PSET_GET_NAME PSET_GET_NAME
    857 #endif /* SOLARIS_PSET_GET_NAME */
    858 #define vki_psetid_t psetid_t
    859 
    860 
    861 #include <sys/regset.h>
    862 #define vki_prgregset_t prgregset_t
    863 
    864 
    865 #include <sys/resource.h>
    866 #define VKI_RLIMIT_DATA RLIMIT_DATA
    867 #define VKI_RLIMIT_STACK RLIMIT_STACK
    868 #define VKI_RLIMIT_CORE RLIMIT_CORE
    869 #define VKI_RLIMIT_NOFILE RLIMIT_NOFILE
    870 #define VKI__RUSAGESYS_GETRUSAGE _RUSAGESYS_GETRUSAGE
    871 #define VKI__RUSAGESYS_GETRUSAGE_CHLD _RUSAGESYS_GETRUSAGE_CHLD
    872 #define VKI__RUSAGESYS_GETRUSAGE_LWP _RUSAGESYS_GETRUSAGE_LWP
    873 #define VKI__RUSAGESYS_GETVMUSAGE _RUSAGESYS_GETVMUSAGE
    874 #define vki_rlimit rlimit
    875 #define vki_rlimit64 rlimit64
    876 #define vki_rusage rusage
    877 
    878 
    879 #include <sys/schedctl.h>
    880 #define vki_sc_shared sc_shared
    881 
    882 
    883 #include <sys/segments.h>
    884 #define VKI_GDT_LWPGS GDT_LWPGS
    885 #if defined(VGP_amd64_solaris)
    886 /* Values VKI_UCS_SEL/VKI_UDS_SEL can be used only on amd64. On x86, correct
    887    %cs/%ds values for a client need to be obtained from the host registers
    888    because they are different depending on the running kernel (x86 or amd64).
    889  */
    890 #define VKI_UCS_SEL UCS_SEL
    891 #define VKI_UDS_SEL UDS_SEL
    892 #endif
    893 #define VKI_LWPGS_SEL LWPGS_SEL
    894 
    895 
    896 #include <sys/select.h>
    897 #define vki_fd_set fd_set
    898 
    899 
    900 #include <sys/priv.h>
    901 /* Define _KMEMUSER so priv_set is pulled in. */
    902 #define _KMEMUSER
    903 #include <sys/priv_impl.h>
    904 #undef _KMEMUSER
    905 #define vki_priv_set_t priv_set_t
    906 #define vki_priv_ptype_t priv_ptype_t
    907 #define vki_priv_op_t priv_op_t
    908 
    909 #define VKI_PRIVSYS_SETPPRIV PRIVSYS_SETPPRIV
    910 #define VKI_PRIVSYS_GETPPRIV PRIVSYS_GETPPRIV
    911 #define VKI_PRIVSYS_GETIMPLINFO PRIVSYS_GETIMPLINFO
    912 #define VKI_PRIVSYS_SETPFLAGS PRIVSYS_SETPFLAGS
    913 #define VKI_PRIVSYS_GETPFLAGS PRIVSYS_GETPFLAGS
    914 #define VKI_PRIVSYS_ISSETUGID PRIVSYS_ISSETUGID
    915 #define VKI_PRIVSYS_PFEXEC_REG PRIVSYS_PFEXEC_REG
    916 #define VKI_PRIVSYS_PFEXEC_UNREG PRIVSYS_PFEXEC_UNREG
    917 
    918 #define vki_priv_impl_info_t priv_impl_info_t
    919 
    920 
    921 #include <sys/sem.h>
    922 #include <sys/sem_impl.h>
    923 #define VKI_GETALL GETALL
    924 #define VKI_GETPID GETPID
    925 #define VKI_GETNCNT GETNCNT
    926 #define VKI_GETZCNT GETZCNT
    927 #define VKI_GETVAL GETVAL
    928 #define VKI_SEMCTL SEMCTL
    929 #define VKI_SEMGET SEMGET
    930 #define VKI_SEMIDS SEMIDS
    931 #define VKI_SEMOP SEMOP
    932 #define VKI_SEMTIMEDOP SEMTIMEDOP
    933 #define VKI_SETALL SETALL
    934 #define VKI_SETVAL SETVAL
    935 
    936 #define vki_semid_ds semid_ds
    937 #define vki_sembuf sembuf
    938 
    939 /* The semun union has to be explicitly declared by the application program
    940    (see semctl(2)). */
    941 union vki_semun {
    942    int val;
    943    struct semid_ds *buf;
    944    ushort_t *array;
    945 };
    946 
    947 
    948 #include <sys/sendfile.h>
    949 #define VKI_SENDFILEV SENDFILEV
    950 #define VKI_SENDFILEV64 SENDFILEV64
    951 #define VKI_SFV_FD_SELF SFV_FD_SELF
    952 #define vki_sendfilevec sendfilevec
    953 #define vki_sendfilevec64 sendfilevec64
    954 
    955 
    956 #include <sys/shm.h>
    957 #include <sys/shm_impl.h>
    958 #define VKI_SHMAT SHMAT
    959 #define VKI_SHMCTL SHMCTL
    960 #define VKI_SHMDT SHMDT
    961 #define VKI_SHMGET SHMGET
    962 #define VKI_SHMIDS SHMIDS
    963 #if defined(SOLARIS_SHM_NEW)
    964 #define VKI_SHMADV SHMADV
    965 #define VKI_SHMGET_OSM SHMGET_OSM
    966 #define VKI_SHM_ADV_GET SHM_ADV_GET
    967 #define VKI_SHM_ADV_SET SHM_ADV_SET
    968 #endif /* SOLARIS_SHM_NEW */
    969 #define VKI_SHM_LOCK SHM_LOCK
    970 #define VKI_SHM_RDONLY SHM_RDONLY
    971 #define VKI_SHM_UNLOCK SHM_UNLOCK
    972 /* Should be correct, but not really neat. */
    973 #define VKI_SHMLBA VKI_PAGE_SIZE
    974 
    975 #define vki_shmid_ds shmid_ds
    976 #define vki_shmid_ds64 shmid_ds64
    977 #define vki_shmid_xds64 shmid_xds64
    978 
    979 
    980 #include <sys/siginfo.h>
    981 /* This section also contains items defined in sys/machsig.h, this file
    982    is directly included in sys/siginfo.h. */
    983 #define vki_sigevent sigevent
    984 #define vki_siginfo_t siginfo_t
    985 
    986 #define VKI_SI_LWP SI_LWP
    987 #define VKI_SI_USER SI_USER
    988 #define VKI_SIGEV_PORT SIGEV_PORT
    989 #define VKI_SIGEV_THREAD SIGEV_THREAD
    990 
    991 /* SIGTRAP signal codes */
    992 #define VKI_TRAP_BRKPT TRAP_BRKPT
    993 
    994 /* SIGCLD signal codes */
    995 #define VKI_CLD_EXITED CLD_EXITED
    996 #define VKI_CLD_KILLED CLD_KILLED
    997 #define VKI_CLD_DUMPED CLD_DUMPED
    998 #define VKI_CLD_TRAPPED CLD_TRAPPED
    999 #define VKI_CLD_STOPPED CLD_STOPPED
   1000 #define VKI_CLD_CONTINUED CLD_CONTINUED
   1001 
   1002 /* SIGILL signal codes */
   1003 #define VKI_ILL_ILLOPC ILL_ILLOPC
   1004 #define VKI_ILL_ILLOPN ILL_ILLOPN
   1005 #define VKI_ILL_ILLADR ILL_ILLADR
   1006 #define VKI_ILL_ILLTRP ILL_ILLTRP
   1007 #define VKI_ILL_PRVOPC ILL_PRVOPC
   1008 #define VKI_ILL_PRVREG ILL_PRVREG
   1009 #define VKI_ILL_COPROC ILL_COPROC
   1010 #define VKI_ILL_BADSTK ILL_BADSTK
   1011 
   1012 /* SIGFPE signal codes */
   1013 #define VKI_FPE_INTDIV FPE_INTDIV
   1014 #define VKI_FPE_INTOVF FPE_INTOVF
   1015 #define VKI_FPE_FLTDIV FPE_FLTDIV
   1016 #define VKI_FPE_FLTOVF FPE_FLTOVF
   1017 #define VKI_FPE_FLTUND FPE_FLTUND
   1018 #define VKI_FPE_FLTRES FPE_FLTRES
   1019 #define VKI_FPE_FLTINV FPE_FLTINV
   1020 #define VKI_FPE_FLTSUB FPE_FLTSUB
   1021 #define VKI_FPE_FLTDEN FPE_FLTDEN
   1022 
   1023 /* SIGSEV signal codes */
   1024 #define VKI_SEGV_MAPERR SEGV_MAPERR
   1025 #define VKI_SEGV_ACCERR SEGV_ACCERR
   1026 
   1027 /* SIGBUS signal codes */
   1028 #define VKI_BUS_ADRALN BUS_ADRALN
   1029 #define VKI_BUS_ADRERR BUS_ADRERR
   1030 #define VKI_BUS_OBJERR BUS_OBJERR
   1031 
   1032 
   1033 #include <sys/signal.h>
   1034 /* This section also contains items defined in sys/iso/signal_iso.h, this file
   1035    is directly included in sys/signal.h. */
   1036 
   1037 /* Next three constants describe the internal representation of sigset_t,
   1038    there are checks in coregrind/m_vki.c to make sure they are correct. */
   1039 #define _VKI_NSIG 128
   1040 #define _VKI_MAXSIG MAXSIG
   1041 #define _VKI_NSIG_BPW 32
   1042 #define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
   1043 #define vki_sigset_t sigset_t
   1044 #define vki_sigaltstack sigaltstack
   1045 /* sigset_t accessor */
   1046 #define sig __sigbits
   1047 
   1048 /* On Solaris we use the same type for passing sigactions to
   1049    and from the kernel. Hence: */
   1050 typedef struct sigaction vki_sigaction_toK_t;
   1051 typedef struct sigaction vki_sigaction_fromK_t;
   1052 /* sigaction_t accessor */
   1053 #define ksa_handler sa_handler
   1054 
   1055 #define VKI_SA_ONSTACK SA_ONSTACK
   1056 #define VKI_SA_ONESHOT SA_RESETHAND
   1057 #define VKI_SA_NOMASK SA_NODEFER
   1058 
   1059 #define VKI_MINSIGSTKSZ MINSIGSTKSZ
   1060 
   1061 #define VKI_SS_ONSTACK SS_ONSTACK
   1062 #define VKI_SS_DISABLE SS_DISABLE
   1063 
   1064 #define vki_stack_t stack_t
   1065 
   1066 #define VKI_SA_NOCLDSTOP SA_NOCLDSTOP
   1067 #define VKI_SA_RESTART SA_RESTART
   1068 #define VKI_SA_SIGINFO SA_SIGINFO
   1069 #define VKI_SA_NOCLDWAIT SA_NOCLDWAIT
   1070 #define VKI_SA_RESTORER 0 /* Solaris doesn't have this */
   1071 
   1072 #define VKI_SIGHUP SIGHUP               /*  1 */
   1073 #define VKI_SIGINT SIGINT               /*  2 */
   1074 #define VKI_SIGQUIT SIGQUIT             /*  3 */
   1075 #define VKI_SIGILL SIGILL               /*  4 */
   1076 #define VKI_SIGTRAP SIGTRAP             /*  5 */
   1077 #define VKI_SIGABRT SIGABRT             /*  6 */
   1078 #define VKI_SIGEMT SIGEMT               /*  7 */
   1079 #define VKI_SIGFPE SIGFPE               /*  8 */
   1080 #define VKI_SIGKILL SIGKILL             /*  9 */
   1081 #define VKI_SIGBUS SIGBUS               /* 10 */
   1082 #define VKI_SIGSEGV SIGSEGV             /* 11 */
   1083 #define VKI_SIGSYS SIGSYS               /* 12 */
   1084 #define VKI_SIGPIPE SIGPIPE             /* 13 */
   1085 #define VKI_SIGALRM SIGALRM             /* 14 */
   1086 #define VKI_SIGTERM SIGTERM             /* 15 */
   1087 #define VKI_SIGUSR1 SIGUSR1             /* 16 */
   1088 #define VKI_SIGUSR2 SIGUSR2             /* 17 */
   1089 #define VKI_SIGCHLD SIGCHLD             /* 18 */
   1090 #define VKI_SIGPWR SIGPWR               /* 19 */
   1091 #define VKI_SIGWINCH SIGWINCH           /* 20 */
   1092 #define VKI_SIGURG SIGURG               /* 21 */
   1093 #define VKI_SIGIO SIGIO                 /* 22 */
   1094 #define VKI_SIGSTOP SIGSTOP             /* 23 */
   1095 #define VKI_SIGTSTP SIGTSTP             /* 24 */
   1096 #define VKI_SIGCONT SIGCONT             /* 25 */
   1097 #define VKI_SIGTTIN SIGTTIN             /* 26 */
   1098 #define VKI_SIGTTOU SIGTTOU             /* 27 */
   1099 #define VKI_SIGVTALRM SIGVTALRM         /* 28 */
   1100 #define VKI_SIGPROF SIGPROF             /* 29 */
   1101 #define VKI_SIGXCPU SIGXCPU             /* 30 */
   1102 #define VKI_SIGXFSZ SIGXFSZ             /* 31 */
   1103 #define VKI_SIGWAITING SIGWAITING       /* 32 */
   1104 #define VKI_SIGLWP SIGLWP               /* 33 */
   1105 #define VKI_SIGFREEZE SIGFREEZE         /* 34 */
   1106 #define VKI_SIGTHAW SIGTHAW             /* 35 */
   1107 #define VKI_SIGCANCEL SIGCANCEL         /* 36 */
   1108 #define VKI_SIGLOST SIGLOST             /* 37 */
   1109 #define VKI_SIGXRES SIGXRES             /* 38 */
   1110 #define VKI_SIGJVM1 SIGJVM1             /* 39 */
   1111 #define VKI_SIGJVM2 SIGJVM2             /* 40 */
   1112 /* Note that SIGRTMIN and SIGRTMAX are actually macros calling into
   1113    libc's sysconf() which in turn calls into kernel. And it returns
   1114    these _SIGRTM* values. So we are safe until someone rebuilds Solaris
   1115    kernel with different values... */
   1116 #define VKI_SIGRTMIN _SIGRTMIN          /* 41 */
   1117 #define VKI_SIGRTMAX _SIGRTMAX          /* 72 */
   1118 
   1119 #define VKI_SIG_DFL SIG_DFL
   1120 #define VKI_SIG_IGN SIG_IGN
   1121 
   1122 #define VKI_SIG_BLOCK SIG_BLOCK
   1123 #define VKI_SIG_UNBLOCK SIG_UNBLOCK
   1124 #define VKI_SIG_SETMASK SIG_SETMASK
   1125 
   1126 
   1127 #include <sys/socket.h>
   1128 #define vki_sa_family_t sa_family_t
   1129 #define vki_sockaddr sockaddr
   1130 
   1131 #define vki_socklen_t socklen_t
   1132 
   1133 #define VKI_SOCK_STREAM SOCK_STREAM
   1134 
   1135 #define VKI_SO_TYPE SO_TYPE
   1136 #define VKI_SCM_RIGHTS SCM_RIGHTS
   1137 #define VKI_SOL_SOCKET SOL_SOCKET
   1138 
   1139 #define VKI_AF_UNIX AF_UNIX
   1140 #define VKI_AF_INET AF_INET
   1141 #define VKI_AF_INET6 AF_INET6
   1142 
   1143 #define vki_msghdr msghdr
   1144 #define vki_cmsghdr cmsghdr
   1145 
   1146 #define VKI_CMSG_ALIGN(a) _CMSG_DATA_ALIGN(a)
   1147 #define VKI_CMSG_DATA(cmsg) CMSG_DATA(cmsg)
   1148 #define VKI_CMSG_FIRSTHDR(mhdr) CMSG_FIRSTHDR(mhdr)
   1149 #define VKI_CMSG_NXTHDR(mhdr, cmsg) CMSG_NXTHDR(mhdr, cmsg)
   1150 
   1151 
   1152 #include <sys/socketvar.h>
   1153 #define VKI_SOV_DEFAULT SOV_DEFAULT
   1154 
   1155 
   1156 #include <sys/sockio.h>
   1157 #define VKI_SIOCGIFCONF SIOCGIFCONF
   1158 #define VKI_SIOCGIFFLAGS SIOCGIFFLAGS
   1159 #define VKI_SIOCGIFNETMASK SIOCGIFNETMASK
   1160 #define VKI_SIOCGIFNUM SIOCGIFNUM
   1161 #define VKI_SIOCGLIFBRDADDR SIOCGLIFBRDADDR
   1162 #define VKI_SIOCGLIFCONF SIOCGLIFCONF
   1163 #define VKI_SIOCGLIFFLAGS SIOCGLIFFLAGS
   1164 #define VKI_SIOCGLIFNETMASK SIOCGLIFNETMASK
   1165 #define VKI_SIOCGLIFNUM SIOCGLIFNUM
   1166 
   1167 
   1168 #if defined(SOLARIS_SPAWN_SYSCALL)
   1169 #include <sys/spawn_impl.h>
   1170 #define VKI_FA_CHDIR FA_CHDIR
   1171 #define VKI_FA_CLOSE FA_CLOSE
   1172 #define VKI_FA_CLOSEFROM FA_CLOSEFROM
   1173 #define VKI_FA_DUP2 FA_DUP2
   1174 #define VKI_FA_OPEN FA_OPEN
   1175 #define VKI_POSIX_SPAWN_NOEXECERR_NP POSIX_SPAWN_NOEXECERR_NP
   1176 #define VKI_POSIX_SPAWN_NOSIGCHLD_NP POSIX_SPAWN_NOSIGCHLD_NP
   1177 #define VKI_POSIX_SPAWN_RESETIDS POSIX_SPAWN_RESETIDS
   1178 #define VKI_POSIX_SPAWN_SETPGROUP POSIX_SPAWN_SETPGROUP
   1179 #define VKI_POSIX_SPAWN_SETSCHEDPARAM POSIX_SPAWN_SETSCHEDPARAM
   1180 #define VKI_POSIX_SPAWN_SETSCHEDULER POSIX_SPAWN_SETSCHEDULER
   1181 #define VKI_POSIX_SPAWN_SETSID_NP POSIX_SPAWN_SETSID_NP
   1182 #define VKI_POSIX_SPAWN_SETSIGDEF POSIX_SPAWN_SETSIGDEF
   1183 #define VKI_POSIX_SPAWN_SETSIGIGN_NP POSIX_SPAWN_SETSIGIGN_NP
   1184 #define VKI_POSIX_SPAWN_SETSIGMASK POSIX_SPAWN_SETSIGMASK
   1185 #define VKI_POSIX_SPAWN_SETVAMASK_NP POSIX_SPAWN_SETVAMASK_NP
   1186 #define VKI_POSIX_SPAWN_WAITPID_NP POSIX_SPAWN_WAITPID_NP
   1187 #define VKI_SPAWN_VERSION SPAWN_VERSION
   1188 #define vki_kfile_attr_t kfile_attr_t
   1189 #define vki_kspawn_attr_t kspawn_attr_t
   1190 #define vki_spawn_attr_t spawn_attr_t
   1191 #endif /* SOLARIS_SPAWN_SYSCALL */
   1192 
   1193 
   1194 #include <sys/stat.h>
   1195 #define vki_stat stat
   1196 #define vki_stat64 stat64
   1197 
   1198 #define st_atime_nsec st_atim.tv_nsec
   1199 #define st_mtime_nsec st_mtim.tv_nsec
   1200 #define st_ctime_nsec st_ctim.tv_nsec
   1201 
   1202 #define VKI_S_IFIFO S_IFIFO
   1203 #define VKI_S_ISUID S_ISUID
   1204 #define VKI_S_ISGID S_ISGID
   1205 
   1206 #define VKI_S_IRUSR S_IRUSR
   1207 #define VKI_S_IWUSR S_IWUSR
   1208 #define VKI_S_IXUSR S_IXUSR
   1209 #define VKI_S_IRGRP S_IRGRP
   1210 #define VKI_S_IWGRP S_IWGRP
   1211 #define VKI_S_IXGRP S_IXGRP
   1212 #define VKI_S_IROTH S_IROTH
   1213 #define VKI_S_IWOTH S_IWOTH
   1214 #define VKI_S_IXOTH S_IXOTH
   1215 
   1216 #define VKI_S_ISCHR S_ISCHR
   1217 #define VKI_S_ISDIR S_ISDIR
   1218 #define VKI_S_ISBLK S_ISBLK
   1219 #define VKI_S_ISREG S_ISREG
   1220 #define VKI_S_ISLNK S_ISLNK
   1221 
   1222 
   1223 #include <sys/statfs.h>
   1224 #define vki_statfs statfs
   1225 
   1226 
   1227 #include <sys/statvfs.h>
   1228 #define vki_statvfs statvfs
   1229 #define vki_statvfs64 statvfs64
   1230 
   1231 
   1232 #include <sys/stropts.h>
   1233 #define VKI_I_CANPUT I_CANPUT
   1234 #define VKI_I_FIND I_FIND
   1235 #define VKI_I_FLUSH I_FLUSH
   1236 #define VKI_I_PEEK I_PEEK
   1237 #define VKI_I_PUSH I_PUSH
   1238 #define VKI_I_STR I_STR
   1239 #define vki_strbuf strbuf
   1240 #define vki_strioctl strioctl
   1241 #define vki_strpeek strpeek
   1242 
   1243 
   1244 #include <sys/synch.h>
   1245 #define vki_lwp_mutex_t lwp_mutex_t
   1246 #define vki_lwp_cond_t lwp_cond_t
   1247 #define vki_lwp_sema_t lwp_sema_t
   1248 #define vki_lwp_rwlock_t lwp_rwlock_t
   1249 
   1250 /* Defines from the private sys/synch32.h header. */
   1251 #define vki_mutex_flag flags.flag1
   1252 #define vki_mutex_type flags.mbcp_type_un.mtype_rcount.count_type1
   1253 #define vki_mutex_rcount flags.mbcp_type_un.mtype_rcount.count_type2
   1254 #define vki_mutex_owner data
   1255 #define vki_mutex_lockw lock.lock64.pad[7]
   1256 #define vki_mutex_waiters lock.lock64.pad[6]
   1257 #define vki_mutex_ownerpid lock.lock32.ownerpid
   1258 
   1259 #define vki_cond_type flags.type
   1260 #define vki_cond_waiters_kernel flags.flag[3]
   1261 
   1262 #define vki_sema_count count
   1263 #define vki_sema_type type
   1264 #define vki_sema_waiters flags[7]
   1265 
   1266 #define vki_rwlock_readers readers
   1267 #define vki_rwlock_type type
   1268 #define vki_rwlock_owner readercv.data
   1269 #define vki_rwlock_ownerpid writercv.data
   1270 
   1271 
   1272 #include <sys/sysconfig.h>
   1273 #define VKI_CONFIG_OPEN_FILES _CONFIG_OPEN_FILES
   1274 
   1275 
   1276 #include <sys/sysi86.h>
   1277 #define VKI_SI86FPSTART SI86FPSTART
   1278 
   1279 
   1280 #if defined(HAVE_SYS_SYSNVL_H)
   1281 #include <sys/sysnvl.h>
   1282 #define VKI_SYSNVL_OP_GET SYSNVL_OP_GET
   1283 #define VKI_SYSNVL_OP_UPDATE SYSNVL_OP_UPDATE
   1284 #endif /* HAVE_SYS_SYSNVL_H */
   1285 
   1286 
   1287 #include <sys/systeminfo.h>
   1288 #define VKI_SI_SYSNAME SI_SYSNAME
   1289 #define VKI_SI_HOSTNAME SI_HOSTNAME
   1290 #define VKI_SI_RELEASE SI_RELEASE
   1291 #define VKI_SI_VERSION SI_VERSION
   1292 #define VKI_SI_MACHINE SI_MACHINE
   1293 #define VKI_SI_ARCHITECTURE SI_ARCHITECTURE
   1294 #define VKI_SI_HW_SERIAL SI_HW_SERIAL
   1295 #define VKI_SI_HW_PROVIDER SI_HW_PROVIDER
   1296 #define VKI_SI_SRPC_DOMAIN SI_SRPC_DOMAIN
   1297 
   1298 #define VKI_SI_SET_HOSTNAME SI_SET_HOSTNAME
   1299 #define VKI_SI_SET_SRCP_DOMAIN SI_SET_SRPC_DOMAIN
   1300 
   1301 #define VKI_SI_PLATFORM SI_PLATFORM
   1302 #define VKI_SI_ISALIST SI_ISALIST
   1303 #define VKI_SI_DHCP_CACHE SI_DHCP_CACHE
   1304 #define VKI_SI_ARCHITECTURE_32 SI_ARCHITECTURE_32
   1305 #define VKI_SI_ARCHITECTURE_64 SI_ARCHITECTURE_64
   1306 #define VKI_SI_ARCHITECTURE_K SI_ARCHITECTURE_K
   1307 #define VKI_SI_ARCHITECTURE_NATIVE SI_ARCHITECTURE_NATIVE
   1308 
   1309 
   1310 #include <sys/termio.h>
   1311 #define vki_termio termio
   1312 
   1313 
   1314 #include <sys/termios.h>
   1315 #define vki_termios termios
   1316 #define VKI_TCGETA TCGETA
   1317 #define VKI_TCGETS TCGETS
   1318 #define VKI_TCSETS TCSETS
   1319 #define VKI_TCSETSF TCSETSF
   1320 #define VKI_TCSETSW TCSETSW
   1321 #define VKI_TIOCGPGRP TIOCGPGRP
   1322 #define VKI_TIOCGSID TIOCGSID
   1323 #define VKI_TIOCGWINSZ TIOCGWINSZ
   1324 #define VKI_TIOCNOTTY TIOCNOTTY
   1325 #define VKI_TIOCSCTTY TIOCSCTTY
   1326 #define VKI_TIOCSPGRP TIOCSPGRP
   1327 #define VKI_TIOCSWINSZ TIOCSWINSZ
   1328 #define vki_winsize winsize
   1329 
   1330 
   1331 #include <sys/time.h>
   1332 #define VKI_CLOCK_MONOTONIC CLOCK_MONOTONIC
   1333 
   1334 #define vki_clockid_t clockid_t
   1335 #define vki_timespec timespec
   1336 #define vki_timespec_t timespec_t
   1337 #define vki_timeval timeval
   1338 #define vki_timezone timezone
   1339 #define vki_itimerspec itimerspec
   1340 #define vki_itimerval itimerval
   1341 
   1342 
   1343 #include <sys/times.h>
   1344 #define vki_tms tms
   1345 
   1346 
   1347 #include <sys/tsol/label_macro.h>
   1348 #define vki_bslabel_t bslabel_t
   1349 
   1350 
   1351 /* Do not include sys/tsol/tndb.h if a C++ compiler is used to build a file
   1352    which includes vki-solaris.h.  This cannot be done because the tndb.h
   1353    header file uses the template keyword as a member name (on illumos). */
   1354 #if !defined(__cplusplus)
   1355 #include <sys/tsol/tndb.h>
   1356 #define VKI_TNDB_DELETE TNDB_DELETE
   1357 #define VKI_TNDB_FLUSH TNDB_FLUSH
   1358 #define VKI_TNDB_GET TNDB_GET
   1359 #if defined(SOLARIS_TNDB_GET_TNIP)
   1360 #define VKI_TNDB_GET_TNIP TNDB_GET_TNIP
   1361 #endif /* SOLARIS_TNDB_GET_TNIP */
   1362 #define VKI_TNDB_LOAD TNDB_LOAD
   1363 #define vki_tsol_mlpent_t tsol_mlpent_t
   1364 #define vki_tsol_rhent_t tsol_rhent_t
   1365 #define vki_tsol_tpent_t tsol_tpent_t
   1366 #endif /* !__cplusplus */
   1367 
   1368 
   1369 #include <sys/tsol/tsyscall.h>
   1370 #define VKI_TSOL_FGETLABEL TSOL_FGETLABEL
   1371 #define VKI_TSOL_GETLABEL TSOL_GETLABEL
   1372 #define VKI_TSOL_TNMLP TSOL_TNMLP
   1373 #define VKI_TSOL_TNRH TSOL_TNRH
   1374 #define VKI_TSOL_TNRHTP TSOL_TNRHTP
   1375 #define VKI_TSOL_SYSLABELING TSOL_SYSLABELING
   1376 #if defined(SOLARIS_TSOL_CLEARANCE)
   1377 #define VKI_TSOL_GETCLEARANCE TSOL_GETCLEARANCE
   1378 #define VKI_TSOL_SETCLEARANCE TSOL_SETCLEARANCE
   1379 #endif /* SOLARIS_TSOL_CLEARANCE */
   1380 
   1381 
   1382 #include <sys/ttold.h>
   1383 #define vki_sgttyb sgttyb
   1384 
   1385 
   1386 #include <sys/ucontext.h>
   1387 /* This section also contains items defined in sys/regset.h, this file
   1388    is directly included in sys/ucontext.h. */
   1389 #if defined(VGP_x86_solaris)
   1390 #define VKI_SS SS
   1391 #define VKI_UESP UESP
   1392 #define VKI_EFL EFL
   1393 #define VKI_CS CS
   1394 #define VKI_EIP EIP
   1395 #define VKI_ERR 13 /* ERR */
   1396 #define VKI_TRAPNO TRAPNO
   1397 #define VKI_EAX EAX
   1398 #define VKI_ECX ECX
   1399 #define VKI_EDX EDX
   1400 #define VKI_EBX EBX
   1401 #define VKI_ESP ESP
   1402 #define VKI_EBP EBP
   1403 #define VKI_ESI ESI
   1404 #define VKI_EDI EDI
   1405 #define VKI_DS DS
   1406 #define VKI_ES ES
   1407 #define VKI_FS FS
   1408 #define VKI_GS GS
   1409 
   1410 /* Definitions for compatibility with amd64-solaris. */
   1411 #define VKI_REG_ERR VKI_ERR
   1412 #define VKI_REG_TRAPNO VKI_TRAPNO
   1413 
   1414 #define VKI_EFLAGS_ID_BIT (1 << 21)
   1415 
   1416 #elif defined(VGP_amd64_solaris)
   1417 #define VKI_REG_GSBASE REG_GSBASE
   1418 #define VKI_REG_FSBASE REG_FSBASE
   1419 #define VKI_REG_DS REG_DS
   1420 #define VKI_REG_ES REG_ES
   1421 #define VKI_REG_GS REG_GS
   1422 #define VKI_REG_FS REG_FS
   1423 #define VKI_REG_SS REG_SS
   1424 #define VKI_REG_RSP REG_RSP
   1425 #define VKI_REG_RFL REG_RFL
   1426 #define VKI_REG_CS REG_CS
   1427 #define VKI_REG_RIP REG_RIP
   1428 #define VKI_REG_ERR REG_ERR
   1429 #define VKI_REG_TRAPNO REG_TRAPNO
   1430 #define VKI_REG_RAX REG_RAX
   1431 #define VKI_REG_RCX REG_RCX
   1432 #define VKI_REG_RDX REG_RDX
   1433 #define VKI_REG_RBX REG_RBX
   1434 #define VKI_REG_RBP REG_RBP
   1435 #define VKI_REG_RSI REG_RSI
   1436 #define VKI_REG_RDI REG_RDI
   1437 #define VKI_REG_R8 REG_R8
   1438 #define VKI_REG_R9 REG_R9
   1439 #define VKI_REG_R10 REG_R10
   1440 #define VKI_REG_R11 REG_R11
   1441 #define VKI_REG_R12 REG_R12
   1442 #define VKI_REG_R13 REG_R13
   1443 #define VKI_REG_R14 REG_R14
   1444 #define VKI_REG_R15 REG_R15
   1445 
   1446 #define VKI_RFLAGS_ID_BIT (1 << 21)
   1447 
   1448 #else
   1449 #error "Unknown platform"
   1450 #endif
   1451 
   1452 #define vki_fpregset_t fpregset_t
   1453 
   1454 /* Don't polute global namespace so much. */
   1455 #undef r_r0
   1456 #undef r_r1
   1457 #undef r_fp
   1458 #undef r_sp
   1459 #undef r_pc
   1460 #undef r_ps
   1461 #undef ERR
   1462 
   1463 #if defined(VGP_x86_solaris)
   1464 /* The ucontext structure as defined in the SYSV ABI for Intel386. Illumos
   1465    contains exactly this definition. Solaris 11 utilizes two uc_filler values
   1466    -> "xrs_t uc_xrs; long uc_filler[3];". The xrs_t structure is used for the
   1467    AVX support. We define our own ucontext structure because all five
   1468    uc_filler values need to be available in VG_(save_context). Note that
   1469    Valgrind doesn't support AVX on the x86 platform. */
   1470 typedef struct sysv_ucontext sysv_ucontext_t;
   1471 struct sysv_ucontext {
   1472    unsigned long uc_flags;
   1473    sysv_ucontext_t *uc_link;
   1474    sigset_t uc_sigmask;
   1475    stack_t uc_stack;
   1476    mcontext_t uc_mcontext;
   1477    long uc_filler[5];
   1478 };
   1479 #define VKI_UC_GUEST_CC_OP(uc) (*(UWord*)&(uc)->uc_filler[0])
   1480 #define VKI_UC_GUEST_CC_NDEP(uc) (*(UWord*)&(uc)->uc_filler[1])
   1481 #define VKI_UC_GUEST_CC_DEP1(uc) (*(UWord*)&(uc)->uc_filler[2])
   1482 #define VKI_UC_GUEST_CC_DEP2(uc) (*(UWord*)&(uc)->uc_filler[3])
   1483 #define VKI_UC_GUEST_EFLAGS_NEG(uc) \
   1484    (*(UWord*)&(uc)->uc_mcontext.fpregs.fp_reg_set.fpchip_state.__pad[0])
   1485 #define VKI_UC_GUEST_EFLAGS_CHECKSUM(uc) \
   1486    (*(UWord*)&(uc)->uc_mcontext.fpregs.fp_reg_set.fpchip_state.__pad[1])
   1487 #define VKI_UC_SIGNO(uc) (*(UWord*)&(uc)->uc_filler[4])
   1488 #define VKI_UC_SIGNO_CONST(uc) (*(const UWord*)&(uc)->uc_filler[4])
   1489 
   1490 #define vki_ucontext_t sysv_ucontext_t
   1491 #define vki_ucontext sysv_ucontext
   1492 
   1493 #elif defined(VGP_amd64_solaris)
   1494 /* The ucontext structure on Solaris has only 3 elements available in uc_filler
   1495    which is not enough to store all required information. Therefore padding
   1496    area in mcontext's FPU regset is used. */
   1497 #define vki_ucontext ucontext
   1498 #define vki_ucontext_t ucontext_t
   1499 #define VKI_UC_MC_FP_FX_IGN2(uc) \
   1500     (uc)->uc_mcontext.fpregs.fp_reg_set.fpchip_state.__fx_ign2
   1501 #define VKI_UC_GUEST_CC_OP(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[0])
   1502 #define VKI_UC_GUEST_CC_NDEP(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[1])
   1503 #define VKI_UC_GUEST_CC_DEP1(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[2])
   1504 #define VKI_UC_GUEST_CC_DEP2(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[3])
   1505 #define VKI_UC_GUEST_RFLAGS_NEG(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[4])
   1506 #define VKI_UC_GUEST_RFLAGS_CHECKSUM(uc) \
   1507    (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[5])
   1508 #define VKI_UC_SIGNO(uc) (*(UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[6])
   1509 #define VKI_UC_SIGNO_CONST(uc) (*(const UWord *) &VKI_UC_MC_FP_FX_IGN2(uc)[6])
   1510 
   1511 #else
   1512 #error "Unknown platform"
   1513 #endif
   1514 
   1515 #if defined(SOLARIS_FPCHIP_STATE_TAKES_UNDERSCORE)
   1516 #define vki_fpchip_state _fpchip_state
   1517 #else
   1518 #define vki_fpchip_state fpchip_state
   1519 #endif /* SOLARIS_FPCHIP_STATE_TAKES_UNDERSCORE */
   1520 
   1521 #define VKI_GETCONTEXT GETCONTEXT
   1522 #define VKI_SETCONTEXT SETCONTEXT
   1523 #define VKI_GETUSTACK GETUSTACK
   1524 #define VKI_SETUSTACK SETUSTACK
   1525 
   1526 #define VKI_UC_SIGMASK UC_SIGMASK
   1527 #define VKI_UC_STACK UC_STACK
   1528 #define VKI_UC_CPU UC_CPU
   1529 #define VKI_UC_FPU UC_FPU
   1530 #define VKI_UC_ALL UC_ALL
   1531 
   1532 #include <sys/uio.h>
   1533 #define vki_iovec iovec
   1534 
   1535 
   1536 #include <sys/un.h>
   1537 #define vki_sockaddr_un sockaddr_un
   1538 
   1539 
   1540 #if defined(SOLARIS_UUIDSYS_SYSCALL)
   1541 #include <sys/uuid.h>
   1542 #define vki_uuid uuid
   1543 #endif /* SOLARIS_UUIDSYS_SYSCALL */
   1544 
   1545 
   1546 #include <sys/utsname.h>
   1547 #define vki_utsname utsname
   1548 /* Add another alias for utsname, used in syswrap-generic.c. */
   1549 #define vki_new_utsname utsname
   1550 
   1551 
   1552 #include <sys/vm_usage.h>
   1553 #define vki_vmusage_t vmusage_t
   1554 
   1555 
   1556 #include <sys/wait.h>
   1557 #define VKI_WEXITED WEXITED
   1558 #define VKI_WTRAPPED WTRAPPED
   1559 
   1560 #define VKI_WSTOPFLG WSTOPFLG
   1561 #define VKI_WCONTFLG WCONTFLG
   1562 #define VKI_WCOREFLG WCOREFLG
   1563 
   1564 
   1565 #include <sys/zone.h>
   1566 #define VKI_ZONE_ADD_DATALINK ZONE_ADD_DATALINK
   1567 #define VKI_ZONE_ATTR_NAME ZONE_ATTR_NAME
   1568 #define VKI_ZONE_BOOT ZONE_BOOT
   1569 #define VKI_ZONE_CHECK_DATALINK ZONE_CHECK_DATALINK
   1570 #define VKI_ZONE_CREATE ZONE_CREATE
   1571 #define VKI_ZONE_DEL_DATALINK ZONE_DEL_DATALINK
   1572 #define VKI_ZONE_DESTROY ZONE_DESTROY
   1573 #define VKI_ZONE_ENTER ZONE_ENTER
   1574 #define VKI_ZONE_GETATTR ZONE_GETATTR
   1575 #define VKI_ZONE_LIST ZONE_LIST
   1576 #define VKI_ZONE_LIST_DATALINK ZONE_LIST_DATALINK
   1577 #define VKI_ZONE_LOOKUP ZONE_LOOKUP
   1578 #define VKI_ZONE_SETATTR ZONE_SETATTR
   1579 #define VKI_ZONE_SHUTDOWN ZONE_SHUTDOWN
   1580 #if defined(SOLARIS_ZONE_DEFUNCT)
   1581 #define VKI_ZONE_GETATTR_DEFUNCT ZONE_GETATTR_DEFUNCT
   1582 #define VKI_ZONE_LIST_DEFUNCT ZONE_LIST_DEFUNCT
   1583 #endif /* SOLARIS_ZONE_DEFUNCT */
   1584 #define VKI_ZONENAME_MAX ZONENAME_MAX
   1585 #define vki_zone_def zone_def
   1586 #define vki_zoneid_t zoneid_t
   1587 
   1588 
   1589 /* from <sys/ucred.h> which is consolidation private */
   1590 #define VKI_UCREDSYS_UCREDGET 0
   1591 #define VKI_UCREDSYS_GETPEERUCRED 1
   1592 struct ucred_s {
   1593    vki_uint32_t uc_size;     /* Size of the full structure */
   1594    vki_uint32_t uc_credoff;  /* Credential offset */
   1595    vki_uint32_t uc_privoff;  /* Privilege offset */
   1596    vki_pid_t    uc_pid;      /* Process id */
   1597    vki_uint32_t uc_audoff;   /* Audit info offset */
   1598    vki_zoneid_t uc_zoneid;   /* Zone id */
   1599    vki_projid_t uc_projid;   /* Project id */
   1600    vki_uint32_t uc_labeloff; /* label offset */
   1601 };
   1602 
   1603 
   1604 /* from sys/old_procfs.h which clashes with sys/procfs.h */
   1605 
   1606 #define VKI_ELF_OLD_PR_PCINVAL 0x0080
   1607 
   1608 typedef struct vki_elf_prpsinfo {
   1609    char		pr_state;	/* numeric process state (see pr_sname) */
   1610    char		pr_sname;	/* printable character representing pr_state */
   1611    char		pr_zomb;	/* !=0: process terminated but not waited for */
   1612    char		pr_nice;	/* nice for cpu usage */
   1613    vki_uint_t	pr_flag;	/* process flags */
   1614    vki_uid_t	pr_uid;		/* real user id */
   1615    vki_gid_t	pr_gid;		/* real group id */
   1616    vki_pid_t	pr_pid;		/* unique process id */
   1617    vki_pid_t	pr_ppid;	/* process id of parent */
   1618    vki_pid_t	pr_pgrp;	/* pid of process group leader */
   1619    vki_pid_t	pr_sid;		/* session id */
   1620    vki_caddr_t	pr_addr;	/* physical address of process */
   1621    vki_size_t	pr_size;	/* size of process image in pages */
   1622    vki_size_t	pr_rssize;	/* resident set size in pages */
   1623    vki_caddr_t	pr_wchan;	/* wait addr for sleeping process */
   1624    vki_timespec_t pr_start;	/* process start time, sec+nsec since epoch */
   1625    vki_timespec_t pr_time;	/* usr+sys cpu time for this process */
   1626    int		pr_pri;		/* priority, high value is high priority */
   1627    char		pr_oldpri;	/* pre-SVR4, low value is high priority */
   1628    char		pr_cpu;		/* pre-SVR4, cpu usage for scheduling */
   1629    vki_o_dev_t	pr_ottydev;	/* short tty device number */
   1630    vki_dev_t	pr_lttydev;	/* controlling tty device (PRNODEV if none) */
   1631    char		pr_clname[8];	/* scheduling class name */
   1632    char		pr_fname[16];	/* last component of execed pathname */
   1633    char		pr_psargs[80];	/* initial characters of arg list */
   1634    short	pr_syscall;	/* system call number (if in syscall) */
   1635    short	pr_fill;
   1636    vki_timespec_t pr_ctime;	/* usr+sys cpu time for reaped children */
   1637    vki_size_t	pr_bysize;	/* size of process image in bytes */
   1638    vki_size_t	pr_byrssize;	/* resident set size in bytes */
   1639    int		pr_argc;	/* initial argument count */
   1640    char		**pr_argv;	/* initial argument vector */
   1641    char		**pr_envp;	/* initial environment vector */
   1642    int		pr_wstat;	/* if zombie, the wait() status */
   1643                 	        /* The following percent numbers are 16-bit binary */
   1644                 	        /* fractions [0 .. 1] with the binary point to the */
   1645                 	        /* right of the high-order bit (one == 0x8000) */
   1646    ushort_t 	pr_pctcpu;	/* % of recent cpu time, one or all lwps */
   1647    ushort_t 	pr_pctmem;	/* % of of system memory used by the process */
   1648    vki_uid_t	pr_euid;	/* effective user id */
   1649    vki_gid_t	pr_egid;	/* effective group id */
   1650    vki_id_t	pr_aslwpid;	/* historical; now always zero */
   1651    char		pr_dmodel;	/* data model of the process */
   1652    char		pr_pad[3];
   1653    int		pr_filler[6];	/* for future expansion */
   1654 } vki_elf_prpsinfo_t;
   1655 
   1656 typedef struct vki_elf_prstatus {
   1657    int		pr_flags;	/* Flags (see below) */
   1658    short	pr_why;		/* Reason for process stop (if stopped) */
   1659    short	pr_what;	/* More detailed reason */
   1660    vki_siginfo_t pr_info;	/* Info associated with signal or fault */
   1661    short	pr_cursig;	/* Current signal */
   1662    ushort_t 	pr_nlwp;	/* Number of lwps in the process */
   1663    vki_sigset_t pr_sigpend;	/* Set of signals pending to the process */
   1664    vki_sigset_t pr_sighold;	/* Set of signals held (blocked) by the lwp */
   1665    struct vki_sigaltstack pr_altstack; /* Alternate signal stack info */
   1666    struct sigaction pr_action;	/* Signal action for current signal */
   1667    vki_pid_t	pr_pid;		/* Process id */
   1668    vki_pid_t	pr_ppid;	/* Parent process id */
   1669    vki_pid_t	pr_pgrp;	/* Process group id */
   1670    vki_pid_t	pr_sid;		/* Session id */
   1671    vki_timespec_t pr_utime;	/* Process user cpu time */
   1672    vki_timespec_t pr_stime;	/* Process system cpu time */
   1673    vki_timespec_t pr_cutime;	/* Sum of children's user times */
   1674    vki_timespec_t pr_cstime;	/* Sum of children's system times */
   1675    char	pr_clname[PRCLSZ]; 	/* Scheduling class name */
   1676    short	pr_syscall;	/* System call number (if in syscall) */
   1677    short	pr_nsysarg;	/* Number of arguments to this syscall */
   1678    long	pr_sysarg[PRSYSARGS];	/* Arguments to this syscall */
   1679    vki_id_t	pr_who;		/* Specific lwp identifier */
   1680    vki_sigset_t pr_lwppend;	/* Set of signals pending to the lwp */
   1681    struct vki_ucontext *pr_oldcontext; /* Address of previous ucontext */
   1682    vki_caddr_t	pr_brkbase;	/* Address of the process heap */
   1683    vki_size_t	pr_brksize;	/* Size of the process heap, in bytes */
   1684    vki_caddr_t	pr_stkbase;	/* Address of the process stack */
   1685    vki_size_t	pr_stksize;	/* Size of the process stack, in bytes */
   1686    short	pr_processor;	/* processor which last ran this LWP */
   1687    short	pr_bind;	/* processor LWP bound to or PBIND_NONE */
   1688    long		pr_instr;	/* Current instruction */
   1689    vki_prgregset_t pr_reg;	/* General registers */
   1690 } vki_elf_prstatus_t;
   1691 
   1692 
   1693 /* Signal frames. */
   1694 #if defined(VGP_x86_solaris)
   1695 struct vki_sigframe {
   1696    /* First four words look like a call to a 3-arg x86 function. */
   1697    void *return_addr;
   1698    int a1_signo;
   1699    vki_siginfo_t *a2_siginfo;
   1700    vki_ucontext_t *a3_ucontext;
   1701    /* Saved ucontext and siginfo. */
   1702    vki_ucontext_t ucontext;
   1703    vki_siginfo_t siginfo;
   1704 };
   1705 
   1706 #elif defined(VGP_amd64_solaris)
   1707 struct vki_sigframe {
   1708    void *return_addr;
   1709    long a1_signo;
   1710    vki_siginfo_t *a2_siginfo;
   1711    /* Saved ucontext and siginfo. */
   1712    vki_ucontext_t ucontext;
   1713    vki_siginfo_t siginfo;
   1714 };
   1715 
   1716 #else
   1717 #error "Unknown platform"
   1718 #endif
   1719 typedef struct vki_sigframe vki_sigframe_t;
   1720 
   1721 #endif // __VKI_SOLARIS_H
   1722 
   1723 /*--------------------------------------------------------------------*/
   1724 /*--- end                                                          ---*/
   1725 /*--------------------------------------------------------------------*/
   1726