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