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