s10_brand.h revision 11940:98e0550abcac
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 2010 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 * Solaris 10 value of NSIG 62 */ 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_TRUSS_POINT 129 70#define B_S10_NATIVE 130 71#define B_S10_FSREGCORRECTION 131 72#define B_S10_ISFDXATTRDIR 132 73 74/* 75 * Versioning flags 76 * 77 * The first enum value must be zero. Place new enum values at the end of the 78 * list but before S10_NUM_EMUL_FEATURES, which must always come last. 79 * Enum values should start with "S10_FEATURE_" and be named after the 80 * fixes/backports that they represent. For example, an enum value representing 81 * a backport that changes a MNTFS ioctl could be named 82 * "S10_FEATURE_ALTERED_MNTFS_IOCTL". 83 */ 84enum s10_emulated_features { 85 S10_FEATURE_ALTERED_MNTFS_IOCTL, 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 * Aux vector containing lddata pointer of brand library linkmap. 103 * Used by s10_librtld_db. 104 */ 105#define AT_SUN_BRAND_S10_LDDATA AT_SUN_BRAND_AUX1 106 107/* 108 * S10 system call codes for S10 traps that have been removed or reassigned, 109 * or that are to be removed or reassigned after the dtrace syscall provider 110 * has been reengineered to deal properly with syscall::open (for example). 111 */ 112#define S10_SYS_forkall 2 113#define S10_SYS_open 5 114#define S10_SYS_wait 7 115#define S10_SYS_creat 8 116#define S10_SYS_unlink 10 117#define S10_SYS_exec 11 118#define S10_SYS_chown 16 119#define S10_SYS_stat 18 120#define S10_SYS_umount 22 121#define S10_SYS_fstat 28 122#define S10_SYS_utime 30 123#define S10_SYS_access 33 124#define S10_SYS_dup 41 125#define S10_SYS_issetugid 75 126#define S10_SYS_fsat 76 127#define S10_SYS_rmdir 79 128#define S10_SYS_poll 87 129#define S10_SYS_lstat 88 130#define S10_SYS_fchown 94 131#define S10_SYS_xstat 123 132#define S10_SYS_lxstat 124 133#define S10_SYS_fxstat 125 134#define S10_SYS_xmknod 126 135#define S10_SYS_lchown 130 136#define S10_SYS_rename 134 137#define S10_SYS_fork1 143 138#define S10_SYS_lwp_sema_wait 147 139#define S10_SYS_utimes 154 140#define S10_SYS_lwp_mutex_lock 169 141#define S10_SYS_stat64 215 142#define S10_SYS_lstat64 216 143#define S10_SYS_fstat64 217 144#define S10_SYS_creat64 224 145#define S10_SYS_open64 225 146 147/* 148 * solaris10-brand-specific attributes 149 * These must start at ZONE_ATTR_BRAND_ATTRS. 150 */ 151#define S10_EMUL_BITMAP ZONE_ATTR_BRAND_ATTRS 152 153/* 154 * Information needed by the s10 library to launch an executable. 155 */ 156typedef struct s10_elf_data { 157 ulong_t sed_phdr; 158 ulong_t sed_phent; 159 ulong_t sed_phnum; 160 ulong_t sed_entry; 161 ulong_t sed_base; 162 ulong_t sed_ldentry; 163 ulong_t sed_lddata; 164} s10_elf_data_t; 165 166/* 167 * Structure used to register a branded processes 168 */ 169typedef struct s10_brand_reg { 170 uint_t sbr_version; /* version number */ 171 caddr_t sbr_handler; /* base address of handler */ 172} s10_brand_reg_t; 173 174/* 175 * s10_emul_bitmap represents an emulation feature bitmap. Each constant 176 * in s10_emulated_features defines a bit index in this bitmap. If a bit is 177 * set, then the feature associated with the s10_emulated_features constant 178 * whose value is the bit's index is present in the associated zone's hosted 179 * Solaris 10 environment. 180 * 181 * NOTE: There must be at least one byte in the bitmap. 182 * 183 * We don't use the bitmap macros provided by usr/src/uts/common/sys/bitmap.h 184 * because they operate on ulong_t arrays. The size of a ulong_t depends on 185 * the data model in which the code that declares the ulong_t is compiled: 186 * four bytes on 32-bit architectures and eight bytes 64-bit architectures. 187 * If the kernel is 64-bit and a 32-bit process executes in a solaris10- 188 * branded zone, then if the process' emulation library, which is 32-bit, 189 * queries the kernel for the zone's emulation bitmap, then the kernel will 190 * refuse because the library will request a bitmap that's half as big 191 * as the bitmap the kernel provides. The 32-bit emulation library would need 192 * its own macros to define and operate on bitmaps with 64-bit array elements. 193 * Thus using the sys/bitmap.h macros is probably more troublesome than 194 * defining and using our own constants and macros for bitmap manipulations. 195 */ 196typedef uint8_t s10_emul_bitmap_t[(S10_NUM_EMUL_FEATURES >> 3) + 1]; 197 198#if defined(_KERNEL) 199#if defined(_SYSCALL32) 200typedef struct s10_elf_data32 { 201 uint32_t sed_phdr; 202 uint32_t sed_phent; 203 uint32_t sed_phnum; 204 uint32_t sed_entry; 205 uint32_t sed_base; 206 uint32_t sed_ldentry; 207 uint32_t sed_lddata; 208} s10_elf_data32_t; 209 210typedef struct s10_brand_reg32 { 211 uint32_t sbr_version; /* version number */ 212 caddr32_t sbr_handler; /* base address of handler */ 213} s10_brand_reg32_t; 214#endif /* _SYSCALL32 */ 215 216/* 217 * Information associated with all s10 branded processes 218 */ 219typedef struct s10_proc_data { 220 caddr_t spd_handler; /* address of user-space handler */ 221 s10_elf_data_t spd_elf_data; /* ELF data for s10 application */ 222} s10_proc_data_t; 223 224/* brand specific data */ 225typedef struct s10_zone_data { 226 /* 227 * emul_bitmap specifies the features that are present in the 228 * associated zone. 229 */ 230 s10_emul_bitmap_t emul_bitmap; 231} s10_zone_data_t; 232 233void s10_brand_syscall_callback(void); 234void s10_brand_syscall32_callback(void); 235 236#if !defined(sparc) 237void s10_brand_sysenter_callback(void); 238#endif /* !sparc */ 239 240#if defined(__amd64) 241void s10_brand_int91_callback(void); 242#endif /* __amd64 */ 243#endif /* _KERNEL */ 244 245#ifdef __cplusplus 246} 247#endif 248 249#endif /* _S10_BRAND_H */ 250