xref: /titanic_51/usr/src/uts/common/sys/machelf.h (revision d9452f237f843c1321abb5810d2f9ee6cbeae43c)
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*d9452f23SEdward Pilatowicz  * Copyright 2009 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 
34*d9452f23SEdward 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;
93ba2be530Sab196087 #endif	/* _ASM */
94ba2be530Sab196087 
95ba2be530Sab196087 #else	/* _ILP32 */
96ba2be530Sab196087 
97ba2be530Sab196087 #ifndef	_ASM
98ba2be530Sab196087 typedef	Elf32_Word	Xword;	/* Xword/Sxword are 32-bits in Elf32 */
99ba2be530Sab196087 typedef	Elf32_Lword	Lword;
100ba2be530Sab196087 typedef	Elf32_Sword	Sxword;
101ba2be530Sab196087 typedef	Elf32_Word	Word;
102ba2be530Sab196087 typedef	Elf32_Sword	Sword;
103ba2be530Sab196087 typedef	Elf32_Half	Half;
104ba2be530Sab196087 typedef	Elf32_Addr	Addr;
105ba2be530Sab196087 typedef	Elf32_Off	Off;
106ba2be530Sab196087 typedef	uchar_t		Byte;
107ba2be530Sab196087 #endif	/* _ASM */
108ba2be530Sab196087 
109ba2be530Sab196087 #if defined(_KERNEL)
110ba2be530Sab196087 #define	ELF_R_TYPE	ELF32_R_TYPE
111ba2be530Sab196087 #define	ELF_R_SYM	ELF32_R_SYM
112ba2be530Sab196087 #define	ELF_R_TYPE_DATA(x)	(0)
113ba2be530Sab196087 #define	ELF_R_INFO	ELF32_R_INFO
114ba2be530Sab196087 #define	ELF_ST_BIND	ELF32_ST_BIND
115ba2be530Sab196087 #define	ELF_ST_TYPE	ELF32_ST_TYPE
116ba2be530Sab196087 #define	ELF_M_SYM	ELF32_M_SYM
117ba2be530Sab196087 #define	ELF_M_SIZE	ELF32_M_SIZE
118ba2be530Sab196087 #endif
119ba2be530Sab196087 
120ba2be530Sab196087 #ifndef	_ASM
121ba2be530Sab196087 typedef	Elf32_Ehdr	Ehdr;
122ba2be530Sab196087 typedef	Elf32_Shdr	Shdr;
123ba2be530Sab196087 typedef	Elf32_Sym	Sym;
124ba2be530Sab196087 typedef	Elf32_Syminfo	Syminfo;
125ba2be530Sab196087 typedef	Elf32_Rela	Rela;
126ba2be530Sab196087 typedef	Elf32_Rel	Rel;
127ba2be530Sab196087 typedef	Elf32_Nhdr	Nhdr;
128ba2be530Sab196087 typedef	Elf32_Phdr	Phdr;
129ba2be530Sab196087 typedef	Elf32_Dyn	Dyn;
130ba2be530Sab196087 typedef	Elf32_Boot	Boot;
131ba2be530Sab196087 typedef	Elf32_Verdef	Verdef;
132ba2be530Sab196087 typedef	Elf32_Verdaux	Verdaux;
133ba2be530Sab196087 typedef	Elf32_Verneed	Verneed;
134ba2be530Sab196087 typedef	Elf32_Vernaux	Vernaux;
135ba2be530Sab196087 typedef	Elf32_Versym	Versym;
136ba2be530Sab196087 typedef	Elf32_Move	Move;
137ba2be530Sab196087 typedef	Elf32_Cap	Cap;
138ba2be530Sab196087 #endif	/* _ASM */
139ba2be530Sab196087 
140ba2be530Sab196087 #endif	/* _ILP32 */
141ba2be530Sab196087 
142ba2be530Sab196087 /*
143ba2be530Sab196087  * Elf `printf' type-cast macros.  These force arguments to be a fixed size
144ba2be530Sab196087  * so that Elf32 and Elf64 can share common format strings.
145ba2be530Sab196087  */
146ba2be530Sab196087 #ifndef	__lint
147ba2be530Sab196087 #define	EC_ADDR(a)	((Elf64_Addr)(a))		/* "ull" */
148ba2be530Sab196087 #define	EC_OFF(a)	((Elf64_Off)(a))		/* "ull"  */
149ba2be530Sab196087 #define	EC_HALF(a)	((Elf64_Half)(a))		/* "d"   */
150ba2be530Sab196087 #define	EC_WORD(a)	((Elf64_Word)(a))		/* "u"   */
151ba2be530Sab196087 #define	EC_SWORD(a)	((Elf64_Sword)(a))		/* "d"   */
152ba2be530Sab196087 #define	EC_XWORD(a)	((Elf64_Xword)(a))		/* "ull" */
153ba2be530Sab196087 #define	EC_SXWORD(a)	((Elf64_Sxword)(a))		/* "ll"  */
154ba2be530Sab196087 #define	EC_LWORD(a)	((Elf64_Lword)(a))		/* "ull" */
155ba2be530Sab196087 
156ba2be530Sab196087 /*
157ba2be530Sab196087  * A native pointer is special.  Although it can be convenient to display
158ba2be530Sab196087  * these from a common format (ull), compilers may flag the cast of a pointer
159ba2be530Sab196087  * to an integer as illegal.  Casting these pointers to the native pointer
160ba2be530Sab196087  * size, suppresses any compiler errors.
161ba2be530Sab196087  */
162ba2be530Sab196087 #define	EC_NATPTR(a)	((Elf64_Xword)(uintptr_t)(a))	/* "ull" */
163ba2be530Sab196087 #else
164ba2be530Sab196087 #define	EC_ADDR(a)	((u_longlong_t)(a))
165ba2be530Sab196087 #define	EC_OFF(a)	((u_longlong_t)(a))
166ba2be530Sab196087 #define	EC_HALF(a)	((ushort_t)(a))
167ba2be530Sab196087 #define	EC_WORD(a)	((uint_t)(a))
168ba2be530Sab196087 #define	EC_SWORD(a)	((int)(a))
169ba2be530Sab196087 #define	EC_XWORD(a)	((u_longlong_t)(a))
170ba2be530Sab196087 #define	EC_SXWORD(a)	((longlong_t)(a))
171ba2be530Sab196087 #define	EC_LWORD(a)	((u_longlong_t)(a))
172ba2be530Sab196087 
173ba2be530Sab196087 #define	EC_NATPTR(a)	((u_longlong_t)(a))
174ba2be530Sab196087 #endif
175ba2be530Sab196087 
176ba2be530Sab196087 #ifdef	__cplusplus
177ba2be530Sab196087 }
178ba2be530Sab196087 #endif
179ba2be530Sab196087 
180ba2be530Sab196087 #endif	/* _SYS_MACHELF_H */
181