auxv.h revision 2712:f74a135872bc
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 2006 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; 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
144#if defined(_KERNEL)
145/*
146 * User info regarding machine attributes, respectively reported to native and
147 * non-native user apps.
148 */
149extern uint_t auxv_hwcap;
150#if defined(_SYSCALL32)
151extern uint_t auxv_hwcap32;
152#endif /* _SYSCALL32 */
153#else
154extern uint_t getisax(uint32_t *, uint_t);
155#endif	/* _KERNEL */
156
157#define	AT_SUN_IFLUSH	2010	/* flush icache? */
158#define	AT_SUN_CPU	2011	/* cpu name */
159
160/*
161 * The following aux vector provides a pointer to a null-terminated
162 * path name, a copy of the path name passed to the exec() system
163 * call but that has had all symlinks resolved (see resolvepath(2)).
164 */
165#define	AT_SUN_EXECNAME	2014	/* exec() path name */
166
167#define	AT_SUN_MMU	2015	/* mmu module name */
168#define	AT_SUN_LDDATA	2016	/* dynamic linkers data segment */
169
170#define	AT_SUN_AUXFLAGS	2017	/* AF_SUN_ flags passed from the kernel */
171
172/*
173 * Used to indicate to the runtime linker the name of the emulation binary,
174 * if one is being used. For brands, this is the name of the brand library.
175 */
176#define	AT_SUN_EMULATOR		2018
177
178#define	AT_SUN_BRANDNAME	2019
179#define	AT_SUN_BRAND_PHDR	2020	/* Brand executable's phdr */
180
181/*
182 * The kernel is in a better position to determine whether a process needs to
183 * ignore dangerous LD environment variables.  If set, this flags tells
184 * ld.so.1 to run "secure" and ignore the the environment.
185 */
186#define	AF_SUN_SETUGID		0x00000001
187
188/*
189 * If set, this flag indicates that hardware capabilites can be verified
190 * against the AT_SUN_HWCAP value.
191 */
192#define	AF_SUN_HWCAPVERIFY	0x00000002
193
194#ifdef	__cplusplus
195}
196#endif
197
198#if defined(_AUXV_TARGET_ALL) || defined(_AUXV_TARGET_SPARC) || defined(__sparc)
199#include <sys/auxv_SPARC.h>
200#endif
201
202#if defined(_AUXV_TARGET_ALL) || defined(_AUXV_TARGET_386) || defined(__x86)
203#include <sys/auxv_386.h>
204#endif
205
206#endif	/* _SYS_AUXV_H */
207