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