s10_brand.h revision 11204:153262ed7017
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 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26#ifndef _S10_BRAND_H
27#define	_S10_BRAND_H
28
29#ifdef	__cplusplus
30extern "C" {
31#endif
32
33#include <sys/types.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_NATIVE_DIR		"/.SUNWnative/"
41#define	S10_LIB_NAME		"s10_brand.so.1"
42#define	S10_LINKER_NAME		"ld.so.1"
43
44#define	S10_LIB32		S10_NATIVE_DIR "usr/lib/" S10_LIB_NAME
45#define	S10_LINKER32		"/lib/" S10_LINKER_NAME
46#define	S10_NATIVE_LINKER32	S10_NATIVE_DIR "lib/" S10_LINKER_NAME
47
48#define	S10_LIB64		S10_NATIVE_DIR "usr/lib/64/" S10_LIB_NAME
49#define	S10_LINKER64		"/lib/64/" S10_LINKER_NAME
50#define	S10_NATIVE_LINKER64	S10_NATIVE_DIR "lib/64/" S10_LINKER_NAME
51
52#if defined(_LP64)
53#define	S10_LIB		S10_LIB64
54#define	S10_LINKER	S10_LINKER64
55#else /* !_LP64 */
56#define	S10_LIB		S10_LIB32
57#define	S10_LINKER	S10_LINKER32
58#endif /* !_LP64 */
59
60/*
61 * Brand system call subcodes.  0-127 are reserved for generic subcodes.
62 */
63#define	B_S10_PIDINFO		128
64#define	B_S10_TRUSS_POINT	129
65#define	B_S10_NATIVE		130
66#define	B_S10_FSREGCORRECTION	131
67
68/*
69 * Versioning flags
70 *
71 * The first enum value must be zero.  Place new enum values at the end of the
72 * list but before S10_NUM_EMUL_FEATURES, which must always come last.
73 * Enum values should start with "S10_FEATURE_" and be named after the
74 * fixes/backports that they represent.  For example, an enum value representing
75 * a backport that changes a MNTFS ioctl could be named
76 * "S10_FEATURE_ALTERED_MNTFS_IOCTL".
77 */
78enum s10_emulated_features {
79	S10_FEATURE_ALTERED_MNTFS_IOCTL,
80	S10_NUM_EMUL_FEATURES		/* This must be the last entry! */
81};
82
83/*
84 * This string constant represents the path of the Solaris 10 directory
85 * containing emulation feature files.
86 */
87#define	S10_REQ_EMULATION_DIR	"/usr/lib/brand/solaris10"
88
89/*
90 * s10_brand_syscall_callback_common() needs to save 4 local registers so it
91 * can free them up for its own use.
92 */
93#define	S10_CPU_REG_SAVE_SIZE	(sizeof (ulong_t) * 4)
94
95/*
96 * Aux vector containing lddata pointer of brand library linkmap.
97 * Used by s10_librtld_db.
98 */
99#define	AT_SUN_BRAND_S10_LDDATA		AT_SUN_BRAND_AUX1
100
101/*
102 * S10 system call codes for S10 traps that have been removed or
103 * re-assigned.
104 */
105#define	S10_SYS_issetugid	75
106
107/*
108 * solaris10-brand-specific attributes
109 * These must start at ZONE_ATTR_BRAND_ATTRS.
110 */
111#define	S10_EMUL_BITMAP		ZONE_ATTR_BRAND_ATTRS
112
113/*
114 * Information needed by the s10 library to launch an executable.
115 */
116typedef struct s10_elf_data {
117	ulong_t		sed_phdr;
118	ulong_t		sed_phent;
119	ulong_t		sed_phnum;
120	ulong_t		sed_entry;
121	ulong_t		sed_base;
122	ulong_t		sed_ldentry;
123	ulong_t		sed_lddata;
124} s10_elf_data_t;
125
126/*
127 * Structure used to register a branded processes
128 */
129typedef struct s10_brand_reg {
130	uint_t		sbr_version;	/* version number */
131	caddr_t		sbr_handler;	/* base address of handler */
132} s10_brand_reg_t;
133
134/*
135 * s10_emul_bitmap represents an emulation feature bitmap.  Each constant
136 * in s10_emulated_features defines a bit index in this bitmap.  If a bit is
137 * set, then the feature associated with the s10_emulated_features constant
138 * whose value is the bit's index is present in the associated zone's hosted
139 * Solaris 10 environment.
140 *
141 * NOTE: There must be at least one byte in the bitmap.
142 *
143 * We don't use the bitmap macros provided by usr/src/uts/common/sys/bitmap.h
144 * because they operate on ulong_t arrays.  The size of a ulong_t depends on
145 * the data model in which the code that declares the ulong_t is compiled:
146 * four bytes on 32-bit architectures and eight bytes 64-bit architectures.
147 * If the kernel is 64-bit and a 32-bit process executes in a solaris10-
148 * branded zone, then if the process' emulation library, which is 32-bit,
149 * queries the kernel for the zone's emulation bitmap, then the kernel will
150 * refuse because the library will request a bitmap that's half as big
151 * as the bitmap the kernel provides.  The 32-bit emulation library would need
152 * its own macros to define and operate on bitmaps with 64-bit array elements.
153 * Thus using the sys/bitmap.h macros is probably more troublesome than
154 * defining and using our own constants and macros for bitmap manipulations.
155 */
156typedef uint8_t s10_emul_bitmap_t[(S10_NUM_EMUL_FEATURES >> 3) + 1];
157
158#if defined(_KERNEL)
159#if defined(_SYSCALL32)
160typedef struct s10_elf_data32 {
161	uint32_t	sed_phdr;
162	uint32_t	sed_phent;
163	uint32_t	sed_phnum;
164	uint32_t	sed_entry;
165	uint32_t	sed_base;
166	uint32_t	sed_ldentry;
167	uint32_t	sed_lddata;
168} s10_elf_data32_t;
169
170typedef struct s10_brand_reg32 {
171	uint32_t	sbr_version;	/* version number */
172	caddr32_t	sbr_handler;	/* base address of handler */
173} s10_brand_reg32_t;
174#endif /* _SYSCALL32 */
175
176/*
177 * Information associated with all s10 branded processes
178 */
179typedef struct s10_proc_data {
180	caddr_t		spd_handler;	/* address of user-space handler */
181	s10_elf_data_t	spd_elf_data;	/* ELF data for s10 application */
182} s10_proc_data_t;
183
184/* brand specific data */
185typedef struct s10_zone_data {
186	/*
187	 * emul_bitmap specifies the features that are present in the
188	 * associated zone.
189	 */
190	s10_emul_bitmap_t	emul_bitmap;
191} s10_zone_data_t;
192
193void s10_brand_syscall_callback(void);
194void s10_brand_syscall32_callback(void);
195
196#if !defined(sparc)
197void s10_brand_sysenter_callback(void);
198#endif /* !sparc */
199
200#if defined(__amd64)
201void s10_brand_int91_callback(void);
202#endif /* __amd64 */
203#endif /* _KERNEL */
204
205#ifdef	__cplusplus
206}
207#endif
208
209#endif	/* _S10_BRAND_H */
210