blob: 976242e961d4c346972cfe42fe77128fe4400ff8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
* All Rights Reserved
*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_ELF_SPARC_H
#define _SYS_ELF_SPARC_H
#ifdef __cplusplus
extern "C" {
#endif
#define EF_SPARC_32PLUS_MASK 0xffff00 /* bits indicating V8+ type */
#define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */
#define EF_SPARC_EXT_MASK 0xffff00 /* bits for vendor extensions */
#define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */
#define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */
#define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARC3 extensions */
#define EF_SPARCV9_MM 0x3 /* mask for memory model */
#define EF_SPARCV9_TSO 0x0 /* total store ordering */
#define EF_SPARCV9_PSO 0x1 /* partial store ordering */
#define EF_SPARCV9_RMO 0x2 /* relaxed memory ordering */
#define R_SPARC_NONE 0 /* relocation type */
#define R_SPARC_8 1
#define R_SPARC_16 2
#define R_SPARC_32 3
#define R_SPARC_DISP8 4
#define R_SPARC_DISP16 5
#define R_SPARC_DISP32 6
#define R_SPARC_WDISP30 7
#define R_SPARC_WDISP22 8
#define R_SPARC_HI22 9
#define R_SPARC_22 10
#define R_SPARC_13 11
#define R_SPARC_LO10 12
#define R_SPARC_GOT10 13
#define R_SPARC_GOT13 14
#define R_SPARC_GOT22 15
#define R_SPARC_PC10 16
#define R_SPARC_PC22 17
#define R_SPARC_WPLT30 18
#define R_SPARC_COPY 19
#define R_SPARC_GLOB_DAT 20
#define R_SPARC_JMP_SLOT 21
#define R_SPARC_RELATIVE 22
#define R_SPARC_UA32 23
#define R_SPARC_PLT32 24
#define R_SPARC_HIPLT22 25
#define R_SPARC_LOPLT10 26
#define R_SPARC_PCPLT32 27
#define R_SPARC_PCPLT22 28
#define R_SPARC_PCPLT10 29
#define R_SPARC_10 30
#define R_SPARC_11 31
#define R_SPARC_64 32
#define R_SPARC_OLO10 33
#define R_SPARC_HH22 34
#define R_SPARC_HM10 35
#define R_SPARC_LM22 36
#define R_SPARC_PC_HH22 37
#define R_SPARC_PC_HM10 38
#define R_SPARC_PC_LM22 39
#define R_SPARC_WDISP16 40
#define R_SPARC_WDISP19 41
#define R_SPARC_GLOB_JMP 42
#define R_SPARC_7 43
#define R_SPARC_5 44
#define R_SPARC_6 45
#define R_SPARC_DISP64 46
#define R_SPARC_PLT64 47
#define R_SPARC_HIX22 48
#define R_SPARC_LOX10 49
#define R_SPARC_H44 50
#define R_SPARC_M44 51
#define R_SPARC_L44 52
#define R_SPARC_REGISTER 53
#define R_SPARC_UA64 54
#define R_SPARC_UA16 55
#define R_SPARC_TLS_GD_HI22 56
#define R_SPARC_TLS_GD_LO10 57
#define R_SPARC_TLS_GD_ADD 58
#define R_SPARC_TLS_GD_CALL 59
#define R_SPARC_TLS_LDM_HI22 60
#define R_SPARC_TLS_LDM_LO10 61
#define R_SPARC_TLS_LDM_ADD 62
#define R_SPARC_TLS_LDM_CALL 63
#define R_SPARC_TLS_LDO_HIX22 64
#define R_SPARC_TLS_LDO_LOX10 65
#define R_SPARC_TLS_LDO_ADD 66
#define R_SPARC_TLS_IE_HI22 67
#define R_SPARC_TLS_IE_LO10 68
#define R_SPARC_TLS_IE_LD 69
#define R_SPARC_TLS_IE_LDX 70
#define R_SPARC_TLS_IE_ADD 71
#define R_SPARC_TLS_LE_HIX22 72
#define R_SPARC_TLS_LE_LOX10 73
#define R_SPARC_TLS_DTPMOD32 74
#define R_SPARC_TLS_DTPMOD64 75
#define R_SPARC_TLS_DTPOFF32 76
#define R_SPARC_TLS_DTPOFF64 77
#define R_SPARC_TLS_TPOFF32 78
#define R_SPARC_TLS_TPOFF64 79
#define R_SPARC_GOTDATA_HIX22 80
#define R_SPARC_GOTDATA_LOX10 81
#define R_SPARC_GOTDATA_OP_HIX22 82
#define R_SPARC_GOTDATA_OP_LOX10 83
#define R_SPARC_GOTDATA_OP 84
#define R_SPARC_H34 85
#define R_SPARC_SIZE32 86
#define R_SPARC_SIZE64 87
#define R_SPARC_NUM 88
/*
* Relocation aliases
*/
#define R_SPARC_L34 R_SPARC_L44 /* associated with R_SPARC_H34 */
/* same calc as R_SPARC_L44 */
#define ELF_SPARC_MAXPGSZ 0x10000 /* maximum page size */
#define ELF_SPARCV9_MAXPGSZ 0x100000
/*
* Processor specific section types
*/
#define SHT_SPARC_GOTDATA 0x70000000
#define SHF_ORDERED 0x40000000
#define SHF_EXCLUDE 0x80000000
#define SHN_BEFORE 0xff00
#define SHN_AFTER 0xff01
#define STT_SPARC_REGISTER 13 /* register symbol type */
#define DT_SPARC_REGISTER 0x70000001 /* identifies register */
/* symbols */
/*
* Register symbol numbers - to be used in the st_value field
* of register symbols.
*/
#define STO_SPARC_REGISTER_G1 0x1 /* register %g1 */
#define STO_SPARC_REGISTER_G2 0x2 /* register %g2 */
#define STO_SPARC_REGISTER_G3 0x3 /* register %g3 */
#define STO_SPARC_REGISTER_G4 0x4 /* register %g4 */
#define STO_SPARC_REGISTER_G5 0x5 /* register %g5 */
#define STO_SPARC_REGISTER_G6 0x6 /* register %g6 */
#define STO_SPARC_REGISTER_G7 0x7 /* register %g7 */
/*
* There are consumers of this file that want to include elf defines for
* all architectures. This is a problem for the defines below, because
* while they are architecture specific they have common names. Hence to
* prevent attempts to redefine these variables we'll check if any of
* the other elf architecture header files have been included. If
* they have then we'll just stick with the existing definitions.
*/
#if !defined(_SYS_ELF_MACH_COMMON)
#define _SYS_ELF_MACH_COMMON
/*
* Plt and Got information; the first few .got and .plt entries are reserved
* PLT[0] jump to dynamic linker
* GOT[0] address of _DYNAMIC
*/
#define M_PLT_INSSIZE 4 /* single plt instruction size */
#define M_PLT_XNumber 4 /* reserved no. of plt entries */
#define M_GOT_XDYNAMIC 0 /* got index for _DYNAMIC */
#define M_GOT_XNumber 1 /* reserved no. of got entries */
/*
* ELF32 bit PLT constants
*/
#define M32_WORD_ALIGN 4
#define M32_PLT_ENTSIZE 12 /* plt entry size in bytes */
#define M32_PLT_ALIGN M_WORD_ALIGN /* alignment of .plt section */
#define M32_GOT_ENTSIZE 4 /* got entry size in bytes */
#define M32_GOT_MAXSMALL 2048 /* maximum no. of small gots */
#define M32_PLT_RESERVSZ (M_PLT_XNumber * \
M32_PLT_ENTSIZE) /* first 4 plt's reserved */
/*
* ELF64 bit PLT constants
*/
#define M64_WORD_ALIGN 8
#define M64_PLT_ENTSIZE 32 /* plt entry size in bytes */
#define M64_PLT_ALIGN 256 /* alignment of .plt section */
#define M64_GOT_ENTSIZE 8 /* got entry size in bytes */
#define M64_GOT_MAXSMALL 1024 /* maximum no. of small gots */
#define M64_PLT_RESERVSZ (M_PLT_XNumber * \
M64_PLT_ENTSIZE) /* first 4 plt's reserved */
#define M64_PLT_NEARPLTS 0x8000 /* # of NEAR PLTS we can have */
#define M64_PLT_FENTSIZE 24 /* size of far plt is 6 instructions */
/* x 4bytes */
#define M64_PLT_PSIZE 8 /* size of PLTP pointer */
#define M64_PLT_FBLKCNTS 160 /* # of plts in far PLT blocks */
#define M64_PLT_FBLOCKSZ (M64_PLT_FBLKCNTS *\
M64_PLT_ENTSIZE) /* size of far PLT block */
/*
* Make common alias for the 32/64 bit specific defines based on _ELF64
*/
#ifdef _ELF64
/* architecture common defines */
#define M_WORD_ALIGN M64_WORD_ALIGN
#define M_PLT_ENTSIZE M64_PLT_ENTSIZE
#define M_PLT_ALIGN M64_PLT_ALIGN
#define M_PLT_RESERVSZ M64_PLT_RESERVSZ
#define M_GOT_ENTSIZE M64_GOT_ENTSIZE
/* sparc specific defines */
#define M_GOT_MAXSMALL M64_GOT_MAXSMALL
#else /* !_ELF64 */
/* architecture common defines */
#define M_WORD_ALIGN M32_WORD_ALIGN
#define M_PLT_ENTSIZE M32_PLT_ENTSIZE
#define M_PLT_ALIGN M32_PLT_ALIGN
#define M_PLT_RESERVSZ M32_PLT_RESERVSZ
#define M_GOT_ENTSIZE M32_GOT_ENTSIZE
/* sparc specific defines */
#define M_GOT_MAXSMALL M32_GOT_MAXSMALL
#endif /* !_ELF64 */
#endif /* !_SYS_ELF_MACH_COMMON */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_ELF_SPARC_H */
|