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