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