1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
24 */
25
26#ifndef _S10_BRAND_H
27#define	_S10_BRAND_H
28
29#ifdef	__cplusplus
30extern "C" {
31#endif
32
33#include <sys/brand.h>
34
35#define	S10_BRANDNAME		"solaris10"
36
37#define	S10_VERSION_1		1
38#define	S10_VERSION		S10_VERSION_1
39
40#define	S10_LIB_NAME		"s10_brand.so.1"
41#define	S10_LINKER_NAME		"ld.so.1"
42
43#define	S10_LIB32		BRAND_NATIVE_DIR "usr/lib/" S10_LIB_NAME
44#define	S10_LINKER32		"/lib/" S10_LINKER_NAME
45
46#define	S10_LIB64		BRAND_NATIVE_DIR "usr/lib/64/" S10_LIB_NAME
47#define	S10_LINKER64		"/lib/64/" S10_LINKER_NAME
48
49#if defined(_LP64)
50#define	S10_LIB		S10_LIB64
51#define	S10_LINKER	S10_LINKER64
52#else /* !_LP64 */
53#define	S10_LIB		S10_LIB32
54#define	S10_LINKER	S10_LINKER32
55#endif /* !_LP64 */
56
57/*
58 * Solaris 10 value of _SIGRTMIN, _SIGRTMAX, MAXSIG, NSIG
59 */
60#define	S10_SIGRTMIN	41
61#define	S10_SIGRTMAX	48
62#define	S10_MAXSIG	48
63#define	S10_NSIG	49
64
65/*
66 * Brand system call subcodes.  0-127 are reserved for generic subcodes.
67 */
68#define	B_S10_PIDINFO		128
69#define	B_S10_NATIVE		130
70#define	B_S10_FSREGCORRECTION	131
71#define	B_S10_ISFDXATTRDIR	132
72
73/*
74 * Versioning flags
75 *
76 * The first enum value must be zero.  Place new enum values at the end of the
77 * list but before S10_NUM_EMUL_FEATURES, which must always come last.
78 * Enum values should start with "S10_FEATURE_" and be named after the
79 * fixes/backports that they represent.  For example, an enum value representing
80 * a backport that changes a MNTFS ioctl could be named
81 * "S10_FEATURE_ALTERED_MNTFS_IOCTL".
82 */
83enum s10_emulated_features {
84	S10_FEATURE_ALTERED_MNTFS_IOCTL,
85	S10_FEATURE_U9_ZFS_IOCTL,	/* S10u9 ZFS ioctl changes */
86	S10_NUM_EMUL_FEATURES		/* This must be the last entry! */
87};
88
89/*
90 * This string constant represents the path of the Solaris 10 directory
91 * containing emulation feature files.
92 */
93#define	S10_REQ_EMULATION_DIR	"/usr/lib/brand/solaris10"
94
95/*
96 * s10_brand_syscall_callback_common() needs to save 4 local registers so it
97 * can free them up for its own use.
98 */
99#define	S10_CPU_REG_SAVE_SIZE	(sizeof (ulong_t) * 4)
100
101/*
102 * S10 system call codes for S10 traps that have been removed or reassigned,
103 * or that are to be removed or reassigned after the dtrace syscall provider
104 * has been reengineered to deal properly with syscall::open (for example).
105 */
106#define	S10_SYS_forkall		2
107#define	S10_SYS_open		5
108#define	S10_SYS_wait		7
109#define	S10_SYS_creat		8
110#define	S10_SYS_link		9
111#define	S10_SYS_unlink		10
112#define	S10_SYS_exec		11
113#define	S10_SYS_mknod		14
114#define	S10_SYS_chmod		15
115#define	S10_SYS_chown		16
116#define	S10_SYS_stat		18
117#define	S10_SYS_umount		22
118#define	S10_SYS_fstat		28
119#define	S10_SYS_utime		30
120#define	S10_SYS_access		33
121#define	S10_SYS_dup		41
122#define	S10_SYS_issetugid	75
123#define	S10_SYS_fsat		76
124#define	S10_SYS_rmdir		79
125#define	S10_SYS_mkdir		80
126#define	S10_SYS_poll		87
127#define	S10_SYS_lstat		88
128#define	S10_SYS_symlink		89
129#define	S10_SYS_readlink	90
130#define	S10_SYS_fchmod		93
131#define	S10_SYS_fchown		94
132#define	S10_SYS_xstat		123
133#define	S10_SYS_lxstat		124
134#define	S10_SYS_fxstat		125
135#define	S10_SYS_xmknod		126
136#define	S10_SYS_lchown		130
137#define	S10_SYS_rename		134
138#define	S10_SYS_fork1		143
139#define	S10_SYS_lwp_sema_wait	147
140#define	S10_SYS_utimes		154
141#define	S10_SYS_lwp_mutex_lock	169
142#define	S10_SYS_stat64		215
143#define	S10_SYS_lstat64		216
144#define	S10_SYS_fstat64		217
145#define	S10_SYS_creat64		224
146#define	S10_SYS_open64		225
147
148/*
149 * solaris10-brand-specific attributes
150 * These must start at ZONE_ATTR_BRAND_ATTRS.
151 */
152#define	S10_EMUL_BITMAP		ZONE_ATTR_BRAND_ATTRS
153
154/*
155 * s10_emul_bitmap represents an emulation feature bitmap.  Each constant
156 * in s10_emulated_features defines a bit index in this bitmap.  If a bit is
157 * set, then the feature associated with the s10_emulated_features constant
158 * whose value is the bit's index is present in the associated zone's hosted
159 * Solaris 10 environment.
160 *
161 * NOTE: There must be at least one byte in the bitmap.
162 *
163 * We don't use the bitmap macros provided by usr/src/uts/common/sys/bitmap.h
164 * because they operate on ulong_t arrays.  The size of a ulong_t depends on
165 * the data model in which the code that declares the ulong_t is compiled:
166 * four bytes on 32-bit architectures and eight bytes 64-bit architectures.
167 * If the kernel is 64-bit and a 32-bit process executes in a solaris10-
168 * branded zone, then if the process' emulation library, which is 32-bit,
169 * queries the kernel for the zone's emulation bitmap, then the kernel will
170 * refuse because the library will request a bitmap that's half as big
171 * as the bitmap the kernel provides.  The 32-bit emulation library would need
172 * its own macros to define and operate on bitmaps with 64-bit array elements.
173 * Thus using the sys/bitmap.h macros is probably more troublesome than
174 * defining and using our own constants and macros for bitmap manipulations.
175 */
176typedef uint8_t s10_emul_bitmap_t[(S10_NUM_EMUL_FEATURES >> 3) + 1];
177
178#if defined(_KERNEL)
179
180/* brand specific data */
181typedef struct s10_zone_data {
182	/*
183	 * emul_bitmap specifies the features that are present in the
184	 * associated zone.
185	 */
186	s10_emul_bitmap_t	emul_bitmap;
187} s10_zone_data_t;
188
189void s10_brand_syscall_callback(void);
190void s10_brand_syscall32_callback(void);
191
192#if !defined(sparc)
193void s10_brand_sysenter_callback(void);
194#endif /* !sparc */
195
196#if defined(__amd64)
197void s10_brand_int91_callback(void);
198#endif /* __amd64 */
199#endif /* _KERNEL */
200
201#ifdef	__cplusplus
202}
203#endif
204
205#endif	/* _S10_BRAND_H */
206