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 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 22 /* All Rights Reserved */ 23 24 25 /* 26 * Copyright 2014 Garrett D'Amore <garrett@damore.org> 27 * 28 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 29 * Use is subject to license terms. 30 */ 31 /* 32 * Copyright (c) 2018, Joyent, Inc. 33 */ 34 35 #ifndef _SYS_AUXV_H 36 #define _SYS_AUXV_H 37 38 #include <sys/types.h> 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 #if !defined(_ASM) 45 typedef struct 46 { 47 int a_type; 48 union { 49 long a_val; 50 void *a_ptr; 51 void (*a_fcn)(); 52 } a_un; 53 } auxv_t; 54 55 #if defined(_SYSCALL32) 56 57 typedef struct { 58 int32_t a_type; 59 union { 60 int32_t a_val; 61 caddr32_t a_ptr; 62 caddr32_t a_fcn; 63 } a_un; 64 } auxv32_t; 65 66 #endif /* _SYSCALL32 */ 67 68 #endif /* _ASM */ 69 70 #define AT_NULL 0 71 #define AT_IGNORE 1 72 #define AT_EXECFD 2 73 #define AT_PHDR 3 /* &phdr[0] */ 74 #define AT_PHENT 4 /* sizeof(phdr[0]) */ 75 #define AT_PHNUM 5 /* # phdr entries */ 76 #define AT_PAGESZ 6 /* getpagesize(2) */ 77 #define AT_BASE 7 /* ld.so base addr */ 78 #define AT_FLAGS 8 /* processor flags */ 79 #define AT_ENTRY 9 /* a.out entry point */ 80 81 /* 82 * These relate to the original PPC ABI document; Linux reused 83 * the values for other things (see below), so disambiguation of 84 * these values may require additional context in PPC binaries. 85 * 86 * AT_DCACHEBSIZE 10 smallest data cache block size 87 * AT_ICACHEBSIZE 11 smallest instruction cache block size 88 * AT_UCACHEBSIZE 12 smallest unified cache block size 89 * 90 * These are the values from LSB 1.3, the first five are also described 91 * in the draft amd64 ABI. 92 * 93 * At the time of writing, Solaris doesn't place any of these values into 94 * the aux vector, except AT_CLKTCK which is placed on the aux vector for 95 * lx branded processes; also, we do similar things via AT_SUN_ values. 96 * 97 * AT_NOTELF 10 program is not ELF? 98 * AT_UID 11 real user id 99 * AT_EUID 12 effective user id 100 * AT_GID 13 real group id 101 * AT_EGID 14 effective group id 102 * 103 * AT_PLATFORM 15 104 * AT_HWCAP 16 105 * AT_CLKTCK 17 c.f. _SC_CLK_TCK 106 * AT_FPUCW 18 107 * 108 * AT_DCACHEBSIZE 19 (moved from 10) 109 * AT_ICACHEBSIZE 20 (moved from 11) 110 * AT_UCACHEBSIZE 21 (moved from 12) 111 * 112 * AT_IGNOREPPC 22 113 */ 114 115 /* 116 * Sun extensions begin here 117 */ 118 #define AT_SUN_UID 2000 /* effective user id */ 119 #define AT_SUN_RUID 2001 /* real user id */ 120 #define AT_SUN_GID 2002 /* effective group id */ 121 #define AT_SUN_RGID 2003 /* real group id */ 122 123 /* 124 * The following attributes are specific to the 125 * kernel implementation of the linker/loader. 126 */ 127 #define AT_SUN_LDELF 2004 /* dynamic linker's ELF header */ 128 #define AT_SUN_LDSHDR 2005 /* dynamic linker's section headers */ 129 #define AT_SUN_LDNAME 2006 /* name of dynamic linker */ 130 #define AT_SUN_LPAGESZ 2007 /* large pagesize */ 131 /* 132 * The following aux vector provides a null-terminated platform 133 * identification string. This information is the same as provided 134 * by sysinfo(2) when invoked with the command SI_PLATFORM. 135 */ 136 #define AT_SUN_PLATFORM 2008 /* platform name */ 137 138 /* 139 * These attributes communicate performance -hints- about processor 140 * hardware capabilities that might be useful to library implementations. 141 */ 142 #define AT_SUN_HWCAP 2009 143 #define AT_SUN_HWCAP2 2023 144 145 #if defined(_KERNEL) 146 /* 147 * User info regarding machine attributes, respectively reported to native and 148 * non-native user apps. 149 */ 150 extern uint_t auxv_hwcap; 151 extern uint_t auxv_hwcap_2; 152 #if defined(_SYSCALL32) 153 extern uint_t auxv_hwcap32; 154 extern uint_t auxv_hwcap32_2; 155 #endif /* _SYSCALL32 */ 156 #else 157 extern uint_t getisax(uint32_t *, uint_t); 158 #endif /* _KERNEL */ 159 160 #define AT_SUN_IFLUSH 2010 /* flush icache? */ 161 #define AT_SUN_CPU 2011 /* cpu name */ 162 163 /* 164 * The following aux vector provides a pointer to a null-terminated 165 * path name, a copy of the path name passed to the exec() system 166 * call but that has had all symlinks resolved (see resolvepath(2)). 167 */ 168 #define AT_SUN_EXECNAME 2014 /* exec() path name */ 169 170 #define AT_SUN_MMU 2015 /* mmu module name */ 171 #define AT_SUN_LDDATA 2016 /* dynamic linkers data segment */ 172 173 #define AT_SUN_AUXFLAGS 2017 /* AF_SUN_ flags passed from the kernel */ 174 175 /* 176 * Used to indicate to the runtime linker the name of the emulation binary, 177 * if one is being used. For brands, this is the name of the brand library. 178 */ 179 #define AT_SUN_EMULATOR 2018 180 181 #define AT_SUN_BRANDNAME 2019 182 183 /* 184 * Aux vectors available for brand modules. 185 */ 186 #define AT_SUN_BRAND_AUX1 2020 187 #define AT_SUN_BRAND_AUX2 2021 188 #define AT_SUN_BRAND_AUX3 2022 189 190 /* 191 * Aux vector for comm page 192 */ 193 #define AT_SUN_COMMPAGE 2026 194 195 /* 196 * These two AUX vectors are generally used to define information about the FPU. 197 * These values are currently only used on the x86 platform. 198 */ 199 #define AT_SUN_FPTYPE 2027 200 #define AT_SUN_FPSIZE 2028 201 202 /* 203 * The kernel is in a better position to determine whether a process needs to 204 * ignore dangerous LD environment variables. If set, this flags tells 205 * ld.so.1 to run "secure" and ignore the the environment. 206 */ 207 #define AF_SUN_SETUGID 0x00000001 208 209 /* 210 * If set, this flag indicates that hardware capabilites can be verified 211 * against the AT_SUN_HWCAP value. 212 */ 213 #define AF_SUN_HWCAPVERIFY 0x00000002 214 215 /* 216 * If set, this flag indicates that the the linker should not initialize 217 * any of its link maps as primary link wrt the unified libc threading 218 * interfaces. 219 */ 220 #define AF_SUN_NOPLM 0x00000004 221 222 #ifdef __cplusplus 223 } 224 #endif 225 226 #if defined(_AUXV_TARGET_ALL) || defined(_AUXV_TARGET_SPARC) || defined(__sparc) 227 #include <sys/auxv_SPARC.h> 228 #endif 229 230 #if defined(_AUXV_TARGET_ALL) || defined(_AUXV_TARGET_386) || defined(__x86) 231 #include <sys/auxv_386.h> 232 #endif 233 234 #endif /* _SYS_AUXV_H */ 235