blob: 5b7bb21c473ae1d7f9eaf7e6f368dc6b9791e0cf [file] [log] [blame]
sewardj8eb8bab2015-07-21 14:44:28 +00001
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
Elliott Hughesed398002017-06-21 14:41:24 -070010 Copyright (C) 2011-2017 Petr Pavlu
sewardj8eb8bab2015-07-21 14:44:28 +000011 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
Elliott Hughesed398002017-06-21 14:41:24 -070031/* Copyright 2013-2017, Ivo Raisr <ivosh@ivosh.net> */
sewardj8eb8bab2015-07-21 14:44:28 +000032
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
sewardj8eb8bab2015-07-21 14:44:28 +000063#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
iraisre0365402015-09-25 20:12:26 +000073#define VKI_UINTPTR_MAX UINTPTR_MAX
sewardj8eb8bab2015-07-21 14:44:28 +000074#define vki_boolean_t boolean_t
75#define vki_datalink_id_t datalink_id_t
76#define vki_uint_t uint_t
77#define vki_uint32_t uint32_t
78#define vki_uint64_t uint64_t
79#define vki_ulong_t ulong_t
80#define vki_caddr_t caddr_t
81#define vki_dev_t dev_t
82#define vki_off_t off_t
83#define vki_id_t id_t
84#define vki_key_t key_t
85#define vki_mode_t mode_t
86#define vki_o_dev_t o_dev_t
87#define vki_projid_t projid_t
88#define vki_uid_t uid_t
89#define vki_gid_t gid_t
90#define vki_pid_t pid_t
91#define vki_size_t size_t
92#define vki_time_t time_t
93#define vki_timer_t timer_t
94#define vki_uchar_t uchar_t
95
96typedef uint32_t vki_u32;
97
98
99#include <sys/types32.h>
100#define vki_size32_t size32_t
101
102
103#include <fcntl.h>
104#define VKI_SEEK_SET SEEK_SET
105
106
107#include <limits.h>
108#define VKI_NGROUPS_MAX NGROUPS_MAX
109#define VKI_PATH_MAX PATH_MAX
110/* Used in launcher-linux.c which we share with Linux port. */
111#define VKI_BINPRM_BUF_SIZE VKI_PATH_MAX
112
113
114#include <ucred.h>
115#define vki_ucred_t ucred_t
116
117
118#include <unistd.h>
119#define VKI_R_OK R_OK
120#define VKI_W_OK W_OK
121#define VKI_X_OK X_OK
122
123
124#include <bsm/audit.h>
125#define VKI_A_GETAMASK A_GETAMASK
126#define VKI_A_GETCAR A_GETCAR
127#define VKI_A_GETCLASS A_GETCLASS
128#define VKI_A_GETCOND A_GETCOND
129#define VKI_A_GETCWD A_GETCWD
130#define VKI_A_GETKAUDIT A_GETKAUDIT
131#define VKI_A_GETKMASK A_GETKMASK
132#define VKI_A_GETPINFO A_GETPINFO
133#define VKI_A_GETPINFO_ADDR A_GETPINFO_ADDR
134#define VKI_A_GETPOLICY A_GETPOLICY
135#define VKI_A_GETQCTRL A_GETQCTRL
Elliott Hughesa0664b92017-04-18 17:46:52 -0700136#if defined(SOLARIS_AUDITON_STAT)
sewardj8eb8bab2015-07-21 14:44:28 +0000137#define VKI_A_GETSTAT A_GETSTAT
Elliott Hughesa0664b92017-04-18 17:46:52 -0700138#define VKI_A_SETSTAT A_SETSTAT
139#endif /* SOLARIS_AUDITON_STAT */
sewardj8eb8bab2015-07-21 14:44:28 +0000140#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
sewardj8eb8bab2015-07-21 14:44:28 +0000149#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
sewardj8eb8bab2015-07-21 14:44:28 +0000163#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
Elliott Hughesa0664b92017-04-18 17:46:52 -0700167#if defined(SOLARIS_AUDITON_STAT)
168#define vki_au_stat_t au_stat_t
169#endif /* SOLARIS_AUDITON_STAT */
sewardj8eb8bab2015-07-21 14:44:28 +0000170
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
185typedef 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>
iraisr2d20d8d2015-09-29 05:20:16 +0000210#define vki_ifconf ifconf
211#define vki_ifreq ifreq
iraisrf185f3c2015-09-29 14:23:51 +0000212#define vki_lifconf lifconf
sewardj8eb8bab2015-07-21 14:44:28 +0000213#define vki_lifnum lifnum
iraisrf185f3c2015-09-29 14:23:51 +0000214#define vki_lifreq lifreq
sewardj8eb8bab2015-07-21 14:44:28 +0000215
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
Elliott Hughesa0664b92017-04-18 17:46:52 -0700260#define VKI_AT_ENTRY AT_ENTRY
sewardj8eb8bab2015-07-21 14:44:28 +0000261#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
iraisre0365402015-09-25 20:12:26 +0000265#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
sewardj8eb8bab2015-07-21 14:44:28 +0000271
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"
316typedef 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;
325typedef 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
Elliott Hughesa0664b92017-04-18 17:46:52 -0700348#include <sys/dditypes.h>
349#include <sys/devinfo_impl.h>
350#define VKI_DINFOUSRLD DINFOUSRLD
351#define VKI_DINFOIDENT DINFOIDENT
352
353
sewardj8eb8bab2015-07-21 14:44:28 +0000354#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
iraisre8b9ee32015-08-31 21:31:09 +0000477#define VKI_EADDRINUSE EADDRINUSE
sewardj8eb8bab2015-07-21 14:44:28 +0000478
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
Elliott Hughesa0664b92017-04-18 17:46:52 -0700486#include <sys/fasttrap.h>
487#define VKI_PT_SUNWDTRACE_SIZE PT_SUNWDTRACE_SIZE
488
489
sewardj8eb8bab2015-07-21 14:44:28 +0000490#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
Elliott Hughesed398002017-06-21 14:41:24 -0700503#define VKI_F_DUPFD_CLOEXEC F_DUPFD_CLOEXEC
sewardj8eb8bab2015-07-21 14:44:28 +0000504#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
Elliott Hughesed398002017-06-21 14:41:24 -0700510/* SVR3 rfs compatibility const, declared only if _KERNEL or _KMEMUSER is
sewardj8eb8bab2015-07-21 14:44:28 +0000511 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
Elliott Hughesa0664b92017-04-18 17:46:52 -0700578#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
sewardj8eb8bab2015-07-21 14:44:28 +0000585#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
Elliott Hughesed398002017-06-21 14:41:24 -0700607#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
iraisr7d4aa192015-10-12 19:10:42 +0000627#include <sys/loadavg.h>
628#define VKI_LOADAVG_NSTATS LOADAVG_NSTATS
629
630
sewardj8eb8bab2015-07-21 14:44:28 +0000631#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
Elliott Hughesed398002017-06-21 14:41:24 -0700666#define vki_meminfo_t meminfo_t
667
sewardj8eb8bab2015-07-21 14:44:28 +0000668
669#include <sys/mntio.h>
Elliott Hughesa0664b92017-04-18 17:46:52 -0700670#define VKI_MNTIOC_GETEXTMNTENT MNTIOC_GETEXTMNTENT
sewardj8eb8bab2015-07-21 14:44:28 +0000671#define VKI_MNTIOC_GETMNTANY MNTIOC_GETMNTANY
672
673
674#include <sys/mnttab.h>
Elliott Hughesa0664b92017-04-18 17:46:52 -0700675#define vki_extmnttab extmnttab
sewardj8eb8bab2015-07-21 14:44:28 +0000676#define vki_mntentbuf mntentbuf
677#define vki_mnttab mnttab
678
679
Elliott Hughesa0664b92017-04-18 17:46:52 -0700680#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
sewardj8eb8bab2015-07-21 14:44:28 +0000698#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
Elliott Hughesed398002017-06-21 14:41:24 -0700839#define VKI_POP_AND POP_AND
sewardj8eb8bab2015-07-21 14:44:28 +0000840#define vki_procset_t procset_t
841
842
iraisr7d4aa192015-10-12 19:10:42 +0000843#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
sewardj8eb8bab2015-07-21 14:44:28 +0000861#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)). */
941union 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: */
1050typedef struct sigaction vki_sigaction_toK_t;
1051typedef 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>
iraisr2d20d8d2015-09-29 05:20:16 +00001157#define VKI_SIOCGIFCONF SIOCGIFCONF
1158#define VKI_SIOCGIFFLAGS SIOCGIFFLAGS
1159#define VKI_SIOCGIFNETMASK SIOCGIFNETMASK
1160#define VKI_SIOCGIFNUM SIOCGIFNUM
iraisrf185f3c2015-09-29 14:23:51 +00001161#define VKI_SIOCGLIFBRDADDR SIOCGLIFBRDADDR
1162#define VKI_SIOCGLIFCONF SIOCGLIFCONF
1163#define VKI_SIOCGLIFFLAGS SIOCGLIFFLAGS
1164#define VKI_SIOCGLIFNETMASK SIOCGLIFNETMASK
sewardj8eb8bab2015-07-21 14:44:28 +00001165#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
Elliott Hughesa0664b92017-04-18 17:46:52 -07001234#define VKI_I_FIND I_FIND
1235#define VKI_I_FLUSH I_FLUSH
sewardj8eb8bab2015-07-21 14:44:28 +00001236#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
Elliott Hughesa0664b92017-04-18 17:46:52 -07001280#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
sewardj8eb8bab2015-07-21 14:44:28 +00001287#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. */
1470typedef struct sysv_ucontext sysv_ucontext_t;
1471struct 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
Elliott Hughesa0664b92017-04-18 17:46:52 -07001515#if defined(SOLARIS_FPCHIP_STATE_TAKES_UNDERSCORE)
1516#define vki_fpchip_state _fpchip_state
1517#else
sewardj8eb8bab2015-07-21 14:44:28 +00001518#define vki_fpchip_state fpchip_state
Elliott Hughesa0664b92017-04-18 17:46:52 -07001519#endif /* SOLARIS_FPCHIP_STATE_TAKES_UNDERSCORE */
sewardj8eb8bab2015-07-21 14:44:28 +00001520
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
1592struct 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
1608typedef 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
1656typedef 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)
1695struct 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)
1707struct 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
1719typedef struct vki_sigframe vki_sigframe_t;
1720
1721#endif // __VKI_SOLARIS_H
1722
1723/*--------------------------------------------------------------------*/
1724/*--- end ---*/
1725/*--------------------------------------------------------------------*/