1 | /*- |
---|
2 | * Copyright (c) 2010 Joseph Koshy |
---|
3 | * All rights reserved. |
---|
4 | * |
---|
5 | * Redistribution and use in source and binary forms, with or without |
---|
6 | * modification, are permitted provided that the following conditions |
---|
7 | * are met: |
---|
8 | * 1. Redistributions of source code must retain the above copyright |
---|
9 | * notice, this list of conditions and the following disclaimer. |
---|
10 | * 2. Redistributions in binary form must reproduce the above copyright |
---|
11 | * notice, this list of conditions and the following disclaimer in the |
---|
12 | * documentation and/or other materials provided with the distribution. |
---|
13 | * |
---|
14 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
---|
15 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
---|
16 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
---|
17 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
---|
18 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
---|
19 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
---|
20 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
---|
21 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
---|
22 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
---|
23 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
---|
24 | * SUCH DAMAGE. |
---|
25 | * |
---|
26 | * $Id: elfdefinitions.h 2132 2011-11-10 08:27:41Z jkoshy $ |
---|
27 | */ |
---|
28 | |
---|
29 | /* |
---|
30 | * These definitions are based on: |
---|
31 | * - The public specification of the ELF format as defined in the |
---|
32 | * October 2009 draft of System V ABI. |
---|
33 | * See: http://www.sco.com/developers/gabi/latest/ch4.intro.html |
---|
34 | * - The May 1998 (version 1.5) draft of "The ELF-64 object format". |
---|
35 | * - Processor-specific ELF ABI definitions for sparc, i386, amd64, mips, |
---|
36 | * ia64, and powerpc processors. |
---|
37 | * - The "Linkers and Libraries Guide", from Sun Microsystems. |
---|
38 | */ |
---|
39 | |
---|
40 | #ifndef _ELFDEFINITIONS_H_ |
---|
41 | #define _ELFDEFINITIONS_H_ |
---|
42 | |
---|
43 | #include <stdint.h> |
---|
44 | |
---|
45 | /* |
---|
46 | * Types of capabilities. |
---|
47 | */ |
---|
48 | |
---|
49 | #define _ELF_DEFINE_CAPABILITIES() \ |
---|
50 | _ELF_DEFINE_CA(CA_SUNW_NULL, 0, "ignored") \ |
---|
51 | _ELF_DEFINE_CA(CA_SUNW_HW_1, 1, "hardware capability") \ |
---|
52 | _ELF_DEFINE_CA(CA_SUNW_SW_1, 2, "software capability") |
---|
53 | |
---|
54 | #undef _ELF_DEFINE_CA |
---|
55 | #define _ELF_DEFINE_CA(N, V, DESCR) N = V , |
---|
56 | enum { |
---|
57 | _ELF_DEFINE_CAPABILITIES() |
---|
58 | CA__LAST__ |
---|
59 | }; |
---|
60 | |
---|
61 | /* |
---|
62 | * Flags used with dynamic linking entries. |
---|
63 | */ |
---|
64 | |
---|
65 | #define _ELF_DEFINE_DYN_FLAGS() \ |
---|
66 | _ELF_DEFINE_DF(DF_ORIGIN, 0x1, \ |
---|
67 | "object being loaded may refer to $ORIGIN") \ |
---|
68 | _ELF_DEFINE_DF(DF_SYMBOLIC, 0x2, \ |
---|
69 | "search library for references before executable") \ |
---|
70 | _ELF_DEFINE_DF(DF_TEXTREL, 0x4, \ |
---|
71 | "relocation entries may modify text segment") \ |
---|
72 | _ELF_DEFINE_DF(DF_BIND_NOW, 0x8, \ |
---|
73 | "process relocation entries at load time") \ |
---|
74 | _ELF_DEFINE_DF(DF_STATIC_TLS, 0x10, \ |
---|
75 | "uses static thread-local storage") |
---|
76 | #undef _ELF_DEFINE_DF |
---|
77 | #define _ELF_DEFINE_DF(N, V, DESCR) N = V , |
---|
78 | enum { |
---|
79 | _ELF_DEFINE_DYN_FLAGS() |
---|
80 | DF__LAST__ |
---|
81 | }; |
---|
82 | |
---|
83 | |
---|
84 | /* |
---|
85 | * Dynamic linking entry types. |
---|
86 | */ |
---|
87 | |
---|
88 | #define _ELF_DEFINE_DYN_TYPES() \ |
---|
89 | _ELF_DEFINE_DT(DT_NULL, 0, "end of array") \ |
---|
90 | _ELF_DEFINE_DT(DT_NEEDED, 1, "names a needed library") \ |
---|
91 | _ELF_DEFINE_DT(DT_PLTRELSZ, 2, \ |
---|
92 | "size in bytes of associated relocation entries") \ |
---|
93 | _ELF_DEFINE_DT(DT_PLTGOT, 3, \ |
---|
94 | "address associated with the procedure linkage table") \ |
---|
95 | _ELF_DEFINE_DT(DT_HASH, 4, \ |
---|
96 | "address of the symbol hash table") \ |
---|
97 | _ELF_DEFINE_DT(DT_STRTAB, 5, \ |
---|
98 | "address of the string table") \ |
---|
99 | _ELF_DEFINE_DT(DT_SYMTAB, 6, \ |
---|
100 | "address of the symbol table") \ |
---|
101 | _ELF_DEFINE_DT(DT_RELA, 7, \ |
---|
102 | "address of the relocation table") \ |
---|
103 | _ELF_DEFINE_DT(DT_RELASZ, 8, "size of the DT_RELA table") \ |
---|
104 | _ELF_DEFINE_DT(DT_RELAENT, 9, "size of each DT_RELA entry") \ |
---|
105 | _ELF_DEFINE_DT(DT_STRSZ, 10, "size of the string table") \ |
---|
106 | _ELF_DEFINE_DT(DT_SYMENT, 11, \ |
---|
107 | "size of a symbol table entry") \ |
---|
108 | _ELF_DEFINE_DT(DT_INIT, 12, \ |
---|
109 | "address of the initialization function") \ |
---|
110 | _ELF_DEFINE_DT(DT_FINI, 13, \ |
---|
111 | "address of the finalization function") \ |
---|
112 | _ELF_DEFINE_DT(DT_SONAME, 14, "names the shared object") \ |
---|
113 | _ELF_DEFINE_DT(DT_RPATH, 15, \ |
---|
114 | "runtime library search path") \ |
---|
115 | _ELF_DEFINE_DT(DT_SYMBOLIC, 16, \ |
---|
116 | "alter symbol resolution algorithm") \ |
---|
117 | _ELF_DEFINE_DT(DT_REL, 17, \ |
---|
118 | "address of the DT_REL table") \ |
---|
119 | _ELF_DEFINE_DT(DT_RELSZ, 18, "size of the DT_REL table") \ |
---|
120 | _ELF_DEFINE_DT(DT_RELENT, 19, "size of each DT_REL entry") \ |
---|
121 | _ELF_DEFINE_DT(DT_PLTREL, 20, \ |
---|
122 | "type of relocation entry in the procedure linkage table") \ |
---|
123 | _ELF_DEFINE_DT(DT_DEBUG, 21, "used for debugging") \ |
---|
124 | _ELF_DEFINE_DT(DT_TEXTREL, 22, \ |
---|
125 | "text segment may be written to during relocation") \ |
---|
126 | _ELF_DEFINE_DT(DT_JMPREL, 23, \ |
---|
127 | "address of relocation entries associated with the procedure linkage table") \ |
---|
128 | _ELF_DEFINE_DT(DT_BIND_NOW, 24, \ |
---|
129 | "bind symbols at loading time") \ |
---|
130 | _ELF_DEFINE_DT(DT_INIT_ARRAY, 25, \ |
---|
131 | "pointers to initialization functions") \ |
---|
132 | _ELF_DEFINE_DT(DT_FINI_ARRAY, 26, \ |
---|
133 | "pointers to termination functions") \ |
---|
134 | _ELF_DEFINE_DT(DT_INIT_ARRAYSZ, 27, "size of the DT_INIT_ARRAY") \ |
---|
135 | _ELF_DEFINE_DT(DT_FINI_ARRAYSZ, 28, "size of the DT_FINI_ARRAY") \ |
---|
136 | _ELF_DEFINE_DT(DT_RUNPATH, 29, \ |
---|
137 | "index of library search path string") \ |
---|
138 | _ELF_DEFINE_DT(DT_FLAGS, 30, \ |
---|
139 | "flags specific to the object being loaded") \ |
---|
140 | _ELF_DEFINE_DT(DT_ENCODING, 32, "standard semantics") \ |
---|
141 | _ELF_DEFINE_DT(DT_PREINIT_ARRAY, 32, \ |
---|
142 | "pointers to pre-initialization functions") \ |
---|
143 | _ELF_DEFINE_DT(DT_PREINIT_ARRAYSZ, 33, \ |
---|
144 | "size of pre-initialization array") \ |
---|
145 | _ELF_DEFINE_DT(DT_MAXPOSTAGS, 34, \ |
---|
146 | "the number of positive tags") \ |
---|
147 | _ELF_DEFINE_DT(DT_LOOS, 0x6000000DUL, \ |
---|
148 | "start of OS-specific types") \ |
---|
149 | _ELF_DEFINE_DT(DT_SUNW_AUXILIARY, 0x6000000DUL, \ |
---|
150 | "offset of string naming auxiliary filtees") \ |
---|
151 | _ELF_DEFINE_DT(DT_SUNW_RTLDINF, 0x6000000EUL, "rtld internal use") \ |
---|
152 | _ELF_DEFINE_DT(DT_SUNW_FILTER, 0x6000000FUL, \ |
---|
153 | "offset of string naming standard filtees") \ |
---|
154 | _ELF_DEFINE_DT(DT_SUNW_CAP, 0x60000010UL, \ |
---|
155 | "address of hardware capabilities section") \ |
---|
156 | _ELF_DEFINE_DT(DT_HIOS, 0x6FFFF000UL, \ |
---|
157 | "end of OS-specific types") \ |
---|
158 | _ELF_DEFINE_DT(DT_VALRNGLO, 0x6FFFFD00UL, \ |
---|
159 | "start of range using the d_val field") \ |
---|
160 | _ELF_DEFINE_DT(DT_GNU_PRELINKED, 0x6FFFFDF5UL, \ |
---|
161 | "prelinking timestamp") \ |
---|
162 | _ELF_DEFINE_DT(DT_GNU_CONFLICTSZ, 0x6FFFFDF6UL, \ |
---|
163 | "size of conflict section") \ |
---|
164 | _ELF_DEFINE_DT(DT_GNU_LIBLISTSZ, 0x6FFFFDF7UL, \ |
---|
165 | "size of library list") \ |
---|
166 | _ELF_DEFINE_DT(DT_CHECKSUM, 0x6FFFFDF8UL, \ |
---|
167 | "checksum for the object") \ |
---|
168 | _ELF_DEFINE_DT(DT_PLTPADSZ, 0x6FFFFDF9UL, \ |
---|
169 | "size of PLT padding") \ |
---|
170 | _ELF_DEFINE_DT(DT_MOVEENT, 0x6FFFFDFAUL, \ |
---|
171 | "size of DT_MOVETAB entries") \ |
---|
172 | _ELF_DEFINE_DT(DT_MOVESZ, 0x6FFFFDFBUL, \ |
---|
173 | "total size of the MOVETAB table") \ |
---|
174 | _ELF_DEFINE_DT(DT_FEATURE_1, 0x6FFFFDFCUL, "feature values") \ |
---|
175 | _ELF_DEFINE_DT(DT_POSFLAG_1, 0x6FFFFDFDUL, \ |
---|
176 | "dynamic position flags") \ |
---|
177 | _ELF_DEFINE_DT(DT_SYMINSZ, 0x6FFFFDFEUL, \ |
---|
178 | "size of the DT_SYMINFO table") \ |
---|
179 | _ELF_DEFINE_DT(DT_SYMINENT, 0x6FFFFDFFUL, \ |
---|
180 | "size of a DT_SYMINFO entry") \ |
---|
181 | _ELF_DEFINE_DT(DT_VALRNGHI, 0x6FFFFDFFUL, \ |
---|
182 | "end of range using the d_val field") \ |
---|
183 | _ELF_DEFINE_DT(DT_ADDRRNGLO, 0x6FFFFE00UL, \ |
---|
184 | "start of range using the d_ptr field") \ |
---|
185 | _ELF_DEFINE_DT(DT_GNU_HASH, 0x6FFFFEF5UL, \ |
---|
186 | "GNU style hash tables") \ |
---|
187 | _ELF_DEFINE_DT(DT_GNU_CONFLICT, 0x6FFFFEF8UL, \ |
---|
188 | "address of conflict section") \ |
---|
189 | _ELF_DEFINE_DT(DT_GNU_LIBLIST, 0x6FFFFEF9UL, \ |
---|
190 | "address of conflict section") \ |
---|
191 | _ELF_DEFINE_DT(DT_CONFIG, 0x6FFFFEFAUL, \ |
---|
192 | "configuration file") \ |
---|
193 | _ELF_DEFINE_DT(DT_DEPAUDIT, 0x6FFFFEFBUL, \ |
---|
194 | "string defining audit libraries") \ |
---|
195 | _ELF_DEFINE_DT(DT_AUDIT, 0x6FFFFEFCUL, \ |
---|
196 | "string defining audit libraries") \ |
---|
197 | _ELF_DEFINE_DT(DT_PLTPAD, 0x6FFFFEFDUL, "PLT padding") \ |
---|
198 | _ELF_DEFINE_DT(DT_MOVETAB, 0x6FFFFEFEUL, \ |
---|
199 | "address of a move table") \ |
---|
200 | _ELF_DEFINE_DT(DT_SYMINFO, 0x6FFFFEFFUL, \ |
---|
201 | "address of the symbol information table") \ |
---|
202 | _ELF_DEFINE_DT(DT_ADDRRNGHI, 0x6FFFFEFFUL, \ |
---|
203 | "end of range using the d_ptr field") \ |
---|
204 | _ELF_DEFINE_DT(DT_VERSYM, 0x6FFFFFF0UL, \ |
---|
205 | "address of the version section") \ |
---|
206 | _ELF_DEFINE_DT(DT_RELACOUNT, 0x6FFFFFF9UL, \ |
---|
207 | "count of RELA relocations") \ |
---|
208 | _ELF_DEFINE_DT(DT_RELCOUNT, 0x6FFFFFFAUL, \ |
---|
209 | "count of REL relocations") \ |
---|
210 | _ELF_DEFINE_DT(DT_FLAGS_1, 0x6FFFFFFBUL, "flag values") \ |
---|
211 | _ELF_DEFINE_DT(DT_VERDEF, 0x6FFFFFFCUL, \ |
---|
212 | "address of the version definition segment") \ |
---|
213 | _ELF_DEFINE_DT(DT_VERDEFNUM, 0x6FFFFFFDUL, \ |
---|
214 | "the number of version definition entries") \ |
---|
215 | _ELF_DEFINE_DT(DT_VERNEED, 0x6FFFFFFEUL, \ |
---|
216 | "address of section with needed versions") \ |
---|
217 | _ELF_DEFINE_DT(DT_VERNEEDNUM, 0x6FFFFFFFUL, \ |
---|
218 | "the number of version needed entries") \ |
---|
219 | _ELF_DEFINE_DT(DT_LOPROC, 0x70000000UL, \ |
---|
220 | "start of processor-specific types") \ |
---|
221 | _ELF_DEFINE_DT(DT_ARM_SYMTABSZ, 0x70000001UL, \ |
---|
222 | "number of entries in the dynamic symbol table") \ |
---|
223 | _ELF_DEFINE_DT(DT_SPARC_REGISTER, 0x70000001UL, \ |
---|
224 | "index of an STT_SPARC_REGISTER symbol") \ |
---|
225 | _ELF_DEFINE_DT(DT_ARM_PREEMPTMAP, 0x70000002UL, \ |
---|
226 | "address of the preemption map") \ |
---|
227 | _ELF_DEFINE_DT(DT_MIPS_RLD_VERSION, 0x70000001UL, \ |
---|
228 | "version ID for runtime linker interface") \ |
---|
229 | _ELF_DEFINE_DT(DT_MIPS_TIME_STAMP, 0x70000002UL, \ |
---|
230 | "timestamp") \ |
---|
231 | _ELF_DEFINE_DT(DT_MIPS_ICHECKSUM, 0x70000003UL, \ |
---|
232 | "checksum of all external strings and common sizes") \ |
---|
233 | _ELF_DEFINE_DT(DT_MIPS_IVERSION, 0x70000004UL, \ |
---|
234 | "string table index of a version string") \ |
---|
235 | _ELF_DEFINE_DT(DT_MIPS_FLAGS, 0x70000005UL, \ |
---|
236 | "MIPS-specific flags") \ |
---|
237 | _ELF_DEFINE_DT(DT_MIPS_BASE_ADDRESS, 0x70000006UL, \ |
---|
238 | "base address for the executable/DSO") \ |
---|
239 | _ELF_DEFINE_DT(DT_MIPS_CONFLICT, 0x70000008UL, \ |
---|
240 | "address of .conflict section") \ |
---|
241 | _ELF_DEFINE_DT(DT_MIPS_LIBLIST, 0x70000009UL, \ |
---|
242 | "address of .liblist section") \ |
---|
243 | _ELF_DEFINE_DT(DT_MIPS_LOCAL_GOTNO, 0x7000000AUL, \ |
---|
244 | "number of local GOT entries") \ |
---|
245 | _ELF_DEFINE_DT(DT_MIPS_CONFLICTNO, 0x7000000BUL, \ |
---|
246 | "number of entries in the .conflict section") \ |
---|
247 | _ELF_DEFINE_DT(DT_MIPS_LIBLISTNO, 0x70000010UL, \ |
---|
248 | "number of entries in the .liblist section") \ |
---|
249 | _ELF_DEFINE_DT(DT_MIPS_SYMTABNO, 0x70000011UL, \ |
---|
250 | "number of entries in the .dynsym section") \ |
---|
251 | _ELF_DEFINE_DT(DT_MIPS_UNREFEXTNO, 0x70000012UL, \ |
---|
252 | "index of first external dynamic symbol not ref'ed locally") \ |
---|
253 | _ELF_DEFINE_DT(DT_MIPS_GOTSYM, 0x70000013UL, \ |
---|
254 | "index of first dynamic symbol corresponds to a GOT entry") \ |
---|
255 | _ELF_DEFINE_DT(DT_MIPS_HIPAGENO, 0x70000014UL, \ |
---|
256 | "number of page table entries in GOT") \ |
---|
257 | _ELF_DEFINE_DT(DT_MIPS_RLD_MAP, 0x70000016UL, \ |
---|
258 | "address of runtime linker map") \ |
---|
259 | _ELF_DEFINE_DT(DT_MIPS_DELTA_CLASS, 0x70000017UL, \ |
---|
260 | "Delta C++ class definition") \ |
---|
261 | _ELF_DEFINE_DT(DT_MIPS_DELTA_CLASS_NO, 0x70000018UL, \ |
---|
262 | "number of entries in DT_MIPS_DELTA_CLASS") \ |
---|
263 | _ELF_DEFINE_DT(DT_MIPS_DELTA_INSTANCE, 0x70000019UL, \ |
---|
264 | "Delta C++ class instances") \ |
---|
265 | _ELF_DEFINE_DT(DT_MIPS_DELTA_INSTANCE_NO, 0x7000001AUL, \ |
---|
266 | "number of entries in DT_MIPS_DELTA_INSTANCE") \ |
---|
267 | _ELF_DEFINE_DT(DT_MIPS_DELTA_RELOC, 0x7000001BUL, \ |
---|
268 | "Delta relocations") \ |
---|
269 | _ELF_DEFINE_DT(DT_MIPS_DELTA_RELOC_NO, 0x7000001CUL, \ |
---|
270 | "number of entries in DT_MIPS_DELTA_RELOC") \ |
---|
271 | _ELF_DEFINE_DT(DT_MIPS_DELTA_SYM, 0x7000001DUL, \ |
---|
272 | "Delta symbols refered by Delta relocations") \ |
---|
273 | _ELF_DEFINE_DT(DT_MIPS_DELTA_SYM_NO, 0x7000001EUL, \ |
---|
274 | "number of entries in DT_MIPS_DELTA_SYM") \ |
---|
275 | _ELF_DEFINE_DT(DT_MIPS_DELTA_CLASSSYM, 0x70000020UL, \ |
---|
276 | "Delta symbols for class declarations") \ |
---|
277 | _ELF_DEFINE_DT(DT_MIPS_DELTA_CLASSSYM_NO, 0x70000021UL, \ |
---|
278 | "number of entries in DT_MIPS_DELTA_CLASSSYM") \ |
---|
279 | _ELF_DEFINE_DT(DT_MIPS_CXX_FLAGS, 0x70000022UL, \ |
---|
280 | "C++ flavor flags") \ |
---|
281 | _ELF_DEFINE_DT(DT_MIPS_PIXIE_INIT, 0x70000023UL, \ |
---|
282 | "address of an initialization routine created by pixie") \ |
---|
283 | _ELF_DEFINE_DT(DT_MIPS_SYMBOL_LIB, 0x70000024UL, \ |
---|
284 | "address of .MIPS.symlib section") \ |
---|
285 | _ELF_DEFINE_DT(DT_MIPS_LOCALPAGE_GOTIDX, 0x70000025UL, \ |
---|
286 | "GOT index of first page table entry for a segment") \ |
---|
287 | _ELF_DEFINE_DT(DT_MIPS_LOCAL_GOTIDX, 0x70000026UL, \ |
---|
288 | "GOT index of first page table entry for a local symbol") \ |
---|
289 | _ELF_DEFINE_DT(DT_MIPS_HIDDEN_GOTIDX, 0x70000027UL, \ |
---|
290 | "GOT index of first page table entry for a hidden symbol") \ |
---|
291 | _ELF_DEFINE_DT(DT_MIPS_PROTECTED_GOTIDX, 0x70000028UL, \ |
---|
292 | "GOT index of first page table entry for a protected symbol") \ |
---|
293 | _ELF_DEFINE_DT(DT_MIPS_OPTIONS, 0x70000029UL, \ |
---|
294 | "address of .MIPS.options section") \ |
---|
295 | _ELF_DEFINE_DT(DT_MIPS_INTERFACE, 0x7000002AUL, \ |
---|
296 | "address of .MIPS.interface section") \ |
---|
297 | _ELF_DEFINE_DT(DT_MIPS_DYNSTR_ALIGN, 0x7000002BUL, "???") \ |
---|
298 | _ELF_DEFINE_DT(DT_MIPS_INTERFACE_SIZE, 0x7000002CUL, \ |
---|
299 | "size of .MIPS.interface section") \ |
---|
300 | _ELF_DEFINE_DT(DT_MIPS_RLD_TEXT_RESOLVE_ADDR, 0x7000002DUL, \ |
---|
301 | "address of _rld_text_resolve in GOT") \ |
---|
302 | _ELF_DEFINE_DT(DT_MIPS_PERF_SUFFIX, 0x7000002EUL, \ |
---|
303 | "default suffix of DSO to be appended by dlopen") \ |
---|
304 | _ELF_DEFINE_DT(DT_MIPS_COMPACT_SIZE, 0x7000002FUL, \ |
---|
305 | "size of a ucode compact relocation record (o32)") \ |
---|
306 | _ELF_DEFINE_DT(DT_MIPS_GP_VALUE, 0x70000030UL, \ |
---|
307 | "GP value of a specified GP relative range") \ |
---|
308 | _ELF_DEFINE_DT(DT_MIPS_AUX_DYNAMIC, 0x70000031UL, \ |
---|
309 | "address of an auxiliary dynamic table") \ |
---|
310 | _ELF_DEFINE_DT(DT_MIPS_PLTGOT, 0x70000032UL, \ |
---|
311 | "address of the PLTGOT") \ |
---|
312 | _ELF_DEFINE_DT(DT_MIPS_RLD_OBJ_UPDATE, 0x70000033UL, \ |
---|
313 | "object list update callback") \ |
---|
314 | _ELF_DEFINE_DT(DT_MIPS_RWPLT, 0x70000034UL, \ |
---|
315 | "address of a writable PLT") \ |
---|
316 | _ELF_DEFINE_DT(DT_PPC_GOT, 0x70000000UL, \ |
---|
317 | "value of _GLOBAL_OFFSET_TABLE_") \ |
---|
318 | _ELF_DEFINE_DT(DT_PPC_TLSOPT, 0x70000001UL, \ |
---|
319 | "TLS descriptor should be optimized") \ |
---|
320 | _ELF_DEFINE_DT(DT_PPC64_GLINK, 0x70000000UL, \ |
---|
321 | "address of .glink section") \ |
---|
322 | _ELF_DEFINE_DT(DT_PPC64_OPD, 0x70000001UL, \ |
---|
323 | "address of .opd section") \ |
---|
324 | _ELF_DEFINE_DT(DT_PPC64_OPDSZ, 0x70000002UL, \ |
---|
325 | "size of .opd section") \ |
---|
326 | _ELF_DEFINE_DT(DT_PPC64_TLSOPT, 0x70000003UL, \ |
---|
327 | "TLS descriptor should be optimized") \ |
---|
328 | _ELF_DEFINE_DT(DT_AUXILIARY, 0x7FFFFFFDUL, \ |
---|
329 | "offset of string naming auxiliary filtees") \ |
---|
330 | _ELF_DEFINE_DT(DT_USED, 0x7FFFFFFEUL, "ignored") \ |
---|
331 | _ELF_DEFINE_DT(DT_FILTER, 0x7FFFFFFFUL, \ |
---|
332 | "index of string naming filtees") \ |
---|
333 | _ELF_DEFINE_DT(DT_HIPROC, 0x7FFFFFFFUL, \ |
---|
334 | "end of processor-specific types") |
---|
335 | |
---|
336 | #undef _ELF_DEFINE_DT |
---|
337 | #define _ELF_DEFINE_DT(N, V, DESCR) N = V , |
---|
338 | enum { |
---|
339 | _ELF_DEFINE_DYN_TYPES() |
---|
340 | DT__LAST__ = DT_HIPROC |
---|
341 | }; |
---|
342 | |
---|
343 | #define DT_DEPRECATED_SPARC_REGISTER DT_SPARC_REGISTER |
---|
344 | |
---|
345 | /* |
---|
346 | * Flags used in the executable header (field: e_flags). |
---|
347 | */ |
---|
348 | #define _ELF_DEFINE_EHDR_FLAGS() \ |
---|
349 | _ELF_DEFINE_EF(EF_ARM_RELEXEC, 0x00000001UL, \ |
---|
350 | "dynamic segment describes only how to relocate segments") \ |
---|
351 | _ELF_DEFINE_EF(EF_ARM_HASENTRY, 0x00000002UL, \ |
---|
352 | "e_entry contains a program entry point") \ |
---|
353 | _ELF_DEFINE_EF(EF_ARM_SYMSARESORTED, 0x00000004UL, \ |
---|
354 | "subsection of symbol table is sorted by symbol value") \ |
---|
355 | _ELF_DEFINE_EF(EF_ARM_DYNSYMSUSESEGIDX, 0x00000008UL, \ |
---|
356 | "dynamic symbol st_shndx = containing segment index + 1") \ |
---|
357 | _ELF_DEFINE_EF(EF_ARM_MAPSYMSFIRST, 0x00000010UL, \ |
---|
358 | "mapping symbols precede other local symbols in symtab") \ |
---|
359 | _ELF_DEFINE_EF(EF_ARM_BE8, 0x00800000UL, \ |
---|
360 | "file contains BE-8 code") \ |
---|
361 | _ELF_DEFINE_EF(EF_ARM_LE8, 0x00400000UL, \ |
---|
362 | "file contains LE-8 code") \ |
---|
363 | _ELF_DEFINE_EF(EF_ARM_EABIMASK, 0xFF000000UL, \ |
---|
364 | "mask for ARM EABI version number (0 denotes GNU or unknown)") \ |
---|
365 | _ELF_DEFINE_EF(EF_ARM_INTERWORK, 0x00000004UL, \ |
---|
366 | "GNU EABI extension") \ |
---|
367 | _ELF_DEFINE_EF(EF_ARM_APCS_26, 0x00000008UL, \ |
---|
368 | "GNU EABI extension") \ |
---|
369 | _ELF_DEFINE_EF(EF_ARM_APCS_FLOAT, 0x00000010UL, \ |
---|
370 | "GNU EABI extension") \ |
---|
371 | _ELF_DEFINE_EF(EF_ARM_PIC, 0x00000020UL, \ |
---|
372 | "GNU EABI extension") \ |
---|
373 | _ELF_DEFINE_EF(EF_ARM_ALIGN8, 0x00000040UL, \ |
---|
374 | "GNU EABI extension") \ |
---|
375 | _ELF_DEFINE_EF(EF_ARM_NEW_ABI, 0x00000080UL, \ |
---|
376 | "GNU EABI extension") \ |
---|
377 | _ELF_DEFINE_EF(EF_ARM_OLD_ABI, 0x00000100UL, \ |
---|
378 | "GNU EABI extension") \ |
---|
379 | _ELF_DEFINE_EF(EF_ARM_SOFT_FLOAT, 0x00000200UL, \ |
---|
380 | "GNU EABI extension") \ |
---|
381 | _ELF_DEFINE_EF(EF_ARM_VFP_FLOAT, 0x00000400UL, \ |
---|
382 | "GNU EABI extension") \ |
---|
383 | _ELF_DEFINE_EF(EF_ARM_MAVERICK_FLOAT, 0x00000800UL, \ |
---|
384 | "GNU EABI extension") \ |
---|
385 | _ELF_DEFINE_EF(EF_MIPS_NOREORDER, 0x00000001UL, \ |
---|
386 | "at least one .noreorder directive appeared in the source") \ |
---|
387 | _ELF_DEFINE_EF(EF_MIPS_PIC, 0x00000002UL, \ |
---|
388 | "file contains position independent code") \ |
---|
389 | _ELF_DEFINE_EF(EF_MIPS_CPIC, 0x00000004UL, \ |
---|
390 | "file's code uses standard conventions for calling PIC") \ |
---|
391 | _ELF_DEFINE_EF(EF_MIPS_UCODE, 0x00000010UL, \ |
---|
392 | "file contains UCODE (obsolete)") \ |
---|
393 | _ELF_DEFINE_EF(EF_MIPS_ABI2, 0x00000020UL, \ |
---|
394 | "file follows MIPS III 32-bit ABI") \ |
---|
395 | _ELF_DEFINE_EF(EF_MIPS_OPTIONS_FIRST, 0x00000080UL, \ |
---|
396 | "ld(1) should process .MIPS.options section first") \ |
---|
397 | _ELF_DEFINE_EF(EF_MIPS_ARCH_ASE, 0x0F000000UL, \ |
---|
398 | "file uses application-specific architectural extensions") \ |
---|
399 | _ELF_DEFINE_EF(EF_MIPS_ARCH_ASE_MDMX, 0x08000000UL, \ |
---|
400 | "file uses MDMX multimedia extensions") \ |
---|
401 | _ELF_DEFINE_EF(EF_MIPS_ARCH_ASE_M16, 0x04000000UL, \ |
---|
402 | "file uses MIPS-16 ISA extensions") \ |
---|
403 | _ELF_DEFINE_EF(EF_MIPS_ARCH, 0xF0000000UL, \ |
---|
404 | "4-bit MIPS architecture field") \ |
---|
405 | _ELF_DEFINE_EF(EF_PPC_EMB, 0x80000000UL, \ |
---|
406 | "Embedded PowerPC flag") \ |
---|
407 | _ELF_DEFINE_EF(EF_PPC_RELOCATABLE, 0x00010000UL, \ |
---|
408 | "-mrelocatable flag") \ |
---|
409 | _ELF_DEFINE_EF(EF_PPC_RELOCATABLE_LIB, 0x00008000UL, \ |
---|
410 | "-mrelocatable-lib flag") \ |
---|
411 | _ELF_DEFINE_EF(EF_SPARC_EXT_MASK, 0x00ffff00UL, \ |
---|
412 | "Vendor Extension mask") \ |
---|
413 | _ELF_DEFINE_EF(EF_SPARC_32PLUS, 0x00000100UL, \ |
---|
414 | "Generic V8+ features") \ |
---|
415 | _ELF_DEFINE_EF(EF_SPARC_SUN_US1, 0x00000200UL, \ |
---|
416 | "Sun UltraSPARCTM 1 Extensions") \ |
---|
417 | _ELF_DEFINE_EF(EF_SPARC_HAL_R1, 0x00000400UL, "HAL R1 Extensions") \ |
---|
418 | _ELF_DEFINE_EF(EF_SPARC_SUN_US3, 0x00000800UL, \ |
---|
419 | "Sun UltraSPARC 3 Extensions") \ |
---|
420 | _ELF_DEFINE_EF(EF_SPARCV9_MM, 0x00000003UL, \ |
---|
421 | "Mask for Memory Model") \ |
---|
422 | _ELF_DEFINE_EF(EF_SPARCV9_TSO, 0x00000000UL, \ |
---|
423 | "Total Store Ordering") \ |
---|
424 | _ELF_DEFINE_EF(EF_SPARCV9_PSO, 0x00000001UL, \ |
---|
425 | "Partial Store Ordering") \ |
---|
426 | _ELF_DEFINE_EF(EF_SPARCV9_RMO, 0x00000002UL, \ |
---|
427 | "Relaxed Memory Ordering") |
---|
428 | |
---|
429 | #undef _ELF_DEFINE_EF |
---|
430 | #define _ELF_DEFINE_EF(N, V, DESCR) N = V , |
---|
431 | enum { |
---|
432 | _ELF_DEFINE_EHDR_FLAGS() |
---|
433 | EF__LAST__ |
---|
434 | }; |
---|
435 | |
---|
436 | /* |
---|
437 | * Offsets in the `ei_ident[]` field of an ELF executable header. |
---|
438 | */ |
---|
439 | #define _ELF_DEFINE_EI_OFFSETS() \ |
---|
440 | _ELF_DEFINE_EI(EI_MAG0, 0, "magic number") \ |
---|
441 | _ELF_DEFINE_EI(EI_MAG1, 1, "magic number") \ |
---|
442 | _ELF_DEFINE_EI(EI_MAG2, 2, "magic number") \ |
---|
443 | _ELF_DEFINE_EI(EI_MAG3, 3, "magic number") \ |
---|
444 | _ELF_DEFINE_EI(EI_CLASS, 4, "file class") \ |
---|
445 | _ELF_DEFINE_EI(EI_DATA, 5, "data encoding") \ |
---|
446 | _ELF_DEFINE_EI(EI_VERSION, 6, "file version") \ |
---|
447 | _ELF_DEFINE_EI(EI_OSABI, 7, "OS ABI kind") \ |
---|
448 | _ELF_DEFINE_EI(EI_ABIVERSION, 8, "OS ABI version") \ |
---|
449 | _ELF_DEFINE_EI(EI_PAD, 9, "padding start") \ |
---|
450 | _ELF_DEFINE_EI(EI_NIDENT, 16, "total size") |
---|
451 | |
---|
452 | #undef _ELF_DEFINE_EI |
---|
453 | #define _ELF_DEFINE_EI(N, V, DESCR) N = V , |
---|
454 | enum { |
---|
455 | _ELF_DEFINE_EI_OFFSETS() |
---|
456 | EI__LAST__ |
---|
457 | }; |
---|
458 | |
---|
459 | /* |
---|
460 | * The ELF class of an object. |
---|
461 | */ |
---|
462 | #define _ELF_DEFINE_ELFCLASS() \ |
---|
463 | _ELF_DEFINE_EC(ELFCLASSNONE, 0, "Unknown ELF class") \ |
---|
464 | _ELF_DEFINE_EC(ELFCLASS32, 1, "32 bit objects") \ |
---|
465 | _ELF_DEFINE_EC(ELFCLASS64, 2, "64 bit objects") |
---|
466 | |
---|
467 | #undef _ELF_DEFINE_EC |
---|
468 | #define _ELF_DEFINE_EC(N, V, DESCR) N = V , |
---|
469 | enum { |
---|
470 | _ELF_DEFINE_ELFCLASS() |
---|
471 | EC__LAST__ |
---|
472 | }; |
---|
473 | |
---|
474 | /* |
---|
475 | * Endianness of data in an ELF object. |
---|
476 | */ |
---|
477 | |
---|
478 | #define _ELF_DEFINE_ELF_DATA_ENDIANNESS() \ |
---|
479 | _ELF_DEFINE_ED(ELFDATANONE, 0, "Unknown data endianness") \ |
---|
480 | _ELF_DEFINE_ED(ELFDATA2LSB, 1, "little endian") \ |
---|
481 | _ELF_DEFINE_ED(ELFDATA2MSB, 2, "big endian") |
---|
482 | |
---|
483 | #undef _ELF_DEFINE_ED |
---|
484 | #define _ELF_DEFINE_ED(N, V, DESCR) N = V , |
---|
485 | enum { |
---|
486 | _ELF_DEFINE_ELF_DATA_ENDIANNESS() |
---|
487 | ED__LAST__ |
---|
488 | }; |
---|
489 | |
---|
490 | /* |
---|
491 | * Values of the magic numbers used in identification array. |
---|
492 | */ |
---|
493 | #define _ELF_DEFINE_ELF_MAGIC() \ |
---|
494 | _ELF_DEFINE_EMAG(ELFMAG0, 0x7FU) \ |
---|
495 | _ELF_DEFINE_EMAG(ELFMAG1, 'E') \ |
---|
496 | _ELF_DEFINE_EMAG(ELFMAG2, 'L') \ |
---|
497 | _ELF_DEFINE_EMAG(ELFMAG3, 'F') |
---|
498 | |
---|
499 | #undef _ELF_DEFINE_EMAG |
---|
500 | #define _ELF_DEFINE_EMAG(N, V) N = V , |
---|
501 | enum { |
---|
502 | _ELF_DEFINE_ELF_MAGIC() |
---|
503 | ELFMAG__LAST__ |
---|
504 | }; |
---|
505 | |
---|
506 | /* |
---|
507 | * ELF OS ABI field. |
---|
508 | */ |
---|
509 | #define _ELF_DEFINE_ELF_OSABI() \ |
---|
510 | _ELF_DEFINE_EABI(ELFOSABI_NONE, 0, \ |
---|
511 | "No extensions or unspecified") \ |
---|
512 | _ELF_DEFINE_EABI(ELFOSABI_SYSV, 0, "SYSV") \ |
---|
513 | _ELF_DEFINE_EABI(ELFOSABI_HPUX, 1, "Hewlett-Packard HP-UX") \ |
---|
514 | _ELF_DEFINE_EABI(ELFOSABI_NETBSD, 2, "NetBSD") \ |
---|
515 | _ELF_DEFINE_EABI(ELFOSABI_GNU, 3, "GNU") \ |
---|
516 | _ELF_DEFINE_EABI(ELFOSABI_HURD, 4, "GNU/HURD") \ |
---|
517 | _ELF_DEFINE_EABI(ELFOSABI_86OPEN, 5, "86Open Common ABI") \ |
---|
518 | _ELF_DEFINE_EABI(ELFOSABI_SOLARIS, 6, "Sun Solaris") \ |
---|
519 | _ELF_DEFINE_EABI(ELFOSABI_AIX, 7, "AIX") \ |
---|
520 | _ELF_DEFINE_EABI(ELFOSABI_IRIX, 8, "IRIX") \ |
---|
521 | _ELF_DEFINE_EABI(ELFOSABI_FREEBSD, 9, "FreeBSD") \ |
---|
522 | _ELF_DEFINE_EABI(ELFOSABI_TRU64, 10, "Compaq TRU64 UNIX") \ |
---|
523 | _ELF_DEFINE_EABI(ELFOSABI_MODESTO, 11, "Novell Modesto") \ |
---|
524 | _ELF_DEFINE_EABI(ELFOSABI_OPENBSD, 12, "Open BSD") \ |
---|
525 | _ELF_DEFINE_EABI(ELFOSABI_OPENVMS, 13, "Open VMS") \ |
---|
526 | _ELF_DEFINE_EABI(ELFOSABI_NSK, 14, \ |
---|
527 | "Hewlett-Packard Non-Stop Kernel") \ |
---|
528 | _ELF_DEFINE_EABI(ELFOSABI_AROS, 15, "Amiga Research OS") \ |
---|
529 | _ELF_DEFINE_EABI(ELFOSABI_FENIXOS, 16, \ |
---|
530 | "The FenixOS highly scalable multi-core OS") \ |
---|
531 | _ELF_DEFINE_EABI(ELFOSABI_ARM_AEABI, 64, \ |
---|
532 | "ARM specific symbol versioning extensions") \ |
---|
533 | _ELF_DEFINE_EABI(ELFOSABI_ARM, 97, "ARM ABI") \ |
---|
534 | _ELF_DEFINE_EABI(ELFOSABI_STANDALONE, 255, \ |
---|
535 | "Standalone (embedded) application") |
---|
536 | |
---|
537 | #undef _ELF_DEFINE_EABI |
---|
538 | #define _ELF_DEFINE_EABI(N, V, DESCR) N = V , |
---|
539 | enum { |
---|
540 | _ELF_DEFINE_ELF_OSABI() |
---|
541 | ELFOSABI__LAST__ |
---|
542 | }; |
---|
543 | |
---|
544 | #define ELFOSABI_LINUX ELFOSABI_GNU |
---|
545 | |
---|
546 | /* |
---|
547 | * ELF Machine types: (EM_*). |
---|
548 | */ |
---|
549 | #define _ELF_DEFINE_ELF_MACHINES() \ |
---|
550 | _ELF_DEFINE_EM(EM_NONE, 0, "No machine") \ |
---|
551 | _ELF_DEFINE_EM(EM_M32, 1, "AT&T WE 32100") \ |
---|
552 | _ELF_DEFINE_EM(EM_SPARC, 2, "SPARC") \ |
---|
553 | _ELF_DEFINE_EM(EM_386, 3, "Intel 80386") \ |
---|
554 | _ELF_DEFINE_EM(EM_68K, 4, "Motorola 68000") \ |
---|
555 | _ELF_DEFINE_EM(EM_88K, 5, "Motorola 88000") \ |
---|
556 | _ELF_DEFINE_EM(EM_860, 7, "Intel 80860") \ |
---|
557 | _ELF_DEFINE_EM(EM_MIPS, 8, "MIPS I Architecture") \ |
---|
558 | _ELF_DEFINE_EM(EM_S370, 9, "IBM System/370 Processor") \ |
---|
559 | _ELF_DEFINE_EM(EM_MIPS_RS3_LE, 10, "MIPS RS3000 Little-endian") \ |
---|
560 | _ELF_DEFINE_EM(EM_PARISC, 15, "Hewlett-Packard PA-RISC") \ |
---|
561 | _ELF_DEFINE_EM(EM_VPP500, 17, "Fujitsu VPP500") \ |
---|
562 | _ELF_DEFINE_EM(EM_SPARC32PLUS, 18, \ |
---|
563 | "Enhanced instruction set SPARC") \ |
---|
564 | _ELF_DEFINE_EM(EM_960, 19, "Intel 80960") \ |
---|
565 | _ELF_DEFINE_EM(EM_PPC, 20, "PowerPC") \ |
---|
566 | _ELF_DEFINE_EM(EM_PPC64, 21, "64-bit PowerPC") \ |
---|
567 | _ELF_DEFINE_EM(EM_S390, 22, "IBM System/390 Processor") \ |
---|
568 | _ELF_DEFINE_EM(EM_SPU, 23, "IBM SPU/SPC") \ |
---|
569 | _ELF_DEFINE_EM(EM_V800, 36, "NEC V800") \ |
---|
570 | _ELF_DEFINE_EM(EM_FR20, 37, "Fujitsu FR20") \ |
---|
571 | _ELF_DEFINE_EM(EM_RH32, 38, "TRW RH-32") \ |
---|
572 | _ELF_DEFINE_EM(EM_RCE, 39, "Motorola RCE") \ |
---|
573 | _ELF_DEFINE_EM(EM_ARM, 40, "Advanced RISC Machines ARM") \ |
---|
574 | _ELF_DEFINE_EM(EM_ALPHA, 41, "Digital Alpha") \ |
---|
575 | _ELF_DEFINE_EM(EM_SH, 42, "Hitachi SH") \ |
---|
576 | _ELF_DEFINE_EM(EM_SPARCV9, 43, "SPARC Version 9") \ |
---|
577 | _ELF_DEFINE_EM(EM_TRICORE, 44, \ |
---|
578 | "Siemens TriCore embedded processor") \ |
---|
579 | _ELF_DEFINE_EM(EM_ARC, 45, \ |
---|
580 | "Argonaut RISC Core, Argonaut Technologies Inc.") \ |
---|
581 | _ELF_DEFINE_EM(EM_H8_300, 46, "Hitachi H8/300") \ |
---|
582 | _ELF_DEFINE_EM(EM_H8_300H, 47, "Hitachi H8/300H") \ |
---|
583 | _ELF_DEFINE_EM(EM_H8S, 48, "Hitachi H8S") \ |
---|
584 | _ELF_DEFINE_EM(EM_H8_500, 49, "Hitachi H8/500") \ |
---|
585 | _ELF_DEFINE_EM(EM_IA_64, 50, \ |
---|
586 | "Intel IA-64 processor architecture") \ |
---|
587 | _ELF_DEFINE_EM(EM_MIPS_X, 51, "Stanford MIPS-X") \ |
---|
588 | _ELF_DEFINE_EM(EM_COLDFIRE, 52, "Motorola ColdFire") \ |
---|
589 | _ELF_DEFINE_EM(EM_68HC12, 53, "Motorola M68HC12") \ |
---|
590 | _ELF_DEFINE_EM(EM_MMA, 54, \ |
---|
591 | "Fujitsu MMA Multimedia Accelerator") \ |
---|
592 | _ELF_DEFINE_EM(EM_PCP, 55, "Siemens PCP") \ |
---|
593 | _ELF_DEFINE_EM(EM_NCPU, 56, \ |
---|
594 | "Sony nCPU embedded RISC processor") \ |
---|
595 | _ELF_DEFINE_EM(EM_NDR1, 57, "Denso NDR1 microprocessor") \ |
---|
596 | _ELF_DEFINE_EM(EM_STARCORE, 58, "Motorola Star*Core processor") \ |
---|
597 | _ELF_DEFINE_EM(EM_ME16, 59, "Toyota ME16 processor") \ |
---|
598 | _ELF_DEFINE_EM(EM_ST100, 60, \ |
---|
599 | "STMicroelectronics ST100 processor") \ |
---|
600 | _ELF_DEFINE_EM(EM_TINYJ, 61, \ |
---|
601 | "Advanced Logic Corp. TinyJ embedded processor family") \ |
---|
602 | _ELF_DEFINE_EM(EM_X86_64, 62, "AMD x86-64 architecture") \ |
---|
603 | _ELF_DEFINE_EM(EM_PDSP, 63, "Sony DSP Processor") \ |
---|
604 | _ELF_DEFINE_EM(EM_PDP10, 64, \ |
---|
605 | "Digital Equipment Corp. PDP-10") \ |
---|
606 | _ELF_DEFINE_EM(EM_PDP11, 65, \ |
---|
607 | "Digital Equipment Corp. PDP-11") \ |
---|
608 | _ELF_DEFINE_EM(EM_FX66, 66, "Siemens FX66 microcontroller") \ |
---|
609 | _ELF_DEFINE_EM(EM_ST9PLUS, 67, \ |
---|
610 | "STMicroelectronics ST9+ 8/16 bit microcontroller") \ |
---|
611 | _ELF_DEFINE_EM(EM_ST7, 68, \ |
---|
612 | "STMicroelectronics ST7 8-bit microcontroller") \ |
---|
613 | _ELF_DEFINE_EM(EM_68HC16, 69, \ |
---|
614 | "Motorola MC68HC16 Microcontroller") \ |
---|
615 | _ELF_DEFINE_EM(EM_68HC11, 70, \ |
---|
616 | "Motorola MC68HC11 Microcontroller") \ |
---|
617 | _ELF_DEFINE_EM(EM_68HC08, 71, \ |
---|
618 | "Motorola MC68HC08 Microcontroller") \ |
---|
619 | _ELF_DEFINE_EM(EM_68HC05, 72, \ |
---|
620 | "Motorola MC68HC05 Microcontroller") \ |
---|
621 | _ELF_DEFINE_EM(EM_SVX, 73, "Silicon Graphics SVx") \ |
---|
622 | _ELF_DEFINE_EM(EM_ST19, 74, \ |
---|
623 | "STMicroelectronics ST19 8-bit microcontroller") \ |
---|
624 | _ELF_DEFINE_EM(EM_VAX, 75, "Digital VAX") \ |
---|
625 | _ELF_DEFINE_EM(EM_CRIS, 76, \ |
---|
626 | "Axis Communications 32-bit embedded processor") \ |
---|
627 | _ELF_DEFINE_EM(EM_JAVELIN, 77, \ |
---|
628 | "Infineon Technologies 32-bit embedded processor") \ |
---|
629 | _ELF_DEFINE_EM(EM_FIREPATH, 78, \ |
---|
630 | "Element 14 64-bit DSP Processor") \ |
---|
631 | _ELF_DEFINE_EM(EM_ZSP, 79, \ |
---|
632 | "LSI Logic 16-bit DSP Processor") \ |
---|
633 | _ELF_DEFINE_EM(EM_MMIX, 80, \ |
---|
634 | "Donald Knuth's educational 64-bit processor") \ |
---|
635 | _ELF_DEFINE_EM(EM_HUANY, 81, \ |
---|
636 | "Harvard University machine-independent object files") \ |
---|
637 | _ELF_DEFINE_EM(EM_PRISM, 82, "SiTera Prism") \ |
---|
638 | _ELF_DEFINE_EM(EM_AVR, 83, \ |
---|
639 | "Atmel AVR 8-bit microcontroller") \ |
---|
640 | _ELF_DEFINE_EM(EM_FR30, 84, "Fujitsu FR30") \ |
---|
641 | _ELF_DEFINE_EM(EM_D10V, 85, "Mitsubishi D10V") \ |
---|
642 | _ELF_DEFINE_EM(EM_D30V, 86, "Mitsubishi D30V") \ |
---|
643 | _ELF_DEFINE_EM(EM_V850, 87, "NEC v850") \ |
---|
644 | _ELF_DEFINE_EM(EM_M32R, 88, "Mitsubishi M32R") \ |
---|
645 | _ELF_DEFINE_EM(EM_MN10300, 89, "Matsushita MN10300") \ |
---|
646 | _ELF_DEFINE_EM(EM_MN10200, 90, "Matsushita MN10200") \ |
---|
647 | _ELF_DEFINE_EM(EM_PJ, 91, "picoJava") \ |
---|
648 | _ELF_DEFINE_EM(EM_OPENRISC, 92, \ |
---|
649 | "OpenRISC 32-bit embedded processor") \ |
---|
650 | _ELF_DEFINE_EM(EM_ARC_COMPACT, 93, \ |
---|
651 | "ARC International ARCompact processor") \ |
---|
652 | _ELF_DEFINE_EM(EM_XTENSA, 94, \ |
---|
653 | "Tensilica Xtensa Architecture") \ |
---|
654 | _ELF_DEFINE_EM(EM_VIDEOCORE, 95, \ |
---|
655 | "Alphamosaic VideoCore processor") \ |
---|
656 | _ELF_DEFINE_EM(EM_TMM_GPP, 96, \ |
---|
657 | "Thompson Multimedia General Purpose Processor") \ |
---|
658 | _ELF_DEFINE_EM(EM_NS32K, 97, \ |
---|
659 | "National Semiconductor 32000 series") \ |
---|
660 | _ELF_DEFINE_EM(EM_TPC, 98, "Tenor Network TPC processor") \ |
---|
661 | _ELF_DEFINE_EM(EM_SNP1K, 99, "Trebia SNP 1000 processor") \ |
---|
662 | _ELF_DEFINE_EM(EM_ST200, 100, \ |
---|
663 | "STMicroelectronics (www.st.com) ST200 microcontroller") \ |
---|
664 | _ELF_DEFINE_EM(EM_IP2K, 101, \ |
---|
665 | "Ubicom IP2xxx microcontroller family") \ |
---|
666 | _ELF_DEFINE_EM(EM_MAX, 102, "MAX Processor") \ |
---|
667 | _ELF_DEFINE_EM(EM_CR, 103, \ |
---|
668 | "National Semiconductor CompactRISC microprocessor") \ |
---|
669 | _ELF_DEFINE_EM(EM_F2MC16, 104, "Fujitsu F2MC16") \ |
---|
670 | _ELF_DEFINE_EM(EM_MSP430, 105, \ |
---|
671 | "Texas Instruments embedded microcontroller msp430") \ |
---|
672 | _ELF_DEFINE_EM(EM_BLACKFIN, 106, \ |
---|
673 | "Analog Devices Blackfin (DSP) processor") \ |
---|
674 | _ELF_DEFINE_EM(EM_SE_C33, 107, \ |
---|
675 | "S1C33 Family of Seiko Epson processors") \ |
---|
676 | _ELF_DEFINE_EM(EM_SEP, 108, \ |
---|
677 | "Sharp embedded microprocessor") \ |
---|
678 | _ELF_DEFINE_EM(EM_ARCA, 109, "Arca RISC Microprocessor") \ |
---|
679 | _ELF_DEFINE_EM(EM_UNICORE, 110, \ |
---|
680 | "Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University") \ |
---|
681 | _ELF_DEFINE_EM(EM_EXCESS, 111, \ |
---|
682 | "eXcess: 16/32/64-bit configurable embedded CPU") \ |
---|
683 | _ELF_DEFINE_EM(EM_DXP, 112, \ |
---|
684 | "Icera Semiconductor Inc. Deep Execution Processor") \ |
---|
685 | _ELF_DEFINE_EM(EM_ALTERA_NIOS2, 113, \ |
---|
686 | "Altera Nios II soft-core processor") \ |
---|
687 | _ELF_DEFINE_EM(EM_CRX, 114, \ |
---|
688 | "National Semiconductor CompactRISC CRX microprocessor") \ |
---|
689 | _ELF_DEFINE_EM(EM_XGATE, 115, \ |
---|
690 | "Motorola XGATE embedded processor") \ |
---|
691 | _ELF_DEFINE_EM(EM_C166, 116, \ |
---|
692 | "Infineon C16x/XC16x processor") \ |
---|
693 | _ELF_DEFINE_EM(EM_M16C, 117, \ |
---|
694 | "Renesas M16C series microprocessors") \ |
---|
695 | _ELF_DEFINE_EM(EM_DSPIC30F, 118, \ |
---|
696 | "Microchip Technology dsPIC30F Digital Signal Controller") \ |
---|
697 | _ELF_DEFINE_EM(EM_CE, 119, \ |
---|
698 | "Freescale Communication Engine RISC core") \ |
---|
699 | _ELF_DEFINE_EM(EM_M32C, 120, \ |
---|
700 | "Renesas M32C series microprocessors") \ |
---|
701 | _ELF_DEFINE_EM(EM_TSK3000, 131, "Altium TSK3000 core") \ |
---|
702 | _ELF_DEFINE_EM(EM_RS08, 132, \ |
---|
703 | "Freescale RS08 embedded processor") \ |
---|
704 | _ELF_DEFINE_EM(EM_SHARC, 133, \ |
---|
705 | "Analog Devices SHARC family of 32-bit DSP processors") \ |
---|
706 | _ELF_DEFINE_EM(EM_ECOG2, 134, \ |
---|
707 | "Cyan Technology eCOG2 microprocessor") \ |
---|
708 | _ELF_DEFINE_EM(EM_SCORE7, 135, \ |
---|
709 | "Sunplus S+core7 RISC processor") \ |
---|
710 | _ELF_DEFINE_EM(EM_DSP24, 136, \ |
---|
711 | "New Japan Radio (NJR) 24-bit DSP Processor") \ |
---|
712 | _ELF_DEFINE_EM(EM_VIDEOCORE3, 137, \ |
---|
713 | "Broadcom VideoCore III processor") \ |
---|
714 | _ELF_DEFINE_EM(EM_LATTICEMICO32, 138, \ |
---|
715 | "RISC processor for Lattice FPGA architecture") \ |
---|
716 | _ELF_DEFINE_EM(EM_SE_C17, 139, "Seiko Epson C17 family") \ |
---|
717 | _ELF_DEFINE_EM(EM_TI_C6000, 140, \ |
---|
718 | "The Texas Instruments TMS320C6000 DSP family") \ |
---|
719 | _ELF_DEFINE_EM(EM_TI_C2000, 141, \ |
---|
720 | "The Texas Instruments TMS320C2000 DSP family") \ |
---|
721 | _ELF_DEFINE_EM(EM_TI_C5500, 142, \ |
---|
722 | "The Texas Instruments TMS320C55x DSP family") \ |
---|
723 | _ELF_DEFINE_EM(EM_MMDSP_PLUS, 160, \ |
---|
724 | "STMicroelectronics 64bit VLIW Data Signal Processor") \ |
---|
725 | _ELF_DEFINE_EM(EM_CYPRESS_M8C, 161, "Cypress M8C microprocessor") \ |
---|
726 | _ELF_DEFINE_EM(EM_R32C, 162, \ |
---|
727 | "Renesas R32C series microprocessors") \ |
---|
728 | _ELF_DEFINE_EM(EM_TRIMEDIA, 163, \ |
---|
729 | "NXP Semiconductors TriMedia architecture family") \ |
---|
730 | _ELF_DEFINE_EM(EM_QDSP6, 164, "QUALCOMM DSP6 Processor") \ |
---|
731 | _ELF_DEFINE_EM(EM_8051, 165, "Intel 8051 and variants") \ |
---|
732 | _ELF_DEFINE_EM(EM_STXP7X, 166, \ |
---|
733 | "STMicroelectronics STxP7x family of configurable and extensible RISC processors") \ |
---|
734 | _ELF_DEFINE_EM(EM_NDS32, 167, \ |
---|
735 | "Andes Technology compact code size embedded RISC processor family") \ |
---|
736 | _ELF_DEFINE_EM(EM_ECOG1, 168, \ |
---|
737 | "Cyan Technology eCOG1X family") \ |
---|
738 | _ELF_DEFINE_EM(EM_ECOG1X, 168, \ |
---|
739 | "Cyan Technology eCOG1X family") \ |
---|
740 | _ELF_DEFINE_EM(EM_MAXQ30, 169, \ |
---|
741 | "Dallas Semiconductor MAXQ30 Core Micro-controllers") \ |
---|
742 | _ELF_DEFINE_EM(EM_XIMO16, 170, \ |
---|
743 | "New Japan Radio (NJR) 16-bit DSP Processor") \ |
---|
744 | _ELF_DEFINE_EM(EM_MANIK, 171, \ |
---|
745 | "M2000 Reconfigurable RISC Microprocessor") \ |
---|
746 | _ELF_DEFINE_EM(EM_CRAYNV2, 172, \ |
---|
747 | "Cray Inc. NV2 vector architecture") \ |
---|
748 | _ELF_DEFINE_EM(EM_RX, 173, "Renesas RX family") \ |
---|
749 | _ELF_DEFINE_EM(EM_METAG, 174, \ |
---|
750 | "Imagination Technologies META processor architecture") \ |
---|
751 | _ELF_DEFINE_EM(EM_MCST_ELBRUS, 175, \ |
---|
752 | "MCST Elbrus general purpose hardware architecture") \ |
---|
753 | _ELF_DEFINE_EM(EM_ECOG16, 176, \ |
---|
754 | "Cyan Technology eCOG16 family") \ |
---|
755 | _ELF_DEFINE_EM(EM_CR16, 177, \ |
---|
756 | "National Semiconductor CompactRISC CR16 16-bit microprocessor") \ |
---|
757 | _ELF_DEFINE_EM(EM_ETPU, 178, \ |
---|
758 | "Freescale Extended Time Processing Unit") \ |
---|
759 | _ELF_DEFINE_EM(EM_SLE9X, 179, \ |
---|
760 | "Infineon Technologies SLE9X core") \ |
---|
761 | _ELF_DEFINE_EM(EM_AVR32, 185, \ |
---|
762 | "Atmel Corporation 32-bit microprocessor family") \ |
---|
763 | _ELF_DEFINE_EM(EM_STM8, 186, \ |
---|
764 | "STMicroeletronics STM8 8-bit microcontroller") \ |
---|
765 | _ELF_DEFINE_EM(EM_TILE64, 187, \ |
---|
766 | "Tilera TILE64 multicore architecture family") \ |
---|
767 | _ELF_DEFINE_EM(EM_TILEPRO, 188, \ |
---|
768 | "Tilera TILEPro multicore architecture family") \ |
---|
769 | _ELF_DEFINE_EM(EM_MICROBLAZE, 189, \ |
---|
770 | "Xilinx MicroBlaze 32-bit RISC soft processor core") \ |
---|
771 | _ELF_DEFINE_EM(EM_CUDA, 190, "NVIDIA CUDA architecture") \ |
---|
772 | _ELF_DEFINE_EM(EM_TILEGX, 191, \ |
---|
773 | "Tilera TILE-Gx multicore architecture family") \ |
---|
774 | _ELF_DEFINE_EM(EM_CLOUDSHIELD, 192, \ |
---|
775 | "CloudShield architecture family") \ |
---|
776 | _ELF_DEFINE_EM(EM_COREA_1ST, 193, \ |
---|
777 | "KIPO-KAIST Core-A 1st generation processor family") \ |
---|
778 | _ELF_DEFINE_EM(EM_COREA_2ND, 194, \ |
---|
779 | "KIPO-KAIST Core-A 2nd generation processor family") \ |
---|
780 | _ELF_DEFINE_EM(EM_ARC_COMPACT2, 195, "Synopsys ARCompact V2") \ |
---|
781 | _ELF_DEFINE_EM(EM_OPEN8, 196, \ |
---|
782 | "Open8 8-bit RISC soft processor core") \ |
---|
783 | _ELF_DEFINE_EM(EM_RL78, 197, "Renesas RL78 family") \ |
---|
784 | _ELF_DEFINE_EM(EM_VIDEOCORE5, 198, "Broadcom VideoCore V processor") \ |
---|
785 | _ELF_DEFINE_EM(EM_78KOR, 199, "Renesas 78KOR family") |
---|
786 | |
---|
787 | #undef _ELF_DEFINE_EM |
---|
788 | #define _ELF_DEFINE_EM(N, V, DESCR) N = V , |
---|
789 | enum { |
---|
790 | _ELF_DEFINE_ELF_MACHINES() |
---|
791 | EM__LAST__ |
---|
792 | }; |
---|
793 | |
---|
794 | /* Older synonyms. */ |
---|
795 | #define EM_ARC_A5 EM_ARC_COMPACT |
---|
796 | |
---|
797 | /* |
---|
798 | * ELF file types: (ET_*). |
---|
799 | */ |
---|
800 | #define _ELF_DEFINE_ELF_TYPES() \ |
---|
801 | _ELF_DEFINE_ET(ET_NONE, 0, "No file type") \ |
---|
802 | _ELF_DEFINE_ET(ET_REL, 1, "Relocatable object") \ |
---|
803 | _ELF_DEFINE_ET(ET_EXEC, 2, "Executable") \ |
---|
804 | _ELF_DEFINE_ET(ET_DYN, 3, "Shared object") \ |
---|
805 | _ELF_DEFINE_ET(ET_CORE, 4, "Core file") \ |
---|
806 | _ELF_DEFINE_ET(ET_LOOS, 0xFE00U, "Begin OS-specific range") \ |
---|
807 | _ELF_DEFINE_ET(ET_HIOS, 0xFEFFU, "End OS-specific range") \ |
---|
808 | _ELF_DEFINE_ET(ET_LOPROC, 0xFF00U, "Begin processor-specific range") \ |
---|
809 | _ELF_DEFINE_ET(ET_HIPROC, 0xFFFFU, "End processor-specific range") |
---|
810 | |
---|
811 | #undef _ELF_DEFINE_ET |
---|
812 | #define _ELF_DEFINE_ET(N, V, DESCR) N = V , |
---|
813 | enum { |
---|
814 | _ELF_DEFINE_ELF_TYPES() |
---|
815 | ET__LAST__ |
---|
816 | }; |
---|
817 | |
---|
818 | /* ELF file format version numbers. */ |
---|
819 | #define EV_NONE 0 |
---|
820 | #define EV_CURRENT 1 |
---|
821 | |
---|
822 | /* |
---|
823 | * Flags for section groups. |
---|
824 | */ |
---|
825 | #define GRP_COMDAT 0x1 /* COMDAT semantics */ |
---|
826 | #define GRP_MASKOS 0x0ff00000 /* OS-specific flags */ |
---|
827 | #define GRP_MASKPROC 0xf0000000 /* processor-specific flags */ |
---|
828 | |
---|
829 | /* |
---|
830 | * Flags used by program header table entries. |
---|
831 | */ |
---|
832 | |
---|
833 | #define _ELF_DEFINE_PHDR_FLAGS() \ |
---|
834 | _ELF_DEFINE_PF(PF_X, 0x1, "Execute") \ |
---|
835 | _ELF_DEFINE_PF(PF_W, 0x2, "Write") \ |
---|
836 | _ELF_DEFINE_PF(PF_R, 0x4, "Read") \ |
---|
837 | _ELF_DEFINE_PF(PF_MASKOS, 0x0ff00000, "OS-specific flags") \ |
---|
838 | _ELF_DEFINE_PF(PF_MASKPROC, 0xf0000000, "Processor-specific flags") \ |
---|
839 | _ELF_DEFINE_PF(PF_ARM_SB, 0x10000000, \ |
---|
840 | "segment contains the location addressed by the static base") \ |
---|
841 | _ELF_DEFINE_PF(PF_ARM_PI, 0x20000000, \ |
---|
842 | "segment is position-independent") \ |
---|
843 | _ELF_DEFINE_PF(PF_ARM_ABS, 0x40000000, \ |
---|
844 | "segment must be loaded at its base address") |
---|
845 | |
---|
846 | #undef _ELF_DEFINE_PF |
---|
847 | #define _ELF_DEFINE_PF(N, V, DESCR) N = V , |
---|
848 | enum { |
---|
849 | _ELF_DEFINE_PHDR_FLAGS() |
---|
850 | PF__LAST__ |
---|
851 | }; |
---|
852 | |
---|
853 | /* |
---|
854 | * Types of program header table entries. |
---|
855 | */ |
---|
856 | |
---|
857 | #define _ELF_DEFINE_PHDR_TYPES() \ |
---|
858 | _ELF_DEFINE_PT(PT_NULL, 0, "ignored entry") \ |
---|
859 | _ELF_DEFINE_PT(PT_LOAD, 1, "loadable segment") \ |
---|
860 | _ELF_DEFINE_PT(PT_DYNAMIC, 2, \ |
---|
861 | "contains dynamic linking information") \ |
---|
862 | _ELF_DEFINE_PT(PT_INTERP, 3, "names an interpreter") \ |
---|
863 | _ELF_DEFINE_PT(PT_NOTE, 4, "auxiliary information") \ |
---|
864 | _ELF_DEFINE_PT(PT_SHLIB, 5, "reserved") \ |
---|
865 | _ELF_DEFINE_PT(PT_PHDR, 6, \ |
---|
866 | "describes the program header itself") \ |
---|
867 | _ELF_DEFINE_PT(PT_TLS, 7, "thread local storage") \ |
---|
868 | _ELF_DEFINE_PT(PT_LOOS, 0x60000000UL, \ |
---|
869 | "start of OS-specific range") \ |
---|
870 | _ELF_DEFINE_PT(PT_SUNW_UNWIND, 0x6464E550UL, \ |
---|
871 | "Solaris/amd64 stack unwind tables") \ |
---|
872 | _ELF_DEFINE_PT(PT_GNU_EH_FRAME, 0x6474E550UL, \ |
---|
873 | "GCC generated .eh_frame_hdr segment") \ |
---|
874 | _ELF_DEFINE_PT(PT_GNU_STACK, 0x6474E551UL, \ |
---|
875 | "Stack flags") \ |
---|
876 | _ELF_DEFINE_PT(PT_GNU_RELRO, 0x6474E552UL, \ |
---|
877 | "Segment becomes read-only after relocation") \ |
---|
878 | _ELF_DEFINE_PT(PT_SUNWBSS, 0x6FFFFFFAUL, \ |
---|
879 | "A Solaris .SUNW_bss section") \ |
---|
880 | _ELF_DEFINE_PT(PT_SUNWSTACK, 0x6FFFFFFBUL, \ |
---|
881 | "A Solaris process stack") \ |
---|
882 | _ELF_DEFINE_PT(PT_SUNWDTRACE, 0x6FFFFFFCUL, \ |
---|
883 | "Used by dtrace(1)") \ |
---|
884 | _ELF_DEFINE_PT(PT_SUNWCAP, 0x6FFFFFFDUL, \ |
---|
885 | "Special hardware capability requirements") \ |
---|
886 | _ELF_DEFINE_PT(PT_HIOS, 0x6FFFFFFFUL, \ |
---|
887 | "end of OS-specific range") \ |
---|
888 | _ELF_DEFINE_PT(PT_LOPROC, 0x70000000UL, \ |
---|
889 | "start of processor-specific range") \ |
---|
890 | _ELF_DEFINE_PT(PT_ARM_ARCHEXT, 0x70000000UL, \ |
---|
891 | "platform architecture compatibility information") \ |
---|
892 | _ELF_DEFINE_PT(PT_ARM_EXIDX, 0x70000001UL, \ |
---|
893 | "exception unwind tables") \ |
---|
894 | _ELF_DEFINE_PT(PT_MIPS_REGINFO, 0x70000000UL, \ |
---|
895 | "register usage information") \ |
---|
896 | _ELF_DEFINE_PT(PT_MIPS_RTPROC, 0x70000001UL, \ |
---|
897 | "runtime procedure table") \ |
---|
898 | _ELF_DEFINE_PT(PT_MIPS_OPTIONS, 0x70000002UL, \ |
---|
899 | "options segment") \ |
---|
900 | _ELF_DEFINE_PT(PT_HIPROC, 0x7FFFFFFFUL, \ |
---|
901 | "end of processor-specific range") |
---|
902 | |
---|
903 | #undef _ELF_DEFINE_PT |
---|
904 | #define _ELF_DEFINE_PT(N, V, DESCR) N = V , |
---|
905 | enum { |
---|
906 | _ELF_DEFINE_PHDR_TYPES() |
---|
907 | PT__LAST__ = PT_HIPROC |
---|
908 | }; |
---|
909 | |
---|
910 | /* synonyms. */ |
---|
911 | #define PT_ARM_UNWIND PT_ARM_EXIDX |
---|
912 | #define PT_HISUNW PT_HIOS |
---|
913 | #define PT_LOSUNW PT_SUNWBSS |
---|
914 | |
---|
915 | /* |
---|
916 | * Section flags. |
---|
917 | */ |
---|
918 | |
---|
919 | #define _ELF_DEFINE_SECTION_FLAGS() \ |
---|
920 | _ELF_DEFINE_SHF(SHF_WRITE, 0x1, \ |
---|
921 | "writable during program execution") \ |
---|
922 | _ELF_DEFINE_SHF(SHF_ALLOC, 0x2, \ |
---|
923 | "occupies memory during program execution") \ |
---|
924 | _ELF_DEFINE_SHF(SHF_EXECINSTR, 0x4, "executable instructions") \ |
---|
925 | _ELF_DEFINE_SHF(SHF_MERGE, 0x10, \ |
---|
926 | "may be merged to prevent duplication") \ |
---|
927 | _ELF_DEFINE_SHF(SHF_STRINGS, 0x20, \ |
---|
928 | "NUL-terminated character strings") \ |
---|
929 | _ELF_DEFINE_SHF(SHF_INFO_LINK, 0x40, \ |
---|
930 | "the sh_info field holds a link") \ |
---|
931 | _ELF_DEFINE_SHF(SHF_LINK_ORDER, 0x80, \ |
---|
932 | "special ordering requirements during linking") \ |
---|
933 | _ELF_DEFINE_SHF(SHF_OS_NONCONFORMING, 0x100, \ |
---|
934 | "requires OS-specific processing during linking") \ |
---|
935 | _ELF_DEFINE_SHF(SHF_GROUP, 0x200, \ |
---|
936 | "member of a section group") \ |
---|
937 | _ELF_DEFINE_SHF(SHF_TLS, 0x400, \ |
---|
938 | "holds thread-local storage") \ |
---|
939 | _ELF_DEFINE_SHF(SHF_MASKOS, 0x0FF00000UL, \ |
---|
940 | "bits reserved for OS-specific semantics") \ |
---|
941 | _ELF_DEFINE_SHF(SHF_AMD64_LARGE, 0x10000000UL, \ |
---|
942 | "section uses large code model") \ |
---|
943 | _ELF_DEFINE_SHF(SHF_ENTRYSECT, 0x10000000UL, \ |
---|
944 | "section contains an entry point (ARM)") \ |
---|
945 | _ELF_DEFINE_SHF(SHF_COMDEF, 0x80000000UL, \ |
---|
946 | "section may be multiply defined in input to link step (ARM)") \ |
---|
947 | _ELF_DEFINE_SHF(SHF_MIPS_GPREL, 0x10000000UL, \ |
---|
948 | "section must be part of global data area") \ |
---|
949 | _ELF_DEFINE_SHF(SHF_MIPS_MERGE, 0x20000000UL, \ |
---|
950 | "section data should be merged to eliminate duplication") \ |
---|
951 | _ELF_DEFINE_SHF(SHF_MIPS_ADDR, 0x40000000UL, \ |
---|
952 | "section data is addressed by default") \ |
---|
953 | _ELF_DEFINE_SHF(SHF_MIPS_STRING, 0x80000000UL, \ |
---|
954 | "section data is string data by default") \ |
---|
955 | _ELF_DEFINE_SHF(SHF_MIPS_NOSTRIP, 0x08000000UL, \ |
---|
956 | "section data may not be stripped") \ |
---|
957 | _ELF_DEFINE_SHF(SHF_MIPS_LOCAL, 0x04000000UL, \ |
---|
958 | "section data local to process") \ |
---|
959 | _ELF_DEFINE_SHF(SHF_MIPS_NAMES, 0x02000000UL, \ |
---|
960 | "linker must generate implicit hidden weak names") \ |
---|
961 | _ELF_DEFINE_SHF(SHF_MIPS_NODUPE, 0x01000000UL, \ |
---|
962 | "linker must retain only one copy") \ |
---|
963 | _ELF_DEFINE_SHF(SHF_ORDERED, 0x40000000UL, \ |
---|
964 | "section is ordered with respect to other sections") \ |
---|
965 | _ELF_DEFINE_SHF(SHF_EXCLUDE, 0x80000000UL, \ |
---|
966 | "section is excluded from executables and shared objects") \ |
---|
967 | _ELF_DEFINE_SHF(SHF_MASKPROC, 0xF0000000UL, \ |
---|
968 | "bits reserved for processor-specific semantics") |
---|
969 | |
---|
970 | #undef _ELF_DEFINE_SHF |
---|
971 | #define _ELF_DEFINE_SHF(N, V, DESCR) N = V , |
---|
972 | enum { |
---|
973 | _ELF_DEFINE_SECTION_FLAGS() |
---|
974 | SHF__LAST__ |
---|
975 | }; |
---|
976 | |
---|
977 | /* |
---|
978 | * Special section indices. |
---|
979 | */ |
---|
980 | #define _ELF_DEFINE_SECTION_INDICES() \ |
---|
981 | _ELF_DEFINE_SHN(SHN_UNDEF, 0, "undefined section") \ |
---|
982 | _ELF_DEFINE_SHN(SHN_LORESERVE, 0xFF00U, "start of reserved area") \ |
---|
983 | _ELF_DEFINE_SHN(SHN_LOPROC, 0xFF00U, \ |
---|
984 | "start of processor-specific range") \ |
---|
985 | _ELF_DEFINE_SHN(SHN_BEFORE, 0xFF00U, "used for section ordering") \ |
---|
986 | _ELF_DEFINE_SHN(SHN_AFTER, 0xFF01U, "used for section ordering") \ |
---|
987 | _ELF_DEFINE_SHN(SHN_AMD64_LCOMMON, 0xFF02U, "large common block label") \ |
---|
988 | _ELF_DEFINE_SHN(SHN_MIPS_ACOMMON, 0xFF00U, \ |
---|
989 | "allocated common symbols in a DSO") \ |
---|
990 | _ELF_DEFINE_SHN(SHN_MIPS_TEXT, 0xFF01U, "Reserved (obsolete)") \ |
---|
991 | _ELF_DEFINE_SHN(SHN_MIPS_DATA, 0xFF02U, "Reserved (obsolete)") \ |
---|
992 | _ELF_DEFINE_SHN(SHN_MIPS_SCOMMON, 0xFF03U, \ |
---|
993 | "gp-addressable common symbols") \ |
---|
994 | _ELF_DEFINE_SHN(SHN_MIPS_SUNDEFINED, 0xFF04U, \ |
---|
995 | "gp-addressable undefined symbols") \ |
---|
996 | _ELF_DEFINE_SHN(SHN_MIPS_LCOMMON, 0xFF05U, "local common symbols") \ |
---|
997 | _ELF_DEFINE_SHN(SHN_MIPS_LUNDEFINED, 0xFF06U, \ |
---|
998 | "local undefined symbols") \ |
---|
999 | _ELF_DEFINE_SHN(SHN_HIPROC, 0xFF1FU, \ |
---|
1000 | "end of processor-specific range") \ |
---|
1001 | _ELF_DEFINE_SHN(SHN_LOOS, 0xFF20U, \ |
---|
1002 | "start of OS-specific range") \ |
---|
1003 | _ELF_DEFINE_SHN(SHN_SUNW_IGNORE, 0xFF3FU, "used by dtrace") \ |
---|
1004 | _ELF_DEFINE_SHN(SHN_HIOS, 0xFF3FU, \ |
---|
1005 | "end of OS-specific range") \ |
---|
1006 | _ELF_DEFINE_SHN(SHN_ABS, 0xFFF1U, "absolute references") \ |
---|
1007 | _ELF_DEFINE_SHN(SHN_COMMON, 0xFFF2U, "references to COMMON areas") \ |
---|
1008 | _ELF_DEFINE_SHN(SHN_XINDEX, 0xFFFFU, "extended index") \ |
---|
1009 | _ELF_DEFINE_SHN(SHN_HIRESERVE, 0xFFFFU, "end of reserved area") |
---|
1010 | |
---|
1011 | #undef _ELF_DEFINE_SHN |
---|
1012 | #define _ELF_DEFINE_SHN(N, V, DESCR) N = V , |
---|
1013 | enum { |
---|
1014 | _ELF_DEFINE_SECTION_INDICES() |
---|
1015 | SHN__LAST__ |
---|
1016 | }; |
---|
1017 | |
---|
1018 | /* |
---|
1019 | * Section types. |
---|
1020 | */ |
---|
1021 | |
---|
1022 | #define _ELF_DEFINE_SECTION_TYPES() \ |
---|
1023 | _ELF_DEFINE_SHT(SHT_NULL, 0, "inactive header") \ |
---|
1024 | _ELF_DEFINE_SHT(SHT_PROGBITS, 1, "program defined information") \ |
---|
1025 | _ELF_DEFINE_SHT(SHT_SYMTAB, 2, "symbol table") \ |
---|
1026 | _ELF_DEFINE_SHT(SHT_STRTAB, 3, "string table") \ |
---|
1027 | _ELF_DEFINE_SHT(SHT_RELA, 4, \ |
---|
1028 | "relocation entries with addends") \ |
---|
1029 | _ELF_DEFINE_SHT(SHT_HASH, 5, "symbol hash table") \ |
---|
1030 | _ELF_DEFINE_SHT(SHT_DYNAMIC, 6, \ |
---|
1031 | "information for dynamic linking") \ |
---|
1032 | _ELF_DEFINE_SHT(SHT_NOTE, 7, "additional notes") \ |
---|
1033 | _ELF_DEFINE_SHT(SHT_NOBITS, 8, "section occupying no space") \ |
---|
1034 | _ELF_DEFINE_SHT(SHT_REL, 9, \ |
---|
1035 | "relocation entries without addends") \ |
---|
1036 | _ELF_DEFINE_SHT(SHT_SHLIB, 10, "reserved") \ |
---|
1037 | _ELF_DEFINE_SHT(SHT_DYNSYM, 11, "symbol table") \ |
---|
1038 | _ELF_DEFINE_SHT(SHT_INIT_ARRAY, 14, \ |
---|
1039 | "pointers to initialization functions") \ |
---|
1040 | _ELF_DEFINE_SHT(SHT_FINI_ARRAY, 15, \ |
---|
1041 | "pointers to termination functions") \ |
---|
1042 | _ELF_DEFINE_SHT(SHT_PREINIT_ARRAY, 16, \ |
---|
1043 | "pointers to functions called before initialization") \ |
---|
1044 | _ELF_DEFINE_SHT(SHT_GROUP, 17, "defines a section group") \ |
---|
1045 | _ELF_DEFINE_SHT(SHT_SYMTAB_SHNDX, 18, \ |
---|
1046 | "used for extended section numbering") \ |
---|
1047 | _ELF_DEFINE_SHT(SHT_LOOS, 0x60000000UL, \ |
---|
1048 | "start of OS-specific range") \ |
---|
1049 | _ELF_DEFINE_SHT(SHT_SUNW_dof, 0x6FFFFFF4UL, \ |
---|
1050 | "used by dtrace") \ |
---|
1051 | _ELF_DEFINE_SHT(SHT_SUNW_cap, 0x6FFFFFF5UL, \ |
---|
1052 | "capability requirements") \ |
---|
1053 | _ELF_DEFINE_SHT(SHT_GNU_ATTRIBUTES, 0x6FFFFFF5UL, \ |
---|
1054 | "object attributes") \ |
---|
1055 | _ELF_DEFINE_SHT(SHT_SUNW_SIGNATURE, 0x6FFFFFF6UL, \ |
---|
1056 | "module verification signature") \ |
---|
1057 | _ELF_DEFINE_SHT(SHT_GNU_HASH, 0x6FFFFFF6UL, \ |
---|
1058 | "GNU Hash sections") \ |
---|
1059 | _ELF_DEFINE_SHT(SHT_GNU_LIBLIST, 0x6FFFFFF7UL, \ |
---|
1060 | "List of libraries to be prelinked") \ |
---|
1061 | _ELF_DEFINE_SHT(SHT_SUNW_ANNOTATE, 0x6FFFFFF7UL, \ |
---|
1062 | "special section where unresolved references are allowed") \ |
---|
1063 | _ELF_DEFINE_SHT(SHT_SUNW_DEBUGSTR, 0x6FFFFFF8UL, \ |
---|
1064 | "debugging information") \ |
---|
1065 | _ELF_DEFINE_SHT(SHT_CHECKSUM, 0x6FFFFFF8UL, \ |
---|
1066 | "checksum for dynamic shared objects") \ |
---|
1067 | _ELF_DEFINE_SHT(SHT_SUNW_DEBUG, 0x6FFFFFF9UL, \ |
---|
1068 | "debugging information") \ |
---|
1069 | _ELF_DEFINE_SHT(SHT_SUNW_move, 0x6FFFFFFAUL, \ |
---|
1070 | "information to handle partially initialized symbols") \ |
---|
1071 | _ELF_DEFINE_SHT(SHT_SUNW_COMDAT, 0x6FFFFFFBUL, \ |
---|
1072 | "section supporting merging of multiple copies of data") \ |
---|
1073 | _ELF_DEFINE_SHT(SHT_SUNW_syminfo, 0x6FFFFFFCUL, \ |
---|
1074 | "additional symbol information") \ |
---|
1075 | _ELF_DEFINE_SHT(SHT_SUNW_verdef, 0x6FFFFFFDUL, \ |
---|
1076 | "symbol versioning information") \ |
---|
1077 | _ELF_DEFINE_SHT(SHT_SUNW_verneed, 0x6FFFFFFEUL, \ |
---|
1078 | "symbol versioning requirements") \ |
---|
1079 | _ELF_DEFINE_SHT(SHT_SUNW_versym, 0x6FFFFFFFUL, \ |
---|
1080 | "symbol versioning table") \ |
---|
1081 | _ELF_DEFINE_SHT(SHT_HIOS, 0x6FFFFFFFUL, \ |
---|
1082 | "end of OS-specific range") \ |
---|
1083 | _ELF_DEFINE_SHT(SHT_LOPROC, 0x70000000UL, \ |
---|
1084 | "start of processor-specific range") \ |
---|
1085 | _ELF_DEFINE_SHT(SHT_ARM_EXIDX, 0x70000001UL, \ |
---|
1086 | "exception index table") \ |
---|
1087 | _ELF_DEFINE_SHT(SHT_ARM_PREEMPTMAP, 0x70000002UL, \ |
---|
1088 | "BPABI DLL dynamic linking preemption map") \ |
---|
1089 | _ELF_DEFINE_SHT(SHT_ARM_ATTRIBUTES, 0x70000003UL, \ |
---|
1090 | "object file compatibility attributes") \ |
---|
1091 | _ELF_DEFINE_SHT(SHT_ARM_DEBUGOVERLAY, 0x70000004UL, \ |
---|
1092 | "overlay debug information") \ |
---|
1093 | _ELF_DEFINE_SHT(SHT_ARM_OVERLAYSECTION, 0x70000005UL, \ |
---|
1094 | "overlay debug information") \ |
---|
1095 | _ELF_DEFINE_SHT(SHT_MIPS_LIBLIST, 0x70000000UL, \ |
---|
1096 | "DSO library information used in link") \ |
---|
1097 | _ELF_DEFINE_SHT(SHT_MIPS_MSYM, 0x70000001UL, \ |
---|
1098 | "MIPS symbol table extension") \ |
---|
1099 | _ELF_DEFINE_SHT(SHT_MIPS_CONFLICT, 0x70000002UL, \ |
---|
1100 | "symbol conflicting with DSO-defined symbols ") \ |
---|
1101 | _ELF_DEFINE_SHT(SHT_MIPS_GPTAB, 0x70000003UL, \ |
---|
1102 | "global pointer table") \ |
---|
1103 | _ELF_DEFINE_SHT(SHT_MIPS_UCODE, 0x70000004UL, \ |
---|
1104 | "reserved") \ |
---|
1105 | _ELF_DEFINE_SHT(SHT_MIPS_DEBUG, 0x70000005UL, \ |
---|
1106 | "reserved (obsolete debug information)") \ |
---|
1107 | _ELF_DEFINE_SHT(SHT_MIPS_REGINFO, 0x70000006UL, \ |
---|
1108 | "register usage information") \ |
---|
1109 | _ELF_DEFINE_SHT(SHT_MIPS_PACKAGE, 0x70000007UL, \ |
---|
1110 | "OSF reserved") \ |
---|
1111 | _ELF_DEFINE_SHT(SHT_MIPS_PACKSYM, 0x70000008UL, \ |
---|
1112 | "OSF reserved") \ |
---|
1113 | _ELF_DEFINE_SHT(SHT_MIPS_RELD, 0x70000009UL, \ |
---|
1114 | "dynamic relocation") \ |
---|
1115 | _ELF_DEFINE_SHT(SHT_MIPS_IFACE, 0x7000000BUL, \ |
---|
1116 | "subprogram interface information") \ |
---|
1117 | _ELF_DEFINE_SHT(SHT_MIPS_CONTENT, 0x7000000CUL, \ |
---|
1118 | "section content classification") \ |
---|
1119 | _ELF_DEFINE_SHT(SHT_MIPS_OPTIONS, 0x7000000DUL, \ |
---|
1120 | "general options") \ |
---|
1121 | _ELF_DEFINE_SHT(SHT_MIPS_DELTASYM, 0x7000001BUL, \ |
---|
1122 | "Delta C++: symbol table") \ |
---|
1123 | _ELF_DEFINE_SHT(SHT_MIPS_DELTAINST, 0x7000001CUL, \ |
---|
1124 | "Delta C++: instance table") \ |
---|
1125 | _ELF_DEFINE_SHT(SHT_MIPS_DELTACLASS, 0x7000001DUL, \ |
---|
1126 | "Delta C++: class table") \ |
---|
1127 | _ELF_DEFINE_SHT(SHT_MIPS_DWARF, 0x7000001EUL, \ |
---|
1128 | "DWARF debug information") \ |
---|
1129 | _ELF_DEFINE_SHT(SHT_MIPS_DELTADECL, 0x7000001FUL, \ |
---|
1130 | "Delta C++: declarations") \ |
---|
1131 | _ELF_DEFINE_SHT(SHT_MIPS_SYMBOL_LIB, 0x70000020UL, \ |
---|
1132 | "symbol-to-library mapping") \ |
---|
1133 | _ELF_DEFINE_SHT(SHT_MIPS_EVENTS, 0x70000021UL, \ |
---|
1134 | "event locations") \ |
---|
1135 | _ELF_DEFINE_SHT(SHT_MIPS_TRANSLATE, 0x70000022UL, \ |
---|
1136 | "???") \ |
---|
1137 | _ELF_DEFINE_SHT(SHT_MIPS_PIXIE, 0x70000023UL, \ |
---|
1138 | "special pixie sections") \ |
---|
1139 | _ELF_DEFINE_SHT(SHT_MIPS_XLATE, 0x70000024UL, \ |
---|
1140 | "address translation table") \ |
---|
1141 | _ELF_DEFINE_SHT(SHT_MIPS_XLATE_DEBUG, 0x70000025UL, \ |
---|
1142 | "SGI internal address translation table") \ |
---|
1143 | _ELF_DEFINE_SHT(SHT_MIPS_WHIRL, 0x70000026UL, \ |
---|
1144 | "intermediate code") \ |
---|
1145 | _ELF_DEFINE_SHT(SHT_MIPS_EH_REGION, 0x70000027UL, \ |
---|
1146 | "C++ exception handling region info") \ |
---|
1147 | _ELF_DEFINE_SHT(SHT_MIPS_XLATE_OLD, 0x70000028UL, \ |
---|
1148 | "obsolete") \ |
---|
1149 | _ELF_DEFINE_SHT(SHT_MIPS_PDR_EXCEPTION, 0x70000029UL, \ |
---|
1150 | "runtime procedure descriptor table exception information") \ |
---|
1151 | _ELF_DEFINE_SHT(SHT_SPARC_GOTDATA, 0x70000000UL, \ |
---|
1152 | "SPARC-specific data") \ |
---|
1153 | _ELF_DEFINE_SHT(SHT_AMD64_UNWIND, 0x70000001UL, \ |
---|
1154 | "unwind tables for the AMD64") \ |
---|
1155 | _ELF_DEFINE_SHT(SHT_ORDERED, 0x7FFFFFFFUL, \ |
---|
1156 | "sort entries in the section") \ |
---|
1157 | _ELF_DEFINE_SHT(SHT_HIPROC, 0x7FFFFFFFUL, \ |
---|
1158 | "end of processor-specific range") \ |
---|
1159 | _ELF_DEFINE_SHT(SHT_LOUSER, 0x80000000UL, \ |
---|
1160 | "start of application-specific range") \ |
---|
1161 | _ELF_DEFINE_SHT(SHT_HIUSER, 0xFFFFFFFFUL, \ |
---|
1162 | "end of application-specific range") |
---|
1163 | |
---|
1164 | #undef _ELF_DEFINE_SHT |
---|
1165 | #define _ELF_DEFINE_SHT(N, V, DESCR) N = V , |
---|
1166 | enum { |
---|
1167 | _ELF_DEFINE_SECTION_TYPES() |
---|
1168 | SHT__LAST__ = SHT_HIUSER |
---|
1169 | }; |
---|
1170 | |
---|
1171 | /* Aliases for section types. */ |
---|
1172 | #define SHT_GNU_verdef SHT_SUNW_verdef |
---|
1173 | #define SHT_GNU_verneed SHT_SUNW_verneed |
---|
1174 | #define SHT_GNU_versym SHT_SUNW_versym |
---|
1175 | |
---|
1176 | /* |
---|
1177 | * Symbol binding information. |
---|
1178 | */ |
---|
1179 | |
---|
1180 | #define _ELF_DEFINE_SYMBOL_BINDING() \ |
---|
1181 | _ELF_DEFINE_STB(STB_LOCAL, 0, \ |
---|
1182 | "not visible outside defining object file") \ |
---|
1183 | _ELF_DEFINE_STB(STB_GLOBAL, 1, \ |
---|
1184 | "visible across all object files being combined") \ |
---|
1185 | _ELF_DEFINE_STB(STB_WEAK, 2, \ |
---|
1186 | "visible across all object files but with low precedence") \ |
---|
1187 | _ELF_DEFINE_STB(STB_LOOS, 10, "start of OS-specific range") \ |
---|
1188 | _ELF_DEFINE_STB(STB_HIOS, 12, "end of OS-specific range") \ |
---|
1189 | _ELF_DEFINE_STB(STB_LOPROC, 13, \ |
---|
1190 | "start of processor-specific range") \ |
---|
1191 | _ELF_DEFINE_STB(STB_HIPROC, 15, \ |
---|
1192 | "end of processor-specific range") |
---|
1193 | |
---|
1194 | #undef _ELF_DEFINE_STB |
---|
1195 | #define _ELF_DEFINE_STB(N, V, DESCR) N = V , |
---|
1196 | enum { |
---|
1197 | _ELF_DEFINE_SYMBOL_BINDING() |
---|
1198 | STB__LAST__ |
---|
1199 | }; |
---|
1200 | |
---|
1201 | /* |
---|
1202 | * Symbol types |
---|
1203 | */ |
---|
1204 | |
---|
1205 | #define _ELF_DEFINE_SYMBOL_TYPES() \ |
---|
1206 | _ELF_DEFINE_STT(STT_NOTYPE, 0, "unspecified type") \ |
---|
1207 | _ELF_DEFINE_STT(STT_OBJECT, 1, "data object") \ |
---|
1208 | _ELF_DEFINE_STT(STT_FUNC, 2, "executable code") \ |
---|
1209 | _ELF_DEFINE_STT(STT_SECTION, 3, "section") \ |
---|
1210 | _ELF_DEFINE_STT(STT_FILE, 4, "source file") \ |
---|
1211 | _ELF_DEFINE_STT(STT_COMMON, 5, "uninitialized common block") \ |
---|
1212 | _ELF_DEFINE_STT(STT_TLS, 6, "thread local storage") \ |
---|
1213 | _ELF_DEFINE_STT(STT_LOOS, 10, "start of OS-specific types") \ |
---|
1214 | _ELF_DEFINE_STT(STT_HIOS, 12, "end of OS-specific types") \ |
---|
1215 | _ELF_DEFINE_STT(STT_LOPROC, 13, \ |
---|
1216 | "start of processor-specific types") \ |
---|
1217 | _ELF_DEFINE_STT(STT_ARM_TFUNC, 13, "Thumb function (GNU)") \ |
---|
1218 | _ELF_DEFINE_STT(STT_ARM_16BIT, 15, "Thumb label (GNU)") \ |
---|
1219 | _ELF_DEFINE_STT(STT_HIPROC, 15, \ |
---|
1220 | "end of processor-specific types") |
---|
1221 | |
---|
1222 | #undef _ELF_DEFINE_STT |
---|
1223 | #define _ELF_DEFINE_STT(N, V, DESCR) N = V , |
---|
1224 | enum { |
---|
1225 | _ELF_DEFINE_SYMBOL_TYPES() |
---|
1226 | STT__LAST__ |
---|
1227 | }; |
---|
1228 | |
---|
1229 | /* |
---|
1230 | * Symbol binding. |
---|
1231 | */ |
---|
1232 | |
---|
1233 | #define _ELF_DEFINE_SYMBOL_BINDING_KINDS() \ |
---|
1234 | _ELF_DEFINE_SYB(SYMINFO_BT_SELF, 0xFFFFU, \ |
---|
1235 | "bound to self") \ |
---|
1236 | _ELF_DEFINE_SYB(SYMINFO_BT_PARENT, 0xFFFEU, \ |
---|
1237 | "bound to parent") \ |
---|
1238 | _ELF_DEFINE_SYB(SYMINFO_BT_NONE, 0xFFFDU, \ |
---|
1239 | "no special binding") |
---|
1240 | |
---|
1241 | #undef _ELF_DEFINE_SYB |
---|
1242 | #define _ELF_DEFINE_SYB(N, V, DESCR) N = V , |
---|
1243 | enum { |
---|
1244 | _ELF_DEFINE_SYMBOL_BINDING_KINDS() |
---|
1245 | SYMINFO__LAST__ |
---|
1246 | }; |
---|
1247 | |
---|
1248 | /* |
---|
1249 | * Symbol visibility. |
---|
1250 | */ |
---|
1251 | |
---|
1252 | #define _ELF_DEFINE_SYMBOL_VISIBILITY() \ |
---|
1253 | _ELF_DEFINE_STV(STV_DEFAULT, 0, \ |
---|
1254 | "as specified by symbol type") \ |
---|
1255 | _ELF_DEFINE_STV(STV_INTERNAL, 1, \ |
---|
1256 | "as defined by processor semantics") \ |
---|
1257 | _ELF_DEFINE_STV(STV_HIDDEN, 2, \ |
---|
1258 | "hidden from other components") \ |
---|
1259 | _ELF_DEFINE_STV(STV_PROTECTED, 3, \ |
---|
1260 | "local references are not preemptable") |
---|
1261 | |
---|
1262 | #undef _ELF_DEFINE_STV |
---|
1263 | #define _ELF_DEFINE_STV(N, V, DESCR) N = V , |
---|
1264 | enum { |
---|
1265 | _ELF_DEFINE_SYMBOL_VISIBILITY() |
---|
1266 | STV__LAST__ |
---|
1267 | }; |
---|
1268 | |
---|
1269 | /* |
---|
1270 | * Symbol flags. |
---|
1271 | */ |
---|
1272 | #define _ELF_DEFINE_SYMBOL_FLAGS() \ |
---|
1273 | _ELF_DEFINE_SYF(SYMINFO_FLG_DIRECT, 0x01, \ |
---|
1274 | "directly assocated reference") \ |
---|
1275 | _ELF_DEFINE_SYF(SYMINFO_FLG_COPY, 0x04, \ |
---|
1276 | "definition by copy-relocation") \ |
---|
1277 | _ELF_DEFINE_SYF(SYMINFO_FLG_LAZYLOAD, 0x08, \ |
---|
1278 | "object should be lazily loaded") \ |
---|
1279 | _ELF_DEFINE_SYF(SYMINFO_FLG_DIRECTBIND, 0x10, \ |
---|
1280 | "reference should be directly bound") \ |
---|
1281 | _ELF_DEFINE_SYF(SYMINFO_FLG_NOEXTDIRECT, 0x20, \ |
---|
1282 | "external references not allowed to bind to definition") |
---|
1283 | |
---|
1284 | #undef _ELF_DEFINE_SYF |
---|
1285 | #define _ELF_DEFINE_SYF(N, V, DESCR) N = V , |
---|
1286 | enum { |
---|
1287 | _ELF_DEFINE_SYMBOL_FLAGS() |
---|
1288 | SYMINFO_FLG__LAST__ |
---|
1289 | }; |
---|
1290 | |
---|
1291 | /* |
---|
1292 | * Version dependencies. |
---|
1293 | */ |
---|
1294 | #define _ELF_DEFINE_VERSIONING_DEPENDENCIES() \ |
---|
1295 | _ELF_DEFINE_VERD(VER_NDX_LOCAL, 0, "local scope") \ |
---|
1296 | _ELF_DEFINE_VERD(VER_NDX_GLOBAL, 1, "global scope") |
---|
1297 | #undef _ELF_DEFINE_VERD |
---|
1298 | #define _ELF_DEFINE_VERD(N, V, DESCR) N = V , |
---|
1299 | enum { |
---|
1300 | _ELF_DEFINE_VERSIONING_DEPENDENCIES() |
---|
1301 | VER_NDX__LAST__ |
---|
1302 | }; |
---|
1303 | |
---|
1304 | /* |
---|
1305 | * Version flags. |
---|
1306 | */ |
---|
1307 | #define _ELF_DEFINE_VERSIONING_FLAGS() \ |
---|
1308 | _ELF_DEFINE_VERF(VER_FLG_BASE, 0x1, "file version") \ |
---|
1309 | _ELF_DEFINE_VERF(VER_FLG_WEAK, 0x2, "weak version") |
---|
1310 | #undef _ELF_DEFINE_VERF |
---|
1311 | #define _ELF_DEFINE_VERF(N, V, DESCR) N = V , |
---|
1312 | enum { |
---|
1313 | _ELF_DEFINE_VERSIONING_FLAGS() |
---|
1314 | VER_FLG__LAST__ |
---|
1315 | }; |
---|
1316 | |
---|
1317 | /* |
---|
1318 | * Version needs |
---|
1319 | */ |
---|
1320 | #define _ELF_DEFINE_VERSIONING_NEEDS() \ |
---|
1321 | _ELF_DEFINE_VRN(VER_NEED_NONE, 0, "invalid version") \ |
---|
1322 | _ELF_DEFINE_VRN(VER_NEED_CURRENT, 1, "current version") |
---|
1323 | #undef _ELF_DEFINE_VRN |
---|
1324 | #define _ELF_DEFINE_VRN(N, V, DESCR) N = V , |
---|
1325 | enum { |
---|
1326 | _ELF_DEFINE_VERSIONING_NEEDS() |
---|
1327 | VER_NEED__LAST__ |
---|
1328 | }; |
---|
1329 | |
---|
1330 | /* |
---|
1331 | * Version numbers. |
---|
1332 | */ |
---|
1333 | #define _ELF_DEFINE_VERSIONING_NUMBERS() \ |
---|
1334 | _ELF_DEFINE_VRNU(VER_DEF_NONE, 0, "invalid version") \ |
---|
1335 | _ELF_DEFINE_VRNU(VER_DEF_CURRENT, 1, "current version") |
---|
1336 | #undef _ELF_DEFINE_VRNU |
---|
1337 | #define _ELF_DEFINE_VRNU(N, V, DESCR) N = V , |
---|
1338 | enum { |
---|
1339 | _ELF_DEFINE_VERSIONING_NUMBERS() |
---|
1340 | VER_DEF__LAST__ |
---|
1341 | }; |
---|
1342 | |
---|
1343 | /** |
---|
1344 | ** Relocation types. |
---|
1345 | **/ |
---|
1346 | |
---|
1347 | #define _ELF_DEFINE_386_RELOCATIONS() \ |
---|
1348 | _ELF_DEFINE_RELOC(R_386_NONE, 0) \ |
---|
1349 | _ELF_DEFINE_RELOC(R_386_32, 1) \ |
---|
1350 | _ELF_DEFINE_RELOC(R_386_PC32, 2) \ |
---|
1351 | _ELF_DEFINE_RELOC(R_386_GOT32, 3) \ |
---|
1352 | _ELF_DEFINE_RELOC(R_386_PLT32, 4) \ |
---|
1353 | _ELF_DEFINE_RELOC(R_386_COPY, 5) \ |
---|
1354 | _ELF_DEFINE_RELOC(R_386_GLOB_DAT, 6) \ |
---|
1355 | _ELF_DEFINE_RELOC(R_386_JMP_SLOT, 7) \ |
---|
1356 | _ELF_DEFINE_RELOC(R_386_RELATIVE, 8) \ |
---|
1357 | _ELF_DEFINE_RELOC(R_386_GOTOFF, 9) \ |
---|
1358 | _ELF_DEFINE_RELOC(R_386_GOTPC, 10) \ |
---|
1359 | _ELF_DEFINE_RELOC(R_386_32PLT, 11) \ |
---|
1360 | _ELF_DEFINE_RELOC(R_386_16, 20) \ |
---|
1361 | _ELF_DEFINE_RELOC(R_386_PC16, 21) \ |
---|
1362 | _ELF_DEFINE_RELOC(R_386_8, 22) \ |
---|
1363 | _ELF_DEFINE_RELOC(R_386_PC8, 23) |
---|
1364 | |
---|
1365 | /* |
---|
1366 | * These are the symbols used in the Sun ``Linkers and Loaders |
---|
1367 | * Guide'', Document No: 817-1984-17. See the X86_64 relocations list |
---|
1368 | * below for the spellings used in the ELF specification. |
---|
1369 | */ |
---|
1370 | #define _ELF_DEFINE_AMD64_RELOCATIONS() \ |
---|
1371 | _ELF_DEFINE_RELOC(R_AMD64_NONE, 0) \ |
---|
1372 | _ELF_DEFINE_RELOC(R_AMD64_64, 1) \ |
---|
1373 | _ELF_DEFINE_RELOC(R_AMD64_PC32, 2) \ |
---|
1374 | _ELF_DEFINE_RELOC(R_AMD64_GOT32, 3) \ |
---|
1375 | _ELF_DEFINE_RELOC(R_AMD64_PLT32, 4) \ |
---|
1376 | _ELF_DEFINE_RELOC(R_AMD64_COPY, 5) \ |
---|
1377 | _ELF_DEFINE_RELOC(R_AMD64_GLOB_DAT, 6) \ |
---|
1378 | _ELF_DEFINE_RELOC(R_AMD64_JUMP_SLOT, 7) \ |
---|
1379 | _ELF_DEFINE_RELOC(R_AMD64_RELATIVE, 8) \ |
---|
1380 | _ELF_DEFINE_RELOC(R_AMD64_GOTPCREL, 9) \ |
---|
1381 | _ELF_DEFINE_RELOC(R_AMD64_32, 10) \ |
---|
1382 | _ELF_DEFINE_RELOC(R_AMD64_32S, 11) \ |
---|
1383 | _ELF_DEFINE_RELOC(R_AMD64_16, 12) \ |
---|
1384 | _ELF_DEFINE_RELOC(R_AMD64_PC16, 13) \ |
---|
1385 | _ELF_DEFINE_RELOC(R_AMD64_8, 14) \ |
---|
1386 | _ELF_DEFINE_RELOC(R_AMD64_PC8, 15) \ |
---|
1387 | _ELF_DEFINE_RELOC(R_AMD64_PC64, 24) \ |
---|
1388 | _ELF_DEFINE_RELOC(R_AMD64_GOTOFF64, 25) \ |
---|
1389 | _ELF_DEFINE_RELOC(R_AMD64_GOTPC32, 26) |
---|
1390 | |
---|
1391 | #define _ELF_DEFINE_ARM_RELOCATIONS() \ |
---|
1392 | _ELF_DEFINE_RELOC(R_ARM_NONE, 0) \ |
---|
1393 | _ELF_DEFINE_RELOC(R_ARM_PC24, 1) \ |
---|
1394 | _ELF_DEFINE_RELOC(R_ARM_ABS32, 2) \ |
---|
1395 | _ELF_DEFINE_RELOC(R_ARM_REL32, 3) \ |
---|
1396 | _ELF_DEFINE_RELOC(R_ARM_LDR_PC_G0, 4) \ |
---|
1397 | _ELF_DEFINE_RELOC(R_ARM_ABS16, 5) \ |
---|
1398 | _ELF_DEFINE_RELOC(R_ARM_ABS12, 6) \ |
---|
1399 | _ELF_DEFINE_RELOC(R_ARM_THM_ABS5, 7) \ |
---|
1400 | _ELF_DEFINE_RELOC(R_ARM_ABS8, 8) \ |
---|
1401 | _ELF_DEFINE_RELOC(R_ARM_SBREL32, 9) \ |
---|
1402 | _ELF_DEFINE_RELOC(R_ARM_THM_CALL, 10) \ |
---|
1403 | _ELF_DEFINE_RELOC(R_ARM_THM_PC8, 11) \ |
---|
1404 | _ELF_DEFINE_RELOC(R_ARM_BREL_ADJ, 12) \ |
---|
1405 | _ELF_DEFINE_RELOC(R_ARM_SWI24, 13) \ |
---|
1406 | _ELF_DEFINE_RELOC(R_ARM_THM_SWI8, 14) \ |
---|
1407 | _ELF_DEFINE_RELOC(R_ARM_XPC25, 15) \ |
---|
1408 | _ELF_DEFINE_RELOC(R_ARM_THM_XPC22, 16) \ |
---|
1409 | _ELF_DEFINE_RELOC(R_ARM_TLS_DTPMOD32, 17) \ |
---|
1410 | _ELF_DEFINE_RELOC(R_ARM_TLS_DTPOFF32, 18) \ |
---|
1411 | _ELF_DEFINE_RELOC(R_ARM_TLS_TPOFF32, 19) \ |
---|
1412 | _ELF_DEFINE_RELOC(R_ARM_COPY, 20) \ |
---|
1413 | _ELF_DEFINE_RELOC(R_ARM_GLOB_DAT, 21) \ |
---|
1414 | _ELF_DEFINE_RELOC(R_ARM_JUMP_SLOT, 22) \ |
---|
1415 | _ELF_DEFINE_RELOC(R_ARM_RELATIVE, 23) \ |
---|
1416 | _ELF_DEFINE_RELOC(R_ARM_GOTOFF32, 24) \ |
---|
1417 | _ELF_DEFINE_RELOC(R_ARM_BASE_PREL, 25) \ |
---|
1418 | _ELF_DEFINE_RELOC(R_ARM_GOT_BREL, 26) \ |
---|
1419 | _ELF_DEFINE_RELOC(R_ARM_PLT32, 27) \ |
---|
1420 | _ELF_DEFINE_RELOC(R_ARM_CALL, 28) \ |
---|
1421 | _ELF_DEFINE_RELOC(R_ARM_JUMP24, 29) \ |
---|
1422 | _ELF_DEFINE_RELOC(R_ARM_THM_JUMP24, 30) \ |
---|
1423 | _ELF_DEFINE_RELOC(R_ARM_BASE_ABS, 31) \ |
---|
1424 | _ELF_DEFINE_RELOC(R_ARM_ALU_PCREL7_0, 32) \ |
---|
1425 | _ELF_DEFINE_RELOC(R_ARM_ALU_PCREL15_8, 33) \ |
---|
1426 | _ELF_DEFINE_RELOC(R_ARM_ALU_PCREL23_15, 34) \ |
---|
1427 | _ELF_DEFINE_RELOC(R_ARM_LDR_SBREL_11_0, 35) \ |
---|
1428 | _ELF_DEFINE_RELOC(R_ARM_ALU_SBREL_19_12, 36) \ |
---|
1429 | _ELF_DEFINE_RELOC(R_ARM_ALU_SBREL_27_20, 37) \ |
---|
1430 | _ELF_DEFINE_RELOC(R_ARM_TARGET1, 38) \ |
---|
1431 | _ELF_DEFINE_RELOC(R_ARM_SBREL31, 39) \ |
---|
1432 | _ELF_DEFINE_RELOC(R_ARM_V4BX, 40) \ |
---|
1433 | _ELF_DEFINE_RELOC(R_ARM_TARGET2, 41) \ |
---|
1434 | _ELF_DEFINE_RELOC(R_ARM_PREL31, 42) \ |
---|
1435 | _ELF_DEFINE_RELOC(R_ARM_MOVW_ABS_NC, 43) \ |
---|
1436 | _ELF_DEFINE_RELOC(R_ARM_MOVT_ABS, 44) \ |
---|
1437 | _ELF_DEFINE_RELOC(R_ARM_MOVW_PREL_NC, 45) \ |
---|
1438 | _ELF_DEFINE_RELOC(R_ARM_MOVT_PREL, 46) \ |
---|
1439 | _ELF_DEFINE_RELOC(R_ARM_THM_MOVW_ABS_NC, 47) \ |
---|
1440 | _ELF_DEFINE_RELOC(R_ARM_THM_MOVT_ABS, 48) \ |
---|
1441 | _ELF_DEFINE_RELOC(R_ARM_MOVW_PREL_NC, 49) \ |
---|
1442 | _ELF_DEFINE_RELOC(R_ARM_THM_MOVT_PREL, 50) \ |
---|
1443 | _ELF_DEFINE_RELOC(R_ARM_THM_JUMP19, 51) \ |
---|
1444 | _ELF_DEFINE_RELOC(R_ARM_THM_JUMP6, 52) \ |
---|
1445 | _ELF_DEFINE_RELOC(R_ARM_THM_ALU_PREL_11_0, 53) \ |
---|
1446 | _ELF_DEFINE_RELOC(R_ARM_THM_PC12, 54) \ |
---|
1447 | _ELF_DEFINE_RELOC(R_ARM_ABS32_NOI, 55) \ |
---|
1448 | _ELF_DEFINE_RELOC(R_ARM_REL32_NOI, 56) \ |
---|
1449 | _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G0_NC, 57) \ |
---|
1450 | _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G0, 58) \ |
---|
1451 | _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G1_NC, 59) \ |
---|
1452 | _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G1, 60) \ |
---|
1453 | _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G2, 61) \ |
---|
1454 | _ELF_DEFINE_RELOC(R_ARM_LDR_PC_G1, 62) \ |
---|
1455 | _ELF_DEFINE_RELOC(R_ARM_LDR_PC_G2, 63) \ |
---|
1456 | _ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G0, 64) \ |
---|
1457 | _ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G1, 65) \ |
---|
1458 | _ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G2, 66) \ |
---|
1459 | _ELF_DEFINE_RELOC(R_ARM_LDC_PC_G0, 67) \ |
---|
1460 | _ELF_DEFINE_RELOC(R_ARM_LDC_PC_G1, 68) \ |
---|
1461 | _ELF_DEFINE_RELOC(R_ARM_LDC_PC_G2, 69) \ |
---|
1462 | _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G0_NC, 70) \ |
---|
1463 | _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G0, 71) \ |
---|
1464 | _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G1_NC, 72) \ |
---|
1465 | _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G1, 73) \ |
---|
1466 | _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G2, 74) \ |
---|
1467 | _ELF_DEFINE_RELOC(R_ARM_LDR_SB_G0, 75) \ |
---|
1468 | _ELF_DEFINE_RELOC(R_ARM_LDR_SB_G1, 76) \ |
---|
1469 | _ELF_DEFINE_RELOC(R_ARM_LDR_SB_G2, 77) \ |
---|
1470 | _ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G0, 78) \ |
---|
1471 | _ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G1, 79) \ |
---|
1472 | _ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G2, 80) \ |
---|
1473 | _ELF_DEFINE_RELOC(R_ARM_LDC_SB_G0, 81) \ |
---|
1474 | _ELF_DEFINE_RELOC(R_ARM_LDC_SB_G1, 82) \ |
---|
1475 | _ELF_DEFINE_RELOC(R_ARM_LDC_SB_G2, 83) \ |
---|
1476 | _ELF_DEFINE_RELOC(R_ARM_MOVW_BREL_NC, 84) \ |
---|
1477 | _ELF_DEFINE_RELOC(R_ARM_MOVT_BREL, 85) \ |
---|
1478 | _ELF_DEFINE_RELOC(R_ARM_MOVW_BREL, 86) \ |
---|
1479 | _ELF_DEFINE_RELOC(R_ARM_THM_MOVW_BREL_NC, 87) \ |
---|
1480 | _ELF_DEFINE_RELOC(R_ARM_THM_MOVT_BREL, 88) \ |
---|
1481 | _ELF_DEFINE_RELOC(R_ARM_THM_MOVW_BREL, 89) \ |
---|
1482 | _ELF_DEFINE_RELOC(R_ARM_TLS_GOTDESC, 90) \ |
---|
1483 | _ELF_DEFINE_RELOC(R_ARM_TLS_CALL, 91) \ |
---|
1484 | _ELF_DEFINE_RELOC(R_ARM_TLS_DESCSEQ, 92) \ |
---|
1485 | _ELF_DEFINE_RELOC(R_ARM_THM_TLS_CALL, 93) \ |
---|
1486 | _ELF_DEFINE_RELOC(R_ARM_PLT32_ABS, 94) \ |
---|
1487 | _ELF_DEFINE_RELOC(R_ARM_GOT_ABS, 95) \ |
---|
1488 | _ELF_DEFINE_RELOC(R_ARM_GOT_PREL, 96) \ |
---|
1489 | _ELF_DEFINE_RELOC(R_ARM_GOT_BREL12, 97) \ |
---|
1490 | _ELF_DEFINE_RELOC(R_ARM_GOTOFF12, 98) \ |
---|
1491 | _ELF_DEFINE_RELOC(R_ARM_GOTRELAX, 99) \ |
---|
1492 | _ELF_DEFINE_RELOC(R_ARM_GNU_VTENTRY, 100) \ |
---|
1493 | _ELF_DEFINE_RELOC(R_ARM_GNU_VTINHERIT, 101) \ |
---|
1494 | _ELF_DEFINE_RELOC(R_ARM_THM_JUMP11, 102) \ |
---|
1495 | _ELF_DEFINE_RELOC(R_ARM_THM_JUMP8, 103) \ |
---|
1496 | _ELF_DEFINE_RELOC(R_ARM_TLS_GD32, 104) \ |
---|
1497 | _ELF_DEFINE_RELOC(R_ARM_TLS_LDM32, 105) \ |
---|
1498 | _ELF_DEFINE_RELOC(R_ARM_TLS_LDO32, 106) \ |
---|
1499 | _ELF_DEFINE_RELOC(R_ARM_TLS_IE32, 107) \ |
---|
1500 | _ELF_DEFINE_RELOC(R_ARM_TLS_LE32, 108) \ |
---|
1501 | _ELF_DEFINE_RELOC(R_ARM_TLS_LDO12, 109) \ |
---|
1502 | _ELF_DEFINE_RELOC(R_ARM_TLS_LE12, 110) \ |
---|
1503 | _ELF_DEFINE_RELOC(R_ARM_TLS_IE12GP, 111) \ |
---|
1504 | _ELF_DEFINE_RELOC(R_ARM_ME_TOO, 128) \ |
---|
1505 | _ELF_DEFINE_RELOC(R_ARM_THM_TLS_DESCSEQ16, 129) \ |
---|
1506 | _ELF_DEFINE_RELOC(R_ARM_THM_TLS_DESCSEQ32, 130) |
---|
1507 | |
---|
1508 | #define _ELF_DEFINE_IA64_RELOCATIONS() \ |
---|
1509 | _ELF_DEFINE_RELOC(R_IA_64_NONE, 0) \ |
---|
1510 | _ELF_DEFINE_RELOC(R_IA_64_IMM14, 0x21) \ |
---|
1511 | _ELF_DEFINE_RELOC(R_IA_64_IMM22, 0x22) \ |
---|
1512 | _ELF_DEFINE_RELOC(R_IA_64_IMM64, 0x23) \ |
---|
1513 | _ELF_DEFINE_RELOC(R_IA_64_DIR32MSB, 0x24) \ |
---|
1514 | _ELF_DEFINE_RELOC(R_IA_64_DIR32LSB, 0x25) \ |
---|
1515 | _ELF_DEFINE_RELOC(R_IA_64_DIR64MSB, 0x26) \ |
---|
1516 | _ELF_DEFINE_RELOC(R_IA_64_DIR64LSB, 0x27) \ |
---|
1517 | _ELF_DEFINE_RELOC(R_IA_64_GPREL22, 0x2a) \ |
---|
1518 | _ELF_DEFINE_RELOC(R_IA_64_GPREL64I, 0x2b) \ |
---|
1519 | _ELF_DEFINE_RELOC(R_IA_64_GPREL32MSB, 0x2c) \ |
---|
1520 | _ELF_DEFINE_RELOC(R_IA_64_GPREL32LSB, 0x2d) \ |
---|
1521 | _ELF_DEFINE_RELOC(R_IA_64_GPREL64MSB, 0x2e) \ |
---|
1522 | _ELF_DEFINE_RELOC(R_IA_64_GPREL64LSB, 0x2f) \ |
---|
1523 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF22, 0x32) \ |
---|
1524 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF64I, 0x33) \ |
---|
1525 | _ELF_DEFINE_RELOC(R_IA_64_PLTOFF22, 0x3a) \ |
---|
1526 | _ELF_DEFINE_RELOC(R_IA_64_PLTOFF64I, 0x3b) \ |
---|
1527 | _ELF_DEFINE_RELOC(R_IA_64_PLTOFF64MSB, 0x3e) \ |
---|
1528 | _ELF_DEFINE_RELOC(R_IA_64_PLTOFF64LSB, 0x3f) \ |
---|
1529 | _ELF_DEFINE_RELOC(R_IA_64_FPTR64I, 0x43) \ |
---|
1530 | _ELF_DEFINE_RELOC(R_IA_64_FPTR32MSB, 0x44) \ |
---|
1531 | _ELF_DEFINE_RELOC(R_IA_64_FPTR32LSB, 0x45) \ |
---|
1532 | _ELF_DEFINE_RELOC(R_IA_64_FPTR64MSB, 0x46) \ |
---|
1533 | _ELF_DEFINE_RELOC(R_IA_64_FPTR64LSB, 0x47) \ |
---|
1534 | _ELF_DEFINE_RELOC(R_IA_64_PCREL60B, 0x48) \ |
---|
1535 | _ELF_DEFINE_RELOC(R_IA_64_PCREL21B, 0x49) \ |
---|
1536 | _ELF_DEFINE_RELOC(R_IA_64_PCREL21M, 0x4a) \ |
---|
1537 | _ELF_DEFINE_RELOC(R_IA_64_PCREL21F, 0x4b) \ |
---|
1538 | _ELF_DEFINE_RELOC(R_IA_64_PCREL32MSB, 0x4c) \ |
---|
1539 | _ELF_DEFINE_RELOC(R_IA_64_PCREL32LSB, 0x4d) \ |
---|
1540 | _ELF_DEFINE_RELOC(R_IA_64_PCREL64MSB, 0x4e) \ |
---|
1541 | _ELF_DEFINE_RELOC(R_IA_64_PCREL64LSB, 0x4f) \ |
---|
1542 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR22, 0x52) \ |
---|
1543 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64I, 0x53) \ |
---|
1544 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR32MSB, 0x54) \ |
---|
1545 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR32LSB, 0x55) \ |
---|
1546 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64MSB, 0x56) \ |
---|
1547 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64LSB, 0x57) \ |
---|
1548 | _ELF_DEFINE_RELOC(R_IA_64_SEGREL32MSB, 0x5c) \ |
---|
1549 | _ELF_DEFINE_RELOC(R_IA_64_SEGREL32LSB, 0x5d) \ |
---|
1550 | _ELF_DEFINE_RELOC(R_IA_64_SEGREL64MSB, 0x5e) \ |
---|
1551 | _ELF_DEFINE_RELOC(R_IA_64_SEGREL64LSB, 0x5f) \ |
---|
1552 | _ELF_DEFINE_RELOC(R_IA_64_SECREL32MSB, 0x64) \ |
---|
1553 | _ELF_DEFINE_RELOC(R_IA_64_SECREL32LSB, 0x65) \ |
---|
1554 | _ELF_DEFINE_RELOC(R_IA_64_SECREL64MSB, 0x66) \ |
---|
1555 | _ELF_DEFINE_RELOC(R_IA_64_SECREL64LSB, 0x67) \ |
---|
1556 | _ELF_DEFINE_RELOC(R_IA_64_REL32MSB, 0x6c) \ |
---|
1557 | _ELF_DEFINE_RELOC(R_IA_64_REL32LSB, 0x6d) \ |
---|
1558 | _ELF_DEFINE_RELOC(R_IA_64_REL64MSB, 0x6e) \ |
---|
1559 | _ELF_DEFINE_RELOC(R_IA_64_REL64LSB, 0x6f) \ |
---|
1560 | _ELF_DEFINE_RELOC(R_IA_64_LTV32MSB, 0x74) \ |
---|
1561 | _ELF_DEFINE_RELOC(R_IA_64_LTV32LSB, 0x75) \ |
---|
1562 | _ELF_DEFINE_RELOC(R_IA_64_LTV64MSB, 0x76) \ |
---|
1563 | _ELF_DEFINE_RELOC(R_IA_64_LTV64LSB, 0x77) \ |
---|
1564 | _ELF_DEFINE_RELOC(R_IA_64_PCREL21BIa, 0x79) \ |
---|
1565 | _ELF_DEFINE_RELOC(R_IA_64_PCREL22, 0x7A) \ |
---|
1566 | _ELF_DEFINE_RELOC(R_IA_64_PCREL64I, 0x7B) \ |
---|
1567 | _ELF_DEFINE_RELOC(R_IA_64_IPLTMSB, 0x80) \ |
---|
1568 | _ELF_DEFINE_RELOC(R_IA_64_IPLTLSB, 0x81) \ |
---|
1569 | _ELF_DEFINE_RELOC(R_IA_64_SUB, 0x85) \ |
---|
1570 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF22X, 0x86) \ |
---|
1571 | _ELF_DEFINE_RELOC(R_IA_64_LDXMOV, 0x87) \ |
---|
1572 | _ELF_DEFINE_RELOC(R_IA_64_TPREL14, 0x91) \ |
---|
1573 | _ELF_DEFINE_RELOC(R_IA_64_TPREL22, 0x92) \ |
---|
1574 | _ELF_DEFINE_RELOC(R_IA_64_TPREL64I, 0x93) \ |
---|
1575 | _ELF_DEFINE_RELOC(R_IA_64_TPREL64MSB, 0x96) \ |
---|
1576 | _ELF_DEFINE_RELOC(R_IA_64_TPREL64LSB, 0x97) \ |
---|
1577 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_TPREL22, 0x9A) \ |
---|
1578 | _ELF_DEFINE_RELOC(R_IA_64_DTPMOD64MSB, 0xA6) \ |
---|
1579 | _ELF_DEFINE_RELOC(R_IA_64_DTPMOD64LSB, 0xA7) \ |
---|
1580 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_DTPMOD22, 0xAA) \ |
---|
1581 | _ELF_DEFINE_RELOC(R_IA_64_DTPREL14, 0xB1) \ |
---|
1582 | _ELF_DEFINE_RELOC(R_IA_64_DTPREL22, 0xB2) \ |
---|
1583 | _ELF_DEFINE_RELOC(R_IA_64_DTPREL64I, 0xB3) \ |
---|
1584 | _ELF_DEFINE_RELOC(R_IA_64_DTPREL32MSB, 0xB4) \ |
---|
1585 | _ELF_DEFINE_RELOC(R_IA_64_DTPREL32LSB, 0xB5) \ |
---|
1586 | _ELF_DEFINE_RELOC(R_IA_64_DTPREL64MSB, 0xB6) \ |
---|
1587 | _ELF_DEFINE_RELOC(R_IA_64_DTPREL64LSB, 0xB7) \ |
---|
1588 | _ELF_DEFINE_RELOC(R_IA_64_LTOFF_DTPREL22, 0xBA) |
---|
1589 | |
---|
1590 | #define _ELF_DEFINE_MIPS_RELOCATIONS() \ |
---|
1591 | _ELF_DEFINE_RELOC(R_MIPS_NONE, 0) \ |
---|
1592 | _ELF_DEFINE_RELOC(R_MIPS_16, 1) \ |
---|
1593 | _ELF_DEFINE_RELOC(R_MIPS_32, 2) \ |
---|
1594 | _ELF_DEFINE_RELOC(R_MIPS_REL32, 3) \ |
---|
1595 | _ELF_DEFINE_RELOC(R_MIPS_26, 4) \ |
---|
1596 | _ELF_DEFINE_RELOC(R_MIPS_HI16, 5) \ |
---|
1597 | _ELF_DEFINE_RELOC(R_MIPS_LO16, 6) \ |
---|
1598 | _ELF_DEFINE_RELOC(R_MIPS_GPREL16, 7) \ |
---|
1599 | _ELF_DEFINE_RELOC(R_MIPS_LITERAL, 8) \ |
---|
1600 | _ELF_DEFINE_RELOC(R_MIPS_GOT16, 9) \ |
---|
1601 | _ELF_DEFINE_RELOC(R_MIPS_PC16, 10) \ |
---|
1602 | _ELF_DEFINE_RELOC(R_MIPS_CALL16, 11) \ |
---|
1603 | _ELF_DEFINE_RELOC(R_MIPS_GPREL32, 12) \ |
---|
1604 | _ELF_DEFINE_RELOC(R_MIPS_64, 18) \ |
---|
1605 | _ELF_DEFINE_RELOC(R_MIPS_GOTHI16, 21) \ |
---|
1606 | _ELF_DEFINE_RELOC(R_MIPS_GOTLO16, 22) \ |
---|
1607 | _ELF_DEFINE_RELOC(R_MIPS_CALLHI16, 30) \ |
---|
1608 | _ELF_DEFINE_RELOC(R_MIPS_CALLLO16, 31) |
---|
1609 | |
---|
1610 | #define _ELF_DEFINE_PPC32_RELOCATIONS() \ |
---|
1611 | _ELF_DEFINE_RELOC(R_PPC_NONE, 0) \ |
---|
1612 | _ELF_DEFINE_RELOC(R_PPC_ADDR32, 1) \ |
---|
1613 | _ELF_DEFINE_RELOC(R_PPC_ADDR24, 2) \ |
---|
1614 | _ELF_DEFINE_RELOC(R_PPC_ADDR16, 3) \ |
---|
1615 | _ELF_DEFINE_RELOC(R_PPC_ADDR16_LO, 4) \ |
---|
1616 | _ELF_DEFINE_RELOC(R_PPC_ADDR16_HI, 5) \ |
---|
1617 | _ELF_DEFINE_RELOC(R_PPC_ADDR16_HA, 6) \ |
---|
1618 | _ELF_DEFINE_RELOC(R_PPC_ADDR14, 7) \ |
---|
1619 | _ELF_DEFINE_RELOC(R_PPC_ADDR14_BRTAKEN, 8) \ |
---|
1620 | _ELF_DEFINE_RELOC(R_PPC_ADDR14_BRNTAKEN, 9) \ |
---|
1621 | _ELF_DEFINE_RELOC(R_PPC_REL24, 10) \ |
---|
1622 | _ELF_DEFINE_RELOC(R_PPC_REL14, 11) \ |
---|
1623 | _ELF_DEFINE_RELOC(R_PPC_REL14_BRTAKEN, 12) \ |
---|
1624 | _ELF_DEFINE_RELOC(R_PPC_REL14_BRNTAKEN, 13) \ |
---|
1625 | _ELF_DEFINE_RELOC(R_PPC_GOT16, 14) \ |
---|
1626 | _ELF_DEFINE_RELOC(R_PPC_GOT16_LO, 15) \ |
---|
1627 | _ELF_DEFINE_RELOC(R_PPC_GOT16_HI, 16) \ |
---|
1628 | _ELF_DEFINE_RELOC(R_PPC_GOT16_HA, 17) \ |
---|
1629 | _ELF_DEFINE_RELOC(R_PPC_PLTREL24, 18) \ |
---|
1630 | _ELF_DEFINE_RELOC(R_PPC_COPY, 19) \ |
---|
1631 | _ELF_DEFINE_RELOC(R_PPC_GLOB_DAT, 20) \ |
---|
1632 | _ELF_DEFINE_RELOC(R_PPC_JMP_SLOT, 21) \ |
---|
1633 | _ELF_DEFINE_RELOC(R_PPC_RELATIVE, 22) \ |
---|
1634 | _ELF_DEFINE_RELOC(R_PPC_LOCAL24PC, 23) \ |
---|
1635 | _ELF_DEFINE_RELOC(R_PPC_UADDR32, 24) \ |
---|
1636 | _ELF_DEFINE_RELOC(R_PPC_UADDR16, 25) \ |
---|
1637 | _ELF_DEFINE_RELOC(R_PPC_REL32, 26) \ |
---|
1638 | _ELF_DEFINE_RELOC(R_PPC_PLT32, 27) \ |
---|
1639 | _ELF_DEFINE_RELOC(R_PPC_PLTREL32, 28) \ |
---|
1640 | _ELF_DEFINE_RELOC(R_PPC_PLT16_LO, 29) \ |
---|
1641 | _ELF_DEFINE_RELOC(R_PPL_PLT16_HI, 30) \ |
---|
1642 | _ELF_DEFINE_RELOC(R_PPC_PLT16_HA, 31) \ |
---|
1643 | _ELF_DEFINE_RELOC(R_PPC_SDAREL16, 32) \ |
---|
1644 | _ELF_DEFINE_RELOC(R_PPC_SECTOFF, 33) \ |
---|
1645 | _ELF_DEFINE_RELOC(R_PPC_SECTOFF_LO, 34) \ |
---|
1646 | _ELF_DEFINE_RELOC(R_PPC_SECTOFF_HI, 35) \ |
---|
1647 | _ELF_DEFINE_RELOC(R_PPC_SECTOFF_HA, 36) \ |
---|
1648 | _ELF_DEFINE_RELOC(R_PPC_ADDR30, 37) \ |
---|
1649 | _ELF_DEFINE_RELOC(R_PPC_TLS, 67) \ |
---|
1650 | _ELF_DEFINE_RELOC(R_PPC_DTPMOD32, 68) \ |
---|
1651 | _ELF_DEFINE_RELOC(R_PPC_TPREL16, 69) \ |
---|
1652 | _ELF_DEFINE_RELOC(R_PPC_TPREL16_LO, 70) \ |
---|
1653 | _ELF_DEFINE_RELOC(R_PPC_TPREL16_HI, 71) \ |
---|
1654 | _ELF_DEFINE_RELOC(R_PPC_TPREL16_HA, 72) \ |
---|
1655 | _ELF_DEFINE_RELOC(R_PPC_TPREL32, 73) \ |
---|
1656 | _ELF_DEFINE_RELOC(R_PPC_DTPREL16, 74) \ |
---|
1657 | _ELF_DEFINE_RELOC(R_PPC_DTPREL16_LO, 75) \ |
---|
1658 | _ELF_DEFINE_RELOC(R_PPC_DTPREL16_HI, 76) \ |
---|
1659 | _ELF_DEFINE_RELOC(R_PPC_DTPREL16_HA, 77) \ |
---|
1660 | _ELF_DEFINE_RELOC(R_PPC_DTPREL32, 78) \ |
---|
1661 | _ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16, 79) \ |
---|
1662 | _ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_LO, 80) \ |
---|
1663 | _ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_HI, 81) \ |
---|
1664 | _ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_HA, 82) \ |
---|
1665 | _ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16, 83) \ |
---|
1666 | _ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_LO, 84) \ |
---|
1667 | _ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_HI, 85) \ |
---|
1668 | _ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_HA, 86) \ |
---|
1669 | _ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16, 87) \ |
---|
1670 | _ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_LO, 88) \ |
---|
1671 | _ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_HI, 89) \ |
---|
1672 | _ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_HA, 90) \ |
---|
1673 | _ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16, 91) \ |
---|
1674 | _ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_LO, 92) \ |
---|
1675 | _ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_HI, 93) \ |
---|
1676 | _ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_HA, 94) \ |
---|
1677 | _ELF_DEFINE_RELOC(R_PPC_TLSGD, 95) \ |
---|
1678 | _ELF_DEFINE_RELOC(R_PPC_TLSLD, 96) \ |
---|
1679 | _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR32, 101) \ |
---|
1680 | _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16, 102) \ |
---|
1681 | _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_LO, 103) \ |
---|
1682 | _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_HI, 104) \ |
---|
1683 | _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_HA, 105) \ |
---|
1684 | _ELF_DEFINE_RELOC(R_PPC_EMB_SDAI16, 106) \ |
---|
1685 | _ELF_DEFINE_RELOC(R_PPC_EMB_SDA2I16, 107) \ |
---|
1686 | _ELF_DEFINE_RELOC(R_PPC_EMB_SDA2REL, 108) \ |
---|
1687 | _ELF_DEFINE_RELOC(R_PPC_EMB_SDA21, 109) \ |
---|
1688 | _ELF_DEFINE_RELOC(R_PPC_EMB_MRKREF, 110) \ |
---|
1689 | _ELF_DEFINE_RELOC(R_PPC_EMB_RELSEC16, 111) \ |
---|
1690 | _ELF_DEFINE_RELOC(R_PPC_EMB_RELST_LO, 112) \ |
---|
1691 | _ELF_DEFINE_RELOC(R_PPC_EMB_RELST_HI, 113) \ |
---|
1692 | _ELF_DEFINE_RELOC(R_PPC_EMB_RELST_HA, 114) \ |
---|
1693 | _ELF_DEFINE_RELOC(R_PPC_EMB_BIT_FLD, 115) \ |
---|
1694 | _ELF_DEFINE_RELOC(R_PPC_EMB_RELSDA, 116) \ |
---|
1695 | |
---|
1696 | #define _ELF_DEFINE_PPC64_RELOCATIONS() \ |
---|
1697 | _ELF_DEFINE_RELOC(R_PPC64_NONE, 0) \ |
---|
1698 | _ELF_DEFINE_RELOC(R_PPC64_ADDR32, 1) \ |
---|
1699 | _ELF_DEFINE_RELOC(R_PPC64_ADDR24, 2) \ |
---|
1700 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16, 3) \ |
---|
1701 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_LO, 4) \ |
---|
1702 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HI, 5) \ |
---|
1703 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HA, 6) \ |
---|
1704 | _ELF_DEFINE_RELOC(R_PPC64_ADDR14, 7) \ |
---|
1705 | _ELF_DEFINE_RELOC(R_PPC64_ADDR14_BRTAKEN, 8) \ |
---|
1706 | _ELF_DEFINE_RELOC(R_PPC64_ADDR14_BRNTAKEN, 9) \ |
---|
1707 | _ELF_DEFINE_RELOC(R_PPC64_REL24, 10) \ |
---|
1708 | _ELF_DEFINE_RELOC(R_PPC64_REL14, 11) \ |
---|
1709 | _ELF_DEFINE_RELOC(R_PPC64_REL14_BRTAKEN, 12) \ |
---|
1710 | _ELF_DEFINE_RELOC(R_PPC64_REL14_BRNTAKEN, 13) \ |
---|
1711 | _ELF_DEFINE_RELOC(R_PPC64_GOT16, 14) \ |
---|
1712 | _ELF_DEFINE_RELOC(R_PPC64_GOT16_LO, 15) \ |
---|
1713 | _ELF_DEFINE_RELOC(R_PPC64_GOT16_HI, 16) \ |
---|
1714 | _ELF_DEFINE_RELOC(R_PPC64_GOT16_HA, 17) \ |
---|
1715 | _ELF_DEFINE_RELOC(R_PPC64_COPY, 19) \ |
---|
1716 | _ELF_DEFINE_RELOC(R_PPC64_GLOB_DAT, 20) \ |
---|
1717 | _ELF_DEFINE_RELOC(R_PPC64_JMP_SLOT, 21) \ |
---|
1718 | _ELF_DEFINE_RELOC(R_PPC64_RELATIVE, 22) \ |
---|
1719 | _ELF_DEFINE_RELOC(R_PPC64_UADDR32, 24) \ |
---|
1720 | _ELF_DEFINE_RELOC(R_PPC64_UADDR16, 25) \ |
---|
1721 | _ELF_DEFINE_RELOC(R_PPC64_REL32, 26) \ |
---|
1722 | _ELF_DEFINE_RELOC(R_PPC64_PLT32, 27) \ |
---|
1723 | _ELF_DEFINE_RELOC(R_PPC64_PLTREL32, 28) \ |
---|
1724 | _ELF_DEFINE_RELOC(R_PPC64_PLT16_LO, 29) \ |
---|
1725 | _ELF_DEFINE_RELOC(R_PPC64_PLT16_HI, 30) \ |
---|
1726 | _ELF_DEFINE_RELOC(R_PPC64_PLT16_HA, 31) \ |
---|
1727 | _ELF_DEFINE_RELOC(R_PPC64_SECTOFF, 33) \ |
---|
1728 | _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_LO, 34) \ |
---|
1729 | _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_HI, 35) \ |
---|
1730 | _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_HA, 36) \ |
---|
1731 | _ELF_DEFINE_RELOC(R_PPC64_ADDR30, 37) \ |
---|
1732 | _ELF_DEFINE_RELOC(R_PPC64_ADDR64, 38) \ |
---|
1733 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHER, 39) \ |
---|
1734 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHERA, 40) \ |
---|
1735 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHEST, 41) \ |
---|
1736 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHESTA, 42) \ |
---|
1737 | _ELF_DEFINE_RELOC(R_PPC64_UADDR64, 43) \ |
---|
1738 | _ELF_DEFINE_RELOC(R_PPC64_REL64, 44) \ |
---|
1739 | _ELF_DEFINE_RELOC(R_PPC64_PLT64, 45) \ |
---|
1740 | _ELF_DEFINE_RELOC(R_PPC64_PLTREL64, 46) \ |
---|
1741 | _ELF_DEFINE_RELOC(R_PPC64_TOC16, 47) \ |
---|
1742 | _ELF_DEFINE_RELOC(R_PPC64_TOC16_LO, 48) \ |
---|
1743 | _ELF_DEFINE_RELOC(R_PPC64_TOC16_HI, 49) \ |
---|
1744 | _ELF_DEFINE_RELOC(R_PPC64_TOC16_HA, 50) \ |
---|
1745 | _ELF_DEFINE_RELOC(R_PPC64_TOC, 51) \ |
---|
1746 | _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16, 52) \ |
---|
1747 | _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_LO, 53) \ |
---|
1748 | _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_HI, 54) \ |
---|
1749 | _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_HA, 55) \ |
---|
1750 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_DS, 56) \ |
---|
1751 | _ELF_DEFINE_RELOC(R_PPC64_ADDR16_LO_DS, 57) \ |
---|
1752 | _ELF_DEFINE_RELOC(R_PPC64_GOT16_DS, 58) \ |
---|
1753 | _ELF_DEFINE_RELOC(R_PPC64_GOT16_LO_DS, 59) \ |
---|
1754 | _ELF_DEFINE_RELOC(R_PPC64_PLT16_LO_DS, 60) \ |
---|
1755 | _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_DS, 61) \ |
---|
1756 | _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_LO_DS, 62) \ |
---|
1757 | _ELF_DEFINE_RELOC(R_PPC64_TOC16_DS, 63) \ |
---|
1758 | _ELF_DEFINE_RELOC(R_PPC64_TOC16_LO_DS, 64) \ |
---|
1759 | _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_DS, 65) \ |
---|
1760 | _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_LO_DS, 66) \ |
---|
1761 | _ELF_DEFINE_RELOC(R_PPC64_TLS, 67) \ |
---|
1762 | _ELF_DEFINE_RELOC(R_PPC64_DTPMOD64, 68) \ |
---|
1763 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16, 69) \ |
---|
1764 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_LO, 60) \ |
---|
1765 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HI, 71) \ |
---|
1766 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HA, 72) \ |
---|
1767 | _ELF_DEFINE_RELOC(R_PPC64_TPREL64, 73) \ |
---|
1768 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16, 74) \ |
---|
1769 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_LO, 75) \ |
---|
1770 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HI, 76) \ |
---|
1771 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HA, 77) \ |
---|
1772 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL64, 78) \ |
---|
1773 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16, 79) \ |
---|
1774 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_LO, 80) \ |
---|
1775 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_HI, 81) \ |
---|
1776 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_HA, 82) \ |
---|
1777 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16, 83) \ |
---|
1778 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_LO, 84) \ |
---|
1779 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_HI, 85) \ |
---|
1780 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_HA, 86) \ |
---|
1781 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_DS, 87) \ |
---|
1782 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_LO_DS, 88) \ |
---|
1783 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_HI, 89) \ |
---|
1784 | _ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_HA, 90) \ |
---|
1785 | _ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_DS, 91) \ |
---|
1786 | _ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_LO_DS, 92) \ |
---|
1787 | _ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_HI, 93) \ |
---|
1788 | _ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_HA, 94) \ |
---|
1789 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_DS, 95) \ |
---|
1790 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_LO_DS, 96) \ |
---|
1791 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHER, 97) \ |
---|
1792 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHERA, 98) \ |
---|
1793 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHEST, 99) \ |
---|
1794 | _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHESTA, 100) \ |
---|
1795 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_DS, 101) \ |
---|
1796 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_LO_DS, 102) \ |
---|
1797 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHER, 103) \ |
---|
1798 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHERA, 104) \ |
---|
1799 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHEST, 105) \ |
---|
1800 | _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHESTA, 106) \ |
---|
1801 | _ELF_DEFINE_RELOC(R_PPC64_TLSGD, 107) \ |
---|
1802 | _ELF_DEFINE_RELOC(R_PPC64_TLSLD, 108) |
---|
1803 | |
---|
1804 | #define _ELF_DEFINE_SPARC_RELOCATIONS() \ |
---|
1805 | _ELF_DEFINE_RELOC(R_SPARC_NONE, 0) \ |
---|
1806 | _ELF_DEFINE_RELOC(R_SPARC_8, 1) \ |
---|
1807 | _ELF_DEFINE_RELOC(R_SPARC_16, 2) \ |
---|
1808 | _ELF_DEFINE_RELOC(R_SPARC_32, 3) \ |
---|
1809 | _ELF_DEFINE_RELOC(R_SPARC_DISP8, 4) \ |
---|
1810 | _ELF_DEFINE_RELOC(R_SPARC_DISP16, 5) \ |
---|
1811 | _ELF_DEFINE_RELOC(R_SPARC_DISP32, 6) \ |
---|
1812 | _ELF_DEFINE_RELOC(R_SPARC_WDISP30, 7) \ |
---|
1813 | _ELF_DEFINE_RELOC(R_SPARC_WDISP22, 8) \ |
---|
1814 | _ELF_DEFINE_RELOC(R_SPARC_HI22, 9) \ |
---|
1815 | _ELF_DEFINE_RELOC(R_SPARC_22, 10) \ |
---|
1816 | _ELF_DEFINE_RELOC(R_SPARC_13, 11) \ |
---|
1817 | _ELF_DEFINE_RELOC(R_SPARC_LO10, 12) \ |
---|
1818 | _ELF_DEFINE_RELOC(R_SPARC_GOT10, 13) \ |
---|
1819 | _ELF_DEFINE_RELOC(R_SPARC_GOT13, 14) \ |
---|
1820 | _ELF_DEFINE_RELOC(R_SPARC_GOT22, 15) \ |
---|
1821 | _ELF_DEFINE_RELOC(R_SPARC_PC10, 16) \ |
---|
1822 | _ELF_DEFINE_RELOC(R_SPARC_PC22, 17) \ |
---|
1823 | _ELF_DEFINE_RELOC(R_SPARC_WPLT30, 18) \ |
---|
1824 | _ELF_DEFINE_RELOC(R_SPARC_COPY, 19) \ |
---|
1825 | _ELF_DEFINE_RELOC(R_SPARC_GLOB_DAT, 20) \ |
---|
1826 | _ELF_DEFINE_RELOC(R_SPARC_JMP_SLOT, 21) \ |
---|
1827 | _ELF_DEFINE_RELOC(R_SPARC_RELATIVE, 22) \ |
---|
1828 | _ELF_DEFINE_RELOC(R_SPARC_UA32, 23) \ |
---|
1829 | _ELF_DEFINE_RELOC(R_SPARC_PLT32, 24) \ |
---|
1830 | _ELF_DEFINE_RELOC(R_SPARC_HIPLT22, 25) \ |
---|
1831 | _ELF_DEFINE_RELOC(R_SPARC_LOPLT10, 26) \ |
---|
1832 | _ELF_DEFINE_RELOC(R_SPARC_PCPLT32, 27) \ |
---|
1833 | _ELF_DEFINE_RELOC(R_SPARC_PCPLT22, 28) \ |
---|
1834 | _ELF_DEFINE_RELOC(R_SPARC_PCPLT10, 29) \ |
---|
1835 | _ELF_DEFINE_RELOC(R_SPARC_10, 30) \ |
---|
1836 | _ELF_DEFINE_RELOC(R_SPARC_11, 31) \ |
---|
1837 | _ELF_DEFINE_RELOC(R_SPARC_64, 32) \ |
---|
1838 | _ELF_DEFINE_RELOC(R_SPARC_OLO10, 33) \ |
---|
1839 | _ELF_DEFINE_RELOC(R_SPARC_HH22, 34) \ |
---|
1840 | _ELF_DEFINE_RELOC(R_SPARC_HM10, 35) \ |
---|
1841 | _ELF_DEFINE_RELOC(R_SPARC_LM22, 36) \ |
---|
1842 | _ELF_DEFINE_RELOC(R_SPARC_PC_HH22, 37) \ |
---|
1843 | _ELF_DEFINE_RELOC(R_SPARC_PC_HM10, 38) \ |
---|
1844 | _ELF_DEFINE_RELOC(R_SPARC_PC_LM22, 39) \ |
---|
1845 | _ELF_DEFINE_RELOC(R_SPARC_WDISP16, 40) \ |
---|
1846 | _ELF_DEFINE_RELOC(R_SPARC_WDISP19, 41) \ |
---|
1847 | _ELF_DEFINE_RELOC(R_SPARC_7, 43) \ |
---|
1848 | _ELF_DEFINE_RELOC(R_SPARC_5, 44) \ |
---|
1849 | _ELF_DEFINE_RELOC(R_SPARC_6, 45) \ |
---|
1850 | _ELF_DEFINE_RELOC(R_SPARC_DISP64, 46) \ |
---|
1851 | _ELF_DEFINE_RELOC(R_SPARC_PLT64, 47) \ |
---|
1852 | _ELF_DEFINE_RELOC(R_SPARC_HIX22, 48) \ |
---|
1853 | _ELF_DEFINE_RELOC(R_SPARC_LOX10, 49) \ |
---|
1854 | _ELF_DEFINE_RELOC(R_SPARC_H44, 50) \ |
---|
1855 | _ELF_DEFINE_RELOC(R_SPARC_M44, 51) \ |
---|
1856 | _ELF_DEFINE_RELOC(R_SPARC_L44, 52) \ |
---|
1857 | _ELF_DEFINE_RELOC(R_SPARC_REGISTER, 53) \ |
---|
1858 | _ELF_DEFINE_RELOC(R_SPARC_UA64, 54) \ |
---|
1859 | _ELF_DEFINE_RELOC(R_SPARC_UA16, 55) \ |
---|
1860 | _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_HIX22, 80) \ |
---|
1861 | _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_LOX10, 81) \ |
---|
1862 | _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP_HIX22, 82) \ |
---|
1863 | _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP_LOX10, 83) \ |
---|
1864 | _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP, 84) \ |
---|
1865 | _ELF_DEFINE_RELOC(R_SPARC_H34, 85) |
---|
1866 | |
---|
1867 | #define _ELF_DEFINE_X86_64_RELOCATIONS() \ |
---|
1868 | _ELF_DEFINE_RELOC(R_X86_64_NONE, 0) \ |
---|
1869 | _ELF_DEFINE_RELOC(R_X86_64_64, 1) \ |
---|
1870 | _ELF_DEFINE_RELOC(R_X86_64_PC32, 2) \ |
---|
1871 | _ELF_DEFINE_RELOC(R_X86_64_GOT32, 3) \ |
---|
1872 | _ELF_DEFINE_RELOC(R_X86_64_PLT32, 4) \ |
---|
1873 | _ELF_DEFINE_RELOC(R_X86_64_COPY, 5) \ |
---|
1874 | _ELF_DEFINE_RELOC(R_X86_64_GLOB_DAT, 6) \ |
---|
1875 | _ELF_DEFINE_RELOC(R_X86_64_JUMP_SLOT, 7) \ |
---|
1876 | _ELF_DEFINE_RELOC(R_X86_64_RELATIVE, 8) \ |
---|
1877 | _ELF_DEFINE_RELOC(R_X86_64_GOTPCREL, 9) \ |
---|
1878 | _ELF_DEFINE_RELOC(R_X86_64_32, 10) \ |
---|
1879 | _ELF_DEFINE_RELOC(R_X86_64_32S, 11) \ |
---|
1880 | _ELF_DEFINE_RELOC(R_X86_64_16, 12) \ |
---|
1881 | _ELF_DEFINE_RELOC(R_X86_64_PC16, 13) \ |
---|
1882 | _ELF_DEFINE_RELOC(R_X86_64_8, 14) \ |
---|
1883 | _ELF_DEFINE_RELOC(R_X86_64_PC8, 15) \ |
---|
1884 | _ELF_DEFINE_RELOC(R_X86_64_DTPMOD64, 16) \ |
---|
1885 | _ELF_DEFINE_RELOC(R_X86_64_DTPOFF64, 17) \ |
---|
1886 | _ELF_DEFINE_RELOC(R_X86_64_TPOFF64, 18) \ |
---|
1887 | _ELF_DEFINE_RELOC(R_X86_64_TLSGD, 19) \ |
---|
1888 | _ELF_DEFINE_RELOC(R_X86_64_TLSLD, 20) \ |
---|
1889 | _ELF_DEFINE_RELOC(R_X86_64_DTPOFF32, 21) \ |
---|
1890 | _ELF_DEFINE_RELOC(R_X86_64_GOTTPOFF, 22) \ |
---|
1891 | _ELF_DEFINE_RELOC(R_X86_64_TPOFF32, 23) \ |
---|
1892 | _ELF_DEFINE_RELOC(R_X86_64_PC64, 24) \ |
---|
1893 | _ELF_DEFINE_RELOC(R_X86_64_GOTOFF64, 25) \ |
---|
1894 | _ELF_DEFINE_RELOC(R_X86_64_GOTPC32, 26) \ |
---|
1895 | _ELF_DEFINE_RELOC(R_X86_64_SIZE32, 32) \ |
---|
1896 | _ELF_DEFINE_RELOC(R_X86_64_SIZE64, 33) \ |
---|
1897 | _ELF_DEFINE_RELOC(R_X86_64_GOTPC32_TLSDESC, 34) \ |
---|
1898 | _ELF_DEFINE_RELOC(R_X86_64_TLSDESC_CALL, 35) \ |
---|
1899 | _ELF_DEFINE_RELOC(R_X86_64_TLSDESC, 36) |
---|
1900 | |
---|
1901 | #define _ELF_DEFINE_RELOCATIONS() \ |
---|
1902 | _ELF_DEFINE_386_RELOCATIONS() \ |
---|
1903 | _ELF_DEFINE_AMD64_RELOCATIONS() \ |
---|
1904 | _ELF_DEFINE_IA64_RELOCATIONS() \ |
---|
1905 | _ELF_DEFINE_MIPS_RELOCATIONS() \ |
---|
1906 | _ELF_DEFINE_PPC32_RELOCATIONS() \ |
---|
1907 | _ELF_DEFINE_PPC64_RELOCATIONS() \ |
---|
1908 | _ELF_DEFINE_SPARC_RELOCATIONS() \ |
---|
1909 | _ELF_DEFINE_X86_64_RELOCATIONS() |
---|
1910 | |
---|
1911 | #undef _ELF_DEFINE_RELOC |
---|
1912 | #define _ELF_DEFINE_RELOC(N, V) N = V , |
---|
1913 | enum { |
---|
1914 | _ELF_DEFINE_RELOCATIONS() |
---|
1915 | R__LAST__ |
---|
1916 | }; |
---|
1917 | |
---|
1918 | #define PN_XNUM 0xFFFFU /* Use extended section numbering. */ |
---|
1919 | |
---|
1920 | /** |
---|
1921 | ** ELF Types. |
---|
1922 | **/ |
---|
1923 | |
---|
1924 | typedef uint32_t Elf32_Addr; /* Program address. */ |
---|
1925 | typedef uint8_t Elf32_Byte; /* Unsigned tiny integer. */ |
---|
1926 | typedef uint16_t Elf32_Half; /* Unsigned medium integer. */ |
---|
1927 | typedef uint32_t Elf32_Off; /* File offset. */ |
---|
1928 | typedef uint16_t Elf32_Section; /* Section index. */ |
---|
1929 | typedef int32_t Elf32_Sword; /* Signed integer. */ |
---|
1930 | typedef uint32_t Elf32_Word; /* Unsigned integer. */ |
---|
1931 | typedef uint64_t Elf32_Lword; /* Unsigned long integer. */ |
---|
1932 | |
---|
1933 | typedef uint64_t Elf64_Addr; /* Program address. */ |
---|
1934 | typedef uint8_t Elf64_Byte; /* Unsigned tiny integer. */ |
---|
1935 | typedef uint16_t Elf64_Half; /* Unsigned medium integer. */ |
---|
1936 | typedef uint64_t Elf64_Off; /* File offset. */ |
---|
1937 | typedef uint16_t Elf64_Section; /* Section index. */ |
---|
1938 | typedef int32_t Elf64_Sword; /* Signed integer. */ |
---|
1939 | typedef uint32_t Elf64_Word; /* Unsigned integer. */ |
---|
1940 | typedef uint64_t Elf64_Lword; /* Unsigned long integer. */ |
---|
1941 | typedef uint64_t Elf64_Xword; /* Unsigned long integer. */ |
---|
1942 | typedef int64_t Elf64_Sxword; /* Signed long integer. */ |
---|
1943 | |
---|
1944 | |
---|
1945 | /* |
---|
1946 | * Capability descriptors. |
---|
1947 | */ |
---|
1948 | |
---|
1949 | /* 32-bit capability descriptor. */ |
---|
1950 | typedef struct { |
---|
1951 | Elf32_Word c_tag; /* Type of entry. */ |
---|
1952 | union { |
---|
1953 | Elf32_Word c_val; /* Integer value. */ |
---|
1954 | Elf32_Addr c_ptr; /* Pointer value. */ |
---|
1955 | } c_un; |
---|
1956 | } Elf32_Cap; |
---|
1957 | |
---|
1958 | /* 64-bit capability descriptor. */ |
---|
1959 | typedef struct { |
---|
1960 | Elf64_Xword c_tag; /* Type of entry. */ |
---|
1961 | union { |
---|
1962 | Elf64_Xword c_val; /* Integer value. */ |
---|
1963 | Elf64_Addr c_ptr; /* Pointer value. */ |
---|
1964 | } c_un; |
---|
1965 | } Elf64_Cap; |
---|
1966 | |
---|
1967 | /* |
---|
1968 | * MIPS .conflict section entries. |
---|
1969 | */ |
---|
1970 | |
---|
1971 | /* 32-bit entry. */ |
---|
1972 | typedef struct { |
---|
1973 | Elf32_Addr c_index; |
---|
1974 | } Elf32_Conflict; |
---|
1975 | |
---|
1976 | /* 64-bit entry. */ |
---|
1977 | typedef struct { |
---|
1978 | Elf64_Addr c_index; |
---|
1979 | } Elf64_Conflict; |
---|
1980 | |
---|
1981 | /* |
---|
1982 | * Dynamic section entries. |
---|
1983 | */ |
---|
1984 | |
---|
1985 | /* 32-bit entry. */ |
---|
1986 | typedef struct { |
---|
1987 | Elf32_Sword d_tag; /* Type of entry. */ |
---|
1988 | union { |
---|
1989 | Elf32_Word d_val; /* Integer value. */ |
---|
1990 | Elf32_Addr d_ptr; /* Pointer value. */ |
---|
1991 | } d_un; |
---|
1992 | } Elf32_Dyn; |
---|
1993 | |
---|
1994 | /* 64-bit entry. */ |
---|
1995 | typedef struct { |
---|
1996 | Elf64_Sxword d_tag; /* Type of entry. */ |
---|
1997 | union { |
---|
1998 | Elf64_Xword d_val; /* Integer value. */ |
---|
1999 | Elf64_Addr d_ptr; /* Pointer value; */ |
---|
2000 | } d_un; |
---|
2001 | } Elf64_Dyn; |
---|
2002 | |
---|
2003 | |
---|
2004 | /* |
---|
2005 | * The executable header (EHDR). |
---|
2006 | */ |
---|
2007 | |
---|
2008 | /* 32 bit EHDR. */ |
---|
2009 | typedef struct { |
---|
2010 | unsigned char e_ident[EI_NIDENT]; /* ELF identification. */ |
---|
2011 | Elf32_Half e_type; /* Object file type (ET_*). */ |
---|
2012 | Elf32_Half e_machine; /* Machine type (EM_*). */ |
---|
2013 | Elf32_Word e_version; /* File format version (EV_*). */ |
---|
2014 | Elf32_Addr e_entry; /* Start address. */ |
---|
2015 | Elf32_Off e_phoff; /* File offset to the PHDR table. */ |
---|
2016 | Elf32_Off e_shoff; /* File offset to the SHDRheader. */ |
---|
2017 | Elf32_Word e_flags; /* Flags (EF_*). */ |
---|
2018 | Elf32_Half e_ehsize; /* Elf header size in bytes. */ |
---|
2019 | Elf32_Half e_phentsize; /* PHDR table entry size in bytes. */ |
---|
2020 | Elf32_Half e_phnum; /* Number of PHDR entries. */ |
---|
2021 | Elf32_Half e_shentsize; /* SHDR table entry size in bytes. */ |
---|
2022 | Elf32_Half e_shnum; /* Number of SHDR entries. */ |
---|
2023 | Elf32_Half e_shstrndx; /* Index of section name string table. */ |
---|
2024 | } Elf32_Ehdr; |
---|
2025 | |
---|
2026 | |
---|
2027 | /* 64 bit EHDR. */ |
---|
2028 | typedef struct { |
---|
2029 | unsigned char e_ident[EI_NIDENT]; /* ELF identification. */ |
---|
2030 | Elf64_Half e_type; /* Object file type (ET_*). */ |
---|
2031 | Elf64_Half e_machine; /* Machine type (EM_*). */ |
---|
2032 | Elf64_Word e_version; /* File format version (EV_*). */ |
---|
2033 | Elf64_Addr e_entry; /* Start address. */ |
---|
2034 | Elf64_Off e_phoff; /* File offset to the PHDR table. */ |
---|
2035 | Elf64_Off e_shoff; /* File offset to the SHDRheader. */ |
---|
2036 | Elf64_Word e_flags; /* Flags (EF_*). */ |
---|
2037 | Elf64_Half e_ehsize; /* Elf header size in bytes. */ |
---|
2038 | Elf64_Half e_phentsize; /* PHDR table entry size in bytes. */ |
---|
2039 | Elf64_Half e_phnum; /* Number of PHDR entries. */ |
---|
2040 | Elf64_Half e_shentsize; /* SHDR table entry size in bytes. */ |
---|
2041 | Elf64_Half e_shnum; /* Number of SHDR entries. */ |
---|
2042 | Elf64_Half e_shstrndx; /* Index of section name string table. */ |
---|
2043 | } Elf64_Ehdr; |
---|
2044 | |
---|
2045 | |
---|
2046 | /* |
---|
2047 | * Shared object information. |
---|
2048 | */ |
---|
2049 | |
---|
2050 | /* 32-bit entry. */ |
---|
2051 | typedef struct { |
---|
2052 | Elf32_Word l_name; /* The name of a shared object. */ |
---|
2053 | Elf32_Word l_time_stamp; /* 32-bit timestamp. */ |
---|
2054 | Elf32_Word l_checksum; /* Checksum of visible symbols, sizes. */ |
---|
2055 | Elf32_Word l_version; /* Interface version string index. */ |
---|
2056 | Elf32_Word l_flags; /* Flags (LL_*). */ |
---|
2057 | } Elf32_Lib; |
---|
2058 | |
---|
2059 | /* 64-bit entry. */ |
---|
2060 | typedef struct { |
---|
2061 | Elf64_Word l_name; |
---|
2062 | Elf64_Word l_time_stamp; |
---|
2063 | Elf64_Word l_checksum; |
---|
2064 | Elf64_Word l_version; |
---|
2065 | Elf64_Word l_flags; |
---|
2066 | } Elf64_Lib; |
---|
2067 | |
---|
2068 | #define _ELF_DEFINE_LL_FLAGS() \ |
---|
2069 | _ELF_DEFINE_LL(LL_NONE, 0, \ |
---|
2070 | "no flags") \ |
---|
2071 | _ELF_DEFINE_LL(LL_EXACT_MATCH, 0x1, \ |
---|
2072 | "require an exact match") \ |
---|
2073 | _ELF_DEFINE_LL(LL_IGNORE_INT_VER, 0x2, \ |
---|
2074 | "ignore version incompatibilities") \ |
---|
2075 | _ELF_DEFINE_LL(LL_REQUIRE_MINOR, 0x4, \ |
---|
2076 | "") \ |
---|
2077 | _ELF_DEFINE_LL(LL_EXPORTS, 0x8, \ |
---|
2078 | "") \ |
---|
2079 | _ELF_DEFINE_LL(LL_DELAY_LOAD, 0x10, \ |
---|
2080 | "") \ |
---|
2081 | _ELF_DEFINE_LL(LL_DELTA, 0x20, \ |
---|
2082 | "") |
---|
2083 | |
---|
2084 | #undef _ELF_DEFINE_LL |
---|
2085 | #define _ELF_DEFINE_LL(N, V, DESCR) N = V , |
---|
2086 | enum { |
---|
2087 | _ELF_DEFINE_LL_FLAGS() |
---|
2088 | LL__LAST__ |
---|
2089 | }; |
---|
2090 | |
---|
2091 | /* |
---|
2092 | * Note tags |
---|
2093 | */ |
---|
2094 | |
---|
2095 | #define _ELF_DEFINE_NOTE_ENTRY_TYPES() \ |
---|
2096 | _ELF_DEFINE_NT(NT_ABI_TAG, 1, "Tag indicating the ABI") \ |
---|
2097 | _ELF_DEFINE_NT(NT_GNU_HWCAP, 2, "Hardware capabilities") \ |
---|
2098 | _ELF_DEFINE_NT(NT_GNU_BUILD_ID, 3, "Build id, set by ld(1)") \ |
---|
2099 | _ELF_DEFINE_NT(NT_GNU_GOLD_VERSION, 4, \ |
---|
2100 | "Version number of the GNU gold linker") \ |
---|
2101 | _ELF_DEFINE_NT(NT_PRSTATUS, 1, "Process status") \ |
---|
2102 | _ELF_DEFINE_NT(NT_FPREGSET, 2, "Floating point information") \ |
---|
2103 | _ELF_DEFINE_NT(NT_PRPSINFO, 3, "Process information") \ |
---|
2104 | _ELF_DEFINE_NT(NT_AUXV, 6, "Auxiliary vector") \ |
---|
2105 | _ELF_DEFINE_NT(NT_PRXFPREG, 0x46E62B7FUL, \ |
---|
2106 | "Linux user_xfpregs structure") \ |
---|
2107 | _ELF_DEFINE_NT(NT_PSTATUS, 10, "Linux process status") \ |
---|
2108 | _ELF_DEFINE_NT(NT_FPREGS, 12, "Linux floating point regset") \ |
---|
2109 | _ELF_DEFINE_NT(NT_PSINFO, 13, "Linux process information") \ |
---|
2110 | _ELF_DEFINE_NT(NT_LWPSTATUS, 16, "Linux lwpstatus_t type") \ |
---|
2111 | _ELF_DEFINE_NT(NT_LWPSINFO, 17, "Linux lwpinfo_t type") |
---|
2112 | |
---|
2113 | #undef _ELF_DEFINE_NT |
---|
2114 | #define _ELF_DEFINE_NT(N, V, DESCR) N = V , |
---|
2115 | enum { |
---|
2116 | _ELF_DEFINE_NOTE_ENTRY_TYPES() |
---|
2117 | NT__LAST__ |
---|
2118 | }; |
---|
2119 | |
---|
2120 | /* Aliases for the ABI tag. */ |
---|
2121 | #define NT_FREEBSD_ABI_TAG NT_ABI_TAG |
---|
2122 | #define NT_GNU_ABI_TAG NT_ABI_TAG |
---|
2123 | #define NT_NETBSD_IDENT NT_ABI_TAG |
---|
2124 | #define NT_OPENBSD_IDENT NT_ABI_TAG |
---|
2125 | |
---|
2126 | /* |
---|
2127 | * Note descriptors. |
---|
2128 | */ |
---|
2129 | |
---|
2130 | typedef struct { |
---|
2131 | uint32_t n_namesz; /* Length of note's name. */ |
---|
2132 | uint32_t n_descsz; /* Length of note's value. */ |
---|
2133 | uint32_t n_type; /* Type of note. */ |
---|
2134 | } Elf_Note; |
---|
2135 | |
---|
2136 | typedef Elf_Note Elf32_Nhdr; /* 32-bit note header. */ |
---|
2137 | typedef Elf_Note Elf64_Nhdr; /* 64-bit note header. */ |
---|
2138 | |
---|
2139 | /* |
---|
2140 | * MIPS ELF options descriptor header. |
---|
2141 | */ |
---|
2142 | |
---|
2143 | typedef struct { |
---|
2144 | Elf64_Byte kind; /* Type of options. */ |
---|
2145 | Elf64_Byte size; /* Size of option descriptor. */ |
---|
2146 | Elf64_Half section; /* Index of section affected. */ |
---|
2147 | Elf64_Word info; /* Kind-specific information. */ |
---|
2148 | } Elf_Options; |
---|
2149 | |
---|
2150 | /* |
---|
2151 | * Option kinds. |
---|
2152 | */ |
---|
2153 | |
---|
2154 | #define _ELF_DEFINE_OPTION_KINDS() \ |
---|
2155 | _ELF_DEFINE_ODK(ODK_NULL, 0, "undefined") \ |
---|
2156 | _ELF_DEFINE_ODK(ODK_REGINFO, 1, "register usage info") \ |
---|
2157 | _ELF_DEFINE_ODK(ODK_EXCEPTIONS, 2, "exception processing info") \ |
---|
2158 | _ELF_DEFINE_ODK(ODK_PAD, 3, "section padding") \ |
---|
2159 | _ELF_DEFINE_ODK(ODK_HWPATCH, 4, "hardware patch applied") \ |
---|
2160 | _ELF_DEFINE_ODK(ODK_FILL, 5, "fill value used by linker") \ |
---|
2161 | _ELF_DEFINE_ODK(ODK_TAGS, 6, "reserved space for tools") \ |
---|
2162 | _ELF_DEFINE_ODK(ODK_HWAND, 7, "hardware AND patch applied") \ |
---|
2163 | _ELF_DEFINE_ODK(ODK_HWOR, 8, "hardware OR patch applied") \ |
---|
2164 | _ELF_DEFINE_ODK(ODK_GP_GROUP, 9, \ |
---|
2165 | "GP group to use for text/data sections") \ |
---|
2166 | _ELF_DEFINE_ODK(ODK_IDENT, 10, "ID information") \ |
---|
2167 | _ELF_DEFINE_ODK(ODK_PAGESIZE, 11, "page size infomation") |
---|
2168 | |
---|
2169 | #undef _ELF_DEFINE_ODK |
---|
2170 | #define _ELF_DEFINE_ODK(N, V, DESCR) N = V , |
---|
2171 | enum { |
---|
2172 | _ELF_DEFINE_OPTION_KINDS() |
---|
2173 | ODK__LAST__ |
---|
2174 | }; |
---|
2175 | |
---|
2176 | /* |
---|
2177 | * ODK_EXCEPTIONS info field masks. |
---|
2178 | */ |
---|
2179 | |
---|
2180 | #define _ELF_DEFINE_ODK_EXCEPTIONS_MASK() \ |
---|
2181 | _ELF_DEFINE_OEX(OEX_FPU_MIN, 0x0000001FUL, \ |
---|
2182 | "minimum FPU exception which must be enabled") \ |
---|
2183 | _ELF_DEFINE_OEX(OEX_FPU_MAX, 0x00001F00UL, \ |
---|
2184 | "maximum FPU exception which can be enabled") \ |
---|
2185 | _ELF_DEFINE_OEX(OEX_PAGE0, 0x00010000UL, \ |
---|
2186 | "page zero must be mapped") \ |
---|
2187 | _ELF_DEFINE_OEX(OEX_SMM, 0x00020000UL, \ |
---|
2188 | "run in sequential memory mode") \ |
---|
2189 | _ELF_DEFINE_OEX(OEX_PRECISEFP, 0x00040000UL, \ |
---|
2190 | "run in precise FP exception mode") \ |
---|
2191 | _ELF_DEFINE_OEX(OEX_DISMISS, 0x00080000UL, \ |
---|
2192 | "dismiss invalid address traps") |
---|
2193 | |
---|
2194 | #undef _ELF_DEFINE_OEX |
---|
2195 | #define _ELF_DEFINE_OEX(N, V, DESCR) N = V , |
---|
2196 | enum { |
---|
2197 | _ELF_DEFINE_ODK_EXCEPTIONS_MASK() |
---|
2198 | OEX__LAST__ |
---|
2199 | }; |
---|
2200 | |
---|
2201 | /* |
---|
2202 | * ODK_PAD info field masks. |
---|
2203 | */ |
---|
2204 | |
---|
2205 | #define _ELF_DEFINE_ODK_PAD_MASK() \ |
---|
2206 | _ELF_DEFINE_OPAD(OPAD_PREFIX, 0x0001) \ |
---|
2207 | _ELF_DEFINE_OPAD(OPAD_POSTFIX, 0x0002) \ |
---|
2208 | _ELF_DEFINE_OPAD(OPAD_SYMBOL, 0x0004) |
---|
2209 | |
---|
2210 | #undef _ELF_DEFINE_OPAD |
---|
2211 | #define _ELF_DEFINE_OPAD(N, V) N = V , |
---|
2212 | enum { |
---|
2213 | _ELF_DEFINE_ODK_PAD_MASK() |
---|
2214 | OPAD__LAST__ |
---|
2215 | }; |
---|
2216 | |
---|
2217 | /* |
---|
2218 | * ODK_HWPATCH info field masks. |
---|
2219 | */ |
---|
2220 | |
---|
2221 | #define _ELF_DEFINE_ODK_HWPATCH_MASK() \ |
---|
2222 | _ELF_DEFINE_OHW(OHW_R4KEOP, 0x00000001UL, \ |
---|
2223 | "patch for R4000 branch at end-of-page bug") \ |
---|
2224 | _ELF_DEFINE_OHW(OHW_R8KPFETCH, 0x00000002UL, \ |
---|
2225 | "R8000 prefetch bug may occur") \ |
---|
2226 | _ELF_DEFINE_OHW(OHW_R5KEOP, 0x00000004UL, \ |
---|
2227 | "patch for R5000 branch at end-of-page bug") \ |
---|
2228 | _ELF_DEFINE_OHW(OHW_R5KCVTL, 0x00000008UL, \ |
---|
2229 | "R5000 cvt.[ds].l bug: clean == 1") \ |
---|
2230 | _ELF_DEFINE_OHW(OHW_R10KLDL, 0x00000010UL, \ |
---|
2231 | "needd patch for R10000 misaligned load") |
---|
2232 | |
---|
2233 | #undef _ELF_DEFINE_OHW |
---|
2234 | #define _ELF_DEFINE_OHW(N, V, DESCR) N = V , |
---|
2235 | enum { |
---|
2236 | _ELF_DEFINE_ODK_HWPATCH_MASK() |
---|
2237 | OHW__LAST__ |
---|
2238 | }; |
---|
2239 | |
---|
2240 | /* |
---|
2241 | * ODK_HWAND/ODK_HWOR info field and hwp_flags[12] masks. |
---|
2242 | */ |
---|
2243 | |
---|
2244 | #define _ELF_DEFINE_ODK_HWP_MASK() \ |
---|
2245 | _ELF_DEFINE_HWP(OHWA0_R4KEOP_CHECKED, 0x00000001UL, \ |
---|
2246 | "object checked for R4000 end-of-page bug") \ |
---|
2247 | _ELF_DEFINE_HWP(OHWA0_R4KEOP_CLEAN, 0x00000002UL, \ |
---|
2248 | "object verified clean for R4000 end-of-page bug") \ |
---|
2249 | _ELF_DEFINE_HWP(OHWO0_FIXADE, 0x00000001UL, \ |
---|
2250 | "object requires call to fixade") |
---|
2251 | |
---|
2252 | #undef _ELF_DEFINE_HWP |
---|
2253 | #define _ELF_DEFINE_HWP(N, V, DESCR) N = V , |
---|
2254 | enum { |
---|
2255 | _ELF_DEFINE_ODK_HWP_MASK() |
---|
2256 | OHWX0__LAST__ |
---|
2257 | }; |
---|
2258 | |
---|
2259 | /* |
---|
2260 | * ODK_IDENT/ODK_GP_GROUP info field masks. |
---|
2261 | */ |
---|
2262 | |
---|
2263 | #define _ELF_DEFINE_ODK_GP_MASK() \ |
---|
2264 | _ELF_DEFINE_OGP(OGP_GROUP, 0x0000FFFFUL, "GP group number") \ |
---|
2265 | _ELF_DEFINE_OGP(OGP_SELF, 0x00010000UL, \ |
---|
2266 | "GP group is self-contained") |
---|
2267 | |
---|
2268 | #undef _ELF_DEFINE_OGP |
---|
2269 | #define _ELF_DEFINE_OGP(N, V, DESCR) N = V , |
---|
2270 | enum { |
---|
2271 | _ELF_DEFINE_ODK_GP_MASK() |
---|
2272 | OGP__LAST__ |
---|
2273 | }; |
---|
2274 | |
---|
2275 | /* |
---|
2276 | * MIPS ELF register info descriptor. |
---|
2277 | */ |
---|
2278 | |
---|
2279 | /* 32 bit RegInfo entry. */ |
---|
2280 | typedef struct { |
---|
2281 | Elf32_Word ri_gprmask; /* Mask of general register used. */ |
---|
2282 | Elf32_Word ri_cprmask[4]; /* Mask of coprocessor register used. */ |
---|
2283 | Elf32_Addr ri_gp_value; /* GP register value. */ |
---|
2284 | } Elf32_RegInfo; |
---|
2285 | |
---|
2286 | /* 64 bit RegInfo entry. */ |
---|
2287 | typedef struct { |
---|
2288 | Elf64_Word ri_gprmask; /* Mask of general register used. */ |
---|
2289 | Elf64_Word ri_pad; /* Padding. */ |
---|
2290 | Elf64_Word ri_cprmask[4]; /* Mask of coprocessor register used. */ |
---|
2291 | Elf64_Addr ri_gp_value; /* GP register value. */ |
---|
2292 | } Elf64_RegInfo; |
---|
2293 | |
---|
2294 | /* |
---|
2295 | * Program Header Table (PHDR) entries. |
---|
2296 | */ |
---|
2297 | |
---|
2298 | /* 32 bit PHDR entry. */ |
---|
2299 | typedef struct { |
---|
2300 | Elf32_Word p_type; /* Type of segment. */ |
---|
2301 | Elf32_Off p_offset; /* File offset to segment. */ |
---|
2302 | Elf32_Addr p_vaddr; /* Virtual address in memory. */ |
---|
2303 | Elf32_Addr p_paddr; /* Physical address (if relevant). */ |
---|
2304 | Elf32_Word p_filesz; /* Size of segment in file. */ |
---|
2305 | Elf32_Word p_memsz; /* Size of segment in memory. */ |
---|
2306 | Elf32_Word p_flags; /* Segment flags. */ |
---|
2307 | Elf32_Word p_align; /* Alignment constraints. */ |
---|
2308 | } Elf32_Phdr; |
---|
2309 | |
---|
2310 | /* 64 bit PHDR entry. */ |
---|
2311 | typedef struct { |
---|
2312 | Elf64_Word p_type; /* Type of segment. */ |
---|
2313 | Elf64_Word p_flags; /* File offset to segment. */ |
---|
2314 | Elf64_Off p_offset; /* Virtual address in memory. */ |
---|
2315 | Elf64_Addr p_vaddr; /* Physical address (if relevant). */ |
---|
2316 | Elf64_Addr p_paddr; /* Size of segment in file. */ |
---|
2317 | Elf64_Xword p_filesz; /* Size of segment in memory. */ |
---|
2318 | Elf64_Xword p_memsz; /* Segment flags. */ |
---|
2319 | Elf64_Xword p_align; /* Alignment constraints. */ |
---|
2320 | } Elf64_Phdr; |
---|
2321 | |
---|
2322 | |
---|
2323 | /* |
---|
2324 | * Move entries, for describing data in COMMON blocks in a compact |
---|
2325 | * manner. |
---|
2326 | */ |
---|
2327 | |
---|
2328 | /* 32-bit move entry. */ |
---|
2329 | typedef struct { |
---|
2330 | Elf32_Lword m_value; /* Initialization value. */ |
---|
2331 | Elf32_Word m_info; /* Encoded size and index. */ |
---|
2332 | Elf32_Word m_poffset; /* Offset relative to symbol. */ |
---|
2333 | Elf32_Half m_repeat; /* Repeat count. */ |
---|
2334 | Elf32_Half m_stride; /* Number of units to skip. */ |
---|
2335 | } Elf32_Move; |
---|
2336 | |
---|
2337 | /* 64-bit move entry. */ |
---|
2338 | typedef struct { |
---|
2339 | Elf64_Lword m_value; /* Initialization value. */ |
---|
2340 | Elf64_Xword m_info; /* Encoded size and index. */ |
---|
2341 | Elf64_Xword m_poffset; /* Offset relative to symbol. */ |
---|
2342 | Elf64_Half m_repeat; /* Repeat count. */ |
---|
2343 | Elf64_Half m_stride; /* Number of units to skip. */ |
---|
2344 | } Elf64_Move; |
---|
2345 | |
---|
2346 | #define ELF32_M_SYM(I) ((I) >> 8) |
---|
2347 | #define ELF32_M_SIZE(I) ((unsigned char) (I)) |
---|
2348 | #define ELF32_M_INFO(M, S) (((M) << 8) + (unsigned char) (S)) |
---|
2349 | |
---|
2350 | #define ELF64_M_SYM(I) ((I) >> 8) |
---|
2351 | #define ELF64_M_SIZE(I) ((unsigned char) (I)) |
---|
2352 | #define ELF64_M_INFO(M, S) (((M) << 8) + (unsigned char) (S)) |
---|
2353 | |
---|
2354 | /* |
---|
2355 | * Section Header Table (SHDR) entries. |
---|
2356 | */ |
---|
2357 | |
---|
2358 | /* 32 bit SHDR */ |
---|
2359 | typedef struct { |
---|
2360 | Elf32_Word sh_name; /* index of section name */ |
---|
2361 | Elf32_Word sh_type; /* section type */ |
---|
2362 | Elf32_Word sh_flags; /* section flags */ |
---|
2363 | Elf32_Addr sh_addr; /* in-memory address of section */ |
---|
2364 | Elf32_Off sh_offset; /* file offset of section */ |
---|
2365 | Elf32_Word sh_size; /* section size in bytes */ |
---|
2366 | Elf32_Word sh_link; /* section header table link */ |
---|
2367 | Elf32_Word sh_info; /* extra information */ |
---|
2368 | Elf32_Word sh_addralign; /* alignment constraint */ |
---|
2369 | Elf32_Word sh_entsize; /* size for fixed-size entries */ |
---|
2370 | } Elf32_Shdr; |
---|
2371 | |
---|
2372 | /* 64 bit SHDR */ |
---|
2373 | typedef struct { |
---|
2374 | Elf64_Word sh_name; /* index of section name */ |
---|
2375 | Elf64_Word sh_type; /* section type */ |
---|
2376 | Elf64_Xword sh_flags; /* section flags */ |
---|
2377 | Elf64_Addr sh_addr; /* in-memory address of section */ |
---|
2378 | Elf64_Off sh_offset; /* file offset of section */ |
---|
2379 | Elf64_Xword sh_size; /* section size in bytes */ |
---|
2380 | Elf64_Word sh_link; /* section header table link */ |
---|
2381 | Elf64_Word sh_info; /* extra information */ |
---|
2382 | Elf64_Xword sh_addralign; /* alignment constraint */ |
---|
2383 | Elf64_Xword sh_entsize; /* size for fixed-size entries */ |
---|
2384 | } Elf64_Shdr; |
---|
2385 | |
---|
2386 | |
---|
2387 | /* |
---|
2388 | * Symbol table entries. |
---|
2389 | */ |
---|
2390 | |
---|
2391 | typedef struct { |
---|
2392 | Elf32_Word st_name; /* index of symbol's name */ |
---|
2393 | Elf32_Addr st_value; /* value for the symbol */ |
---|
2394 | Elf32_Word st_size; /* size of associated data */ |
---|
2395 | unsigned char st_info; /* type and binding attributes */ |
---|
2396 | unsigned char st_other; /* visibility */ |
---|
2397 | Elf32_Half st_shndx; /* index of related section */ |
---|
2398 | } Elf32_Sym; |
---|
2399 | |
---|
2400 | typedef struct { |
---|
2401 | Elf64_Word st_name; /* index of symbol's name */ |
---|
2402 | unsigned char st_info; /* value for the symbol */ |
---|
2403 | unsigned char st_other; /* size of associated data */ |
---|
2404 | Elf64_Half st_shndx; /* type and binding attributes */ |
---|
2405 | Elf64_Addr st_value; /* visibility */ |
---|
2406 | Elf64_Xword st_size; /* index of related section */ |
---|
2407 | } Elf64_Sym; |
---|
2408 | |
---|
2409 | #define ELF32_ST_BIND(I) ((I) >> 4) |
---|
2410 | #define ELF32_ST_TYPE(I) ((I) & 0xFU) |
---|
2411 | #define ELF32_ST_INFO(B,T) (((B) << 4) + ((T) & 0xF)) |
---|
2412 | |
---|
2413 | #define ELF64_ST_BIND(I) ((I) >> 4) |
---|
2414 | #define ELF64_ST_TYPE(I) ((I) & 0xFU) |
---|
2415 | #define ELF64_ST_INFO(B,T) (((B) << 4) + ((T) & 0xF)) |
---|
2416 | |
---|
2417 | #define ELF32_ST_VISIBILITY(O) ((O) & 0x3) |
---|
2418 | #define ELF64_ST_VISIBILITY(O) ((O) & 0x3) |
---|
2419 | |
---|
2420 | /* |
---|
2421 | * Syminfo descriptors, containing additional symbol information. |
---|
2422 | */ |
---|
2423 | |
---|
2424 | /* 32-bit entry. */ |
---|
2425 | typedef struct { |
---|
2426 | Elf32_Half si_boundto; /* Entry index with additional flags. */ |
---|
2427 | Elf32_Half si_flags; /* Flags. */ |
---|
2428 | } Elf32_Syminfo; |
---|
2429 | |
---|
2430 | /* 64-bit entry. */ |
---|
2431 | typedef struct { |
---|
2432 | Elf64_Half si_boundto; /* Entry index with additional flags. */ |
---|
2433 | Elf64_Half si_flags; /* Flags. */ |
---|
2434 | } Elf64_Syminfo; |
---|
2435 | |
---|
2436 | /* |
---|
2437 | * Relocation descriptors. |
---|
2438 | */ |
---|
2439 | |
---|
2440 | typedef struct { |
---|
2441 | Elf32_Addr r_offset; /* location to apply relocation to */ |
---|
2442 | Elf32_Word r_info; /* type+section for relocation */ |
---|
2443 | } Elf32_Rel; |
---|
2444 | |
---|
2445 | typedef struct { |
---|
2446 | Elf32_Addr r_offset; /* location to apply relocation to */ |
---|
2447 | Elf32_Word r_info; /* type+section for relocation */ |
---|
2448 | Elf32_Sword r_addend; /* constant addend */ |
---|
2449 | } Elf32_Rela; |
---|
2450 | |
---|
2451 | typedef struct { |
---|
2452 | Elf64_Addr r_offset; /* location to apply relocation to */ |
---|
2453 | Elf64_Xword r_info; /* type+section for relocation */ |
---|
2454 | } Elf64_Rel; |
---|
2455 | |
---|
2456 | typedef struct { |
---|
2457 | Elf64_Addr r_offset; /* location to apply relocation to */ |
---|
2458 | Elf64_Xword r_info; /* type+section for relocation */ |
---|
2459 | Elf64_Sxword r_addend; /* constant addend */ |
---|
2460 | } Elf64_Rela; |
---|
2461 | |
---|
2462 | |
---|
2463 | #define ELF32_R_SYM(I) ((I) >> 8) |
---|
2464 | #define ELF32_R_TYPE(I) ((unsigned char) (I)) |
---|
2465 | #define ELF32_R_INFO(S,T) (((S) << 8) + (unsigned char) (T)) |
---|
2466 | |
---|
2467 | #define ELF64_R_SYM(I) ((I) >> 32) |
---|
2468 | #define ELF64_R_TYPE(I) ((I) & 0xFFFFFFFFUL) |
---|
2469 | #define ELF64_R_INFO(S,T) (((S) << 32) + ((T) & 0xFFFFFFFFUL)) |
---|
2470 | |
---|
2471 | /* |
---|
2472 | * Symbol versioning structures. |
---|
2473 | */ |
---|
2474 | |
---|
2475 | /* 32-bit structures. */ |
---|
2476 | typedef struct |
---|
2477 | { |
---|
2478 | Elf32_Word vda_name; /* Index to name. */ |
---|
2479 | Elf32_Word vda_next; /* Offset to next entry. */ |
---|
2480 | } Elf32_Verdaux; |
---|
2481 | |
---|
2482 | typedef struct |
---|
2483 | { |
---|
2484 | Elf32_Word vna_hash; /* Hash value of dependency name. */ |
---|
2485 | Elf32_Half vna_flags; /* Flags. */ |
---|
2486 | Elf32_Half vna_other; /* Unused. */ |
---|
2487 | Elf32_Word vna_name; /* Offset to dependency name. */ |
---|
2488 | Elf32_Word vna_next; /* Offset to next vernaux entry. */ |
---|
2489 | } Elf32_Vernaux; |
---|
2490 | |
---|
2491 | typedef struct |
---|
2492 | { |
---|
2493 | Elf32_Half vd_version; /* Version information. */ |
---|
2494 | Elf32_Half vd_flags; /* Flags. */ |
---|
2495 | Elf32_Half vd_ndx; /* Index into the versym section. */ |
---|
2496 | Elf32_Half vd_cnt; /* Number of aux entries. */ |
---|
2497 | Elf32_Word vd_hash; /* Hash value of name. */ |
---|
2498 | Elf32_Word vd_aux; /* Offset to aux entries. */ |
---|
2499 | Elf32_Word vd_next; /* Offset to next version definition. */ |
---|
2500 | } Elf32_Verdef; |
---|
2501 | |
---|
2502 | typedef struct |
---|
2503 | { |
---|
2504 | Elf32_Half vn_version; /* Version number. */ |
---|
2505 | Elf32_Half vn_cnt; /* Number of aux entries. */ |
---|
2506 | Elf32_Word vn_file; /* Offset of associated file name. */ |
---|
2507 | Elf32_Word vn_aux; /* Offset of vernaux array. */ |
---|
2508 | Elf32_Word vn_next; /* Offset of next verneed entry. */ |
---|
2509 | } Elf32_Verneed; |
---|
2510 | |
---|
2511 | typedef Elf32_Half Elf32_Versym; |
---|
2512 | |
---|
2513 | /* 64-bit structures. */ |
---|
2514 | |
---|
2515 | typedef struct { |
---|
2516 | Elf64_Word vda_name; /* Index to name. */ |
---|
2517 | Elf64_Word vda_next; /* Offset to next entry. */ |
---|
2518 | } Elf64_Verdaux; |
---|
2519 | |
---|
2520 | typedef struct { |
---|
2521 | Elf64_Word vna_hash; /* Hash value of dependency name. */ |
---|
2522 | Elf64_Half vna_flags; /* Flags. */ |
---|
2523 | Elf64_Half vna_other; /* Unused. */ |
---|
2524 | Elf64_Word vna_name; /* Offset to dependency name. */ |
---|
2525 | Elf64_Word vna_next; /* Offset to next vernaux entry. */ |
---|
2526 | } Elf64_Vernaux; |
---|
2527 | |
---|
2528 | typedef struct { |
---|
2529 | Elf64_Half vd_version; /* Version information. */ |
---|
2530 | Elf64_Half vd_flags; /* Flags. */ |
---|
2531 | Elf64_Half vd_ndx; /* Index into the versym section. */ |
---|
2532 | Elf64_Half vd_cnt; /* Number of aux entries. */ |
---|
2533 | Elf64_Word vd_hash; /* Hash value of name. */ |
---|
2534 | Elf64_Word vd_aux; /* Offset to aux entries. */ |
---|
2535 | Elf64_Word vd_next; /* Offset to next version definition. */ |
---|
2536 | } Elf64_Verdef; |
---|
2537 | |
---|
2538 | typedef struct { |
---|
2539 | Elf64_Half vn_version; /* Version number. */ |
---|
2540 | Elf64_Half vn_cnt; /* Number of aux entries. */ |
---|
2541 | Elf64_Word vn_file; /* Offset of associated file name. */ |
---|
2542 | Elf64_Word vn_aux; /* Offset of vernaux array. */ |
---|
2543 | Elf64_Word vn_next; /* Offset of next verneed entry. */ |
---|
2544 | } Elf64_Verneed; |
---|
2545 | |
---|
2546 | typedef Elf64_Half Elf64_Versym; |
---|
2547 | |
---|
2548 | |
---|
2549 | /* |
---|
2550 | * The header for GNU-style hash sections. |
---|
2551 | */ |
---|
2552 | |
---|
2553 | typedef struct { |
---|
2554 | uint32_t gh_nbuckets; /* Number of hash buckets. */ |
---|
2555 | uint32_t gh_symndx; /* First visible symbol in .dynsym. */ |
---|
2556 | uint32_t gh_maskwords; /* #maskwords used in bloom filter. */ |
---|
2557 | uint32_t gh_shift2; /* Bloom filter shift count. */ |
---|
2558 | } Elf_GNU_Hash_Header; |
---|
2559 | |
---|
2560 | #endif /* _ELFDEFINITIONS_H_ */ |
---|