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