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