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