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 (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-2015, 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 #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 181 typedef 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" 311 typedef 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; 320 typedef 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)). */ 875 union 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: */ 984 typedef struct sigaction vki_sigaction_toK_t; 985 typedef 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. */ 1395 typedef struct sysv_ucontext sysv_ucontext_t; 1396 struct 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 1513 struct 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 1529 typedef 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 1577 typedef 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) 1616 struct 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) 1628 struct 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 1640 typedef struct vki_sigframe vki_sigframe_t; 1641 1642 #endif // __VKI_SOLARIS_H 1643 1644 /*--------------------------------------------------------------------*/ 1645 /*--- end ---*/ 1646 /*--------------------------------------------------------------------*/ 1647