xref: /titanic_51/usr/src/uts/common/sys/machelf.h (revision 08278a5e91755ccdb5850c19d21d42fb2e16b50e)
1ba2be530Sab196087 /*
2ba2be530Sab196087  * CDDL HEADER START
3ba2be530Sab196087  *
4ba2be530Sab196087  * The contents of this file are subject to the terms of the
5ba2be530Sab196087  * Common Development and Distribution License (the "License").
6ba2be530Sab196087  * You may not use this file except in compliance with the License.
7ba2be530Sab196087  *
8ba2be530Sab196087  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9ba2be530Sab196087  * or http://www.opensolaris.org/os/licensing.
10ba2be530Sab196087  * See the License for the specific language governing permissions
11ba2be530Sab196087  * and limitations under the License.
12ba2be530Sab196087  *
13ba2be530Sab196087  * When distributing Covered Code, include this CDDL HEADER in each
14ba2be530Sab196087  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15ba2be530Sab196087  * If applicable, add the following below this CDDL HEADER, with the
16ba2be530Sab196087  * fields enclosed by brackets "[]" replaced with your own identifying
17ba2be530Sab196087  * information: Portions Copyright [yyyy] [name of copyright owner]
18ba2be530Sab196087  *
19ba2be530Sab196087  * CDDL HEADER END
20ba2be530Sab196087  */
21ba2be530Sab196087 
22ba2be530Sab196087 /*
23*08278a5eSRod Evans  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
24ba2be530Sab196087  * Use is subject to license terms.
25ba2be530Sab196087  */
26ba2be530Sab196087 
27ba2be530Sab196087 #ifndef	_SYS_MACHELF_H
28ba2be530Sab196087 #define	_SYS_MACHELF_H
29ba2be530Sab196087 
30ba2be530Sab196087 #ifdef	__cplusplus
31ba2be530Sab196087 extern "C" {
32ba2be530Sab196087 #endif
33ba2be530Sab196087 
34d9452f23SEdward Pilatowicz #if defined(__amd64) || (defined(__i386) && defined(_ELF64))
35ba2be530Sab196087 #include <sys/elf_amd64.h>
36ba2be530Sab196087 #elif defined(__i386)
37ba2be530Sab196087 #include <sys/elf_386.h>
38ba2be530Sab196087 #elif defined(__sparc)
39ba2be530Sab196087 #include <sys/elf_SPARC.h>
40ba2be530Sab196087 #endif
41ba2be530Sab196087 #ifndef	_ASM
42ba2be530Sab196087 #include <sys/types.h>
43ba2be530Sab196087 #include <sys/elf.h>
44ba2be530Sab196087 #include <sys/link.h>	/* for Elf*_Dyn */
45ba2be530Sab196087 #endif	/* _ASM */
46ba2be530Sab196087 
47ba2be530Sab196087 /*
48ba2be530Sab196087  * Make machine class dependent data types transparent to the common code
49ba2be530Sab196087  */
50ba2be530Sab196087 #if defined(_ELF64) && !defined(_ELF32_COMPAT)
51ba2be530Sab196087 
52ba2be530Sab196087 #ifndef	_ASM
53ba2be530Sab196087 typedef	Elf64_Xword	Xword;
54ba2be530Sab196087 typedef	Elf64_Lword	Lword;
55ba2be530Sab196087 typedef	Elf64_Sxword	Sxword;
56ba2be530Sab196087 typedef	Elf64_Word	Word;
57ba2be530Sab196087 typedef	Elf64_Sword	Sword;
58ba2be530Sab196087 typedef	Elf64_Half	Half;
59ba2be530Sab196087 typedef	Elf64_Addr	Addr;
60ba2be530Sab196087 typedef	Elf64_Off	Off;
61ba2be530Sab196087 typedef	uchar_t		Byte;
62ba2be530Sab196087 #endif	/* _ASM */
63ba2be530Sab196087 
64ba2be530Sab196087 #if defined(_KERNEL)
65ba2be530Sab196087 #define	ELF_R_TYPE	ELF64_R_TYPE
66ba2be530Sab196087 #define	ELF_R_SYM	ELF64_R_SYM
67ba2be530Sab196087 #define	ELF_R_TYPE_DATA ELF64_R_TYPE_DATA
68ba2be530Sab196087 #define	ELF_R_INFO	ELF64_R_INFO
69ba2be530Sab196087 #define	ELF_ST_BIND	ELF64_ST_BIND
70ba2be530Sab196087 #define	ELF_ST_TYPE	ELF64_ST_TYPE
71ba2be530Sab196087 #define	ELF_M_SYM	ELF64_M_SYM
72ba2be530Sab196087 #define	ELF_M_SIZE	ELF64_M_SIZE
73ba2be530Sab196087 #endif
74ba2be530Sab196087 
75ba2be530Sab196087 #ifndef	_ASM
76ba2be530Sab196087 typedef	Elf64_Ehdr	Ehdr;
77ba2be530Sab196087 typedef	Elf64_Shdr	Shdr;
78ba2be530Sab196087 typedef	Elf64_Sym	Sym;
79ba2be530Sab196087 typedef	Elf64_Syminfo	Syminfo;
80ba2be530Sab196087 typedef	Elf64_Rela	Rela;
81ba2be530Sab196087 typedef	Elf64_Rel	Rel;
82ba2be530Sab196087 typedef	Elf64_Nhdr	Nhdr;
83ba2be530Sab196087 typedef	Elf64_Phdr	Phdr;
84ba2be530Sab196087 typedef	Elf64_Dyn	Dyn;
85ba2be530Sab196087 typedef	Elf64_Boot	Boot;
86ba2be530Sab196087 typedef	Elf64_Verdef	Verdef;
87ba2be530Sab196087 typedef	Elf64_Verdaux	Verdaux;
88ba2be530Sab196087 typedef	Elf64_Verneed	Verneed;
89ba2be530Sab196087 typedef	Elf64_Vernaux	Vernaux;
90ba2be530Sab196087 typedef	Elf64_Versym	Versym;
91ba2be530Sab196087 typedef	Elf64_Move	Move;
92ba2be530Sab196087 typedef	Elf64_Cap	Cap;
93*08278a5eSRod Evans typedef	Elf64_Capinfo	Capinfo;
94*08278a5eSRod Evans typedef	Elf64_Capchain	Capchain;
95ba2be530Sab196087 #endif	/* _ASM */
96ba2be530Sab196087 
97ba2be530Sab196087 #else	/* _ILP32 */
98ba2be530Sab196087 
99ba2be530Sab196087 #ifndef	_ASM
100ba2be530Sab196087 typedef	Elf32_Word	Xword;	/* Xword/Sxword are 32-bits in Elf32 */
101ba2be530Sab196087 typedef	Elf32_Lword	Lword;
102ba2be530Sab196087 typedef	Elf32_Sword	Sxword;
103ba2be530Sab196087 typedef	Elf32_Word	Word;
104ba2be530Sab196087 typedef	Elf32_Sword	Sword;
105ba2be530Sab196087 typedef	Elf32_Half	Half;
106ba2be530Sab196087 typedef	Elf32_Addr	Addr;
107ba2be530Sab196087 typedef	Elf32_Off	Off;
108ba2be530Sab196087 typedef	uchar_t		Byte;
109ba2be530Sab196087 #endif	/* _ASM */
110ba2be530Sab196087 
111ba2be530Sab196087 #if defined(_KERNEL)
112ba2be530Sab196087 #define	ELF_R_TYPE	ELF32_R_TYPE
113ba2be530Sab196087 #define	ELF_R_SYM	ELF32_R_SYM
114ba2be530Sab196087 #define	ELF_R_TYPE_DATA(x)	(0)
115ba2be530Sab196087 #define	ELF_R_INFO	ELF32_R_INFO
116ba2be530Sab196087 #define	ELF_ST_BIND	ELF32_ST_BIND
117ba2be530Sab196087 #define	ELF_ST_TYPE	ELF32_ST_TYPE
118ba2be530Sab196087 #define	ELF_M_SYM	ELF32_M_SYM
119ba2be530Sab196087 #define	ELF_M_SIZE	ELF32_M_SIZE
120ba2be530Sab196087 #endif
121ba2be530Sab196087 
122ba2be530Sab196087 #ifndef	_ASM
123ba2be530Sab196087 typedef	Elf32_Ehdr	Ehdr;
124ba2be530Sab196087 typedef	Elf32_Shdr	Shdr;
125ba2be530Sab196087 typedef	Elf32_Sym	Sym;
126ba2be530Sab196087 typedef	Elf32_Syminfo	Syminfo;
127ba2be530Sab196087 typedef	Elf32_Rela	Rela;
128ba2be530Sab196087 typedef	Elf32_Rel	Rel;
129ba2be530Sab196087 typedef	Elf32_Nhdr	Nhdr;
130ba2be530Sab196087 typedef	Elf32_Phdr	Phdr;
131ba2be530Sab196087 typedef	Elf32_Dyn	Dyn;
132ba2be530Sab196087 typedef	Elf32_Boot	Boot;
133ba2be530Sab196087 typedef	Elf32_Verdef	Verdef;
134ba2be530Sab196087 typedef	Elf32_Verdaux	Verdaux;
135ba2be530Sab196087 typedef	Elf32_Verneed	Verneed;
136ba2be530Sab196087 typedef	Elf32_Vernaux	Vernaux;
137ba2be530Sab196087 typedef	Elf32_Versym	Versym;
138ba2be530Sab196087 typedef	Elf32_Move	Move;
139ba2be530Sab196087 typedef	Elf32_Cap	Cap;
140*08278a5eSRod Evans typedef	Elf32_Capinfo	Capinfo;
141*08278a5eSRod Evans typedef	Elf32_Capchain	Capchain;
142ba2be530Sab196087 #endif	/* _ASM */
143ba2be530Sab196087 
144ba2be530Sab196087 #endif	/* _ILP32 */
145ba2be530Sab196087 
146ba2be530Sab196087 /*
147ba2be530Sab196087  * Elf `printf' type-cast macros.  These force arguments to be a fixed size
148ba2be530Sab196087  * so that Elf32 and Elf64 can share common format strings.
149ba2be530Sab196087  */
150ba2be530Sab196087 #ifndef	__lint
151ba2be530Sab196087 #define	EC_ADDR(a)	((Elf64_Addr)(a))		/* "ull" */
152ba2be530Sab196087 #define	EC_OFF(a)	((Elf64_Off)(a))		/* "ull"  */
153ba2be530Sab196087 #define	EC_HALF(a)	((Elf64_Half)(a))		/* "d"   */
154ba2be530Sab196087 #define	EC_WORD(a)	((Elf64_Word)(a))		/* "u"   */
155ba2be530Sab196087 #define	EC_SWORD(a)	((Elf64_Sword)(a))		/* "d"   */
156ba2be530Sab196087 #define	EC_XWORD(a)	((Elf64_Xword)(a))		/* "ull" */
157ba2be530Sab196087 #define	EC_SXWORD(a)	((Elf64_Sxword)(a))		/* "ll"  */
158ba2be530Sab196087 #define	EC_LWORD(a)	((Elf64_Lword)(a))		/* "ull" */
159ba2be530Sab196087 
160ba2be530Sab196087 /*
161ba2be530Sab196087  * A native pointer is special.  Although it can be convenient to display
162ba2be530Sab196087  * these from a common format (ull), compilers may flag the cast of a pointer
163ba2be530Sab196087  * to an integer as illegal.  Casting these pointers to the native pointer
164ba2be530Sab196087  * size, suppresses any compiler errors.
165ba2be530Sab196087  */
166ba2be530Sab196087 #define	EC_NATPTR(a)	((Elf64_Xword)(uintptr_t)(a))	/* "ull" */
167ba2be530Sab196087 #else
168ba2be530Sab196087 #define	EC_ADDR(a)	((u_longlong_t)(a))
169ba2be530Sab196087 #define	EC_OFF(a)	((u_longlong_t)(a))
170ba2be530Sab196087 #define	EC_HALF(a)	((ushort_t)(a))
171ba2be530Sab196087 #define	EC_WORD(a)	((uint_t)(a))
172ba2be530Sab196087 #define	EC_SWORD(a)	((int)(a))
173ba2be530Sab196087 #define	EC_XWORD(a)	((u_longlong_t)(a))
174ba2be530Sab196087 #define	EC_SXWORD(a)	((longlong_t)(a))
175ba2be530Sab196087 #define	EC_LWORD(a)	((u_longlong_t)(a))
176ba2be530Sab196087 
177ba2be530Sab196087 #define	EC_NATPTR(a)	((u_longlong_t)(a))
178ba2be530Sab196087 #endif
179ba2be530Sab196087 
180ba2be530Sab196087 #ifdef	__cplusplus
181ba2be530Sab196087 }
182ba2be530Sab196087 #endif
183ba2be530Sab196087 
184ba2be530Sab196087 #endif	/* _SYS_MACHELF_H */
185