source: rtems-tools/rtemstoolkit/elftoolchain/common/elfdefinitions.h @ 6f48c91

5
Last change on this file since 6f48c91 was 6f48c91, checked in by Chris Johns <chrisj@…>, on 04/30/18 at 03:39:09

Revert "rtemstoolkit: Update elftoolchain to the latest code."

This reverts commit 0c5db2dd13b8270bb80c497d5f53ae2471f8a819.

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