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