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