xref: /freebsd/contrib/elftoolchain/common/elfdefinitions.h (revision 537c166b767879398338370701fa60f67acec112)
12de3b87aSKai Wang /*-
22de3b87aSKai Wang  * Copyright (c) 2010 Joseph Koshy
32de3b87aSKai Wang  * All rights reserved.
42de3b87aSKai Wang  *
52de3b87aSKai Wang  * Redistribution and use in source and binary forms, with or without
62de3b87aSKai Wang  * modification, are permitted provided that the following conditions
72de3b87aSKai Wang  * are met:
82de3b87aSKai Wang  * 1. Redistributions of source code must retain the above copyright
92de3b87aSKai Wang  *    notice, this list of conditions and the following disclaimer.
102de3b87aSKai Wang  * 2. Redistributions in binary form must reproduce the above copyright
112de3b87aSKai Wang  *    notice, this list of conditions and the following disclaimer in the
122de3b87aSKai Wang  *    documentation and/or other materials provided with the distribution.
132de3b87aSKai Wang  *
142de3b87aSKai Wang  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
152de3b87aSKai Wang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
162de3b87aSKai Wang  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
172de3b87aSKai Wang  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
182de3b87aSKai Wang  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
192de3b87aSKai Wang  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
202de3b87aSKai Wang  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
212de3b87aSKai Wang  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
222de3b87aSKai Wang  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
232de3b87aSKai Wang  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
242de3b87aSKai Wang  * SUCH DAMAGE.
252de3b87aSKai Wang  *
26d003e0d7SEd Maste  * $Id: elfdefinitions.h 3769 2019-06-29 15:15:02Z emaste $
272de3b87aSKai Wang  */
282de3b87aSKai Wang 
292de3b87aSKai Wang /*
302de3b87aSKai Wang  * These definitions are based on:
312de3b87aSKai Wang  * - The public specification of the ELF format as defined in the
322de3b87aSKai Wang  *   October 2009 draft of System V ABI.
332de3b87aSKai Wang  *   See: http://www.sco.com/developers/gabi/latest/ch4.intro.html
342de3b87aSKai Wang  * - The May 1998 (version 1.5) draft of "The ELF-64 object format".
352de3b87aSKai Wang  * - Processor-specific ELF ABI definitions for sparc, i386, amd64, mips,
36b0084180SMitchell Horne  *   ia64, powerpc, and RISC-V processors.
372de3b87aSKai Wang  * - The "Linkers and Libraries Guide", from Sun Microsystems.
382de3b87aSKai Wang  */
392de3b87aSKai Wang 
402de3b87aSKai Wang #ifndef _ELFDEFINITIONS_H_
412de3b87aSKai Wang #define _ELFDEFINITIONS_H_
422de3b87aSKai Wang 
432de3b87aSKai Wang #include <stdint.h>
442de3b87aSKai Wang 
452de3b87aSKai Wang /*
462de3b87aSKai Wang  * Types of capabilities.
472de3b87aSKai Wang  */
482de3b87aSKai Wang 
492de3b87aSKai Wang #define	_ELF_DEFINE_CAPABILITIES()				\
502de3b87aSKai Wang _ELF_DEFINE_CA(CA_SUNW_NULL,	0,	"ignored")		\
512de3b87aSKai Wang _ELF_DEFINE_CA(CA_SUNW_HW_1,	1,	"hardware capability")	\
522de3b87aSKai Wang _ELF_DEFINE_CA(CA_SUNW_SW_1,	2,	"software capability")
532de3b87aSKai Wang 
542de3b87aSKai Wang #undef	_ELF_DEFINE_CA
552de3b87aSKai Wang #define	_ELF_DEFINE_CA(N, V, DESCR)	N = V ,
562de3b87aSKai Wang enum {
572de3b87aSKai Wang 	_ELF_DEFINE_CAPABILITIES()
582de3b87aSKai Wang 	CA__LAST__
592de3b87aSKai Wang };
602de3b87aSKai Wang 
612de3b87aSKai Wang /*
622de3b87aSKai Wang  * Flags used with dynamic linking entries.
632de3b87aSKai Wang  */
642de3b87aSKai Wang 
652de3b87aSKai Wang #define	_ELF_DEFINE_DYN_FLAGS()					\
662de3b87aSKai Wang _ELF_DEFINE_DF(DF_ORIGIN,           0x1,			\
672de3b87aSKai Wang 	"object being loaded may refer to $ORIGIN")		\
682de3b87aSKai Wang _ELF_DEFINE_DF(DF_SYMBOLIC,         0x2,			\
692de3b87aSKai Wang 	"search library for references before executable")	\
702de3b87aSKai Wang _ELF_DEFINE_DF(DF_TEXTREL,          0x4,			\
712de3b87aSKai Wang 	"relocation entries may modify text segment")		\
722de3b87aSKai Wang _ELF_DEFINE_DF(DF_BIND_NOW,         0x8,			\
732de3b87aSKai Wang 	"process relocation entries at load time")		\
742de3b87aSKai Wang _ELF_DEFINE_DF(DF_STATIC_TLS,       0x10,			\
75d003e0d7SEd Maste 	"uses static thread-local storage")			\
76d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_BIND_NOW,       0x1,			\
77d003e0d7SEd Maste 	"process relocation entries at load time")		\
78d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_GLOBAL,         0x2,			\
79d003e0d7SEd Maste 	"unused")						\
80d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_GROUP,          0x4,			\
81d003e0d7SEd Maste 	"object is a member of a group")			\
82d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_NODELETE,       0x8,			\
83d003e0d7SEd Maste 	"object cannot be deleted from a process")		\
84d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_LOADFLTR,       0x10,			\
85d003e0d7SEd Maste 	"immediate load filtees")				\
86d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_INITFIRST,      0x20,			\
87d003e0d7SEd Maste 	"initialize object first")				\
88d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_NOOPEN,         0x40,			\
89d003e0d7SEd Maste 	"disallow dlopen()")					\
90d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_ORIGIN,         0x80,			\
91d003e0d7SEd Maste 	"object being loaded may refer to $ORIGIN")		\
92d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_DIRECT,         0x100,			\
93d003e0d7SEd Maste 	"direct bindings enabled")				\
94d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_INTERPOSE,      0x400,			\
95d003e0d7SEd Maste 	"object is interposer")					\
96d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_NODEFLIB,       0x800,			\
97d003e0d7SEd Maste 	"ignore default library search path")			\
98d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_NODUMP,         0x1000,			\
99d003e0d7SEd Maste 	"disallow dldump()")					\
100d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_CONFALT,        0x2000,			\
101d003e0d7SEd Maste 	"object is a configuration alternative")		\
102d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_ENDFILTEE,      0x4000,			\
103d003e0d7SEd Maste 	"filtee terminates filter search")			\
104d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_DISPRELDNE,     0x8000,			\
105d003e0d7SEd Maste 	"displacement relocation done")				\
106d003e0d7SEd Maste _ELF_DEFINE_DF(DF_1_DISPRELPND,     0x10000,			\
107d003e0d7SEd Maste 	"displacement relocation pending")
1082de3b87aSKai Wang #undef	_ELF_DEFINE_DF
1092de3b87aSKai Wang #define	_ELF_DEFINE_DF(N, V, DESCR)	N = V ,
1102de3b87aSKai Wang enum {
1112de3b87aSKai Wang 	_ELF_DEFINE_DYN_FLAGS()
1122de3b87aSKai Wang 	DF__LAST__
1132de3b87aSKai Wang };
1142de3b87aSKai Wang 
1152de3b87aSKai Wang 
1162de3b87aSKai Wang /*
1172de3b87aSKai Wang  * Dynamic linking entry types.
1182de3b87aSKai Wang  */
1192de3b87aSKai Wang 
1202de3b87aSKai Wang #define	_ELF_DEFINE_DYN_TYPES()						\
1212de3b87aSKai Wang _ELF_DEFINE_DT(DT_NULL,             0, "end of array")			\
1222de3b87aSKai Wang _ELF_DEFINE_DT(DT_NEEDED,           1, "names a needed library")	\
1232de3b87aSKai Wang _ELF_DEFINE_DT(DT_PLTRELSZ,         2,					\
1242de3b87aSKai Wang 	"size in bytes of associated relocation entries")		\
1252de3b87aSKai Wang _ELF_DEFINE_DT(DT_PLTGOT,           3,					\
1262de3b87aSKai Wang 	"address associated with the procedure linkage table")		\
1272de3b87aSKai Wang _ELF_DEFINE_DT(DT_HASH,             4,					\
1282de3b87aSKai Wang 	"address of the symbol hash table")				\
1292de3b87aSKai Wang _ELF_DEFINE_DT(DT_STRTAB,           5,					\
1302de3b87aSKai Wang 	"address of the string table")					\
1312de3b87aSKai Wang _ELF_DEFINE_DT(DT_SYMTAB,           6,					\
1322de3b87aSKai Wang 	"address of the symbol table")					\
1332de3b87aSKai Wang _ELF_DEFINE_DT(DT_RELA,             7,					\
1342de3b87aSKai Wang 	"address of the relocation table")				\
1352de3b87aSKai Wang _ELF_DEFINE_DT(DT_RELASZ,           8, "size of the DT_RELA table")	\
1362de3b87aSKai Wang _ELF_DEFINE_DT(DT_RELAENT,          9, "size of each DT_RELA entry")	\
1372de3b87aSKai Wang _ELF_DEFINE_DT(DT_STRSZ,            10, "size of the string table")	\
1382de3b87aSKai Wang _ELF_DEFINE_DT(DT_SYMENT,           11,					\
1392de3b87aSKai Wang 	"size of a symbol table entry")					\
1402de3b87aSKai Wang _ELF_DEFINE_DT(DT_INIT,             12,					\
1412de3b87aSKai Wang 	"address of the initialization function")			\
1422de3b87aSKai Wang _ELF_DEFINE_DT(DT_FINI,             13,					\
1432de3b87aSKai Wang 	"address of the finalization function")				\
1442de3b87aSKai Wang _ELF_DEFINE_DT(DT_SONAME,           14, "names the shared object")	\
1452de3b87aSKai Wang _ELF_DEFINE_DT(DT_RPATH,            15,					\
1462de3b87aSKai Wang 	"runtime library search path")					\
1472de3b87aSKai Wang _ELF_DEFINE_DT(DT_SYMBOLIC,         16,					\
1482de3b87aSKai Wang 	"alter symbol resolution algorithm")				\
1492de3b87aSKai Wang _ELF_DEFINE_DT(DT_REL,              17,					\
1502de3b87aSKai Wang 	"address of the DT_REL table")					\
1512de3b87aSKai Wang _ELF_DEFINE_DT(DT_RELSZ,            18, "size of the DT_REL table")	\
1522de3b87aSKai Wang _ELF_DEFINE_DT(DT_RELENT,           19, "size of each DT_REL entry")	\
1532de3b87aSKai Wang _ELF_DEFINE_DT(DT_PLTREL,           20,					\
1542de3b87aSKai Wang 	"type of relocation entry in the procedure linkage table")	\
1552de3b87aSKai Wang _ELF_DEFINE_DT(DT_DEBUG,            21, "used for debugging")		\
1562de3b87aSKai Wang _ELF_DEFINE_DT(DT_TEXTREL,          22,					\
1572de3b87aSKai Wang 	"text segment may be written to during relocation")		\
1582de3b87aSKai Wang _ELF_DEFINE_DT(DT_JMPREL,           23,					\
1592de3b87aSKai Wang 	"address of relocation entries associated with the procedure linkage table") \
1602de3b87aSKai Wang _ELF_DEFINE_DT(DT_BIND_NOW,         24,					\
1612de3b87aSKai Wang 	"bind symbols at loading time")					\
1622de3b87aSKai Wang _ELF_DEFINE_DT(DT_INIT_ARRAY,       25,					\
1632de3b87aSKai Wang 	"pointers to initialization functions")				\
1642de3b87aSKai Wang _ELF_DEFINE_DT(DT_FINI_ARRAY,       26,					\
1652de3b87aSKai Wang 	"pointers to termination functions")				\
1662de3b87aSKai Wang _ELF_DEFINE_DT(DT_INIT_ARRAYSZ,     27, "size of the DT_INIT_ARRAY")	\
1672de3b87aSKai Wang _ELF_DEFINE_DT(DT_FINI_ARRAYSZ,     28, "size of the DT_FINI_ARRAY")	\
1682de3b87aSKai Wang _ELF_DEFINE_DT(DT_RUNPATH,          29,					\
1692de3b87aSKai Wang 	"index of library search path string")				\
1702de3b87aSKai Wang _ELF_DEFINE_DT(DT_FLAGS,            30,					\
1712de3b87aSKai Wang 	"flags specific to the object being loaded")			\
1722de3b87aSKai Wang _ELF_DEFINE_DT(DT_ENCODING,         32, "standard semantics")		\
1732de3b87aSKai Wang _ELF_DEFINE_DT(DT_PREINIT_ARRAY,    32,					\
1742de3b87aSKai Wang 	"pointers to pre-initialization functions")			\
1752de3b87aSKai Wang _ELF_DEFINE_DT(DT_PREINIT_ARRAYSZ,  33,					\
1762de3b87aSKai Wang 	"size of pre-initialization array")				\
1772de3b87aSKai Wang _ELF_DEFINE_DT(DT_MAXPOSTAGS,	    34,					\
1782de3b87aSKai Wang 	"the number of positive tags")					\
1792de3b87aSKai Wang _ELF_DEFINE_DT(DT_LOOS,             0x6000000DUL,			\
1802de3b87aSKai Wang 	"start of OS-specific types")					\
1812de3b87aSKai Wang _ELF_DEFINE_DT(DT_SUNW_AUXILIARY,   0x6000000DUL,			\
1822de3b87aSKai Wang 	"offset of string naming auxiliary filtees")			\
1832de3b87aSKai Wang _ELF_DEFINE_DT(DT_SUNW_RTLDINF,     0x6000000EUL, "rtld internal use")	\
1842de3b87aSKai Wang _ELF_DEFINE_DT(DT_SUNW_FILTER,      0x6000000FUL,			\
1852de3b87aSKai Wang 	"offset of string naming standard filtees")			\
1862de3b87aSKai Wang _ELF_DEFINE_DT(DT_SUNW_CAP,         0x60000010UL,			\
1872de3b87aSKai Wang 	"address of hardware capabilities section")			\
188bee2765cSEd Maste _ELF_DEFINE_DT(DT_SUNW_ASLR,        0x60000023UL,			\
189bee2765cSEd Maste 	"Address Space Layout Randomization flag")			\
1902de3b87aSKai Wang _ELF_DEFINE_DT(DT_HIOS,             0x6FFFF000UL,			\
1912de3b87aSKai Wang 	"end of OS-specific types")					\
1922de3b87aSKai Wang _ELF_DEFINE_DT(DT_VALRNGLO,         0x6FFFFD00UL,			\
1932de3b87aSKai Wang 	"start of range using the d_val field")				\
1942de3b87aSKai Wang _ELF_DEFINE_DT(DT_GNU_PRELINKED,    0x6FFFFDF5UL,			\
1952de3b87aSKai Wang 	"prelinking timestamp")						\
1962de3b87aSKai Wang _ELF_DEFINE_DT(DT_GNU_CONFLICTSZ,   0x6FFFFDF6UL,			\
1972de3b87aSKai Wang 	"size of conflict section")					\
1982de3b87aSKai Wang _ELF_DEFINE_DT(DT_GNU_LIBLISTSZ,    0x6FFFFDF7UL,			\
1992de3b87aSKai Wang 	"size of library list")						\
2002de3b87aSKai Wang _ELF_DEFINE_DT(DT_CHECKSUM,         0x6FFFFDF8UL,			\
2012de3b87aSKai Wang 	"checksum for the object")					\
2022de3b87aSKai Wang _ELF_DEFINE_DT(DT_PLTPADSZ,         0x6FFFFDF9UL,			\
2032de3b87aSKai Wang 	"size of PLT padding")						\
2042de3b87aSKai Wang _ELF_DEFINE_DT(DT_MOVEENT,          0x6FFFFDFAUL,			\
2052de3b87aSKai Wang 	"size of DT_MOVETAB entries")					\
2062de3b87aSKai Wang _ELF_DEFINE_DT(DT_MOVESZ,           0x6FFFFDFBUL,			\
2072de3b87aSKai Wang 	"total size of the MOVETAB table")				\
20867d97fe7SEd Maste _ELF_DEFINE_DT(DT_FEATURE,          0x6FFFFDFCUL, "feature values")	\
2092de3b87aSKai Wang _ELF_DEFINE_DT(DT_POSFLAG_1,        0x6FFFFDFDUL,			\
2102de3b87aSKai Wang 	"dynamic position flags")					\
2112de3b87aSKai Wang _ELF_DEFINE_DT(DT_SYMINSZ,          0x6FFFFDFEUL,			\
2122de3b87aSKai Wang 	"size of the DT_SYMINFO table")					\
2132de3b87aSKai Wang _ELF_DEFINE_DT(DT_SYMINENT,         0x6FFFFDFFUL,			\
2142de3b87aSKai Wang 	"size of a DT_SYMINFO entry")					\
2152de3b87aSKai Wang _ELF_DEFINE_DT(DT_VALRNGHI,         0x6FFFFDFFUL,			\
2162de3b87aSKai Wang 	"end of range using the d_val field")				\
2172de3b87aSKai Wang _ELF_DEFINE_DT(DT_ADDRRNGLO,        0x6FFFFE00UL,			\
2182de3b87aSKai Wang 	"start of range using the d_ptr field")				\
2192de3b87aSKai Wang _ELF_DEFINE_DT(DT_GNU_HASH,	    0x6FFFFEF5UL,			\
2202de3b87aSKai Wang 	"GNU style hash tables")					\
221b6b6f9ccSEd Maste _ELF_DEFINE_DT(DT_TLSDESC_PLT,	    0x6FFFFEF6UL,			\
222b6b6f9ccSEd Maste 	"location of PLT entry for TLS descriptor resolver calls")	\
223b6b6f9ccSEd Maste _ELF_DEFINE_DT(DT_TLSDESC_GOT,	    0x6FFFFEF7UL,			\
224b6b6f9ccSEd Maste 	"location of GOT entry used by TLS descriptor resolver PLT entry") \
2252de3b87aSKai Wang _ELF_DEFINE_DT(DT_GNU_CONFLICT,     0x6FFFFEF8UL,			\
2262de3b87aSKai Wang 	"address of conflict section")					\
2272de3b87aSKai Wang _ELF_DEFINE_DT(DT_GNU_LIBLIST,      0x6FFFFEF9UL,			\
2282de3b87aSKai Wang 	"address of conflict section")					\
2292de3b87aSKai Wang _ELF_DEFINE_DT(DT_CONFIG,           0x6FFFFEFAUL,			\
2302de3b87aSKai Wang 	"configuration file")						\
2312de3b87aSKai Wang _ELF_DEFINE_DT(DT_DEPAUDIT,         0x6FFFFEFBUL,			\
2322de3b87aSKai Wang 	"string defining audit libraries")				\
2332de3b87aSKai Wang _ELF_DEFINE_DT(DT_AUDIT,            0x6FFFFEFCUL,			\
2342de3b87aSKai Wang 	"string defining audit libraries")				\
2352de3b87aSKai Wang _ELF_DEFINE_DT(DT_PLTPAD,           0x6FFFFEFDUL, "PLT padding")	\
2362de3b87aSKai Wang _ELF_DEFINE_DT(DT_MOVETAB,          0x6FFFFEFEUL,			\
2372de3b87aSKai Wang 	"address of a move table")					\
2382de3b87aSKai Wang _ELF_DEFINE_DT(DT_SYMINFO,          0x6FFFFEFFUL,			\
2392de3b87aSKai Wang 	"address of the symbol information table")			\
2402de3b87aSKai Wang _ELF_DEFINE_DT(DT_ADDRRNGHI,        0x6FFFFEFFUL,			\
2412de3b87aSKai Wang 	"end of range using the d_ptr field")				\
2422de3b87aSKai Wang _ELF_DEFINE_DT(DT_VERSYM,	    0x6FFFFFF0UL,			\
2432de3b87aSKai Wang 	"address of the version section")				\
2442de3b87aSKai Wang _ELF_DEFINE_DT(DT_RELACOUNT,        0x6FFFFFF9UL,			\
2452de3b87aSKai Wang 	"count of RELA relocations")					\
2462de3b87aSKai Wang _ELF_DEFINE_DT(DT_RELCOUNT,         0x6FFFFFFAUL,			\
2472de3b87aSKai Wang 	"count of REL relocations")					\
2482de3b87aSKai Wang _ELF_DEFINE_DT(DT_FLAGS_1,          0x6FFFFFFBUL, "flag values")	\
2492de3b87aSKai Wang _ELF_DEFINE_DT(DT_VERDEF,	    0x6FFFFFFCUL,			\
2502de3b87aSKai Wang 	"address of the version definition segment")			\
2512de3b87aSKai Wang _ELF_DEFINE_DT(DT_VERDEFNUM,	    0x6FFFFFFDUL,			\
2522de3b87aSKai Wang 	"the number of version definition entries")			\
2532de3b87aSKai Wang _ELF_DEFINE_DT(DT_VERNEED,	    0x6FFFFFFEUL,			\
2542de3b87aSKai Wang 	"address of section with needed versions")			\
2552de3b87aSKai Wang _ELF_DEFINE_DT(DT_VERNEEDNUM,       0x6FFFFFFFUL,			\
2562de3b87aSKai Wang 	"the number of version needed entries")				\
2572de3b87aSKai Wang _ELF_DEFINE_DT(DT_LOPROC,           0x70000000UL,			\
2582de3b87aSKai Wang 	"start of processor-specific types")				\
2592de3b87aSKai Wang _ELF_DEFINE_DT(DT_ARM_SYMTABSZ,	    0x70000001UL,			\
2602de3b87aSKai Wang 	"number of entries in the dynamic symbol table")		\
2612de3b87aSKai Wang _ELF_DEFINE_DT(DT_SPARC_REGISTER,   0x70000001UL,			\
2622de3b87aSKai Wang 	"index of an STT_SPARC_REGISTER symbol")			\
2632de3b87aSKai Wang _ELF_DEFINE_DT(DT_ARM_PREEMPTMAP,   0x70000002UL,			\
2642de3b87aSKai Wang 	"address of the preemption map")				\
2652de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_RLD_VERSION, 0x70000001UL,			\
2662de3b87aSKai Wang 	"version ID for runtime linker interface")			\
2672de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_TIME_STAMP,  0x70000002UL,			\
2682de3b87aSKai Wang 	"timestamp")							\
2692de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_ICHECKSUM,   0x70000003UL,			\
2702de3b87aSKai Wang 	"checksum of all external strings and common sizes")		\
2712de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_IVERSION,    0x70000004UL,			\
2722de3b87aSKai Wang 	"string table index of a version string")			\
2732de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_FLAGS,       0x70000005UL,			\
2742de3b87aSKai Wang 	"MIPS-specific flags")						\
2752de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_BASE_ADDRESS, 0x70000006UL,			\
2762de3b87aSKai Wang 	"base address for the executable/DSO")				\
2772de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_CONFLICT,    0x70000008UL,			\
2782de3b87aSKai Wang 	"address of .conflict section")					\
2792de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_LIBLIST,     0x70000009UL,			\
2802de3b87aSKai Wang 	"address of .liblist section")					\
2812de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_LOCAL_GOTNO, 0x7000000AUL,			\
2822de3b87aSKai Wang 	"number of local GOT entries")					\
2832de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_CONFLICTNO,  0x7000000BUL,			\
2842de3b87aSKai Wang 	"number of entries in the .conflict section")			\
2852de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_LIBLISTNO,   0x70000010UL,			\
2862de3b87aSKai Wang 	"number of entries in the .liblist section")			\
2872de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_SYMTABNO,    0x70000011UL,			\
2882de3b87aSKai Wang 	"number of entries in the .dynsym section")			\
2892de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_UNREFEXTNO,  0x70000012UL,			\
2902de3b87aSKai Wang 	"index of first external dynamic symbol not ref'ed locally")	\
2912de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_GOTSYM,      0x70000013UL,			\
2922de3b87aSKai Wang 	"index of first dynamic symbol corresponds to a GOT entry")	\
2932de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_HIPAGENO,    0x70000014UL,			\
2942de3b87aSKai Wang 	"number of page table entries in GOT")				\
2952de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_RLD_MAP,     0x70000016UL,			\
2962de3b87aSKai Wang 	"address of runtime linker map")				\
2972de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_CLASS, 0x70000017UL,			\
2982de3b87aSKai Wang 	"Delta C++ class definition")					\
2992de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_CLASS_NO, 0x70000018UL,			\
3002de3b87aSKai Wang 	"number of entries in DT_MIPS_DELTA_CLASS")			\
3012de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_INSTANCE, 0x70000019UL,			\
3022de3b87aSKai Wang 	"Delta C++ class instances")					\
3032de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_INSTANCE_NO, 0x7000001AUL,			\
3042de3b87aSKai Wang 	"number of entries in DT_MIPS_DELTA_INSTANCE")			\
3052de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_RELOC, 0x7000001BUL,			\
3062de3b87aSKai Wang 	"Delta relocations")						\
3072de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_RELOC_NO, 0x7000001CUL,			\
3082de3b87aSKai Wang 	"number of entries in DT_MIPS_DELTA_RELOC")			\
3092de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_SYM,   0x7000001DUL,			\
310b6b6f9ccSEd Maste 	"Delta symbols referred by Delta relocations")			\
3112de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_SYM_NO, 0x7000001EUL,			\
3122de3b87aSKai Wang 	"number of entries in DT_MIPS_DELTA_SYM")			\
3132de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_CLASSSYM, 0x70000020UL,			\
3142de3b87aSKai Wang 	"Delta symbols for class declarations")				\
3152de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DELTA_CLASSSYM_NO, 0x70000021UL,			\
3162de3b87aSKai Wang 	"number of entries in DT_MIPS_DELTA_CLASSSYM")			\
3172de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_CXX_FLAGS,   0x70000022UL,			\
3182de3b87aSKai Wang 	"C++ flavor flags")						\
3192de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_PIXIE_INIT,  0x70000023UL,			\
3202de3b87aSKai Wang 	"address of an initialization routine created by pixie")	\
3212de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_SYMBOL_LIB,  0x70000024UL,			\
3222de3b87aSKai Wang 	"address of .MIPS.symlib section")				\
3232de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_LOCALPAGE_GOTIDX, 0x70000025UL,			\
3242de3b87aSKai Wang 	"GOT index of first page table entry for a segment")		\
3252de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_LOCAL_GOTIDX, 0x70000026UL,			\
3262de3b87aSKai Wang 	"GOT index of first page table entry for a local symbol")	\
3272de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_HIDDEN_GOTIDX, 0x70000027UL,			\
3282de3b87aSKai Wang 	"GOT index of first page table entry for a hidden symbol")	\
3292de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_PROTECTED_GOTIDX, 0x70000028UL,			\
3302de3b87aSKai Wang 	"GOT index of first page table entry for a protected symbol")	\
3312de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_OPTIONS,     0x70000029UL,			\
3322de3b87aSKai Wang 	"address of .MIPS.options section")				\
3332de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_INTERFACE,   0x7000002AUL,			\
3342de3b87aSKai Wang 	"address of .MIPS.interface section")				\
3352de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_DYNSTR_ALIGN, 0x7000002BUL, "???")		\
3362de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_INTERFACE_SIZE, 0x7000002CUL,			\
3372de3b87aSKai Wang 	"size of .MIPS.interface section")				\
3382de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_RLD_TEXT_RESOLVE_ADDR, 0x7000002DUL,		\
3392de3b87aSKai Wang 	"address of _rld_text_resolve in GOT")				\
3402de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_PERF_SUFFIX, 0x7000002EUL,			\
3412de3b87aSKai Wang 	"default suffix of DSO to be appended by dlopen")		\
3422de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_COMPACT_SIZE, 0x7000002FUL,			\
3432de3b87aSKai Wang 	"size of a ucode compact relocation record (o32)")		\
3442de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_GP_VALUE,    0x70000030UL,			\
3452de3b87aSKai Wang 	"GP value of a specified GP relative range")			\
3462de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_AUX_DYNAMIC, 0x70000031UL,			\
3472de3b87aSKai Wang 	"address of an auxiliary dynamic table")			\
3482de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_PLTGOT,      0x70000032UL,			\
3492de3b87aSKai Wang 	"address of the PLTGOT")					\
3502de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_RLD_OBJ_UPDATE, 0x70000033UL,			\
3512de3b87aSKai Wang 	"object list update callback")					\
3522de3b87aSKai Wang _ELF_DEFINE_DT(DT_MIPS_RWPLT,       0x70000034UL,			\
3532de3b87aSKai Wang 	"address of a writable PLT")					\
3542de3b87aSKai Wang _ELF_DEFINE_DT(DT_PPC_GOT,          0x70000000UL,			\
3552de3b87aSKai Wang 	"value of _GLOBAL_OFFSET_TABLE_")				\
3562de3b87aSKai Wang _ELF_DEFINE_DT(DT_PPC_TLSOPT,       0x70000001UL,			\
3572de3b87aSKai Wang 	"TLS descriptor should be optimized")				\
3582de3b87aSKai Wang _ELF_DEFINE_DT(DT_PPC64_GLINK,      0x70000000UL,			\
3592de3b87aSKai Wang 	"address of .glink section")					\
3602de3b87aSKai Wang _ELF_DEFINE_DT(DT_PPC64_OPD,        0x70000001UL,			\
3612de3b87aSKai Wang 	"address of .opd section")					\
3622de3b87aSKai Wang _ELF_DEFINE_DT(DT_PPC64_OPDSZ,      0x70000002UL,			\
3632de3b87aSKai Wang 	"size of .opd section")						\
3642de3b87aSKai Wang _ELF_DEFINE_DT(DT_PPC64_TLSOPT,     0x70000003UL,			\
3652de3b87aSKai Wang 	"TLS descriptor should be optimized")				\
3662de3b87aSKai Wang _ELF_DEFINE_DT(DT_AUXILIARY,        0x7FFFFFFDUL,			\
3672de3b87aSKai Wang 	"offset of string naming auxiliary filtees")			\
3682de3b87aSKai Wang _ELF_DEFINE_DT(DT_USED,             0x7FFFFFFEUL, "ignored")		\
3692de3b87aSKai Wang _ELF_DEFINE_DT(DT_FILTER,           0x7FFFFFFFUL,			\
3702de3b87aSKai Wang 	"index of string naming filtees")				\
3712de3b87aSKai Wang _ELF_DEFINE_DT(DT_HIPROC,           0x7FFFFFFFUL,			\
3722de3b87aSKai Wang 	"end of processor-specific types")
3732de3b87aSKai Wang 
3742de3b87aSKai Wang #undef	_ELF_DEFINE_DT
3752de3b87aSKai Wang #define	_ELF_DEFINE_DT(N, V, DESCR)	N = V ,
3762de3b87aSKai Wang enum {
3772de3b87aSKai Wang 	_ELF_DEFINE_DYN_TYPES()
3782de3b87aSKai Wang 	DT__LAST__ = DT_HIPROC
3792de3b87aSKai Wang };
3802de3b87aSKai Wang 
3812de3b87aSKai Wang #define	DT_DEPRECATED_SPARC_REGISTER	DT_SPARC_REGISTER
3822de3b87aSKai Wang 
3832de3b87aSKai Wang /*
3842de3b87aSKai Wang  * Flags used in the executable header (field: e_flags).
3852de3b87aSKai Wang  */
3862de3b87aSKai Wang #define	_ELF_DEFINE_EHDR_FLAGS()					\
3872de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_RELEXEC,      0x00000001UL,			\
3882de3b87aSKai Wang 	"dynamic segment describes only how to relocate segments")	\
3892de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_HASENTRY,     0x00000002UL,			\
3902de3b87aSKai Wang 	"e_entry contains a program entry point")			\
3912de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_SYMSARESORTED, 0x00000004UL,			\
3922de3b87aSKai Wang 	"subsection of symbol table is sorted by symbol value")		\
3932de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_DYNSYMSUSESEGIDX, 0x00000008UL,			\
3942de3b87aSKai Wang 	"dynamic symbol st_shndx = containing segment index + 1")	\
3952de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_MAPSYMSFIRST, 0x00000010UL,			\
3962de3b87aSKai Wang 	"mapping symbols precede other local symbols in symtab")	\
3972de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_BE8,          0x00800000UL,			\
3982de3b87aSKai Wang 	"file contains BE-8 code")					\
3992de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_LE8,          0x00400000UL,			\
4002de3b87aSKai Wang 	"file contains LE-8 code")					\
4012de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_EABIMASK,     0xFF000000UL,			\
4022de3b87aSKai Wang 	"mask for ARM EABI version number (0 denotes GNU or unknown)")	\
4032de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_EABI_UNKNOWN, 0x00000000UL,			\
4042de3b87aSKai Wang 	"Unknown or GNU ARM EABI version number")			\
4052de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_EABI_VER1,    0x01000000UL,			\
4062de3b87aSKai Wang 	"ARM EABI version 1")						\
4072de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_EABI_VER2,    0x02000000UL,			\
4082de3b87aSKai Wang 	"ARM EABI version 2")						\
4092de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_EABI_VER3,    0x03000000UL,			\
4102de3b87aSKai Wang 	"ARM EABI version 3")						\
4112de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_EABI_VER4,    0x04000000UL,			\
4122de3b87aSKai Wang 	"ARM EABI version 4")						\
4132de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_EABI_VER5,    0x05000000UL,			\
4142de3b87aSKai Wang 	"ARM EABI version 5")						\
4152de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_INTERWORK,    0x00000004UL,			\
4162de3b87aSKai Wang 	"GNU EABI extension")						\
4172de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_APCS_26,      0x00000008UL,			\
4182de3b87aSKai Wang 	"GNU EABI extension")						\
4192de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_APCS_FLOAT,   0x00000010UL,			\
4202de3b87aSKai Wang 	"GNU EABI extension")						\
4212de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_PIC,          0x00000020UL,			\
4222de3b87aSKai Wang 	"GNU EABI extension")						\
4232de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_ALIGN8,       0x00000040UL,			\
4242de3b87aSKai Wang 	"GNU EABI extension")						\
4252de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_NEW_ABI,      0x00000080UL,			\
4262de3b87aSKai Wang 	"GNU EABI extension")						\
4272de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_OLD_ABI,      0x00000100UL,			\
4282de3b87aSKai Wang 	"GNU EABI extension")						\
4292de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_SOFT_FLOAT,   0x00000200UL,			\
4302de3b87aSKai Wang 	"GNU EABI extension")						\
4312de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_VFP_FLOAT,    0x00000400UL,			\
4322de3b87aSKai Wang 	"GNU EABI extension")						\
4332de3b87aSKai Wang _ELF_DEFINE_EF(EF_ARM_MAVERICK_FLOAT, 0x00000800UL,			\
4342de3b87aSKai Wang 	"GNU EABI extension")						\
4352de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_NOREORDER,   0x00000001UL,			\
4362de3b87aSKai Wang 	"at least one .noreorder directive appeared in the source")	\
4372de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_PIC,         0x00000002UL,			\
4382de3b87aSKai Wang 	"file contains position independent code")			\
4392de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_CPIC,        0x00000004UL,			\
4402de3b87aSKai Wang 	"file's code uses standard conventions for calling PIC")	\
4412de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_UCODE,       0x00000010UL,			\
4422de3b87aSKai Wang 	"file contains UCODE (obsolete)")				\
4432de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_ABI2,        0x00000020UL,			\
4442de3b87aSKai Wang 	"file follows MIPS III 32-bit ABI")				\
4452de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_OPTIONS_FIRST, 0x00000080UL,			\
4462de3b87aSKai Wang 	"ld(1) should process .MIPS.options section first")		\
4472de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_ARCH_ASE,    0x0F000000UL,			\
4482de3b87aSKai Wang 	"file uses application-specific architectural extensions")	\
4492de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_ARCH_ASE_MDMX, 0x08000000UL,			\
4502de3b87aSKai Wang 	"file uses MDMX multimedia extensions")				\
4512de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_ARCH_ASE_M16, 0x04000000UL,			\
4522de3b87aSKai Wang 	"file uses MIPS-16 ISA extensions")				\
4532de3b87aSKai Wang _ELF_DEFINE_EF(EF_MIPS_ARCH,         0xF0000000UL,			\
4542de3b87aSKai Wang 	"4-bit MIPS architecture field")				\
4552de3b87aSKai Wang _ELF_DEFINE_EF(EF_PPC_EMB,          0x80000000UL,			\
4562de3b87aSKai Wang 	"Embedded PowerPC flag")					\
4572de3b87aSKai Wang _ELF_DEFINE_EF(EF_PPC_RELOCATABLE,  0x00010000UL,			\
4582de3b87aSKai Wang 	"-mrelocatable flag")						\
4592de3b87aSKai Wang _ELF_DEFINE_EF(EF_PPC_RELOCATABLE_LIB, 0x00008000UL,			\
4602de3b87aSKai Wang 	"-mrelocatable-lib flag")					\
461b0084180SMitchell Horne _ELF_DEFINE_EF(EF_RISCV_RVC,	    0x00000001UL,			\
462b0084180SMitchell Horne 	"Compressed instruction extension")				\
463b0084180SMitchell Horne _ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_MASK, 0x00000006UL,			\
464b0084180SMitchell Horne 	"Floating point ABI")						\
465b0084180SMitchell Horne _ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_SOFT, 0x00000000UL,			\
466b0084180SMitchell Horne 	"Software emulated floating point")				\
467b0084180SMitchell Horne _ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_SINGLE, 0x00000002UL,			\
468b0084180SMitchell Horne 	"Single precision floating point")				\
469b0084180SMitchell Horne _ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_DOUBLE, 0x00000004UL,			\
470b0084180SMitchell Horne 	"Double precision floating point")				\
471b0084180SMitchell Horne _ELF_DEFINE_EF(EF_RISCV_FLOAT_ABI_QUAD, 0x00000006UL,			\
472b0084180SMitchell Horne 	"Quad precision floating point")				\
473b0084180SMitchell Horne _ELF_DEFINE_EF(EF_RISCV_RVE,	    0x00000008UL,			\
4745bb13a0bSMitchell Horne 	"RV32E embedded ABI")						\
475b0084180SMitchell Horne _ELF_DEFINE_EF(EF_RISCV_TSO,	    0x00000010UL,			\
476b0084180SMitchell Horne 	"RVTSO memory consistency model")				\
4772de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARC_EXT_MASK,   0x00ffff00UL,			\
4782de3b87aSKai Wang 	"Vendor Extension mask")					\
4792de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARC_32PLUS,     0x00000100UL,			\
4802de3b87aSKai Wang 	"Generic V8+ features")						\
4812de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARC_SUN_US1,    0x00000200UL,			\
4822de3b87aSKai Wang 	"Sun UltraSPARCTM 1 Extensions")				\
4832de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARC_HAL_R1,     0x00000400UL, "HAL R1 Extensions")	\
4842de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARC_SUN_US3,    0x00000800UL,			\
4852de3b87aSKai Wang 	"Sun UltraSPARC 3 Extensions")					\
4862de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARCV9_MM,       0x00000003UL,			\
4872de3b87aSKai Wang 	"Mask for Memory Model")					\
4882de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARCV9_TSO,      0x00000000UL,			\
4892de3b87aSKai Wang 	"Total Store Ordering")						\
4902de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARCV9_PSO,      0x00000001UL,			\
4912de3b87aSKai Wang 	"Partial Store Ordering")					\
4922de3b87aSKai Wang _ELF_DEFINE_EF(EF_SPARCV9_RMO,      0x00000002UL,			\
4932de3b87aSKai Wang 	"Relaxed Memory Ordering")
4942de3b87aSKai Wang 
4952de3b87aSKai Wang #undef	_ELF_DEFINE_EF
4962de3b87aSKai Wang #define	_ELF_DEFINE_EF(N, V, DESCR)	N = V ,
4972de3b87aSKai Wang enum {
4982de3b87aSKai Wang 	_ELF_DEFINE_EHDR_FLAGS()
4992de3b87aSKai Wang 	EF__LAST__
5002de3b87aSKai Wang };
5012de3b87aSKai Wang 
5022de3b87aSKai Wang /*
5032de3b87aSKai Wang  * Offsets in the `ei_ident[]` field of an ELF executable header.
5042de3b87aSKai Wang  */
5052de3b87aSKai Wang #define	_ELF_DEFINE_EI_OFFSETS()			\
5062de3b87aSKai Wang _ELF_DEFINE_EI(EI_MAG0,     0, "magic number")		\
5072de3b87aSKai Wang _ELF_DEFINE_EI(EI_MAG1,     1, "magic number")		\
5082de3b87aSKai Wang _ELF_DEFINE_EI(EI_MAG2,     2, "magic number")		\
5092de3b87aSKai Wang _ELF_DEFINE_EI(EI_MAG3,     3, "magic number")		\
5102de3b87aSKai Wang _ELF_DEFINE_EI(EI_CLASS,    4, "file class")		\
5112de3b87aSKai Wang _ELF_DEFINE_EI(EI_DATA,     5, "data encoding")		\
5122de3b87aSKai Wang _ELF_DEFINE_EI(EI_VERSION,  6, "file version")		\
5132de3b87aSKai Wang _ELF_DEFINE_EI(EI_OSABI,    7, "OS ABI kind")		\
5142de3b87aSKai Wang _ELF_DEFINE_EI(EI_ABIVERSION, 8, "OS ABI version")	\
5152de3b87aSKai Wang _ELF_DEFINE_EI(EI_PAD,	    9, "padding start")		\
5162de3b87aSKai Wang _ELF_DEFINE_EI(EI_NIDENT,  16, "total size")
5172de3b87aSKai Wang 
5182de3b87aSKai Wang #undef	_ELF_DEFINE_EI
5192de3b87aSKai Wang #define	_ELF_DEFINE_EI(N, V, DESCR)	N = V ,
5202de3b87aSKai Wang enum {
5212de3b87aSKai Wang 	_ELF_DEFINE_EI_OFFSETS()
5222de3b87aSKai Wang 	EI__LAST__
5232de3b87aSKai Wang };
5242de3b87aSKai Wang 
5252de3b87aSKai Wang /*
5262de3b87aSKai Wang  * The ELF class of an object.
5272de3b87aSKai Wang  */
5282de3b87aSKai Wang #define	_ELF_DEFINE_ELFCLASS()				\
5292de3b87aSKai Wang _ELF_DEFINE_EC(ELFCLASSNONE, 0, "Unknown ELF class")	\
5302de3b87aSKai Wang _ELF_DEFINE_EC(ELFCLASS32,   1, "32 bit objects")	\
5312de3b87aSKai Wang _ELF_DEFINE_EC(ELFCLASS64,   2, "64 bit objects")
5322de3b87aSKai Wang 
5332de3b87aSKai Wang #undef	_ELF_DEFINE_EC
5342de3b87aSKai Wang #define	_ELF_DEFINE_EC(N, V, DESCR)	N = V ,
5352de3b87aSKai Wang enum {
5362de3b87aSKai Wang 	_ELF_DEFINE_ELFCLASS()
5372de3b87aSKai Wang 	EC__LAST__
5382de3b87aSKai Wang };
5392de3b87aSKai Wang 
5402de3b87aSKai Wang /*
5412de3b87aSKai Wang  * Endianness of data in an ELF object.
5422de3b87aSKai Wang  */
5432de3b87aSKai Wang 
5442de3b87aSKai Wang #define	_ELF_DEFINE_ELF_DATA_ENDIANNESS()			\
5452de3b87aSKai Wang _ELF_DEFINE_ED(ELFDATANONE, 0, "Unknown data endianness")	\
5462de3b87aSKai Wang _ELF_DEFINE_ED(ELFDATA2LSB, 1, "little endian")			\
5472de3b87aSKai Wang _ELF_DEFINE_ED(ELFDATA2MSB, 2, "big endian")
5482de3b87aSKai Wang 
5492de3b87aSKai Wang #undef	_ELF_DEFINE_ED
5502de3b87aSKai Wang #define	_ELF_DEFINE_ED(N, V, DESCR)	N = V ,
5512de3b87aSKai Wang enum {
5522de3b87aSKai Wang 	_ELF_DEFINE_ELF_DATA_ENDIANNESS()
5532de3b87aSKai Wang 	ED__LAST__
5542de3b87aSKai Wang };
5552de3b87aSKai Wang 
5562de3b87aSKai Wang /*
5572de3b87aSKai Wang  * Values of the magic numbers used in identification array.
5582de3b87aSKai Wang  */
5592de3b87aSKai Wang #define	_ELF_DEFINE_ELF_MAGIC()			\
5602de3b87aSKai Wang _ELF_DEFINE_EMAG(ELFMAG0, 0x7FU)		\
5612de3b87aSKai Wang _ELF_DEFINE_EMAG(ELFMAG1, 'E')			\
5622de3b87aSKai Wang _ELF_DEFINE_EMAG(ELFMAG2, 'L')			\
5632de3b87aSKai Wang _ELF_DEFINE_EMAG(ELFMAG3, 'F')
5642de3b87aSKai Wang 
5652de3b87aSKai Wang #undef	_ELF_DEFINE_EMAG
5662de3b87aSKai Wang #define	_ELF_DEFINE_EMAG(N, V)		N = V ,
5672de3b87aSKai Wang enum {
5682de3b87aSKai Wang 	_ELF_DEFINE_ELF_MAGIC()
5692de3b87aSKai Wang 	ELFMAG__LAST__
5702de3b87aSKai Wang };
5712de3b87aSKai Wang 
5722de3b87aSKai Wang /*
5732de3b87aSKai Wang  * ELF OS ABI field.
5742de3b87aSKai Wang  */
5752de3b87aSKai Wang #define	_ELF_DEFINE_ELF_OSABI()						\
5762de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_NONE,       0,				\
5772de3b87aSKai Wang 	"No extensions or unspecified")					\
5782de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_SYSV,       0, "SYSV")			\
5792de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_HPUX,       1, "Hewlett-Packard HP-UX")	\
5802de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_NETBSD,     2, "NetBSD")			\
5812de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_GNU,        3, "GNU")				\
5822de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_HURD,       4, "GNU/HURD")			\
5832de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_86OPEN,     5, "86Open Common ABI")		\
5842de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_SOLARIS,    6, "Sun Solaris")			\
5852de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_AIX,        7, "AIX")				\
5862de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_IRIX,       8, "IRIX")			\
5872de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_FREEBSD,    9, "FreeBSD")			\
5882de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_TRU64,      10, "Compaq TRU64 UNIX")		\
5892de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_MODESTO,    11, "Novell Modesto")		\
5902de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_OPENBSD,    12, "Open BSD")			\
5912de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_OPENVMS,    13, "Open VMS")			\
5922de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_NSK,        14,				\
5932de3b87aSKai Wang 	"Hewlett-Packard Non-Stop Kernel")				\
5942de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_AROS,       15, "Amiga Research OS")		\
5952de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_FENIXOS,    16,				\
5962de3b87aSKai Wang 	"The FenixOS highly scalable multi-core OS")			\
597b6b6f9ccSEd Maste _ELF_DEFINE_EABI(ELFOSABI_CLOUDABI,   17, "Nuxi CloudABI")		\
5982de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_ARM_AEABI,  64,				\
5992de3b87aSKai Wang 	"ARM specific symbol versioning extensions")			\
6002de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_ARM,        97, "ARM ABI")			\
6012de3b87aSKai Wang _ELF_DEFINE_EABI(ELFOSABI_STANDALONE, 255,				\
6022de3b87aSKai Wang 	"Standalone (embedded) application")
6032de3b87aSKai Wang 
6042de3b87aSKai Wang #undef	_ELF_DEFINE_EABI
6052de3b87aSKai Wang #define	_ELF_DEFINE_EABI(N, V, DESCR)	N = V ,
6062de3b87aSKai Wang enum {
6072de3b87aSKai Wang 	_ELF_DEFINE_ELF_OSABI()
6082de3b87aSKai Wang 	ELFOSABI__LAST__
6092de3b87aSKai Wang };
6102de3b87aSKai Wang 
6112de3b87aSKai Wang #define	ELFOSABI_LINUX			ELFOSABI_GNU
6122de3b87aSKai Wang 
6132de3b87aSKai Wang /*
6142de3b87aSKai Wang  * ELF Machine types: (EM_*).
6152de3b87aSKai Wang  */
6162de3b87aSKai Wang #define	_ELF_DEFINE_ELF_MACHINES()					\
6172de3b87aSKai Wang _ELF_DEFINE_EM(EM_NONE,             0, "No machine")			\
6182de3b87aSKai Wang _ELF_DEFINE_EM(EM_M32,              1, "AT&T WE 32100")			\
6192de3b87aSKai Wang _ELF_DEFINE_EM(EM_SPARC,            2, "SPARC")				\
6202de3b87aSKai Wang _ELF_DEFINE_EM(EM_386,              3, "Intel 80386")			\
6212de3b87aSKai Wang _ELF_DEFINE_EM(EM_68K,              4, "Motorola 68000")		\
6222de3b87aSKai Wang _ELF_DEFINE_EM(EM_88K,              5, "Motorola 88000")		\
6233ef90571SEd Maste _ELF_DEFINE_EM(EM_IAMCU,            6, "Intel MCU")			\
6242de3b87aSKai Wang _ELF_DEFINE_EM(EM_860,              7, "Intel 80860")			\
6252de3b87aSKai Wang _ELF_DEFINE_EM(EM_MIPS,             8, "MIPS I Architecture")		\
6262de3b87aSKai Wang _ELF_DEFINE_EM(EM_S370,             9, "IBM System/370 Processor")	\
6272de3b87aSKai Wang _ELF_DEFINE_EM(EM_MIPS_RS3_LE,      10, "MIPS RS3000 Little-endian")	\
6282de3b87aSKai Wang _ELF_DEFINE_EM(EM_PARISC,           15, "Hewlett-Packard PA-RISC")	\
6292de3b87aSKai Wang _ELF_DEFINE_EM(EM_VPP500,           17, "Fujitsu VPP500")		\
6302de3b87aSKai Wang _ELF_DEFINE_EM(EM_SPARC32PLUS,      18,					\
6312de3b87aSKai Wang 	"Enhanced instruction set SPARC")				\
6322de3b87aSKai Wang _ELF_DEFINE_EM(EM_960,              19, "Intel 80960")			\
6332de3b87aSKai Wang _ELF_DEFINE_EM(EM_PPC,              20, "PowerPC")			\
6342de3b87aSKai Wang _ELF_DEFINE_EM(EM_PPC64,            21, "64-bit PowerPC")		\
6352de3b87aSKai Wang _ELF_DEFINE_EM(EM_S390,             22, "IBM System/390 Processor")	\
6362de3b87aSKai Wang _ELF_DEFINE_EM(EM_SPU,              23, "IBM SPU/SPC")			\
6372de3b87aSKai Wang _ELF_DEFINE_EM(EM_V800,             36, "NEC V800")			\
6382de3b87aSKai Wang _ELF_DEFINE_EM(EM_FR20,             37, "Fujitsu FR20")			\
6392de3b87aSKai Wang _ELF_DEFINE_EM(EM_RH32,             38, "TRW RH-32")			\
6402de3b87aSKai Wang _ELF_DEFINE_EM(EM_RCE,              39, "Motorola RCE")			\
6412de3b87aSKai Wang _ELF_DEFINE_EM(EM_ARM,              40, "Advanced RISC Machines ARM")	\
6422de3b87aSKai Wang _ELF_DEFINE_EM(EM_ALPHA,            41, "Digital Alpha")		\
6432de3b87aSKai Wang _ELF_DEFINE_EM(EM_SH,               42, "Hitachi SH")			\
6442de3b87aSKai Wang _ELF_DEFINE_EM(EM_SPARCV9,          43, "SPARC Version 9")		\
6452de3b87aSKai Wang _ELF_DEFINE_EM(EM_TRICORE,          44,					\
6462de3b87aSKai Wang 	"Siemens TriCore embedded processor")				\
6472de3b87aSKai Wang _ELF_DEFINE_EM(EM_ARC,              45,					\
6482de3b87aSKai Wang 	"Argonaut RISC Core, Argonaut Technologies Inc.")		\
6492de3b87aSKai Wang _ELF_DEFINE_EM(EM_H8_300,           46, "Hitachi H8/300")		\
6502de3b87aSKai Wang _ELF_DEFINE_EM(EM_H8_300H,          47, "Hitachi H8/300H")		\
6512de3b87aSKai Wang _ELF_DEFINE_EM(EM_H8S,              48, "Hitachi H8S")			\
6522de3b87aSKai Wang _ELF_DEFINE_EM(EM_H8_500,           49, "Hitachi H8/500")		\
6532de3b87aSKai Wang _ELF_DEFINE_EM(EM_IA_64,            50,					\
6542de3b87aSKai Wang 	"Intel IA-64 processor architecture")				\
6552de3b87aSKai Wang _ELF_DEFINE_EM(EM_MIPS_X,           51, "Stanford MIPS-X")		\
6562de3b87aSKai Wang _ELF_DEFINE_EM(EM_COLDFIRE,         52, "Motorola ColdFire")		\
6572de3b87aSKai Wang _ELF_DEFINE_EM(EM_68HC12,           53, "Motorola M68HC12")		\
6582de3b87aSKai Wang _ELF_DEFINE_EM(EM_MMA,              54,					\
6592de3b87aSKai Wang 	"Fujitsu MMA Multimedia Accelerator")				\
6602de3b87aSKai Wang _ELF_DEFINE_EM(EM_PCP,              55, "Siemens PCP")			\
6612de3b87aSKai Wang _ELF_DEFINE_EM(EM_NCPU,             56,					\
6622de3b87aSKai Wang 	"Sony nCPU embedded RISC processor")				\
6632de3b87aSKai Wang _ELF_DEFINE_EM(EM_NDR1,             57, "Denso NDR1 microprocessor")	\
6642de3b87aSKai Wang _ELF_DEFINE_EM(EM_STARCORE,         58, "Motorola Star*Core processor")	\
6652de3b87aSKai Wang _ELF_DEFINE_EM(EM_ME16,             59, "Toyota ME16 processor")	\
6662de3b87aSKai Wang _ELF_DEFINE_EM(EM_ST100,            60,					\
6672de3b87aSKai Wang 	"STMicroelectronics ST100 processor")				\
6682de3b87aSKai Wang _ELF_DEFINE_EM(EM_TINYJ,            61,					\
6692de3b87aSKai Wang 	"Advanced Logic Corp. TinyJ embedded processor family")		\
6702de3b87aSKai Wang _ELF_DEFINE_EM(EM_X86_64,           62, "AMD x86-64 architecture")	\
6712de3b87aSKai Wang _ELF_DEFINE_EM(EM_PDSP,             63, "Sony DSP Processor")		\
6722de3b87aSKai Wang _ELF_DEFINE_EM(EM_PDP10,            64,					\
6732de3b87aSKai Wang 	"Digital Equipment Corp. PDP-10")				\
6742de3b87aSKai Wang _ELF_DEFINE_EM(EM_PDP11,            65,					\
6752de3b87aSKai Wang 	"Digital Equipment Corp. PDP-11")				\
6762de3b87aSKai Wang _ELF_DEFINE_EM(EM_FX66,             66, "Siemens FX66 microcontroller")	\
6772de3b87aSKai Wang _ELF_DEFINE_EM(EM_ST9PLUS,          67,					\
6782de3b87aSKai Wang 	"STMicroelectronics ST9+ 8/16 bit microcontroller")		\
6792de3b87aSKai Wang _ELF_DEFINE_EM(EM_ST7,              68,					\
6802de3b87aSKai Wang 	"STMicroelectronics ST7 8-bit microcontroller")			\
6812de3b87aSKai Wang _ELF_DEFINE_EM(EM_68HC16,           69,					\
6822de3b87aSKai Wang 	"Motorola MC68HC16 Microcontroller")				\
6832de3b87aSKai Wang _ELF_DEFINE_EM(EM_68HC11,           70,					\
6842de3b87aSKai Wang 	"Motorola MC68HC11 Microcontroller")				\
6852de3b87aSKai Wang _ELF_DEFINE_EM(EM_68HC08,           71,					\
6862de3b87aSKai Wang 	"Motorola MC68HC08 Microcontroller")				\
6872de3b87aSKai Wang _ELF_DEFINE_EM(EM_68HC05,           72,					\
6882de3b87aSKai Wang 	"Motorola MC68HC05 Microcontroller")				\
6892de3b87aSKai Wang _ELF_DEFINE_EM(EM_SVX,              73, "Silicon Graphics SVx")		\
6902de3b87aSKai Wang _ELF_DEFINE_EM(EM_ST19,             74,					\
6912de3b87aSKai Wang 	"STMicroelectronics ST19 8-bit microcontroller")		\
6922de3b87aSKai Wang _ELF_DEFINE_EM(EM_VAX,              75, "Digital VAX")			\
6932de3b87aSKai Wang _ELF_DEFINE_EM(EM_CRIS,             76,					\
6942de3b87aSKai Wang 	"Axis Communications 32-bit embedded processor")		\
6952de3b87aSKai Wang _ELF_DEFINE_EM(EM_JAVELIN,          77,					\
6962de3b87aSKai Wang 	"Infineon Technologies 32-bit embedded processor")		\
6972de3b87aSKai Wang _ELF_DEFINE_EM(EM_FIREPATH,         78,					\
6982de3b87aSKai Wang 	"Element 14 64-bit DSP Processor")				\
6992de3b87aSKai Wang _ELF_DEFINE_EM(EM_ZSP,              79,					\
7002de3b87aSKai Wang 	"LSI Logic 16-bit DSP Processor")				\
7012de3b87aSKai Wang _ELF_DEFINE_EM(EM_MMIX,             80,					\
7022de3b87aSKai Wang 	"Donald Knuth's educational 64-bit processor")			\
7032de3b87aSKai Wang _ELF_DEFINE_EM(EM_HUANY,            81,					\
7042de3b87aSKai Wang 	"Harvard University machine-independent object files")		\
7052de3b87aSKai Wang _ELF_DEFINE_EM(EM_PRISM,            82, "SiTera Prism")			\
7062de3b87aSKai Wang _ELF_DEFINE_EM(EM_AVR,              83,					\
7072de3b87aSKai Wang 	"Atmel AVR 8-bit microcontroller")				\
7082de3b87aSKai Wang _ELF_DEFINE_EM(EM_FR30,             84, "Fujitsu FR30")			\
7092de3b87aSKai Wang _ELF_DEFINE_EM(EM_D10V,             85, "Mitsubishi D10V")		\
7102de3b87aSKai Wang _ELF_DEFINE_EM(EM_D30V,             86, "Mitsubishi D30V")		\
7112de3b87aSKai Wang _ELF_DEFINE_EM(EM_V850,             87, "NEC v850")			\
7122de3b87aSKai Wang _ELF_DEFINE_EM(EM_M32R,             88, "Mitsubishi M32R")		\
7132de3b87aSKai Wang _ELF_DEFINE_EM(EM_MN10300,          89, "Matsushita MN10300")		\
7142de3b87aSKai Wang _ELF_DEFINE_EM(EM_MN10200,          90, "Matsushita MN10200")		\
7152de3b87aSKai Wang _ELF_DEFINE_EM(EM_PJ,               91, "picoJava")			\
7162de3b87aSKai Wang _ELF_DEFINE_EM(EM_OPENRISC,         92,					\
7172de3b87aSKai Wang 	"OpenRISC 32-bit embedded processor")				\
7182de3b87aSKai Wang _ELF_DEFINE_EM(EM_ARC_COMPACT,      93,					\
7192de3b87aSKai Wang 	"ARC International ARCompact processor")			\
7202de3b87aSKai Wang _ELF_DEFINE_EM(EM_XTENSA,           94,					\
7212de3b87aSKai Wang 	"Tensilica Xtensa Architecture")				\
7222de3b87aSKai Wang _ELF_DEFINE_EM(EM_VIDEOCORE,        95,					\
7232de3b87aSKai Wang 	"Alphamosaic VideoCore processor")				\
7242de3b87aSKai Wang _ELF_DEFINE_EM(EM_TMM_GPP,          96,					\
7252de3b87aSKai Wang 	"Thompson Multimedia General Purpose Processor")		\
7262de3b87aSKai Wang _ELF_DEFINE_EM(EM_NS32K,            97,					\
7272de3b87aSKai Wang 	"National Semiconductor 32000 series")				\
7282de3b87aSKai Wang _ELF_DEFINE_EM(EM_TPC,              98, "Tenor Network TPC processor")	\
7292de3b87aSKai Wang _ELF_DEFINE_EM(EM_SNP1K,            99, "Trebia SNP 1000 processor")	\
7302de3b87aSKai Wang _ELF_DEFINE_EM(EM_ST200,            100,				\
7312de3b87aSKai Wang 	"STMicroelectronics (www.st.com) ST200 microcontroller")	\
7322de3b87aSKai Wang _ELF_DEFINE_EM(EM_IP2K,             101,				\
7332de3b87aSKai Wang 	"Ubicom IP2xxx microcontroller family")				\
7342de3b87aSKai Wang _ELF_DEFINE_EM(EM_MAX,              102, "MAX Processor")		\
7352de3b87aSKai Wang _ELF_DEFINE_EM(EM_CR,               103,				\
7362de3b87aSKai Wang 	"National Semiconductor CompactRISC microprocessor")		\
7372de3b87aSKai Wang _ELF_DEFINE_EM(EM_F2MC16,           104, "Fujitsu F2MC16")		\
7382de3b87aSKai Wang _ELF_DEFINE_EM(EM_MSP430,           105,				\
7392de3b87aSKai Wang 	"Texas Instruments embedded microcontroller msp430")		\
7402de3b87aSKai Wang _ELF_DEFINE_EM(EM_BLACKFIN,         106,				\
7412de3b87aSKai Wang 	"Analog Devices Blackfin (DSP) processor")			\
7422de3b87aSKai Wang _ELF_DEFINE_EM(EM_SE_C33,           107,				\
7432de3b87aSKai Wang 	"S1C33 Family of Seiko Epson processors")			\
7442de3b87aSKai Wang _ELF_DEFINE_EM(EM_SEP,              108,				\
7452de3b87aSKai Wang 	"Sharp embedded microprocessor")				\
7462de3b87aSKai Wang _ELF_DEFINE_EM(EM_ARCA,             109, "Arca RISC Microprocessor")	\
7472de3b87aSKai Wang _ELF_DEFINE_EM(EM_UNICORE,          110,				\
7482de3b87aSKai Wang 	"Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University") \
7492de3b87aSKai Wang _ELF_DEFINE_EM(EM_EXCESS,           111,				\
7502de3b87aSKai Wang 	"eXcess: 16/32/64-bit configurable embedded CPU")		\
7512de3b87aSKai Wang _ELF_DEFINE_EM(EM_DXP,              112,				\
7522de3b87aSKai Wang 	"Icera Semiconductor Inc. Deep Execution Processor")		\
7532de3b87aSKai Wang _ELF_DEFINE_EM(EM_ALTERA_NIOS2,     113,				\
7542de3b87aSKai Wang 	"Altera Nios II soft-core processor")				\
7552de3b87aSKai Wang _ELF_DEFINE_EM(EM_CRX,              114,				\
7562de3b87aSKai Wang 	"National Semiconductor CompactRISC CRX microprocessor")	\
7572de3b87aSKai Wang _ELF_DEFINE_EM(EM_XGATE,            115,				\
7582de3b87aSKai Wang 	"Motorola XGATE embedded processor")				\
7592de3b87aSKai Wang _ELF_DEFINE_EM(EM_C166,             116,				\
7602de3b87aSKai Wang 	"Infineon C16x/XC16x processor")				\
7612de3b87aSKai Wang _ELF_DEFINE_EM(EM_M16C,             117,				\
7622de3b87aSKai Wang 	"Renesas M16C series microprocessors")				\
7632de3b87aSKai Wang _ELF_DEFINE_EM(EM_DSPIC30F,         118,				\
7642de3b87aSKai Wang 	"Microchip Technology dsPIC30F Digital Signal Controller")	\
7652de3b87aSKai Wang _ELF_DEFINE_EM(EM_CE,               119,				\
7662de3b87aSKai Wang 	"Freescale Communication Engine RISC core")			\
7672de3b87aSKai Wang _ELF_DEFINE_EM(EM_M32C,             120,				\
7682de3b87aSKai Wang 	"Renesas M32C series microprocessors")				\
7692de3b87aSKai Wang _ELF_DEFINE_EM(EM_TSK3000,          131, "Altium TSK3000 core")		\
7702de3b87aSKai Wang _ELF_DEFINE_EM(EM_RS08,             132,				\
7712de3b87aSKai Wang 	"Freescale RS08 embedded processor")				\
7722de3b87aSKai Wang _ELF_DEFINE_EM(EM_SHARC,            133,				\
7732de3b87aSKai Wang 	"Analog Devices SHARC family of 32-bit DSP processors")		\
7742de3b87aSKai Wang _ELF_DEFINE_EM(EM_ECOG2,            134,				\
7752de3b87aSKai Wang 	"Cyan Technology eCOG2 microprocessor")				\
7762de3b87aSKai Wang _ELF_DEFINE_EM(EM_SCORE7,           135,				\
7772de3b87aSKai Wang 	"Sunplus S+core7 RISC processor")				\
7782de3b87aSKai Wang _ELF_DEFINE_EM(EM_DSP24,            136,				\
7792de3b87aSKai Wang 	"New Japan Radio (NJR) 24-bit DSP Processor")			\
7802de3b87aSKai Wang _ELF_DEFINE_EM(EM_VIDEOCORE3,       137,				\
7812de3b87aSKai Wang 	"Broadcom VideoCore III processor")				\
7822de3b87aSKai Wang _ELF_DEFINE_EM(EM_LATTICEMICO32,    138,				\
7832de3b87aSKai Wang 	"RISC processor for Lattice FPGA architecture")			\
7842de3b87aSKai Wang _ELF_DEFINE_EM(EM_SE_C17,           139, "Seiko Epson C17 family")	\
7852de3b87aSKai Wang _ELF_DEFINE_EM(EM_TI_C6000,         140,				\
7862de3b87aSKai Wang 	"The Texas Instruments TMS320C6000 DSP family")			\
7872de3b87aSKai Wang _ELF_DEFINE_EM(EM_TI_C2000,         141,				\
7882de3b87aSKai Wang 	"The Texas Instruments TMS320C2000 DSP family")			\
7892de3b87aSKai Wang _ELF_DEFINE_EM(EM_TI_C5500,         142,				\
7902de3b87aSKai Wang 	"The Texas Instruments TMS320C55x DSP family")			\
7912de3b87aSKai Wang _ELF_DEFINE_EM(EM_MMDSP_PLUS,       160,				\
7922de3b87aSKai Wang 	"STMicroelectronics 64bit VLIW Data Signal Processor")		\
7932de3b87aSKai Wang _ELF_DEFINE_EM(EM_CYPRESS_M8C,      161, "Cypress M8C microprocessor")	\
7942de3b87aSKai Wang _ELF_DEFINE_EM(EM_R32C,             162,				\
7952de3b87aSKai Wang 	"Renesas R32C series microprocessors")				\
7962de3b87aSKai Wang _ELF_DEFINE_EM(EM_TRIMEDIA,         163,				\
7972de3b87aSKai Wang 	"NXP Semiconductors TriMedia architecture family")		\
7982de3b87aSKai Wang _ELF_DEFINE_EM(EM_QDSP6,            164, "QUALCOMM DSP6 Processor")	\
7992de3b87aSKai Wang _ELF_DEFINE_EM(EM_8051,             165, "Intel 8051 and variants")	\
8002de3b87aSKai Wang _ELF_DEFINE_EM(EM_STXP7X,           166,				\
8012de3b87aSKai Wang 	"STMicroelectronics STxP7x family of configurable and extensible RISC processors") \
8022de3b87aSKai Wang _ELF_DEFINE_EM(EM_NDS32,            167,				\
8032de3b87aSKai Wang 	"Andes Technology compact code size embedded RISC processor family") \
8042de3b87aSKai Wang _ELF_DEFINE_EM(EM_ECOG1,            168,				\
8052de3b87aSKai Wang 	"Cyan Technology eCOG1X family")				\
8062de3b87aSKai Wang _ELF_DEFINE_EM(EM_ECOG1X,           168,				\
8072de3b87aSKai Wang 	"Cyan Technology eCOG1X family")				\
8082de3b87aSKai Wang _ELF_DEFINE_EM(EM_MAXQ30,           169,				\
8092de3b87aSKai Wang 	"Dallas Semiconductor MAXQ30 Core Micro-controllers")		\
8102de3b87aSKai Wang _ELF_DEFINE_EM(EM_XIMO16,           170,				\
8112de3b87aSKai Wang 	"New Japan Radio (NJR) 16-bit DSP Processor")			\
8122de3b87aSKai Wang _ELF_DEFINE_EM(EM_MANIK,            171,				\
8132de3b87aSKai Wang 	"M2000 Reconfigurable RISC Microprocessor")			\
8142de3b87aSKai Wang _ELF_DEFINE_EM(EM_CRAYNV2,          172,				\
8152de3b87aSKai Wang 	"Cray Inc. NV2 vector architecture")				\
8162de3b87aSKai Wang _ELF_DEFINE_EM(EM_RX,               173, "Renesas RX family")		\
8172de3b87aSKai Wang _ELF_DEFINE_EM(EM_METAG,            174,				\
8182de3b87aSKai Wang 	"Imagination Technologies META processor architecture")		\
8192de3b87aSKai Wang _ELF_DEFINE_EM(EM_MCST_ELBRUS,      175,				\
8202de3b87aSKai Wang 	"MCST Elbrus general purpose hardware architecture")		\
8212de3b87aSKai Wang _ELF_DEFINE_EM(EM_ECOG16,           176,				\
8222de3b87aSKai Wang 	"Cyan Technology eCOG16 family")				\
8232de3b87aSKai Wang _ELF_DEFINE_EM(EM_CR16,             177,				\
8242de3b87aSKai Wang 	"National Semiconductor CompactRISC CR16 16-bit microprocessor") \
8252de3b87aSKai Wang _ELF_DEFINE_EM(EM_ETPU,             178,				\
8262de3b87aSKai Wang 	"Freescale Extended Time Processing Unit")			\
8272de3b87aSKai Wang _ELF_DEFINE_EM(EM_SLE9X,            179,				\
8282de3b87aSKai Wang 	"Infineon Technologies SLE9X core")				\
829b3f26809SEd Maste _ELF_DEFINE_EM(EM_AARCH64,          183,				\
830b3f26809SEd Maste 	"AArch64 (64-bit ARM)")						\
8312de3b87aSKai Wang _ELF_DEFINE_EM(EM_AVR32,            185,				\
8322de3b87aSKai Wang 	"Atmel Corporation 32-bit microprocessor family")		\
8332de3b87aSKai Wang _ELF_DEFINE_EM(EM_STM8,             186,				\
8342de3b87aSKai Wang 	"STMicroeletronics STM8 8-bit microcontroller")			\
8352de3b87aSKai Wang _ELF_DEFINE_EM(EM_TILE64,           187,				\
8362de3b87aSKai Wang 	"Tilera TILE64 multicore architecture family")			\
8372de3b87aSKai Wang _ELF_DEFINE_EM(EM_TILEPRO,          188,				\
8382de3b87aSKai Wang 	"Tilera TILEPro multicore architecture family")			\
8392de3b87aSKai Wang _ELF_DEFINE_EM(EM_MICROBLAZE,       189,				\
8402de3b87aSKai Wang 	"Xilinx MicroBlaze 32-bit RISC soft processor core")		\
8412de3b87aSKai Wang _ELF_DEFINE_EM(EM_CUDA,             190, "NVIDIA CUDA architecture")	\
8422de3b87aSKai Wang _ELF_DEFINE_EM(EM_TILEGX,           191,				\
8432de3b87aSKai Wang 	"Tilera TILE-Gx multicore architecture family")			\
8442de3b87aSKai Wang _ELF_DEFINE_EM(EM_CLOUDSHIELD,      192,				\
8452de3b87aSKai Wang 	"CloudShield architecture family")				\
8462de3b87aSKai Wang _ELF_DEFINE_EM(EM_COREA_1ST,        193,				\
8472de3b87aSKai Wang 	"KIPO-KAIST Core-A 1st generation processor family")		\
8482de3b87aSKai Wang _ELF_DEFINE_EM(EM_COREA_2ND,        194,				\
8492de3b87aSKai Wang 	"KIPO-KAIST Core-A 2nd generation processor family")		\
8502de3b87aSKai Wang _ELF_DEFINE_EM(EM_ARC_COMPACT2,     195, "Synopsys ARCompact V2")	\
8512de3b87aSKai Wang _ELF_DEFINE_EM(EM_OPEN8,            196,				\
8522de3b87aSKai Wang 	"Open8 8-bit RISC soft processor core")				\
8532de3b87aSKai Wang _ELF_DEFINE_EM(EM_RL78,             197, "Renesas RL78 family")		\
8542de3b87aSKai Wang _ELF_DEFINE_EM(EM_VIDEOCORE5,       198, "Broadcom VideoCore V processor") \
8552de3b87aSKai Wang _ELF_DEFINE_EM(EM_78KOR,            199, "Renesas 78KOR family")	\
8562de3b87aSKai Wang _ELF_DEFINE_EM(EM_56800EX,          200,				\
8572de3b87aSKai Wang 	"Freescale 56800EX Digital Signal Controller")			\
8582de3b87aSKai Wang _ELF_DEFINE_EM(EM_BA1,              201, "Beyond BA1 CPU architecture")	\
8592de3b87aSKai Wang _ELF_DEFINE_EM(EM_BA2,              202, "Beyond BA2 CPU architecture")	\
8602de3b87aSKai Wang _ELF_DEFINE_EM(EM_XCORE,            203, "XMOS xCORE processor family") \
8612de3b87aSKai Wang _ELF_DEFINE_EM(EM_MCHP_PIC,         204, "Microchip 8-bit PIC(r) family") \
8622de3b87aSKai Wang _ELF_DEFINE_EM(EM_INTEL205,         205, "Reserved by Intel")           \
8632de3b87aSKai Wang _ELF_DEFINE_EM(EM_INTEL206,         206, "Reserved by Intel")           \
8642de3b87aSKai Wang _ELF_DEFINE_EM(EM_INTEL207,         207, "Reserved by Intel")           \
8652de3b87aSKai Wang _ELF_DEFINE_EM(EM_INTEL208,         208, "Reserved by Intel")           \
8662de3b87aSKai Wang _ELF_DEFINE_EM(EM_INTEL209,         209, "Reserved by Intel")           \
8672de3b87aSKai Wang _ELF_DEFINE_EM(EM_KM32,             210, "KM211 KM32 32-bit processor") \
8682de3b87aSKai Wang _ELF_DEFINE_EM(EM_KMX32,            211, "KM211 KMX32 32-bit processor") \
8692de3b87aSKai Wang _ELF_DEFINE_EM(EM_KMX16,            212, "KM211 KMX16 16-bit processor") \
8702de3b87aSKai Wang _ELF_DEFINE_EM(EM_KMX8,             213, "KM211 KMX8 8-bit processor")  \
871119b7592SEd Maste _ELF_DEFINE_EM(EM_KVARC,            214, "KM211 KMX32 KVARC processor") \
872119b7592SEd Maste _ELF_DEFINE_EM(EM_RISCV,            243, "RISC-V")
8732de3b87aSKai Wang 
8742de3b87aSKai Wang #undef	_ELF_DEFINE_EM
8752de3b87aSKai Wang #define	_ELF_DEFINE_EM(N, V, DESCR)	N = V ,
8762de3b87aSKai Wang enum {
8772de3b87aSKai Wang 	_ELF_DEFINE_ELF_MACHINES()
8782de3b87aSKai Wang 	EM__LAST__
8792de3b87aSKai Wang };
8802de3b87aSKai Wang 
881cf781b2eSEd Maste /* Other synonyms. */
882cf781b2eSEd Maste #define	EM_AMD64		EM_X86_64
8832de3b87aSKai Wang #define	EM_ARC_A5		EM_ARC_COMPACT
8842de3b87aSKai Wang 
8852de3b87aSKai Wang /*
8862de3b87aSKai Wang  * ELF file types: (ET_*).
8872de3b87aSKai Wang  */
8882de3b87aSKai Wang #define	_ELF_DEFINE_ELF_TYPES()						\
8892de3b87aSKai Wang _ELF_DEFINE_ET(ET_NONE,   0,	    "No file type")			\
8902de3b87aSKai Wang _ELF_DEFINE_ET(ET_REL,    1, 	    "Relocatable object")		\
8912de3b87aSKai Wang _ELF_DEFINE_ET(ET_EXEC,   2, 	    "Executable")			\
8922de3b87aSKai Wang _ELF_DEFINE_ET(ET_DYN,    3, 	    "Shared object")			\
8932de3b87aSKai Wang _ELF_DEFINE_ET(ET_CORE,   4, 	    "Core file")			\
8942de3b87aSKai Wang _ELF_DEFINE_ET(ET_LOOS,   0xFE00U,  "Begin OS-specific range")		\
8952de3b87aSKai Wang _ELF_DEFINE_ET(ET_HIOS,   0xFEFFU,  "End OS-specific range")		\
8962de3b87aSKai Wang _ELF_DEFINE_ET(ET_LOPROC, 0xFF00U,  "Begin processor-specific range")	\
8972de3b87aSKai Wang _ELF_DEFINE_ET(ET_HIPROC, 0xFFFFU,  "End processor-specific range")
8982de3b87aSKai Wang 
8992de3b87aSKai Wang #undef	_ELF_DEFINE_ET
9002de3b87aSKai Wang #define	_ELF_DEFINE_ET(N, V, DESCR)	N = V ,
9012de3b87aSKai Wang enum {
9022de3b87aSKai Wang 	_ELF_DEFINE_ELF_TYPES()
9032de3b87aSKai Wang 	ET__LAST__
9042de3b87aSKai Wang };
9052de3b87aSKai Wang 
9062de3b87aSKai Wang /* ELF file format version numbers. */
9072de3b87aSKai Wang #define	EV_NONE		0
9082de3b87aSKai Wang #define	EV_CURRENT	1
9092de3b87aSKai Wang 
9102de3b87aSKai Wang /*
9112de3b87aSKai Wang  * Flags for section groups.
9122de3b87aSKai Wang  */
9132de3b87aSKai Wang #define	GRP_COMDAT 	0x1		/* COMDAT semantics */
9142de3b87aSKai Wang #define	GRP_MASKOS 	0x0ff00000	/* OS-specific flags */
9152de3b87aSKai Wang #define	GRP_MASKPROC 	0xf0000000	/* processor-specific flags */
9162de3b87aSKai Wang 
9172de3b87aSKai Wang /*
918656f49f8SEd Maste  * Flags / mask for .gnu.versym sections.
919656f49f8SEd Maste  */
920656f49f8SEd Maste #define	VERSYM_VERSION	0x7fff
921656f49f8SEd Maste #define	VERSYM_HIDDEN	0x8000
922656f49f8SEd Maste 
923656f49f8SEd Maste /*
9242de3b87aSKai Wang  * Flags used by program header table entries.
9252de3b87aSKai Wang  */
9262de3b87aSKai Wang 
9272de3b87aSKai Wang #define	_ELF_DEFINE_PHDR_FLAGS()					\
9282de3b87aSKai Wang _ELF_DEFINE_PF(PF_X,                0x1, "Execute")			\
9292de3b87aSKai Wang _ELF_DEFINE_PF(PF_W,                0x2, "Write")			\
9302de3b87aSKai Wang _ELF_DEFINE_PF(PF_R,                0x4, "Read")			\
9312de3b87aSKai Wang _ELF_DEFINE_PF(PF_MASKOS,           0x0ff00000, "OS-specific flags")	\
9322de3b87aSKai Wang _ELF_DEFINE_PF(PF_MASKPROC,         0xf0000000, "Processor-specific flags") \
9332de3b87aSKai Wang _ELF_DEFINE_PF(PF_ARM_SB,           0x10000000,				\
9342de3b87aSKai Wang 	"segment contains the location addressed by the static base")	\
9352de3b87aSKai Wang _ELF_DEFINE_PF(PF_ARM_PI,           0x20000000,				\
9362de3b87aSKai Wang 	"segment is position-independent")				\
9372de3b87aSKai Wang _ELF_DEFINE_PF(PF_ARM_ABS,          0x40000000,				\
9382de3b87aSKai Wang 	"segment must be loaded at its base address")
9392de3b87aSKai Wang 
9402de3b87aSKai Wang #undef	_ELF_DEFINE_PF
9412de3b87aSKai Wang #define	_ELF_DEFINE_PF(N, V, DESCR)	N = V ,
9422de3b87aSKai Wang enum {
9432de3b87aSKai Wang 	_ELF_DEFINE_PHDR_FLAGS()
9442de3b87aSKai Wang 	PF__LAST__
9452de3b87aSKai Wang };
9462de3b87aSKai Wang 
9472de3b87aSKai Wang /*
9482de3b87aSKai Wang  * Types of program header table entries.
9492de3b87aSKai Wang  */
9502de3b87aSKai Wang 
9512de3b87aSKai Wang #define	_ELF_DEFINE_PHDR_TYPES()				\
9522de3b87aSKai Wang _ELF_DEFINE_PT(PT_NULL,             0, "ignored entry")		\
9532de3b87aSKai Wang _ELF_DEFINE_PT(PT_LOAD,             1, "loadable segment")	\
9542de3b87aSKai Wang _ELF_DEFINE_PT(PT_DYNAMIC,          2,				\
9552de3b87aSKai Wang 	"contains dynamic linking information")			\
9562de3b87aSKai Wang _ELF_DEFINE_PT(PT_INTERP,           3, "names an interpreter")	\
9572de3b87aSKai Wang _ELF_DEFINE_PT(PT_NOTE,             4, "auxiliary information")	\
9582de3b87aSKai Wang _ELF_DEFINE_PT(PT_SHLIB,            5, "reserved")		\
9592de3b87aSKai Wang _ELF_DEFINE_PT(PT_PHDR,             6,				\
9602de3b87aSKai Wang 	"describes the program header itself")			\
9612de3b87aSKai Wang _ELF_DEFINE_PT(PT_TLS,              7, "thread local storage")	\
9622de3b87aSKai Wang _ELF_DEFINE_PT(PT_LOOS,             0x60000000UL,		\
9632de3b87aSKai Wang 	"start of OS-specific range")				\
9642de3b87aSKai Wang _ELF_DEFINE_PT(PT_SUNW_UNWIND,      0x6464E550UL,		\
9652de3b87aSKai Wang 	"Solaris/amd64 stack unwind tables")			\
9662de3b87aSKai Wang _ELF_DEFINE_PT(PT_GNU_EH_FRAME,     0x6474E550UL,		\
9672de3b87aSKai Wang 	"GCC generated .eh_frame_hdr segment")			\
9682de3b87aSKai Wang _ELF_DEFINE_PT(PT_GNU_STACK,	    0x6474E551UL,		\
9692de3b87aSKai Wang 	"Stack flags")						\
9702de3b87aSKai Wang _ELF_DEFINE_PT(PT_GNU_RELRO,	    0x6474E552UL,		\
9712de3b87aSKai Wang 	"Segment becomes read-only after relocation")		\
972bee2765cSEd Maste _ELF_DEFINE_PT(PT_OPENBSD_RANDOMIZE,0x65A3DBE6UL,		\
973bee2765cSEd Maste 	"Segment filled with random data")			\
974bee2765cSEd Maste _ELF_DEFINE_PT(PT_OPENBSD_WXNEEDED, 0x65A3DBE7UL,		\
975bee2765cSEd Maste 	"Program violates W^X")					\
976bee2765cSEd Maste _ELF_DEFINE_PT(PT_OPENBSD_BOOTDATA, 0x65A41BE6UL,		\
977bee2765cSEd Maste 	"Boot data")						\
9782de3b87aSKai Wang _ELF_DEFINE_PT(PT_SUNWBSS,          0x6FFFFFFAUL,		\
9792de3b87aSKai Wang 	"A Solaris .SUNW_bss section")				\
9802de3b87aSKai Wang _ELF_DEFINE_PT(PT_SUNWSTACK,        0x6FFFFFFBUL,		\
9812de3b87aSKai Wang 	"A Solaris process stack")				\
9822de3b87aSKai Wang _ELF_DEFINE_PT(PT_SUNWDTRACE,       0x6FFFFFFCUL,		\
9832de3b87aSKai Wang 	"Used by dtrace(1)")					\
9842de3b87aSKai Wang _ELF_DEFINE_PT(PT_SUNWCAP,          0x6FFFFFFDUL,		\
9852de3b87aSKai Wang 	"Special hardware capability requirements")		\
9862de3b87aSKai Wang _ELF_DEFINE_PT(PT_HIOS,             0x6FFFFFFFUL,		\
9872de3b87aSKai Wang 	"end of OS-specific range")				\
9882de3b87aSKai Wang _ELF_DEFINE_PT(PT_LOPROC,           0x70000000UL,		\
9892de3b87aSKai Wang 	"start of processor-specific range")			\
9902de3b87aSKai Wang _ELF_DEFINE_PT(PT_ARM_ARCHEXT,      0x70000000UL,		\
9912de3b87aSKai Wang 	"platform architecture compatibility information")	\
9922de3b87aSKai Wang _ELF_DEFINE_PT(PT_ARM_EXIDX,        0x70000001UL,		\
9932de3b87aSKai Wang 	"exception unwind tables")				\
9942de3b87aSKai Wang _ELF_DEFINE_PT(PT_MIPS_REGINFO,     0x70000000UL,		\
9952de3b87aSKai Wang 	"register usage information")				\
9962de3b87aSKai Wang _ELF_DEFINE_PT(PT_MIPS_RTPROC,      0x70000001UL,		\
9972de3b87aSKai Wang 	"runtime procedure table")				\
9982de3b87aSKai Wang _ELF_DEFINE_PT(PT_MIPS_OPTIONS,     0x70000002UL,		\
9992de3b87aSKai Wang 	"options segment")					\
10002de3b87aSKai Wang _ELF_DEFINE_PT(PT_HIPROC,           0x7FFFFFFFUL,		\
10012de3b87aSKai Wang 	"end of processor-specific range")
10022de3b87aSKai Wang 
10032de3b87aSKai Wang #undef	_ELF_DEFINE_PT
10042de3b87aSKai Wang #define	_ELF_DEFINE_PT(N, V, DESCR)	N = V ,
10052de3b87aSKai Wang enum {
10062de3b87aSKai Wang 	_ELF_DEFINE_PHDR_TYPES()
10072de3b87aSKai Wang 	PT__LAST__ = PT_HIPROC
10082de3b87aSKai Wang };
10092de3b87aSKai Wang 
10102de3b87aSKai Wang /* synonyms. */
10112de3b87aSKai Wang #define	PT_ARM_UNWIND	PT_ARM_EXIDX
10122de3b87aSKai Wang #define	PT_HISUNW	PT_HIOS
10132de3b87aSKai Wang #define	PT_LOSUNW	PT_SUNWBSS
10142de3b87aSKai Wang 
10152de3b87aSKai Wang /*
10162de3b87aSKai Wang  * Section flags.
10172de3b87aSKai Wang  */
10182de3b87aSKai Wang 
10192de3b87aSKai Wang #define	_ELF_DEFINE_SECTION_FLAGS()					\
10202de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_WRITE,           0x1,				\
10212de3b87aSKai Wang 	"writable during program execution")				\
10222de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_ALLOC,           0x2,				\
10232de3b87aSKai Wang 	"occupies memory during program execution")			\
10242de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_EXECINSTR,       0x4, "executable instructions")	\
10252de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MERGE,           0x10,				\
10262de3b87aSKai Wang 	"may be merged to prevent duplication")				\
10272de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_STRINGS,         0x20,				\
10282de3b87aSKai Wang 	"NUL-terminated character strings")				\
10292de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_INFO_LINK,       0x40,				\
10302de3b87aSKai Wang 	"the sh_info field holds a link")				\
10312de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_LINK_ORDER,      0x80,				\
10322de3b87aSKai Wang 	"special ordering requirements during linking")			\
10332de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_OS_NONCONFORMING, 0x100,				\
10342de3b87aSKai Wang 	"requires OS-specific processing during linking")		\
10352de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_GROUP,           0x200,				\
10362de3b87aSKai Wang 	"member of a section group")					\
10372de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_TLS,             0x400,				\
10382de3b87aSKai Wang 	"holds thread-local storage")					\
10392de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_COMPRESSED,      0x800,				\
10402de3b87aSKai Wang 	"holds compressed data")					\
10412de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MASKOS,          0x0FF00000UL,			\
10422de3b87aSKai Wang 	"bits reserved for OS-specific semantics")			\
10432de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_AMD64_LARGE,     0x10000000UL,			\
10442de3b87aSKai Wang 	"section uses large code model")				\
10452de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_ENTRYSECT,       0x10000000UL,			\
10462de3b87aSKai Wang 	"section contains an entry point (ARM)")			\
10472de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_COMDEF,          0x80000000UL,			\
10482de3b87aSKai Wang 	"section may be multiply defined in input to link step (ARM)")	\
10492de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MIPS_GPREL,      0x10000000UL,			\
10502de3b87aSKai Wang 	"section must be part of global data area")			\
10512de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MIPS_MERGE,      0x20000000UL,			\
10522de3b87aSKai Wang 	"section data should be merged to eliminate duplication")	\
10532de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MIPS_ADDR,       0x40000000UL,			\
10542de3b87aSKai Wang 	"section data is addressed by default")				\
10552de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MIPS_STRING,     0x80000000UL,			\
10562de3b87aSKai Wang 	"section data is string data by default")			\
10572de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MIPS_NOSTRIP,    0x08000000UL,			\
10582de3b87aSKai Wang 	"section data may not be stripped")				\
10592de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MIPS_LOCAL,      0x04000000UL,			\
10602de3b87aSKai Wang 	"section data local to process")				\
10612de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MIPS_NAMES,      0x02000000UL,			\
10622de3b87aSKai Wang 	"linker must generate implicit hidden weak names")		\
10632de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MIPS_NODUPE,     0x01000000UL,			\
10642de3b87aSKai Wang 	"linker must retain only one copy")				\
10652de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_ORDERED,         0x40000000UL,			\
10662de3b87aSKai Wang 	"section is ordered with respect to other sections")		\
10672de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_EXCLUDE,	     0x80000000UL,			\
10682de3b87aSKai Wang 	"section is excluded from executables and shared objects")	\
10692de3b87aSKai Wang _ELF_DEFINE_SHF(SHF_MASKPROC,        0xF0000000UL,			\
10702de3b87aSKai Wang 	"bits reserved for processor-specific semantics")
10712de3b87aSKai Wang 
10722de3b87aSKai Wang #undef	_ELF_DEFINE_SHF
10732de3b87aSKai Wang #define	_ELF_DEFINE_SHF(N, V, DESCR)	N = V ,
10742de3b87aSKai Wang enum {
10752de3b87aSKai Wang 	_ELF_DEFINE_SECTION_FLAGS()
10762de3b87aSKai Wang 	SHF__LAST__
10772de3b87aSKai Wang };
10782de3b87aSKai Wang 
10792de3b87aSKai Wang /*
10802de3b87aSKai Wang  * Special section indices.
10812de3b87aSKai Wang  */
10822de3b87aSKai Wang #define _ELF_DEFINE_SECTION_INDICES()					\
10832de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_UNDEF, 	0, 	 "undefined section")		\
10842de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_LORESERVE, 	0xFF00U, "start of reserved area")	\
10852de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_LOPROC, 	0xFF00U,				\
10862de3b87aSKai Wang 	"start of processor-specific range")				\
10872de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_BEFORE,	0xFF00U, "used for section ordering")	\
10882de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_AFTER,	0xFF01U, "used for section ordering")	\
10892de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_AMD64_LCOMMON, 0xFF02U, "large common block label") \
10902de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_MIPS_ACOMMON, 0xFF00U,				\
10912de3b87aSKai Wang 	"allocated common symbols in a DSO")				\
10922de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_MIPS_TEXT,	0xFF01U, "Reserved (obsolete)")		\
10932de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_MIPS_DATA,	0xFF02U, "Reserved (obsolete)")		\
10942de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_MIPS_SCOMMON, 0xFF03U,				\
10952de3b87aSKai Wang 	"gp-addressable common symbols")				\
10962de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_MIPS_SUNDEFINED, 0xFF04U,				\
10972de3b87aSKai Wang 	"gp-addressable undefined symbols")				\
10982de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_MIPS_LCOMMON, 0xFF05U, "local common symbols")	\
10992de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_MIPS_LUNDEFINED, 0xFF06U,				\
11002de3b87aSKai Wang 	"local undefined symbols")					\
11012de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_HIPROC, 	0xFF1FU,				\
11022de3b87aSKai Wang 	"end of processor-specific range")				\
11032de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_LOOS, 	0xFF20U,				\
11042de3b87aSKai Wang 	"start of OS-specific range")					\
11052de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_SUNW_IGNORE, 0xFF3FU, "used by dtrace")		\
11062de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_HIOS, 	0xFF3FU,				\
11072de3b87aSKai Wang 	"end of OS-specific range")					\
11082de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_ABS, 	0xFFF1U, "absolute references")		\
11092de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_COMMON, 	0xFFF2U, "references to COMMON areas")	\
11102de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_XINDEX, 	0xFFFFU, "extended index")		\
11112de3b87aSKai Wang _ELF_DEFINE_SHN(SHN_HIRESERVE, 	0xFFFFU, "end of reserved area")
11122de3b87aSKai Wang 
11132de3b87aSKai Wang #undef	_ELF_DEFINE_SHN
11142de3b87aSKai Wang #define	_ELF_DEFINE_SHN(N, V, DESCR)	N = V ,
11152de3b87aSKai Wang enum {
11162de3b87aSKai Wang 	_ELF_DEFINE_SECTION_INDICES()
11172de3b87aSKai Wang 	SHN__LAST__
11182de3b87aSKai Wang };
11192de3b87aSKai Wang 
11202de3b87aSKai Wang /*
11212de3b87aSKai Wang  * Section types.
11222de3b87aSKai Wang  */
11232de3b87aSKai Wang 
11242de3b87aSKai Wang #define	_ELF_DEFINE_SECTION_TYPES()					\
11252de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_NULL,            0, "inactive header")		\
11262de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_PROGBITS,        1, "program defined information")	\
11272de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SYMTAB,          2, "symbol table")			\
11282de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_STRTAB,          3, "string table")			\
11292de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_RELA,            4,					\
11302de3b87aSKai Wang 	"relocation entries with addends")				\
11312de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_HASH,            5, "symbol hash table")		\
11322de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_DYNAMIC,         6,					\
11332de3b87aSKai Wang 	"information for dynamic linking")				\
11342de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_NOTE,            7, "additional notes")		\
11352de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_NOBITS,          8, "section occupying no space")	\
11362de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_REL,             9,					\
11372de3b87aSKai Wang 	"relocation entries without addends")				\
11382de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SHLIB,           10, "reserved")			\
11392de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_DYNSYM,          11, "symbol table")		\
11402de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_INIT_ARRAY,      14,				\
11412de3b87aSKai Wang 	"pointers to initialization functions")				\
11422de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_FINI_ARRAY,      15,				\
11432de3b87aSKai Wang 	"pointers to termination functions")				\
11442de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_PREINIT_ARRAY,   16,				\
11452de3b87aSKai Wang 	"pointers to functions called before initialization")		\
11462de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_GROUP,           17, "defines a section group")	\
11472de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SYMTAB_SHNDX,    18,				\
11482de3b87aSKai Wang 	"used for extended section numbering")				\
11492de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_LOOS,            0x60000000UL,			\
11502de3b87aSKai Wang 	"start of OS-specific range")					\
11512de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_dof,	     0x6FFFFFF4UL,			\
11522de3b87aSKai Wang 	"used by dtrace")						\
11532de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_cap,	     0x6FFFFFF5UL,			\
11542de3b87aSKai Wang 	"capability requirements")					\
11552de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_GNU_ATTRIBUTES,  0x6FFFFFF5UL,			\
11562de3b87aSKai Wang 	"object attributes")						\
11572de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_SIGNATURE,  0x6FFFFFF6UL,			\
11582de3b87aSKai Wang 	"module verification signature")				\
11592de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_GNU_HASH,	     0x6FFFFFF6UL,			\
11602de3b87aSKai Wang 	"GNU Hash sections")						\
11612de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_GNU_LIBLIST,     0x6FFFFFF7UL,			\
11622de3b87aSKai Wang 	"List of libraries to be prelinked")				\
11632de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_ANNOTATE,   0x6FFFFFF7UL,			\
11642de3b87aSKai Wang 	"special section where unresolved references are allowed")	\
11652de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_DEBUGSTR,   0x6FFFFFF8UL,			\
11662de3b87aSKai Wang 	"debugging information")					\
11672de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_CHECKSUM, 	     0x6FFFFFF8UL,			\
11682de3b87aSKai Wang 	"checksum for dynamic shared objects")				\
11692de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_DEBUG,      0x6FFFFFF9UL,			\
11702de3b87aSKai Wang 	"debugging information")					\
11712de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_move,       0x6FFFFFFAUL,			\
11722de3b87aSKai Wang 	"information to handle partially initialized symbols")		\
11732de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_COMDAT,     0x6FFFFFFBUL,			\
11742de3b87aSKai Wang 	"section supporting merging of multiple copies of data")	\
11752de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_syminfo,    0x6FFFFFFCUL,			\
11762de3b87aSKai Wang 	"additional symbol information")				\
11772de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_verdef,     0x6FFFFFFDUL,			\
11782de3b87aSKai Wang 	"symbol versioning information")				\
11792de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_verneed,    0x6FFFFFFEUL,			\
11802de3b87aSKai Wang 	"symbol versioning requirements")				\
11812de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SUNW_versym,     0x6FFFFFFFUL,			\
11822de3b87aSKai Wang 	"symbol versioning table")					\
11832de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_HIOS,            0x6FFFFFFFUL,			\
11842de3b87aSKai Wang 	"end of OS-specific range")					\
11852de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_LOPROC,          0x70000000UL,			\
11862de3b87aSKai Wang 	"start of processor-specific range")				\
11872de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_ARM_EXIDX,       0x70000001UL,			\
11882de3b87aSKai Wang 	"exception index table")					\
11892de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_ARM_PREEMPTMAP,  0x70000002UL,			\
11902de3b87aSKai Wang 	"BPABI DLL dynamic linking preemption map")			\
11912de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_ARM_ATTRIBUTES,  0x70000003UL,			\
11922de3b87aSKai Wang 	"object file compatibility attributes")				\
11932de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_ARM_DEBUGOVERLAY, 0x70000004UL,			\
11942de3b87aSKai Wang 	"overlay debug information")					\
11952de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_ARM_OVERLAYSECTION, 0x70000005UL,			\
11962de3b87aSKai Wang 	"overlay debug information")					\
11972de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_LIBLIST,    0x70000000UL,			\
11982de3b87aSKai Wang 	"DSO library information used in link")				\
11992de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_MSYM,       0x70000001UL,			\
12002de3b87aSKai Wang 	"MIPS symbol table extension")					\
12012de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_CONFLICT,   0x70000002UL,			\
12022de3b87aSKai Wang 	"symbol conflicting with DSO-defined symbols ")			\
12032de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_GPTAB,      0x70000003UL,			\
12042de3b87aSKai Wang 	"global pointer table")						\
12052de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_UCODE,      0x70000004UL,			\
12062de3b87aSKai Wang 	"reserved")							\
12072de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_DEBUG,      0x70000005UL,			\
12082de3b87aSKai Wang 	"reserved (obsolete debug information)")			\
12092de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_REGINFO,    0x70000006UL,			\
12102de3b87aSKai Wang 	"register usage information")					\
12112de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_PACKAGE,    0x70000007UL,			\
12122de3b87aSKai Wang 	"OSF reserved")							\
12132de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_PACKSYM,    0x70000008UL,			\
12142de3b87aSKai Wang 	"OSF reserved")							\
12152de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_RELD,       0x70000009UL,			\
12162de3b87aSKai Wang 	"dynamic relocation")						\
12172de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_IFACE,      0x7000000BUL,			\
12182de3b87aSKai Wang 	"subprogram interface information")				\
12192de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_CONTENT,    0x7000000CUL,			\
12202de3b87aSKai Wang 	"section content classification")				\
12212de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_OPTIONS,     0x7000000DUL,			\
12222de3b87aSKai Wang 	"general options")						\
12232de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_DELTASYM,   0x7000001BUL,			\
12242de3b87aSKai Wang 	"Delta C++: symbol table")					\
12252de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_DELTAINST,  0x7000001CUL,			\
12262de3b87aSKai Wang 	"Delta C++: instance table")					\
12272de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_DELTACLASS, 0x7000001DUL,			\
12282de3b87aSKai Wang 	"Delta C++: class table")					\
12292de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_DWARF,      0x7000001EUL,			\
12302de3b87aSKai Wang 	"DWARF debug information")					\
12312de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_DELTADECL,  0x7000001FUL,			\
12322de3b87aSKai Wang 	"Delta C++: declarations")					\
12332de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_SYMBOL_LIB, 0x70000020UL,			\
12342de3b87aSKai Wang 	"symbol-to-library mapping")					\
12352de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_EVENTS,     0x70000021UL,			\
12362de3b87aSKai Wang 	"event locations")						\
12372de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_TRANSLATE,  0x70000022UL,			\
12382de3b87aSKai Wang 	"???")								\
12392de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_PIXIE,      0x70000023UL,			\
12402de3b87aSKai Wang 	"special pixie sections")					\
12412de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_XLATE,      0x70000024UL,			\
12422de3b87aSKai Wang 	"address translation table")					\
12432de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_XLATE_DEBUG, 0x70000025UL,			\
12442de3b87aSKai Wang 	"SGI internal address translation table")			\
12452de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_WHIRL,      0x70000026UL,			\
12462de3b87aSKai Wang 	"intermediate code")						\
12472de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_EH_REGION,  0x70000027UL,			\
12482de3b87aSKai Wang 	"C++ exception handling region info")				\
12492de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_XLATE_OLD,  0x70000028UL,			\
12502de3b87aSKai Wang 	"obsolete")							\
12512de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_MIPS_PDR_EXCEPTION, 0x70000029UL,			\
12522de3b87aSKai Wang 	"runtime procedure descriptor table exception information")	\
1253656f49f8SEd Maste _ELF_DEFINE_SHT(SHT_MIPS_ABIFLAGS,   0x7000002AUL,			\
1254656f49f8SEd Maste 	"ABI flags")							\
12552de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_SPARC_GOTDATA,   0x70000000UL,			\
12562de3b87aSKai Wang 	"SPARC-specific data")						\
1257b6b6f9ccSEd Maste _ELF_DEFINE_SHT(SHT_X86_64_UNWIND,   0x70000001UL,			\
12582de3b87aSKai Wang 	"unwind tables for the AMD64")					\
12592de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_ORDERED,         0x7FFFFFFFUL,			\
12602de3b87aSKai Wang 	"sort entries in the section")					\
12612de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_HIPROC,          0x7FFFFFFFUL,			\
12622de3b87aSKai Wang 	"end of processor-specific range")				\
12632de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_LOUSER,          0x80000000UL,			\
12642de3b87aSKai Wang 	"start of application-specific range")				\
12652de3b87aSKai Wang _ELF_DEFINE_SHT(SHT_HIUSER,          0xFFFFFFFFUL,			\
12662de3b87aSKai Wang 	"end of application-specific range")
12672de3b87aSKai Wang 
12682de3b87aSKai Wang #undef	_ELF_DEFINE_SHT
12692de3b87aSKai Wang #define	_ELF_DEFINE_SHT(N, V, DESCR)	N = V ,
12702de3b87aSKai Wang enum {
12712de3b87aSKai Wang 	_ELF_DEFINE_SECTION_TYPES()
12722de3b87aSKai Wang 	SHT__LAST__ = SHT_HIUSER
12732de3b87aSKai Wang };
12742de3b87aSKai Wang 
12752de3b87aSKai Wang /* Aliases for section types. */
1276b6b6f9ccSEd Maste #define	SHT_AMD64_UNWIND	SHT_X86_64_UNWIND
12772de3b87aSKai Wang #define	SHT_GNU_verdef		SHT_SUNW_verdef
12782de3b87aSKai Wang #define	SHT_GNU_verneed		SHT_SUNW_verneed
12792de3b87aSKai Wang #define	SHT_GNU_versym		SHT_SUNW_versym
12802de3b87aSKai Wang 
12812de3b87aSKai Wang /*
12822de3b87aSKai Wang  * Symbol binding information.
12832de3b87aSKai Wang  */
12842de3b87aSKai Wang 
12852de3b87aSKai Wang #define	_ELF_DEFINE_SYMBOL_BINDING()					\
12862de3b87aSKai Wang _ELF_DEFINE_STB(STB_LOCAL,           0,					\
12872de3b87aSKai Wang 	"not visible outside defining object file")			\
12882de3b87aSKai Wang _ELF_DEFINE_STB(STB_GLOBAL,          1,					\
12892de3b87aSKai Wang 	"visible across all object files being combined")		\
12902de3b87aSKai Wang _ELF_DEFINE_STB(STB_WEAK,            2,					\
12912de3b87aSKai Wang 	"visible across all object files but with low precedence")	\
12922de3b87aSKai Wang _ELF_DEFINE_STB(STB_LOOS,            10, "start of OS-specific range")	\
1293839529caSEd Maste _ELF_DEFINE_STB(STB_GNU_UNIQUE,      10, "unique symbol (GNU)")		\
12942de3b87aSKai Wang _ELF_DEFINE_STB(STB_HIOS,            12, "end of OS-specific range")	\
12952de3b87aSKai Wang _ELF_DEFINE_STB(STB_LOPROC,          13,				\
12962de3b87aSKai Wang 	"start of processor-specific range")				\
12972de3b87aSKai Wang _ELF_DEFINE_STB(STB_HIPROC,          15,				\
12982de3b87aSKai Wang 	"end of processor-specific range")
12992de3b87aSKai Wang 
13002de3b87aSKai Wang #undef	_ELF_DEFINE_STB
13012de3b87aSKai Wang #define	_ELF_DEFINE_STB(N, V, DESCR)	N = V ,
13022de3b87aSKai Wang enum {
13032de3b87aSKai Wang 	_ELF_DEFINE_SYMBOL_BINDING()
13042de3b87aSKai Wang 	STB__LAST__
13052de3b87aSKai Wang };
13062de3b87aSKai Wang 
13072de3b87aSKai Wang /*
13082de3b87aSKai Wang  * Symbol types
13092de3b87aSKai Wang  */
13102de3b87aSKai Wang 
13112de3b87aSKai Wang #define	_ELF_DEFINE_SYMBOL_TYPES()					\
13122de3b87aSKai Wang _ELF_DEFINE_STT(STT_NOTYPE,          0, "unspecified type")		\
13132de3b87aSKai Wang _ELF_DEFINE_STT(STT_OBJECT,          1, "data object")			\
13142de3b87aSKai Wang _ELF_DEFINE_STT(STT_FUNC,            2, "executable code")		\
13152de3b87aSKai Wang _ELF_DEFINE_STT(STT_SECTION,         3, "section")			\
13162de3b87aSKai Wang _ELF_DEFINE_STT(STT_FILE,            4, "source file")			\
13172de3b87aSKai Wang _ELF_DEFINE_STT(STT_COMMON,          5, "uninitialized common block")	\
13182de3b87aSKai Wang _ELF_DEFINE_STT(STT_TLS,             6, "thread local storage")		\
13192de3b87aSKai Wang _ELF_DEFINE_STT(STT_LOOS,            10, "start of OS-specific types")	\
1320b6b6f9ccSEd Maste _ELF_DEFINE_STT(STT_GNU_IFUNC,       10, "indirect function")	\
13212de3b87aSKai Wang _ELF_DEFINE_STT(STT_HIOS,            12, "end of OS-specific types")	\
13222de3b87aSKai Wang _ELF_DEFINE_STT(STT_LOPROC,          13,				\
13232de3b87aSKai Wang 	"start of processor-specific types")				\
13242de3b87aSKai Wang _ELF_DEFINE_STT(STT_ARM_TFUNC,       13, "Thumb function (GNU)")	\
13252de3b87aSKai Wang _ELF_DEFINE_STT(STT_ARM_16BIT,       15, "Thumb label (GNU)")		\
1326839529caSEd Maste _ELF_DEFINE_STT(STT_SPARC_REGISTER,  13, "SPARC register information")	\
13272de3b87aSKai Wang _ELF_DEFINE_STT(STT_HIPROC,          15,				\
13282de3b87aSKai Wang 	"end of processor-specific types")
13292de3b87aSKai Wang 
13302de3b87aSKai Wang #undef	_ELF_DEFINE_STT
13312de3b87aSKai Wang #define	_ELF_DEFINE_STT(N, V, DESCR)	N = V ,
13322de3b87aSKai Wang enum {
13332de3b87aSKai Wang 	_ELF_DEFINE_SYMBOL_TYPES()
13342de3b87aSKai Wang 	STT__LAST__
13352de3b87aSKai Wang };
13362de3b87aSKai Wang 
13372de3b87aSKai Wang /*
13382de3b87aSKai Wang  * Symbol binding.
13392de3b87aSKai Wang  */
13402de3b87aSKai Wang 
13412de3b87aSKai Wang #define	_ELF_DEFINE_SYMBOL_BINDING_KINDS()		\
13422de3b87aSKai Wang _ELF_DEFINE_SYB(SYMINFO_BT_SELF,	0xFFFFU,	\
13432de3b87aSKai Wang 	"bound to self")				\
13442de3b87aSKai Wang _ELF_DEFINE_SYB(SYMINFO_BT_PARENT,	0xFFFEU,	\
13452de3b87aSKai Wang 	"bound to parent")				\
13462de3b87aSKai Wang _ELF_DEFINE_SYB(SYMINFO_BT_NONE,	0xFFFDU,	\
13472de3b87aSKai Wang 	"no special binding")
13482de3b87aSKai Wang 
13492de3b87aSKai Wang #undef	_ELF_DEFINE_SYB
13502de3b87aSKai Wang #define	_ELF_DEFINE_SYB(N, V, DESCR)	N = V ,
13512de3b87aSKai Wang enum {
13522de3b87aSKai Wang 	_ELF_DEFINE_SYMBOL_BINDING_KINDS()
13532de3b87aSKai Wang 	SYMINFO__LAST__
13542de3b87aSKai Wang };
13552de3b87aSKai Wang 
13562de3b87aSKai Wang /*
13572de3b87aSKai Wang  * Symbol visibility.
13582de3b87aSKai Wang  */
13592de3b87aSKai Wang 
13602de3b87aSKai Wang #define	_ELF_DEFINE_SYMBOL_VISIBILITY()		\
13612de3b87aSKai Wang _ELF_DEFINE_STV(STV_DEFAULT,         0,		\
13622de3b87aSKai Wang 	"as specified by symbol type")		\
13632de3b87aSKai Wang _ELF_DEFINE_STV(STV_INTERNAL,        1,		\
13642de3b87aSKai Wang 	"as defined by processor semantics")	\
13652de3b87aSKai Wang _ELF_DEFINE_STV(STV_HIDDEN,          2,		\
13662de3b87aSKai Wang 	"hidden from other components")		\
13672de3b87aSKai Wang _ELF_DEFINE_STV(STV_PROTECTED,       3,		\
13682de3b87aSKai Wang 	"local references are not preemptable")
13692de3b87aSKai Wang 
13702de3b87aSKai Wang #undef	_ELF_DEFINE_STV
13712de3b87aSKai Wang #define	_ELF_DEFINE_STV(N, V, DESCR)	N = V ,
13722de3b87aSKai Wang enum {
13732de3b87aSKai Wang 	_ELF_DEFINE_SYMBOL_VISIBILITY()
13742de3b87aSKai Wang 	STV__LAST__
13752de3b87aSKai Wang };
13762de3b87aSKai Wang 
13772de3b87aSKai Wang /*
13782de3b87aSKai Wang  * Symbol flags.
13792de3b87aSKai Wang  */
13802de3b87aSKai Wang #define	_ELF_DEFINE_SYMBOL_FLAGS()		\
13812de3b87aSKai Wang _ELF_DEFINE_SYF(SYMINFO_FLG_DIRECT,	0x01,	\
13822de3b87aSKai Wang 	"directly assocated reference")		\
13832de3b87aSKai Wang _ELF_DEFINE_SYF(SYMINFO_FLG_COPY,	0x04,	\
13842de3b87aSKai Wang 	"definition by copy-relocation")	\
13852de3b87aSKai Wang _ELF_DEFINE_SYF(SYMINFO_FLG_LAZYLOAD,	0x08,	\
13862de3b87aSKai Wang 	"object should be lazily loaded")	\
13872de3b87aSKai Wang _ELF_DEFINE_SYF(SYMINFO_FLG_DIRECTBIND,	0x10,	\
13882de3b87aSKai Wang 	"reference should be directly bound")	\
13892de3b87aSKai Wang _ELF_DEFINE_SYF(SYMINFO_FLG_NOEXTDIRECT, 0x20,	\
13902de3b87aSKai Wang 	"external references not allowed to bind to definition")
13912de3b87aSKai Wang 
13922de3b87aSKai Wang #undef	_ELF_DEFINE_SYF
13932de3b87aSKai Wang #define	_ELF_DEFINE_SYF(N, V, DESCR)	N = V ,
13942de3b87aSKai Wang enum {
13952de3b87aSKai Wang 	_ELF_DEFINE_SYMBOL_FLAGS()
13962de3b87aSKai Wang 	SYMINFO_FLG__LAST__
13972de3b87aSKai Wang };
13982de3b87aSKai Wang 
13992de3b87aSKai Wang /*
14002de3b87aSKai Wang  * Version dependencies.
14012de3b87aSKai Wang  */
14022de3b87aSKai Wang #define	_ELF_DEFINE_VERSIONING_DEPENDENCIES()			\
14032de3b87aSKai Wang _ELF_DEFINE_VERD(VER_NDX_LOCAL,		0,	"local scope")	\
14042de3b87aSKai Wang _ELF_DEFINE_VERD(VER_NDX_GLOBAL,	1,	"global scope")
14052de3b87aSKai Wang #undef	_ELF_DEFINE_VERD
14062de3b87aSKai Wang #define	_ELF_DEFINE_VERD(N, V, DESCR)	N = V ,
14072de3b87aSKai Wang enum {
14082de3b87aSKai Wang 	_ELF_DEFINE_VERSIONING_DEPENDENCIES()
14092de3b87aSKai Wang 	VER_NDX__LAST__
14102de3b87aSKai Wang };
14112de3b87aSKai Wang 
14122de3b87aSKai Wang /*
14132de3b87aSKai Wang  * Version flags.
14142de3b87aSKai Wang  */
14152de3b87aSKai Wang #define	_ELF_DEFINE_VERSIONING_FLAGS()				\
14162de3b87aSKai Wang _ELF_DEFINE_VERF(VER_FLG_BASE,		0x1,	"file version") \
14172de3b87aSKai Wang _ELF_DEFINE_VERF(VER_FLG_WEAK,		0x2,	"weak version")
14182de3b87aSKai Wang #undef	_ELF_DEFINE_VERF
14192de3b87aSKai Wang #define	_ELF_DEFINE_VERF(N, V, DESCR)	N = V ,
14202de3b87aSKai Wang enum {
14212de3b87aSKai Wang 	_ELF_DEFINE_VERSIONING_FLAGS()
14222de3b87aSKai Wang 	VER_FLG__LAST__
14232de3b87aSKai Wang };
14242de3b87aSKai Wang 
14252de3b87aSKai Wang /*
14262de3b87aSKai Wang  * Version needs
14272de3b87aSKai Wang  */
14282de3b87aSKai Wang #define	_ELF_DEFINE_VERSIONING_NEEDS()					\
14292de3b87aSKai Wang _ELF_DEFINE_VRN(VER_NEED_NONE,		0,	"invalid version")	\
14302de3b87aSKai Wang _ELF_DEFINE_VRN(VER_NEED_CURRENT,	1,	"current version")
14312de3b87aSKai Wang #undef	_ELF_DEFINE_VRN
14322de3b87aSKai Wang #define	_ELF_DEFINE_VRN(N, V, DESCR)	N = V ,
14332de3b87aSKai Wang enum {
14342de3b87aSKai Wang 	_ELF_DEFINE_VERSIONING_NEEDS()
14352de3b87aSKai Wang 	VER_NEED__LAST__
14362de3b87aSKai Wang };
14372de3b87aSKai Wang 
14382de3b87aSKai Wang /*
14392de3b87aSKai Wang  * Version numbers.
14402de3b87aSKai Wang  */
14412de3b87aSKai Wang #define	_ELF_DEFINE_VERSIONING_NUMBERS()				\
14422de3b87aSKai Wang _ELF_DEFINE_VRNU(VER_DEF_NONE,		0,	"invalid version")	\
14432de3b87aSKai Wang _ELF_DEFINE_VRNU(VER_DEF_CURRENT,	1, 	"current version")
14442de3b87aSKai Wang #undef	_ELF_DEFINE_VRNU
14452de3b87aSKai Wang #define	_ELF_DEFINE_VRNU(N, V, DESCR)	N = V ,
14462de3b87aSKai Wang enum {
14472de3b87aSKai Wang 	_ELF_DEFINE_VERSIONING_NUMBERS()
14482de3b87aSKai Wang 	VER_DEF__LAST__
14492de3b87aSKai Wang };
14502de3b87aSKai Wang 
14512de3b87aSKai Wang /**
14522de3b87aSKai Wang  ** Relocation types.
14532de3b87aSKai Wang  **/
14542de3b87aSKai Wang 
14552de3b87aSKai Wang #define	_ELF_DEFINE_386_RELOCATIONS()		\
14562de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_NONE,		0)	\
14572de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_32,		1)	\
14582de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_PC32,		2)	\
14592de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_GOT32,		3)	\
14602de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_PLT32,		4)	\
14612de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_COPY,		5)	\
14622de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_GLOB_DAT,	6)	\
1463839529caSEd Maste _ELF_DEFINE_RELOC(R_386_JUMP_SLOT,	7)	\
14642de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_RELATIVE,	8)	\
14652de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_GOTOFF,		9)	\
14662de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_GOTPC,		10)	\
14672de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_32PLT,		11)	\
1468b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_TPOFF,	14)	\
1469b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_IE,		15)	\
1470b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_GOTIE,	16)	\
1471b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_LE,		17)	\
1472b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_GD,		18)	\
1473b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_LDM,	19)	\
14742de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_16,		20)	\
14752de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_PC16,		21)	\
14762de3b87aSKai Wang _ELF_DEFINE_RELOC(R_386_8,		22)	\
1477b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_PC8,		23)	\
1478b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_GD_32,	24)	\
1479b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_GD_PUSH,	25)	\
1480b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_GD_CALL,	26)	\
1481b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_GD_POP,	27)	\
1482b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_LDM_32,	28)	\
1483b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_LDM_PUSH,	29)	\
1484b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_LDM_CALL,	30)	\
1485b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_LDM_POP,	31)	\
1486b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_LDO_32,	32)	\
1487b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_IE_32,	33)	\
1488b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_LE_32,	34)	\
1489b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_DTPMOD32,	35)	\
1490b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_DTPOFF32,	36)	\
1491b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_TPOFF32,	37)	\
1492b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_SIZE32,		38)	\
1493b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_GOTDESC,	39)	\
1494b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_DESC_CALL,	40)	\
1495b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_TLS_DESC,	41)	\
1496b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_IRELATIVE,	42)	\
1497b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_386_GOT32X,		43)
1498b6b6f9ccSEd Maste 
14992de3b87aSKai Wang 
15002de3b87aSKai Wang /*
150171a0c925SEd Maste  */
150271a0c925SEd Maste #define	_ELF_DEFINE_AARCH64_RELOCATIONS()				\
1503839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_NONE,				0)	\
150471a0c925SEd Maste _ELF_DEFINE_RELOC(R_AARCH64_ABS64,				257)	\
150571a0c925SEd Maste _ELF_DEFINE_RELOC(R_AARCH64_ABS32,				258)	\
1506839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_ABS16,				259)	\
1507839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_PREL64,				260)	\
1508839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_PREL32,				261)	\
1509839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_PREL16,				262)	\
1510839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_UABS_G0,			263)	\
1511839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_UABS_G0_NC,			264)	\
1512839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_UABS_G1,			265)	\
1513839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_UABS_G1_NC,			266)	\
1514839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_UABS_G2,			267)	\
1515839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_UABS_G2_NC,			268)	\
1516839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_UABS_G3,			269)	\
1517839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_SABS_G0,			270)	\
1518839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_SABS_G1,			271)	\
1519839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_SABS_G2,			272)	\
1520839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LD_PREL_LO19,			273)	\
1521839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_ADR_PREL_LO21,			274)	\
1522839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_ADR_PREL_PG_HI21,			275)	\
1523839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_ADR_PREL_PG_HI21_NC,		276)	\
1524839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_ADD_ABS_LO12_NC,			277)	\
1525839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LDST8_ABS_LO12_NC,			278)	\
1526839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TSTBR14,				279)	\
1527839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_CONDBR19,				280)	\
1528839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_JUMP26,				282)	\
1529839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_CALL26,				283)	\
1530839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LDST16_ABS_LO12_NC,			284)	\
1531839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LDST32_ABS_LO12_NC,			285)	\
1532839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LDST64_ABS_LO12_NC,			286)	\
1533839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_PREL_G0,			287)	\
1534839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_PREL_G0_NC,			288)	\
1535839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_PREL_G1,			289)	\
1536839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_PREL_G1_NC,			290)	\
1537839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_PREL_G2,			291)	\
1538839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_PREL_G2_NC,			292)	\
1539839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_PREL_G3,			293)	\
1540839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LDST128_ABS_LO12_NC,		299)	\
1541839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_GOTOFF_G0,			300)	\
1542839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_GOTOFF_G0_NC,			301)	\
1543839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_GOTOFF_G1,			302)	\
1544839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_GOTOFF_G1_NC,			303)	\
1545839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_GOTOFF_G2,			304)	\
1546839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_GOTOFF_G2_NC,			305)	\
1547839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_MOVW_GOTOFF_G3,			306)	\
1548839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_GOTREL64,				307)	\
1549839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_GOTREL32,				308)	\
1550839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_GOT_LD_PREL19,			309)	\
1551839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LD64_GOTOFF_LO15,			310)	\
1552839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_ADR_GOT_PAGE,			311)	\
1553839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LD64_GOT_LO12_NC,			312)	\
1554839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_LD64_GOTPAGE_LO15,			313)	\
1555839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSGD_ADR_PREL21,			512)	\
1556839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSGD_ADR_PAGE21,			513)	\
1557839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSGD_ADD_LO12_NC,			514)	\
1558839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSGD_MOVW_G1,			515)	\
1559839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSGD_MOVW_G0_NC,			516)	\
1560839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_ADR_PREL21,			517)	\
1561839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_ADR_PAGE21,			518)	\
1562839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_ADD_LO12_NC,			519)	\
1563839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_MOVW_G1,			520)	\
1564839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_MOVW_G0_NC,			521)	\
1565839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LD_PREL19,			522)	\
1566839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G2,		523)	\
1567839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G1,		524)	\
1568839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC,		525)	\
1569839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G0,		526)	\
1570839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC,		527)	\
1571839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_ADD_DTPREL_HI12,		529)	\
1572839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC,		530)	\
1573839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST8_DTPREL_LO12,		531)	\
1574839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC,		532)	\
1575839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST16_DTPREL_LO12,		533)	\
1576839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC,	534)	\
1577839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST32_DTPREL_LO12,		535)	\
1578839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC,	536)	\
1579839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST64_DTPREL_LO12,		537)	\
1580839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC,	538)	\
1581839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSIE_MOVW_GOTTPREL_G1,		539)	\
1582839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC,		540)	\
1583839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21,		541)	\
1584839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC,	542)	\
1585839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSIE_LD_GOTTPREL_PREL19,		543)	\
1586839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G2,		544)	\
1587839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G1,		545)	\
1588839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G1_NC,		546)	\
1589839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G0,		547)	\
1590839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_MOVW_TPREL_G0_NC,		548)	\
1591839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_ADD_TPREL_HI12,		549)	\
1592839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_ADD_TPREL_LO12,		550)	\
1593839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_ADD_TPREL_LO12_NC,		551)	\
1594839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST8_TPREL_LO12,		552)	\
1595839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC,		553)	\
1596839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST16_TPREL_LO12,		554)	\
1597839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC,		555)	\
1598839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST32_TPREL_LO12,		556)	\
1599839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC,		557)	\
1600839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST64_TPREL_LO12,		558)	\
1601839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC,		559)	\
1602839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_LD_PREL19,			560)	\
1603839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_ADR_PREL21,			561)	\
1604839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_ADR_PAGE21,			562)	\
1605839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_LD64_LO12,			563)	\
1606839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_ADD_LO12,			564)	\
1607839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_OFF_G1,			565)	\
1608839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_OFF_G0_NC,			566)	\
1609839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_LDR,			567)	\
1610839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_ADD,			568)	\
1611839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC_CALL,			569)	\
1612839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST128_TPREL_LO12,		570)	\
1613839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC,	571)	\
1614839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST128_DTPREL_LO12,		572)	\
1615839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC,	573)	\
1616839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_COPY,				1024)	\
1617839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_GLOB_DAT,				1025)	\
1618839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_JUMP_SLOT,				1026)	\
1619839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_RELATIVE,				1027)	\
1620839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLS_DTPREL64,			1028)	\
1621839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLS_DTPMOD64,			1029)	\
1622839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLS_TPREL64,			1030)	\
1623839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_TLSDESC,				1031)	\
1624839529caSEd Maste _ELF_DEFINE_RELOC(R_AARCH64_IRELATIVE,				1032)
162571a0c925SEd Maste 
162671a0c925SEd Maste /*
16272de3b87aSKai Wang  * These are the symbols used in the Sun ``Linkers and Loaders
16282de3b87aSKai Wang  * Guide'', Document No: 817-1984-17.  See the X86_64 relocations list
16292de3b87aSKai Wang  * below for the spellings used in the ELF specification.
16302de3b87aSKai Wang  */
16312de3b87aSKai Wang #define	_ELF_DEFINE_AMD64_RELOCATIONS()		\
16322de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_NONE,		0)	\
16332de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_64,		1)	\
16342de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_PC32,		2)	\
16352de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_GOT32,	3)	\
16362de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_PLT32,	4)	\
16372de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_COPY,		5)	\
16382de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_GLOB_DAT,	6)	\
16392de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_JUMP_SLOT,	7)	\
16402de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_RELATIVE,	8)	\
16412de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_GOTPCREL,	9)	\
16422de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_32,		10)	\
16432de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_32S,		11)	\
16442de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_16,		12)	\
16452de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_PC16,		13)	\
16462de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_8,		14)	\
16472de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_PC8,		15)	\
16482de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_PC64,		24)	\
16492de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_GOTOFF64,	25)	\
16502de3b87aSKai Wang _ELF_DEFINE_RELOC(R_AMD64_GOTPC32,	26)
16512de3b87aSKai Wang 
16522de3b87aSKai Wang /*
16532de3b87aSKai Wang  * Relocation definitions from the ARM ELF ABI, version "ARM IHI
16542de3b87aSKai Wang  * 0044E" released on 30th November 2012.
16552de3b87aSKai Wang  */
16562de3b87aSKai Wang #define	_ELF_DEFINE_ARM_RELOCATIONS()			\
16572de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_NONE,			0)	\
16582de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PC24,			1)	\
16592de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ABS32,			2)	\
16602de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_REL32,			3)	\
16612de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDR_PC_G0,		4)	\
16622de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ABS16,			5)	\
16632de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ABS12,			6)	\
16642de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_ABS5,		7)	\
16652de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ABS8,			8)	\
16662de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_SBREL32,		9)	\
16672de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_CALL,		10)	\
16682de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_PC8,		11)	\
16692de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_BREL_ADJ,		12)	\
16702de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_SWI24,			13)	\
16712de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_DESC,		13)	\
16722de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_SWI8,		14)	\
16732de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_XPC25,			15)	\
16742de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_XPC22,		16)	\
16752de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_DTPMOD32,		17)	\
16762de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_DTPOFF32,		18)	\
16772de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_TPOFF32,		19)	\
16782de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_COPY,			20)	\
16792de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GLOB_DAT,		21)	\
16802de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_JUMP_SLOT,		22)	\
16812de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_RELATIVE,		23)	\
16822de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GOTOFF32,		24)	\
16832de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_BASE_PREL,		25)	\
16842de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GOT_BREL,		26)	\
16852de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PLT32,			27)	\
16862de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_CALL,			28)	\
16872de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_JUMP24,			29)	\
16882de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_JUMP24,		30)	\
16892de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_BASE_ABS,		31)	\
16902de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_PCREL_7_0,		32)	\
16912de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_PCREL_15_8,		33)	\
16922de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_PCREL_23_15,	34)	\
16932de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDR_SBREL_11_0_NC,	35)	\
16942de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_SBREL_19_12_NC,	36)	\
16952de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_SBREL_27_20_CK,	37)	\
16962de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TARGET1,		38)	\
16972de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_SBREL31,		39)	\
16982de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_V4BX,			40)	\
16992de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TARGET2,		41)	\
17002de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PREL31,			42)	\
17012de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_MOVW_ABS_NC,		43)	\
17022de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_MOVT_ABS,		44)	\
17032de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_MOVW_PREL_NC,		45)	\
17042de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_MOVT_PREL,		46)	\
17052de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_MOVW_ABS_NC,	47)	\
17062de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_MOVT_ABS,		48)	\
17072de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_MOVW_PREL_NC,	49)	\
17082de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_MOVT_PREL,		50)	\
17092de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_JUMP19,		51)	\
17102de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_JUMP6,		52)	\
17112de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_ALU_PREL_11_0,	53)	\
17122de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_PC12,		54)	\
17132de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ABS32_NOI,		55)	\
17142de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_REL32_NOI,		56)	\
17152de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G0_NC,		57)	\
17162de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G0,		58)	\
17172de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G1_NC,		59)	\
17182de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G1,		60)	\
17192de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_PC_G2,		61)	\
17202de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDR_PC_G1,		62)	\
17212de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDR_PC_G2,		63)	\
17222de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G0,		64)	\
17232de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G1,		65)	\
17242de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDRS_PC_G2,		66)	\
17252de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDC_PC_G0,		67)	\
17262de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDC_PC_G1,		68)	\
17272de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDC_PC_G2,		69)	\
17282de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G0_NC,		70)	\
17292de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G0,		71)	\
17302de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G1_NC,		72)	\
17312de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G1,		73)	\
17322de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ALU_SB_G2,		74)	\
17332de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDR_SB_G0,		75)	\
17342de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDR_SB_G1,		76)	\
17352de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDR_SB_G2,		77)	\
17362de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G0,		78)	\
17372de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G1,		79)	\
17382de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDRS_SB_G2,		80)	\
17392de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDC_SB_G0,		81)	\
17402de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDC_SB_G1,		82)	\
17412de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_LDC_SB_G2,		83)	\
17422de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_MOVW_BREL_NC,		84)	\
17432de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_MOVT_BREL,		85)	\
17442de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_MOVW_BREL,		86)	\
17452de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_MOVW_BREL_NC,	87)	\
17462de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_MOVT_BREL,		88)	\
17472de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_MOVW_BREL,		89)	\
17482de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_GOTDESC,		90)	\
17492de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_CALL,		91)	\
17502de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_DESCSEQ,		92)	\
17512de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_TLS_CALL,		93)	\
17522de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PLT32_ABS,		94)	\
17532de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GOT_ABS,		95)	\
17542de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GOT_PREL,		96)	\
17552de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GOT_BREL12,		97)	\
17562de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GOTOFF12,		98)	\
17572de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GOTRELAX,		99)	\
17582de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GNU_VTENTRY,		100)	\
17592de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_GNU_VTINHERIT,		101)	\
17602de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_JUMP11,		102)	\
17612de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_JUMP8,		103)	\
17622de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_GD32,		104)	\
17632de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_LDM32,		105)	\
17642de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_LDO32,		106)	\
17652de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_IE32,		107)	\
17662de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_LE32,		108)	\
17672de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_LDO12,		109)	\
17682de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_LE12,		110)	\
17692de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_TLS_IE12GP,		111)	\
17702de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_0,		112)	\
17712de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_1,		113)	\
17722de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_2,		114)	\
17732de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_3,		115)	\
17742de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_4,		116)	\
17752de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_5,		117)	\
17762de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_6,		118)	\
17772de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_7,		119)	\
17782de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_8,		120)	\
17792de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_9,		121)	\
17802de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_10,		122)	\
17812de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_11,		123)	\
17822de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_12,		124)	\
17832de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_13,		125)	\
17842de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_14,		126)	\
17852de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_PRIVATE_15,		127)	\
17862de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_ME_TOO,			128)	\
17872de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_TLS_DESCSEQ16,	129)	\
17882de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_TLS_DESCSEQ32,	130)	\
17892de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_THM_GOT_BREL12,		131)	\
17902de3b87aSKai Wang _ELF_DEFINE_RELOC(R_ARM_IRELATIVE,		140)
17912de3b87aSKai Wang 
17922de3b87aSKai Wang #define	_ELF_DEFINE_IA64_RELOCATIONS()			\
17932de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_NONE,			0)	\
17942de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_IMM14,		0x21)	\
17952de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_IMM22,		0x22)	\
17962de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_IMM64,		0x23)	\
17972de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DIR32MSB,		0x24)	\
17982de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DIR32LSB,		0x25)	\
17992de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DIR64MSB,		0x26)	\
18002de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DIR64LSB,		0x27)	\
18012de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_GPREL22,		0x2a)	\
18022de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_GPREL64I,		0x2b)	\
18032de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_GPREL32MSB,		0x2c)	\
18042de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_GPREL32LSB,		0x2d)	\
18052de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_GPREL64MSB,		0x2e)	\
18062de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_GPREL64LSB,		0x2f)	\
18072de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF22,		0x32)	\
18082de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF64I,		0x33)	\
18092de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PLTOFF22,		0x3a)	\
18102de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PLTOFF64I,		0x3b)	\
18112de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PLTOFF64MSB,		0x3e)	\
18122de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PLTOFF64LSB,		0x3f)	\
18132de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_FPTR64I,		0x43)	\
18142de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_FPTR32MSB,		0x44)	\
18152de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_FPTR32LSB,		0x45)	\
18162de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_FPTR64MSB,		0x46)	\
18172de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_FPTR64LSB,		0x47)	\
18182de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL60B,		0x48)	\
18192de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL21B,		0x49)	\
18202de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL21M,		0x4a)	\
18212de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL21F,		0x4b)	\
18222de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL32MSB,		0x4c)	\
18232de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL32LSB,		0x4d)	\
18242de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL64MSB,		0x4e)	\
18252de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL64LSB,		0x4f)	\
18262de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR22,		0x52)	\
18272de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64I,	0x53)	\
18282de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR32MSB,	0x54)	\
18292de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR32LSB,	0x55)	\
18302de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64MSB,	0x56)	\
18312de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_FPTR64LSB,	0x57)	\
18322de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SEGREL32MSB,		0x5c)	\
18332de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SEGREL32LSB,		0x5d)	\
18342de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SEGREL64MSB,		0x5e)	\
18352de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SEGREL64LSB,		0x5f)	\
18362de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SECREL32MSB,		0x64)	\
18372de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SECREL32LSB,		0x65)	\
18382de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SECREL64MSB,		0x66)	\
18392de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SECREL64LSB,		0x67)	\
18402de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_REL32MSB,		0x6c)	\
18412de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_REL32LSB,		0x6d)	\
18422de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_REL64MSB,		0x6e)	\
18432de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_REL64LSB,		0x6f)	\
18442de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTV32MSB,		0x74)	\
18452de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTV32LSB,		0x75)	\
18462de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTV64MSB,		0x76)	\
18472de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTV64LSB,		0x77)	\
1848839529caSEd Maste _ELF_DEFINE_RELOC(R_IA_64_PCREL21BI,		0x79)	\
18492de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL22,		0x7A)	\
18502de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_PCREL64I,		0x7B)	\
18512de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_IPLTMSB,		0x80)	\
18522de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_IPLTLSB,		0x81)	\
18532de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_SUB,			0x85)	\
18542de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF22X,		0x86)	\
18552de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LDXMOV,		0x87)	\
18562de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_TPREL14,		0x91)	\
18572de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_TPREL22,		0x92)	\
18582de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_TPREL64I,		0x93)	\
18592de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_TPREL64MSB,		0x96)	\
18602de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_TPREL64LSB,		0x97)	\
18612de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_TPREL22,	0x9A)	\
18622de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPMOD64MSB,		0xA6)	\
18632de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPMOD64LSB,		0xA7)	\
18642de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_DTPMOD22,	0xAA)	\
18652de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPREL14,		0xB1)	\
18662de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPREL22,		0xB2)	\
18672de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPREL64I,		0xB3)	\
18682de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPREL32MSB,		0xB4)	\
18692de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPREL32LSB,		0xB5)	\
18702de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPREL64MSB,		0xB6)	\
18712de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_DTPREL64LSB,		0xB7)	\
18722de3b87aSKai Wang _ELF_DEFINE_RELOC(R_IA_64_LTOFF_DTPREL22,	0xBA)
18732de3b87aSKai Wang 
18742de3b87aSKai Wang #define	_ELF_DEFINE_MIPS_RELOCATIONS()			\
18752de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_NONE,			0)	\
18762de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_16,			1)	\
18772de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_32,			2)	\
18782de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_REL32,			3)	\
18792de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_26,			4)	\
18802de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_HI16,			5)	\
18812de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_LO16,			6)	\
18822de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_GPREL16,		7)	\
18832de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_LITERAL, 		8)	\
18842de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_GOT16,			9)	\
18852de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_PC16,			10)	\
18862de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_CALL16,		11)	\
18872de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_GPREL32,		12)	\
1888b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_SHIFT5,		16)	\
1889b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_SHIFT6,		17)	\
18902de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_64,			18)	\
1891b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_GOT_DISP,		19)	\
1892b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_GOT_PAGE,		20)	\
1893b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_GOT_OFST,		21)	\
1894b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_GOT_HI16,		22)	\
1895b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_GOT_LO16,		23)	\
1896b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_SUB,			24)	\
18972de3b87aSKai Wang _ELF_DEFINE_RELOC(R_MIPS_CALLHI16,		30)	\
1898da1cc412SAlexander Kabaev _ELF_DEFINE_RELOC(R_MIPS_CALLLO16,		31)	\
1899b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_MIPS_JALR,			37)	\
1900b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_DTPMOD32,		38)	\
1901b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_DTPREL32,		39)	\
1902b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_DTPMOD64,		40)	\
1903b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_DTPREL64,		41)	\
1904b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_GD,		42)	\
1905b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_LDM,		43)	\
1906b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_DTPREL_HI16,	44)	\
1907b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_DTPREL_LO16,	45)	\
1908b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_GOTTPREL,		46)	\
1909b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_TPREL32,		47)	\
1910b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_TPREL64,		48)	\
1911b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_TPREL_HI16,	49)	\
1912b54cfe0aSEd Maste _ELF_DEFINE_RELOC(R_MIPS_TLS_TPREL_LO16,	50)
19132de3b87aSKai Wang 
19142de3b87aSKai Wang #define	_ELF_DEFINE_PPC32_RELOCATIONS()		\
19152de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_NONE,		0)	\
19162de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR32,		1)	\
19172de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR24,		2)	\
19182de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR16,		3)	\
19192de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR16_LO,	4)	\
19202de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR16_HI,	5)	\
19212de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR16_HA,	6)	\
19222de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR14,		7)	\
19232de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR14_BRTAKEN,	8)	\
19242de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR14_BRNTAKEN, 9)	\
19252de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_REL24,		10)	\
19262de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_REL14,		11)	\
19272de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_REL14_BRTAKEN,	12)	\
19282de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_REL14_BRNTAKEN,	13)	\
19292de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT16,		14)	\
19302de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT16_LO,	15)	\
19312de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT16_HI,	16)	\
19322de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT16_HA,	17)	\
19332de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_PLTREL24,	18)	\
19342de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_COPY,		19)	\
19352de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GLOB_DAT,	20)	\
19362de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_JMP_SLOT,	21)	\
19372de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_RELATIVE,	22)	\
19382de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_LOCAL24PC,	23)	\
19392de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_UADDR32,	24)	\
19402de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_UADDR16,	25)	\
19412de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_REL32,		26)	\
19422de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_PLT32,		27)	\
19432de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_PLTREL32,	28)	\
19442de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_PLT16_LO,	29)	\
1945839529caSEd Maste _ELF_DEFINE_RELOC(R_PPC_PLT16_HI,	30)	\
19462de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_PLT16_HA,	31)	\
19472de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_SDAREL16,	32)	\
19482de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_SECTOFF,	33)	\
19492de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_SECTOFF_LO,	34)	\
19502de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_SECTOFF_HI,	35)	\
19512de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_SECTOFF_HA,	36)	\
19522de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_ADDR30,		37)	\
19532de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_TLS,		67)	\
19542de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_DTPMOD32,	68)	\
19552de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_TPREL16,	69)	\
19562de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_TPREL16_LO,	70)	\
19572de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_TPREL16_HI,	71)	\
19582de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_TPREL16_HA,	72)	\
19592de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_TPREL32,	73)	\
19602de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_DTPREL16,	74)	\
19612de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_DTPREL16_LO,	75)	\
19622de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_DTPREL16_HI,	76)	\
19632de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_DTPREL16_HA,	77)	\
19642de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_DTPREL32,	78)	\
19652de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16,	79)	\
19662de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_LO,	80)	\
19672de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_HI,	81)	\
19682de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TLSGD16_HA,	82)	\
19692de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16,	83)	\
19702de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_LO,	84)	\
19712de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_HI,	85)	\
19722de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TLSLD16_HA,	86)	\
19732de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16,	87)	\
19742de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_LO,	88)	\
19752de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_HI,	89)	\
19762de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_TPREL16_HA,	90)	\
19772de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16,	91)	\
19782de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_LO, 92)	\
19792de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_HI, 93)	\
19802de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_GOT_DTPREL16_HA, 94)	\
19812de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_TLSGD,		95)	\
19822de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_TLSLD,		96)	\
19832de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR32,	101)	\
19842de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16,	102)	\
19852de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_LO,	103)	\
19862de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_HI,	104)	\
19872de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_NADDR16_HA,	105)	\
19882de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_SDAI16,	106)	\
19892de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_SDA2I16,	107)	\
19902de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_SDA2REL,	108)	\
19912de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_SDA21,	109)	\
19922de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_MRKREF,	110)	\
19932de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_RELSEC16,	111)	\
19942de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_RELST_LO,	112)	\
19952de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_RELST_HI,	113)	\
19962de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_RELST_HA,	114)	\
19972de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_BIT_FLD,	115)	\
19982de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC_EMB_RELSDA,	116)	\
19992de3b87aSKai Wang 
20002de3b87aSKai Wang #define	_ELF_DEFINE_PPC64_RELOCATIONS()			\
20012de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_NONE,			0)	\
20022de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR32,		1)	\
20032de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR24,		2)	\
20042de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16,		3)	\
20052de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_LO,		4)	\
20062de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HI,		5)	\
20072de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HA,		6)	\
20082de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR14,		7)	\
20092de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR14_BRTAKEN,	8)	\
20102de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR14_BRNTAKEN,	9)	\
20112de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_REL24,		10)	\
20122de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_REL14,		11)	\
20132de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_REL14_BRTAKEN,	12)	\
20142de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_REL14_BRNTAKEN,	13)	\
20152de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT16,		14)	\
20162de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT16_LO,		15)	\
20172de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT16_HI,		16)	\
20182de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT16_HA,		17)	\
20192de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_COPY,			19)	\
20202de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GLOB_DAT,		20)	\
20212de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_JMP_SLOT,		21)	\
20222de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_RELATIVE,		22)	\
20232de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_UADDR32,		24)	\
20242de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_UADDR16,		25)	\
20252de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_REL32,		26)	\
20262de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLT32,		27)	\
20272de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLTREL32,		28)	\
20282de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLT16_LO,		29)	\
20292de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLT16_HI,		30)	\
20302de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLT16_HA,		31)	\
20312de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_SECTOFF,		33)	\
20322de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_LO,		34)	\
20332de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_HI,		35)	\
20342de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_HA,		36)	\
20352de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR30,		37)	\
20362de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR64,		38)	\
20372de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHER,	39)	\
20382de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHERA,	40)	\
20392de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHEST,	41)	\
20402de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_HIGHESTA,	42)	\
20412de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_UADDR64,		43)	\
20422de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_REL64,		44)	\
20432de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLT64,		45)	\
20442de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLTREL64,		46)	\
20452de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TOC16,		47)	\
20462de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TOC16_LO,		48)	\
20472de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TOC16_HI,		49)	\
20482de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TOC16_HA,		50)	\
20492de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TOC,			51)	\
20502de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16,		52)	\
20512de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_LO,		53)	\
20522de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_HI,		54)	\
20532de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_HA,		55)	\
20542de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_DS,		56)	\
20552de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_ADDR16_LO_DS,		57)	\
20562de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT16_DS,		58)	\
20572de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT16_LO_DS,		59)	\
20582de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLT16_LO_DS,		60)	\
20592de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_DS,		61)	\
20602de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_SECTOFF_LO_DS,	62)	\
20612de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TOC16_DS,		63)	\
20622de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TOC16_LO_DS,		64)	\
20632de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_DS,		65)	\
20642de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_PLTGOT16_LO_DS,	66)	\
20652de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TLS,			67)	\
20662de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPMOD64,		68)	\
20672de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16,		69)	\
20682de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_LO,		60)	\
20692de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HI,		71)	\
20702de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HA,		72)	\
20712de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL64,		73)	\
20722de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16,		74)	\
20732de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_LO,		75)	\
20742de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HI,		76)	\
20752de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HA,		77)	\
20762de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL64,		78)	\
20772de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16,		79)	\
20782de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_LO,	80)	\
20792de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_HI,	81)	\
20802de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSGD16_HA,	82)	\
20812de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16,		83)	\
20822de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_LO,	84)	\
20832de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_HI,	85)	\
20842de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TLSLD16_HA,	86)	\
20852de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_DS,	87)	\
20862de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_LO_DS,	88)	\
20872de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_HI,	89)	\
20882de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_TPREL16_HA,	90)	\
20892de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_DS,	91)	\
20902de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_LO_DS,	92)	\
20912de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_HI,	93)	\
20922de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_GOT_DTPREL16_HA,	94)	\
20932de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_DS,		95)	\
20942de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_LO_DS,	96)	\
20952de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHER,	97)	\
20962de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHERA,	98)	\
20972de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHEST,	99)	\
20982de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TPREL16_HIGHESTA,	100)	\
20992de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_DS,		101)	\
21002de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_LO_DS,	102)	\
21012de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHER,	103)	\
21022de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHERA,	104)	\
21032de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHEST,	105)	\
21042de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_DTPREL16_HIGHESTA,	106)	\
21052de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TLSGD,		107)	\
21062de3b87aSKai Wang _ELF_DEFINE_RELOC(R_PPC64_TLSLD,		108)
21072de3b87aSKai Wang 
2108656f49f8SEd Maste #define	_ELF_DEFINE_RISCV_RELOCATIONS()			\
2109656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_NONE,			0)	\
2110656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_32,			1)	\
2111656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_64,			2)	\
2112656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_RELATIVE,		3)	\
2113656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_COPY,			4)	\
2114656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_JUMP_SLOT,		5)	\
2115656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TLS_DTPMOD32,		6)	\
2116656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TLS_DTPMOD64,		7)	\
2117656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TLS_DTPREL32,		8)	\
2118656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TLS_DTPREL64,		9)	\
2119656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TLS_TPREL32,		10)	\
2120656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TLS_TPREL64,		11)	\
2121656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_BRANCH,		16)	\
2122656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_JAL,			17)	\
2123656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_CALL,			18)	\
2124656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_CALL_PLT,		19)	\
2125656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_GOT_HI20,		20)	\
2126656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TLS_GOT_HI20,		21)	\
2127656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TLS_GD_HI20,		22)	\
2128656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_PCREL_HI20,		23)	\
2129656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_PCREL_LO12_I,		24)	\
2130656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_PCREL_LO12_S,		25)	\
2131656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_HI20,			26)	\
2132656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_LO12_I,		27)	\
2133656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_LO12_S,		28)	\
2134656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TPREL_HI20,		29)	\
2135656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TPREL_LO12_I,		30)	\
2136656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TPREL_LO12_S,		31)	\
2137656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_TPREL_ADD,		32)	\
2138656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_ADD8,			33)	\
2139656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_ADD16,		34)	\
2140656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_ADD32,		35)	\
2141656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_ADD64,		36)	\
2142656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_SUB8,			37)	\
2143656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_SUB16,		38)	\
2144656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_SUB32,		39)	\
2145656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_SUB64,		40)	\
2146839529caSEd Maste _ELF_DEFINE_RELOC(R_RISCV_ALIGN,		43)	\
2147656f49f8SEd Maste _ELF_DEFINE_RELOC(R_RISCV_RVC_BRANCH,		44)	\
2148b6d812d2SEd Maste _ELF_DEFINE_RELOC(R_RISCV_RVC_JUMP,		45)	\
2149b6d812d2SEd Maste _ELF_DEFINE_RELOC(R_RISCV_RVC_LUI,		46)	\
2150*537c166bSMitchell Horne _ELF_DEFINE_RELOC(R_RISCV_RELAX,		51)	\
2151*537c166bSMitchell Horne _ELF_DEFINE_RELOC(R_RISCV_SUB6,			52)	\
2152*537c166bSMitchell Horne _ELF_DEFINE_RELOC(R_RISCV_SET6,			53)	\
2153*537c166bSMitchell Horne _ELF_DEFINE_RELOC(R_RISCV_SET8,			54)	\
2154*537c166bSMitchell Horne _ELF_DEFINE_RELOC(R_RISCV_SET16,		55)	\
2155*537c166bSMitchell Horne _ELF_DEFINE_RELOC(R_RISCV_SET32,		56)	\
2156*537c166bSMitchell Horne _ELF_DEFINE_RELOC(R_RISCV_32_PCREL,		57)	\
2157*537c166bSMitchell Horne _ELF_DEFINE_RELOC(R_RISCV_IRELATIVE,		58)
2158656f49f8SEd Maste 
21592de3b87aSKai Wang #define	_ELF_DEFINE_SPARC_RELOCATIONS()		\
21602de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_NONE,		0)	\
21612de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_8,		1)	\
21622de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_16,		2)	\
21632de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_32, 		3)	\
21642de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_DISP8,	4)	\
21652de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_DISP16,	5)	\
21662de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_DISP32,	6)	\
21672de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_WDISP30,	7)	\
21682de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_WDISP22,	8)	\
21692de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_HI22,		9)	\
21702de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_22,		10)	\
21712de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_13,		11)	\
21722de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_LO10,		12)	\
21732de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GOT10,	13)	\
21742de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GOT13,	14)	\
21752de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GOT22,	15)	\
21762de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PC10,		16)	\
21772de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PC22,		17)	\
21782de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_WPLT30,	18)	\
21792de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_COPY,		19)	\
21802de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GLOB_DAT,	20)	\
21812de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_JMP_SLOT,	21)	\
21822de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_RELATIVE,	22)	\
21832de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_UA32,		23)	\
21842de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PLT32,	24)	\
21852de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_HIPLT22,	25)	\
21862de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_LOPLT10,	26)	\
21872de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PCPLT32,	27)	\
21882de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PCPLT22,	28)	\
21892de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PCPLT10,	29)	\
21902de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_10,		30)	\
21912de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_11,		31)	\
21922de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_64,		32)	\
21932de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_OLO10,	33)	\
21942de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_HH22,		34)	\
21952de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_HM10,		35)	\
21962de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_LM22,		36)	\
21972de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PC_HH22,	37)	\
21982de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PC_HM10,	38)	\
21992de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PC_LM22,	39)	\
22002de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_WDISP16,	40)	\
22012de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_WDISP19,	41)	\
2202b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_GLOB_JMP,	42)	\
22032de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_7,		43)	\
22042de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_5,		44)	\
22052de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_6,		45)	\
22062de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_DISP64,	46)	\
22072de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_PLT64,	47)	\
22082de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_HIX22,	48)	\
22092de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_LOX10,	49)	\
22102de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_H44,		50)	\
22112de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_M44,		51)	\
22122de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_L44,		52)	\
22132de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_REGISTER,	53)	\
22142de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_UA64,		54)	\
22152de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_UA16,		55)	\
2216b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_GD_HI22,	56)	\
2217b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_GD_LO10,	57)	\
2218b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_GD_ADD,	58)	\
2219b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_GD_CALL,	59)	\
2220b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LDM_HI22,	60)	\
2221b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LDM_LO10,	61)	\
2222b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LDM_ADD,	62)	\
2223b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LDM_CALL,	63)	\
2224b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LDO_HIX22, 64)	\
2225b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LDO_LOX10, 65)	\
2226b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LDO_ADD,	66)	\
2227b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_IE_HI22,	67)	\
2228b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_IE_LO10,	68)	\
2229b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_IE_LD,	69)	\
2230b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_IE_LDX,	70)	\
2231b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_IE_ADD,	71)	\
2232b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LE_HIX22,	72)	\
2233b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_LE_LOX10,	73)	\
2234b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_DTPMOD32,	74)	\
2235b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_DTPMOD64,	75)	\
2236b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_DTPOFF32,	76)	\
2237b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_DTPOFF64,	77)	\
2238b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_TPOFF32,	78)	\
2239b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_SPARC_TLS_TPOFF64,	79)	\
22402de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_HIX22, 80)	\
22412de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_LOX10, 81)	\
22422de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP_HIX22, 82)	\
22432de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP_LOX10, 83)	\
22442de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_GOTDATA_OP,	84)	\
22452de3b87aSKai Wang _ELF_DEFINE_RELOC(R_SPARC_H34,		85)
22462de3b87aSKai Wang 
22472de3b87aSKai Wang #define	_ELF_DEFINE_X86_64_RELOCATIONS()	\
22482de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_NONE,	0)	\
22492de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_64,		1)	\
22502de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_PC32,	2)	\
22512de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_GOT32,	3)	\
22522de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_PLT32,	4)	\
22532de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_COPY,	5)	\
22542de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_GLOB_DAT,	6)	\
22552de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_JUMP_SLOT,	7)	\
22562de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_RELATIVE,	8)	\
22572de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_GOTPCREL,	9)	\
22582de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_32,		10)	\
22592de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_32S,		11)	\
22602de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_16,		12)	\
22612de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_PC16,	13)	\
22622de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_8,		14)	\
22632de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_PC8,		15)	\
22642de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_DTPMOD64,	16)	\
22652de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_DTPOFF64,	17)	\
22662de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_TPOFF64,	18)	\
22672de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_TLSGD,	19)	\
22682de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_TLSLD,	20)	\
22692de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_DTPOFF32,	21)	\
22702de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_GOTTPOFF,	22)	\
22712de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_TPOFF32,	23)	\
22722de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_PC64,	24)	\
22732de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_GOTOFF64,	25)	\
22742de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_GOTPC32,	26)	\
227557736250SEd Maste _ELF_DEFINE_RELOC(R_X86_64_GOT64,	27)	\
227657736250SEd Maste _ELF_DEFINE_RELOC(R_X86_64_GOTPCREL64,	28)	\
227757736250SEd Maste _ELF_DEFINE_RELOC(R_X86_64_GOTPC64,	29)	\
227857736250SEd Maste _ELF_DEFINE_RELOC(R_X86_64_GOTPLT64,	30)	\
227957736250SEd Maste _ELF_DEFINE_RELOC(R_X86_64_PLTOFF64,	31)	\
22802de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_SIZE32,	32)	\
22812de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_SIZE64,	33)	\
22822de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_GOTPC32_TLSDESC, 34)	\
22832de3b87aSKai Wang _ELF_DEFINE_RELOC(R_X86_64_TLSDESC_CALL, 35)	\
228457736250SEd Maste _ELF_DEFINE_RELOC(R_X86_64_TLSDESC,	36)	\
2285b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_X86_64_IRELATIVE,	37)	\
2286b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_X86_64_RELATIVE64,	38)	\
2287b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_X86_64_GOTPCRELX,	41)	\
2288b6b6f9ccSEd Maste _ELF_DEFINE_RELOC(R_X86_64_REX_GOTPCRELX, 42)
22892de3b87aSKai Wang 
22902de3b87aSKai Wang #define	_ELF_DEFINE_RELOCATIONS()		\
22912de3b87aSKai Wang _ELF_DEFINE_386_RELOCATIONS()			\
229271a0c925SEd Maste _ELF_DEFINE_AARCH64_RELOCATIONS()		\
22932de3b87aSKai Wang _ELF_DEFINE_AMD64_RELOCATIONS()			\
22942de3b87aSKai Wang _ELF_DEFINE_ARM_RELOCATIONS()			\
22952de3b87aSKai Wang _ELF_DEFINE_IA64_RELOCATIONS()			\
22962de3b87aSKai Wang _ELF_DEFINE_MIPS_RELOCATIONS()			\
22972de3b87aSKai Wang _ELF_DEFINE_PPC32_RELOCATIONS()			\
22982de3b87aSKai Wang _ELF_DEFINE_PPC64_RELOCATIONS()			\
2299839529caSEd Maste _ELF_DEFINE_RISCV_RELOCATIONS()			\
23002de3b87aSKai Wang _ELF_DEFINE_SPARC_RELOCATIONS()			\
23012de3b87aSKai Wang _ELF_DEFINE_X86_64_RELOCATIONS()
23022de3b87aSKai Wang 
23032de3b87aSKai Wang #undef	_ELF_DEFINE_RELOC
23042de3b87aSKai Wang #define	_ELF_DEFINE_RELOC(N, V)		N = V ,
23052de3b87aSKai Wang enum {
23062de3b87aSKai Wang 	_ELF_DEFINE_RELOCATIONS()
23072de3b87aSKai Wang 	R__LAST__
23082de3b87aSKai Wang };
23092de3b87aSKai Wang 
23102de3b87aSKai Wang #define	PN_XNUM			0xFFFFU /* Use extended section numbering. */
23112de3b87aSKai Wang 
23122de3b87aSKai Wang /**
23132de3b87aSKai Wang  ** ELF Types.
23142de3b87aSKai Wang  **/
23152de3b87aSKai Wang 
23162de3b87aSKai Wang typedef uint32_t	Elf32_Addr;	/* Program address. */
23172de3b87aSKai Wang typedef uint8_t		Elf32_Byte;	/* Unsigned tiny integer. */
23182de3b87aSKai Wang typedef uint16_t	Elf32_Half;	/* Unsigned medium integer. */
23192de3b87aSKai Wang typedef uint32_t	Elf32_Off;	/* File offset. */
23202de3b87aSKai Wang typedef uint16_t	Elf32_Section;	/* Section index. */
23212de3b87aSKai Wang typedef int32_t		Elf32_Sword;	/* Signed integer. */
23222de3b87aSKai Wang typedef uint32_t	Elf32_Word;	/* Unsigned integer. */
23232de3b87aSKai Wang typedef uint64_t	Elf32_Lword;	/* Unsigned long integer. */
23242de3b87aSKai Wang 
23252de3b87aSKai Wang typedef uint64_t	Elf64_Addr;	/* Program address. */
23262de3b87aSKai Wang typedef uint8_t		Elf64_Byte;	/* Unsigned tiny integer. */
23272de3b87aSKai Wang typedef uint16_t	Elf64_Half;	/* Unsigned medium integer. */
23282de3b87aSKai Wang typedef uint64_t	Elf64_Off;	/* File offset. */
23292de3b87aSKai Wang typedef uint16_t	Elf64_Section;	/* Section index. */
23302de3b87aSKai Wang typedef int32_t		Elf64_Sword;	/* Signed integer. */
23312de3b87aSKai Wang typedef uint32_t	Elf64_Word;	/* Unsigned integer. */
23322de3b87aSKai Wang typedef uint64_t	Elf64_Lword;	/* Unsigned long integer. */
23332de3b87aSKai Wang typedef uint64_t	Elf64_Xword;	/* Unsigned long integer. */
23342de3b87aSKai Wang typedef int64_t		Elf64_Sxword;	/* Signed long integer. */
23352de3b87aSKai Wang 
23362de3b87aSKai Wang 
23372de3b87aSKai Wang /*
23382de3b87aSKai Wang  * Capability descriptors.
23392de3b87aSKai Wang  */
23402de3b87aSKai Wang 
23412de3b87aSKai Wang /* 32-bit capability descriptor. */
23422de3b87aSKai Wang typedef struct {
23432de3b87aSKai Wang 	Elf32_Word	c_tag;	     /* Type of entry. */
23442de3b87aSKai Wang 	union {
23452de3b87aSKai Wang 		Elf32_Word	c_val; /* Integer value. */
23462de3b87aSKai Wang 		Elf32_Addr	c_ptr; /* Pointer value. */
23472de3b87aSKai Wang 	} c_un;
23482de3b87aSKai Wang } Elf32_Cap;
23492de3b87aSKai Wang 
23502de3b87aSKai Wang /* 64-bit capability descriptor. */
23512de3b87aSKai Wang typedef struct {
23522de3b87aSKai Wang 	Elf64_Xword	c_tag;	     /* Type of entry. */
23532de3b87aSKai Wang 	union {
23542de3b87aSKai Wang 		Elf64_Xword	c_val; /* Integer value. */
23552de3b87aSKai Wang 		Elf64_Addr	c_ptr; /* Pointer value. */
23562de3b87aSKai Wang 	} c_un;
23572de3b87aSKai Wang } Elf64_Cap;
23582de3b87aSKai Wang 
23592de3b87aSKai Wang /*
23602de3b87aSKai Wang  * MIPS .conflict section entries.
23612de3b87aSKai Wang  */
23622de3b87aSKai Wang 
23632de3b87aSKai Wang /* 32-bit entry. */
23642de3b87aSKai Wang typedef struct {
23652de3b87aSKai Wang 	Elf32_Addr	c_index;
23662de3b87aSKai Wang } Elf32_Conflict;
23672de3b87aSKai Wang 
23682de3b87aSKai Wang /* 64-bit entry. */
23692de3b87aSKai Wang typedef struct {
23702de3b87aSKai Wang 	Elf64_Addr	c_index;
23712de3b87aSKai Wang } Elf64_Conflict;
23722de3b87aSKai Wang 
23732de3b87aSKai Wang /*
23742de3b87aSKai Wang  * Dynamic section entries.
23752de3b87aSKai Wang  */
23762de3b87aSKai Wang 
23772de3b87aSKai Wang /* 32-bit entry. */
23782de3b87aSKai Wang typedef struct {
23792de3b87aSKai Wang 	Elf32_Sword	d_tag;	     /* Type of entry. */
23802de3b87aSKai Wang 	union {
23812de3b87aSKai Wang 		Elf32_Word	d_val; /* Integer value. */
23822de3b87aSKai Wang 		Elf32_Addr	d_ptr; /* Pointer value. */
23832de3b87aSKai Wang 	} d_un;
23842de3b87aSKai Wang } Elf32_Dyn;
23852de3b87aSKai Wang 
23862de3b87aSKai Wang /* 64-bit entry. */
23872de3b87aSKai Wang typedef struct {
23882de3b87aSKai Wang 	Elf64_Sxword	d_tag;	     /* Type of entry. */
23892de3b87aSKai Wang 	union {
23902de3b87aSKai Wang 		Elf64_Xword	d_val; /* Integer value. */
23912de3b87aSKai Wang 		Elf64_Addr	d_ptr; /* Pointer value; */
23922de3b87aSKai Wang 	} d_un;
23932de3b87aSKai Wang } Elf64_Dyn;
23942de3b87aSKai Wang 
23952de3b87aSKai Wang 
23962de3b87aSKai Wang /*
23972de3b87aSKai Wang  * The executable header (EHDR).
23982de3b87aSKai Wang  */
23992de3b87aSKai Wang 
24002de3b87aSKai Wang /* 32 bit EHDR. */
24012de3b87aSKai Wang typedef struct {
24022de3b87aSKai Wang 	unsigned char   e_ident[EI_NIDENT]; /* ELF identification. */
24032de3b87aSKai Wang 	Elf32_Half      e_type;	     /* Object file type (ET_*). */
24042de3b87aSKai Wang 	Elf32_Half      e_machine;   /* Machine type (EM_*). */
24052de3b87aSKai Wang 	Elf32_Word      e_version;   /* File format version (EV_*). */
24062de3b87aSKai Wang 	Elf32_Addr      e_entry;     /* Start address. */
24072de3b87aSKai Wang 	Elf32_Off       e_phoff;     /* File offset to the PHDR table. */
24082de3b87aSKai Wang 	Elf32_Off       e_shoff;     /* File offset to the SHDRheader. */
24092de3b87aSKai Wang 	Elf32_Word      e_flags;     /* Flags (EF_*). */
24102de3b87aSKai Wang 	Elf32_Half      e_ehsize;    /* Elf header size in bytes. */
24112de3b87aSKai Wang 	Elf32_Half      e_phentsize; /* PHDR table entry size in bytes. */
24122de3b87aSKai Wang 	Elf32_Half      e_phnum;     /* Number of PHDR entries. */
24132de3b87aSKai Wang 	Elf32_Half      e_shentsize; /* SHDR table entry size in bytes. */
24142de3b87aSKai Wang 	Elf32_Half      e_shnum;     /* Number of SHDR entries. */
24152de3b87aSKai Wang 	Elf32_Half      e_shstrndx;  /* Index of section name string table. */
24162de3b87aSKai Wang } Elf32_Ehdr;
24172de3b87aSKai Wang 
24182de3b87aSKai Wang 
24192de3b87aSKai Wang /* 64 bit EHDR. */
24202de3b87aSKai Wang typedef struct {
24212de3b87aSKai Wang 	unsigned char   e_ident[EI_NIDENT]; /* ELF identification. */
24222de3b87aSKai Wang 	Elf64_Half      e_type;	     /* Object file type (ET_*). */
24232de3b87aSKai Wang 	Elf64_Half      e_machine;   /* Machine type (EM_*). */
24242de3b87aSKai Wang 	Elf64_Word      e_version;   /* File format version (EV_*). */
24252de3b87aSKai Wang 	Elf64_Addr      e_entry;     /* Start address. */
24262de3b87aSKai Wang 	Elf64_Off       e_phoff;     /* File offset to the PHDR table. */
24272de3b87aSKai Wang 	Elf64_Off       e_shoff;     /* File offset to the SHDRheader. */
24282de3b87aSKai Wang 	Elf64_Word      e_flags;     /* Flags (EF_*). */
24292de3b87aSKai Wang 	Elf64_Half      e_ehsize;    /* Elf header size in bytes. */
24302de3b87aSKai Wang 	Elf64_Half      e_phentsize; /* PHDR table entry size in bytes. */
24312de3b87aSKai Wang 	Elf64_Half      e_phnum;     /* Number of PHDR entries. */
24322de3b87aSKai Wang 	Elf64_Half      e_shentsize; /* SHDR table entry size in bytes. */
24332de3b87aSKai Wang 	Elf64_Half      e_shnum;     /* Number of SHDR entries. */
24342de3b87aSKai Wang 	Elf64_Half      e_shstrndx;  /* Index of section name string table. */
24352de3b87aSKai Wang } Elf64_Ehdr;
24362de3b87aSKai Wang 
24372de3b87aSKai Wang 
24382de3b87aSKai Wang /*
24392de3b87aSKai Wang  * Shared object information.
24402de3b87aSKai Wang  */
24412de3b87aSKai Wang 
24422de3b87aSKai Wang /* 32-bit entry. */
24432de3b87aSKai Wang typedef struct {
24442de3b87aSKai Wang 	Elf32_Word l_name;	     /* The name of a shared object. */
24452de3b87aSKai Wang 	Elf32_Word l_time_stamp;     /* 32-bit timestamp. */
24462de3b87aSKai Wang 	Elf32_Word l_checksum;	     /* Checksum of visible symbols, sizes. */
24472de3b87aSKai Wang 	Elf32_Word l_version;	     /* Interface version string index. */
24482de3b87aSKai Wang 	Elf32_Word l_flags;	     /* Flags (LL_*). */
24492de3b87aSKai Wang } Elf32_Lib;
24502de3b87aSKai Wang 
24512de3b87aSKai Wang /* 64-bit entry. */
24522de3b87aSKai Wang typedef struct {
2453cf781b2eSEd Maste 	Elf64_Word l_name;	     /* The name of a shared object. */
2454cf781b2eSEd Maste 	Elf64_Word l_time_stamp;     /* 32-bit timestamp. */
2455cf781b2eSEd Maste 	Elf64_Word l_checksum;	     /* Checksum of visible symbols, sizes. */
2456cf781b2eSEd Maste 	Elf64_Word l_version;	     /* Interface version string index. */
2457cf781b2eSEd Maste 	Elf64_Word l_flags;	     /* Flags (LL_*). */
24582de3b87aSKai Wang } Elf64_Lib;
24592de3b87aSKai Wang 
24602de3b87aSKai Wang #define	_ELF_DEFINE_LL_FLAGS()			\
24612de3b87aSKai Wang _ELF_DEFINE_LL(LL_NONE,			0,	\
24622de3b87aSKai Wang 	"no flags")				\
24632de3b87aSKai Wang _ELF_DEFINE_LL(LL_EXACT_MATCH,		0x1,	\
24642de3b87aSKai Wang 	"require an exact match")		\
24652de3b87aSKai Wang _ELF_DEFINE_LL(LL_IGNORE_INT_VER,	0x2,	\
24662de3b87aSKai Wang 	"ignore version incompatibilities")	\
24672de3b87aSKai Wang _ELF_DEFINE_LL(LL_REQUIRE_MINOR,	0x4,	\
24682de3b87aSKai Wang 	"")					\
24692de3b87aSKai Wang _ELF_DEFINE_LL(LL_EXPORTS,		0x8,	\
24702de3b87aSKai Wang 	"")					\
24712de3b87aSKai Wang _ELF_DEFINE_LL(LL_DELAY_LOAD,		0x10,	\
24722de3b87aSKai Wang 	"")					\
24732de3b87aSKai Wang _ELF_DEFINE_LL(LL_DELTA,		0x20,	\
24742de3b87aSKai Wang 	"")
24752de3b87aSKai Wang 
24762de3b87aSKai Wang #undef	_ELF_DEFINE_LL
24772de3b87aSKai Wang #define	_ELF_DEFINE_LL(N, V, DESCR)	N = V ,
24782de3b87aSKai Wang enum {
24792de3b87aSKai Wang 	_ELF_DEFINE_LL_FLAGS()
24802de3b87aSKai Wang 	LL__LAST__
24812de3b87aSKai Wang };
24822de3b87aSKai Wang 
24832de3b87aSKai Wang /*
24842de3b87aSKai Wang  * Note tags
24852de3b87aSKai Wang  */
24862de3b87aSKai Wang 
24872de3b87aSKai Wang #define	_ELF_DEFINE_NOTE_ENTRY_TYPES()					\
24882de3b87aSKai Wang _ELF_DEFINE_NT(NT_ABI_TAG,	1,	"Tag indicating the ABI")	\
24892de3b87aSKai Wang _ELF_DEFINE_NT(NT_GNU_HWCAP,	2,	"Hardware capabilities")	\
24902de3b87aSKai Wang _ELF_DEFINE_NT(NT_GNU_BUILD_ID,	3,	"Build id, set by ld(1)")	\
24912de3b87aSKai Wang _ELF_DEFINE_NT(NT_GNU_GOLD_VERSION, 4,					\
24922de3b87aSKai Wang 	"Version number of the GNU gold linker")			\
24932de3b87aSKai Wang _ELF_DEFINE_NT(NT_PRSTATUS,	1,	"Process status")		\
24942de3b87aSKai Wang _ELF_DEFINE_NT(NT_FPREGSET,	2,	"Floating point information")	\
24952de3b87aSKai Wang _ELF_DEFINE_NT(NT_PRPSINFO,	3,	"Process information")		\
24962de3b87aSKai Wang _ELF_DEFINE_NT(NT_AUXV,		6,	"Auxiliary vector")		\
24972de3b87aSKai Wang _ELF_DEFINE_NT(NT_PRXFPREG,	0x46E62B7FUL,				\
24982de3b87aSKai Wang 	"Linux user_xfpregs structure")					\
24992de3b87aSKai Wang _ELF_DEFINE_NT(NT_PSTATUS,	10,	"Linux process status")		\
25002de3b87aSKai Wang _ELF_DEFINE_NT(NT_FPREGS,	12,	"Linux floating point regset")	\
25012de3b87aSKai Wang _ELF_DEFINE_NT(NT_PSINFO,	13,	"Linux process information")	\
25022de3b87aSKai Wang _ELF_DEFINE_NT(NT_LWPSTATUS,	16,	"Linux lwpstatus_t type")	\
2503d003e0d7SEd Maste _ELF_DEFINE_NT(NT_LWPSINFO,	17,	"Linux lwpinfo_t type")		\
2504d003e0d7SEd Maste _ELF_DEFINE_NT(NT_FREEBSD_NOINIT_TAG,	2,	"FreeBSD no .init tag")	\
2505d003e0d7SEd Maste _ELF_DEFINE_NT(NT_FREEBSD_ARCH_TAG,	3,	"FreeBSD arch tag")	\
2506d003e0d7SEd Maste _ELF_DEFINE_NT(NT_FREEBSD_FEATURE_CTL,	4,	"FreeBSD feature control")
25072de3b87aSKai Wang 
25082de3b87aSKai Wang #undef	_ELF_DEFINE_NT
25092de3b87aSKai Wang #define	_ELF_DEFINE_NT(N, V, DESCR)	N = V ,
25102de3b87aSKai Wang enum {
25112de3b87aSKai Wang 	_ELF_DEFINE_NOTE_ENTRY_TYPES()
25122de3b87aSKai Wang 	NT__LAST__
25132de3b87aSKai Wang };
25142de3b87aSKai Wang 
25152de3b87aSKai Wang /* Aliases for the ABI tag. */
25162de3b87aSKai Wang #define	NT_FREEBSD_ABI_TAG	NT_ABI_TAG
25172de3b87aSKai Wang #define	NT_GNU_ABI_TAG		NT_ABI_TAG
25182de3b87aSKai Wang #define	NT_NETBSD_IDENT		NT_ABI_TAG
25192de3b87aSKai Wang #define	NT_OPENBSD_IDENT	NT_ABI_TAG
25202de3b87aSKai Wang 
25212de3b87aSKai Wang /*
25222de3b87aSKai Wang  * Note descriptors.
25232de3b87aSKai Wang  */
25242de3b87aSKai Wang 
25252de3b87aSKai Wang typedef	struct {
25262de3b87aSKai Wang 	uint32_t	n_namesz;    /* Length of note's name. */
25272de3b87aSKai Wang 	uint32_t	n_descsz;    /* Length of note's value. */
25282de3b87aSKai Wang 	uint32_t	n_type;	     /* Type of note. */
25292de3b87aSKai Wang } Elf_Note;
25302de3b87aSKai Wang 
25312de3b87aSKai Wang typedef Elf_Note Elf32_Nhdr;	     /* 32-bit note header. */
25322de3b87aSKai Wang typedef Elf_Note Elf64_Nhdr;	     /* 64-bit note header. */
25332de3b87aSKai Wang 
25342de3b87aSKai Wang /*
25352de3b87aSKai Wang  * MIPS ELF options descriptor header.
25362de3b87aSKai Wang  */
25372de3b87aSKai Wang 
25382de3b87aSKai Wang typedef struct {
25392de3b87aSKai Wang 	Elf64_Byte	kind;        /* Type of options. */
25402de3b87aSKai Wang 	Elf64_Byte     	size;	     /* Size of option descriptor. */
25412de3b87aSKai Wang 	Elf64_Half	section;     /* Index of section affected. */
25422de3b87aSKai Wang 	Elf64_Word	info;        /* Kind-specific information. */
25432de3b87aSKai Wang } Elf_Options;
25442de3b87aSKai Wang 
25452de3b87aSKai Wang /*
25462de3b87aSKai Wang  * Option kinds.
25472de3b87aSKai Wang  */
25482de3b87aSKai Wang 
25492de3b87aSKai Wang #define	_ELF_DEFINE_OPTION_KINDS()					\
25502de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_NULL,       0,      "undefined")			\
25512de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_REGINFO,    1,      "register usage info")		\
25522de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_EXCEPTIONS, 2,      "exception processing info")	\
25532de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_PAD,        3,      "section padding")		\
25542de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_HWPATCH,    4,      "hardware patch applied")	\
25552de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_FILL,       5,      "fill value used by linker")	\
25562de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_TAGS,       6,      "reserved space for tools")	\
25572de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_HWAND,      7,      "hardware AND patch applied")	\
25582de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_HWOR,       8,      "hardware OR patch applied")	\
25592de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_GP_GROUP,   9,					\
25602de3b87aSKai Wang 	"GP group to use for text/data sections")			\
25612de3b87aSKai Wang _ELF_DEFINE_ODK(ODK_IDENT,      10,     "ID information")		\
2562b6b6f9ccSEd Maste _ELF_DEFINE_ODK(ODK_PAGESIZE,   11,     "page size information")
25632de3b87aSKai Wang 
25642de3b87aSKai Wang #undef	_ELF_DEFINE_ODK
25652de3b87aSKai Wang #define	_ELF_DEFINE_ODK(N, V, DESCR)	N = V ,
25662de3b87aSKai Wang enum {
25672de3b87aSKai Wang 	_ELF_DEFINE_OPTION_KINDS()
25682de3b87aSKai Wang 	ODK__LAST__
25692de3b87aSKai Wang };
25702de3b87aSKai Wang 
25712de3b87aSKai Wang /*
25722de3b87aSKai Wang  * ODK_EXCEPTIONS info field masks.
25732de3b87aSKai Wang  */
25742de3b87aSKai Wang 
25752de3b87aSKai Wang #define	_ELF_DEFINE_ODK_EXCEPTIONS_MASK()				\
25762de3b87aSKai Wang _ELF_DEFINE_OEX(OEX_FPU_MIN,    0x0000001FUL,				\
25772de3b87aSKai Wang 	"minimum FPU exception which must be enabled")			\
25782de3b87aSKai Wang _ELF_DEFINE_OEX(OEX_FPU_MAX,    0x00001F00UL,				\
25792de3b87aSKai Wang 	"maximum FPU exception which can be enabled")			\
25802de3b87aSKai Wang _ELF_DEFINE_OEX(OEX_PAGE0,      0x00010000UL,				\
25812de3b87aSKai Wang 	"page zero must be mapped")					\
25822de3b87aSKai Wang _ELF_DEFINE_OEX(OEX_SMM,        0x00020000UL,				\
25832de3b87aSKai Wang 	"run in sequential memory mode")				\
25842de3b87aSKai Wang _ELF_DEFINE_OEX(OEX_PRECISEFP,  0x00040000UL,				\
25852de3b87aSKai Wang 	"run in precise FP exception mode")				\
25862de3b87aSKai Wang _ELF_DEFINE_OEX(OEX_DISMISS,    0x00080000UL,				\
25872de3b87aSKai Wang 	"dismiss invalid address traps")
25882de3b87aSKai Wang 
25892de3b87aSKai Wang #undef	_ELF_DEFINE_OEX
25902de3b87aSKai Wang #define	_ELF_DEFINE_OEX(N, V, DESCR)	N = V ,
25912de3b87aSKai Wang enum {
25922de3b87aSKai Wang 	_ELF_DEFINE_ODK_EXCEPTIONS_MASK()
25932de3b87aSKai Wang 	OEX__LAST__
25942de3b87aSKai Wang };
25952de3b87aSKai Wang 
25962de3b87aSKai Wang /*
25972de3b87aSKai Wang  * ODK_PAD info field masks.
25982de3b87aSKai Wang  */
25992de3b87aSKai Wang 
26002de3b87aSKai Wang #define	_ELF_DEFINE_ODK_PAD_MASK()					\
26012de3b87aSKai Wang _ELF_DEFINE_OPAD(OPAD_PREFIX,   0x0001)					\
26022de3b87aSKai Wang _ELF_DEFINE_OPAD(OPAD_POSTFIX,  0x0002)					\
26032de3b87aSKai Wang _ELF_DEFINE_OPAD(OPAD_SYMBOL,   0x0004)
26042de3b87aSKai Wang 
26052de3b87aSKai Wang #undef	_ELF_DEFINE_OPAD
26062de3b87aSKai Wang #define	_ELF_DEFINE_OPAD(N, V)		N = V ,
26072de3b87aSKai Wang enum {
26082de3b87aSKai Wang 	_ELF_DEFINE_ODK_PAD_MASK()
26092de3b87aSKai Wang 	OPAD__LAST__
26102de3b87aSKai Wang };
26112de3b87aSKai Wang 
26122de3b87aSKai Wang /*
26132de3b87aSKai Wang  * ODK_HWPATCH info field masks.
26142de3b87aSKai Wang  */
26152de3b87aSKai Wang 
26162de3b87aSKai Wang #define	_ELF_DEFINE_ODK_HWPATCH_MASK()					\
26172de3b87aSKai Wang _ELF_DEFINE_OHW(OHW_R4KEOP,     0x00000001UL,				\
26182de3b87aSKai Wang 	"patch for R4000 branch at end-of-page bug")			\
26192de3b87aSKai Wang _ELF_DEFINE_OHW(OHW_R8KPFETCH,  0x00000002UL,				\
26202de3b87aSKai Wang 	"R8000 prefetch bug may occur")					\
26212de3b87aSKai Wang _ELF_DEFINE_OHW(OHW_R5KEOP,     0x00000004UL,				\
26222de3b87aSKai Wang 	"patch for R5000 branch at end-of-page bug")			\
26232de3b87aSKai Wang _ELF_DEFINE_OHW(OHW_R5KCVTL,    0x00000008UL,				\
26242de3b87aSKai Wang 	"R5000 cvt.[ds].l bug: clean == 1")				\
26252de3b87aSKai Wang _ELF_DEFINE_OHW(OHW_R10KLDL,    0x00000010UL,				\
26262de3b87aSKai Wang 	"needd patch for R10000 misaligned load")
26272de3b87aSKai Wang 
26282de3b87aSKai Wang #undef	_ELF_DEFINE_OHW
26292de3b87aSKai Wang #define	_ELF_DEFINE_OHW(N, V, DESCR)	N = V ,
26302de3b87aSKai Wang enum {
26312de3b87aSKai Wang 	_ELF_DEFINE_ODK_HWPATCH_MASK()
26322de3b87aSKai Wang 	OHW__LAST__
26332de3b87aSKai Wang };
26342de3b87aSKai Wang 
26352de3b87aSKai Wang /*
26362de3b87aSKai Wang  * ODK_HWAND/ODK_HWOR info field and hwp_flags[12] masks.
26372de3b87aSKai Wang  */
26382de3b87aSKai Wang 
26392de3b87aSKai Wang #define	_ELF_DEFINE_ODK_HWP_MASK()					\
26402de3b87aSKai Wang _ELF_DEFINE_HWP(OHWA0_R4KEOP_CHECKED, 0x00000001UL,			\
26412de3b87aSKai Wang 	"object checked for R4000 end-of-page bug")			\
26422de3b87aSKai Wang _ELF_DEFINE_HWP(OHWA0_R4KEOP_CLEAN, 0x00000002UL,			\
26432de3b87aSKai Wang 	"object verified clean for R4000 end-of-page bug")		\
26442de3b87aSKai Wang _ELF_DEFINE_HWP(OHWO0_FIXADE,   0x00000001UL,				\
26452de3b87aSKai Wang 	"object requires call to fixade")
26462de3b87aSKai Wang 
26472de3b87aSKai Wang #undef	_ELF_DEFINE_HWP
26482de3b87aSKai Wang #define	_ELF_DEFINE_HWP(N, V, DESCR)	N = V ,
26492de3b87aSKai Wang enum {
26502de3b87aSKai Wang 	_ELF_DEFINE_ODK_HWP_MASK()
26512de3b87aSKai Wang 	OHWX0__LAST__
26522de3b87aSKai Wang };
26532de3b87aSKai Wang 
26542de3b87aSKai Wang /*
26552de3b87aSKai Wang  * ODK_IDENT/ODK_GP_GROUP info field masks.
26562de3b87aSKai Wang  */
26572de3b87aSKai Wang 
26582de3b87aSKai Wang #define	_ELF_DEFINE_ODK_GP_MASK()					\
26592de3b87aSKai Wang _ELF_DEFINE_OGP(OGP_GROUP,      0x0000FFFFUL, "GP group number")	\
26602de3b87aSKai Wang _ELF_DEFINE_OGP(OGP_SELF,       0x00010000UL,				\
26612de3b87aSKai Wang 	"GP group is self-contained")
26622de3b87aSKai Wang 
26632de3b87aSKai Wang #undef	_ELF_DEFINE_OGP
26642de3b87aSKai Wang #define	_ELF_DEFINE_OGP(N, V, DESCR)	N = V ,
26652de3b87aSKai Wang enum {
26662de3b87aSKai Wang 	_ELF_DEFINE_ODK_GP_MASK()
26672de3b87aSKai Wang 	OGP__LAST__
26682de3b87aSKai Wang };
26692de3b87aSKai Wang 
26702de3b87aSKai Wang /*
26712de3b87aSKai Wang  * MIPS ELF register info descriptor.
26722de3b87aSKai Wang  */
26732de3b87aSKai Wang 
26742de3b87aSKai Wang /* 32 bit RegInfo entry. */
26752de3b87aSKai Wang typedef struct {
26762de3b87aSKai Wang 	Elf32_Word	ri_gprmask;  /* Mask of general register used. */
26772de3b87aSKai Wang 	Elf32_Word	ri_cprmask[4]; /* Mask of coprocessor register used. */
26782de3b87aSKai Wang 	Elf32_Addr	ri_gp_value; /* GP register value. */
26792de3b87aSKai Wang } Elf32_RegInfo;
26802de3b87aSKai Wang 
26812de3b87aSKai Wang /* 64 bit RegInfo entry. */
26822de3b87aSKai Wang typedef struct {
26832de3b87aSKai Wang 	Elf64_Word	ri_gprmask;  /* Mask of general register used. */
26842de3b87aSKai Wang 	Elf64_Word	ri_pad;	     /* Padding. */
26852de3b87aSKai Wang 	Elf64_Word	ri_cprmask[4]; /* Mask of coprocessor register used. */
26862de3b87aSKai Wang 	Elf64_Addr	ri_gp_value; /* GP register value. */
26872de3b87aSKai Wang } Elf64_RegInfo;
26882de3b87aSKai Wang 
26892de3b87aSKai Wang /*
26902de3b87aSKai Wang  * Program Header Table (PHDR) entries.
26912de3b87aSKai Wang  */
26922de3b87aSKai Wang 
26932de3b87aSKai Wang /* 32 bit PHDR entry. */
26942de3b87aSKai Wang typedef struct {
26952de3b87aSKai Wang 	Elf32_Word	p_type;	     /* Type of segment. */
26962de3b87aSKai Wang 	Elf32_Off	p_offset;    /* File offset to segment. */
26972de3b87aSKai Wang 	Elf32_Addr	p_vaddr;     /* Virtual address in memory. */
26982de3b87aSKai Wang 	Elf32_Addr	p_paddr;     /* Physical address (if relevant). */
26992de3b87aSKai Wang 	Elf32_Word	p_filesz;    /* Size of segment in file. */
27002de3b87aSKai Wang 	Elf32_Word	p_memsz;     /* Size of segment in memory. */
27012de3b87aSKai Wang 	Elf32_Word	p_flags;     /* Segment flags. */
27022de3b87aSKai Wang 	Elf32_Word	p_align;     /* Alignment constraints. */
27032de3b87aSKai Wang } Elf32_Phdr;
27042de3b87aSKai Wang 
27052de3b87aSKai Wang /* 64 bit PHDR entry. */
27062de3b87aSKai Wang typedef struct {
27072de3b87aSKai Wang 	Elf64_Word	p_type;	     /* Type of segment. */
2708cf781b2eSEd Maste 	Elf64_Word	p_flags;     /* Segment flags. */
2709cf781b2eSEd Maste 	Elf64_Off	p_offset;    /* File offset to segment. */
2710cf781b2eSEd Maste 	Elf64_Addr	p_vaddr;     /* Virtual address in memory. */
2711cf781b2eSEd Maste 	Elf64_Addr	p_paddr;     /* Physical address (if relevant). */
2712cf781b2eSEd Maste 	Elf64_Xword	p_filesz;    /* Size of segment in file. */
2713cf781b2eSEd Maste 	Elf64_Xword	p_memsz;     /* Size of segment in memory. */
27142de3b87aSKai Wang 	Elf64_Xword	p_align;     /* Alignment constraints. */
27152de3b87aSKai Wang } Elf64_Phdr;
27162de3b87aSKai Wang 
27172de3b87aSKai Wang 
27182de3b87aSKai Wang /*
27192de3b87aSKai Wang  * Move entries, for describing data in COMMON blocks in a compact
27202de3b87aSKai Wang  * manner.
27212de3b87aSKai Wang  */
27222de3b87aSKai Wang 
27232de3b87aSKai Wang /* 32-bit move entry. */
27242de3b87aSKai Wang typedef struct {
27252de3b87aSKai Wang 	Elf32_Lword	m_value;     /* Initialization value. */
27262de3b87aSKai Wang 	Elf32_Word 	m_info;	     /* Encoded size and index. */
27272de3b87aSKai Wang 	Elf32_Word	m_poffset;   /* Offset relative to symbol. */
27282de3b87aSKai Wang 	Elf32_Half	m_repeat;    /* Repeat count. */
27292de3b87aSKai Wang 	Elf32_Half	m_stride;    /* Number of units to skip. */
27302de3b87aSKai Wang } Elf32_Move;
27312de3b87aSKai Wang 
27322de3b87aSKai Wang /* 64-bit move entry. */
27332de3b87aSKai Wang typedef struct {
27342de3b87aSKai Wang 	Elf64_Lword	m_value;     /* Initialization value. */
27352de3b87aSKai Wang 	Elf64_Xword 	m_info;	     /* Encoded size and index. */
27362de3b87aSKai Wang 	Elf64_Xword	m_poffset;   /* Offset relative to symbol. */
27372de3b87aSKai Wang 	Elf64_Half	m_repeat;    /* Repeat count. */
27382de3b87aSKai Wang 	Elf64_Half	m_stride;    /* Number of units to skip. */
27392de3b87aSKai Wang } Elf64_Move;
27402de3b87aSKai Wang 
27412de3b87aSKai Wang #define ELF32_M_SYM(I)		((I) >> 8)
27422de3b87aSKai Wang #define ELF32_M_SIZE(I)		((unsigned char) (I))
27432de3b87aSKai Wang #define ELF32_M_INFO(M, S)	(((M) << 8) + (unsigned char) (S))
27442de3b87aSKai Wang 
27452de3b87aSKai Wang #define ELF64_M_SYM(I)		((I) >> 8)
27462de3b87aSKai Wang #define ELF64_M_SIZE(I)		((unsigned char) (I))
27472de3b87aSKai Wang #define ELF64_M_INFO(M, S)	(((M) << 8) + (unsigned char) (S))
27482de3b87aSKai Wang 
27492de3b87aSKai Wang /*
27502de3b87aSKai Wang  * Section Header Table (SHDR) entries.
27512de3b87aSKai Wang  */
27522de3b87aSKai Wang 
27532de3b87aSKai Wang /* 32 bit SHDR */
27542de3b87aSKai Wang typedef struct {
27552de3b87aSKai Wang 	Elf32_Word	sh_name;     /* index of section name */
27562de3b87aSKai Wang 	Elf32_Word	sh_type;     /* section type */
27572de3b87aSKai Wang 	Elf32_Word	sh_flags;    /* section flags */
27582de3b87aSKai Wang 	Elf32_Addr	sh_addr;     /* in-memory address of section */
27592de3b87aSKai Wang 	Elf32_Off	sh_offset;   /* file offset of section */
27602de3b87aSKai Wang 	Elf32_Word	sh_size;     /* section size in bytes */
27612de3b87aSKai Wang 	Elf32_Word	sh_link;     /* section header table link */
27622de3b87aSKai Wang 	Elf32_Word	sh_info;     /* extra information */
27632de3b87aSKai Wang 	Elf32_Word	sh_addralign; /* alignment constraint */
27642de3b87aSKai Wang 	Elf32_Word	sh_entsize;   /* size for fixed-size entries */
27652de3b87aSKai Wang } Elf32_Shdr;
27662de3b87aSKai Wang 
27672de3b87aSKai Wang /* 64 bit SHDR */
27682de3b87aSKai Wang typedef struct {
27692de3b87aSKai Wang 	Elf64_Word	sh_name;     /* index of section name */
27702de3b87aSKai Wang 	Elf64_Word	sh_type;     /* section type */
27712de3b87aSKai Wang 	Elf64_Xword	sh_flags;    /* section flags */
27722de3b87aSKai Wang 	Elf64_Addr	sh_addr;     /* in-memory address of section */
27732de3b87aSKai Wang 	Elf64_Off	sh_offset;   /* file offset of section */
27742de3b87aSKai Wang 	Elf64_Xword	sh_size;     /* section size in bytes */
27752de3b87aSKai Wang 	Elf64_Word	sh_link;     /* section header table link */
27762de3b87aSKai Wang 	Elf64_Word	sh_info;     /* extra information */
27772de3b87aSKai Wang 	Elf64_Xword	sh_addralign; /* alignment constraint */
27782de3b87aSKai Wang 	Elf64_Xword	sh_entsize;  /* size for fixed-size entries */
27792de3b87aSKai Wang } Elf64_Shdr;
27802de3b87aSKai Wang 
27812de3b87aSKai Wang 
27822de3b87aSKai Wang /*
27832de3b87aSKai Wang  * Symbol table entries.
27842de3b87aSKai Wang  */
27852de3b87aSKai Wang 
27862de3b87aSKai Wang typedef struct {
27872de3b87aSKai Wang 	Elf32_Word	st_name;     /* index of symbol's name */
27882de3b87aSKai Wang 	Elf32_Addr	st_value;    /* value for the symbol */
27892de3b87aSKai Wang 	Elf32_Word	st_size;     /* size of associated data */
27902de3b87aSKai Wang 	unsigned char	st_info;     /* type and binding attributes */
27912de3b87aSKai Wang 	unsigned char	st_other;    /* visibility */
27922de3b87aSKai Wang 	Elf32_Half	st_shndx;    /* index of related section */
27932de3b87aSKai Wang } Elf32_Sym;
27942de3b87aSKai Wang 
27952de3b87aSKai Wang typedef struct {
27962de3b87aSKai Wang 	Elf64_Word	st_name;     /* index of symbol's name */
2797cf781b2eSEd Maste 	unsigned char	st_info;     /* type and binding attributes */
2798cf781b2eSEd Maste 	unsigned char	st_other;    /* visibility */
2799cf781b2eSEd Maste 	Elf64_Half	st_shndx;    /* index of related section */
2800cf781b2eSEd Maste 	Elf64_Addr	st_value;    /* value for the symbol */
2801cf781b2eSEd Maste 	Elf64_Xword	st_size;     /* size of associated data */
28022de3b87aSKai Wang } Elf64_Sym;
28032de3b87aSKai Wang 
28042de3b87aSKai Wang #define ELF32_ST_BIND(I)	((I) >> 4)
28052de3b87aSKai Wang #define ELF32_ST_TYPE(I)	((I) & 0xFU)
28062de3b87aSKai Wang #define ELF32_ST_INFO(B,T)	(((B) << 4) + ((T) & 0xF))
28072de3b87aSKai Wang 
28082de3b87aSKai Wang #define ELF64_ST_BIND(I)	((I) >> 4)
28092de3b87aSKai Wang #define ELF64_ST_TYPE(I)	((I) & 0xFU)
28102de3b87aSKai Wang #define ELF64_ST_INFO(B,T)	(((B) << 4) + ((T) & 0xF))
28112de3b87aSKai Wang 
28122de3b87aSKai Wang #define ELF32_ST_VISIBILITY(O)	((O) & 0x3)
28132de3b87aSKai Wang #define ELF64_ST_VISIBILITY(O)	((O) & 0x3)
28142de3b87aSKai Wang 
28152de3b87aSKai Wang /*
28162de3b87aSKai Wang  * Syminfo descriptors, containing additional symbol information.
28172de3b87aSKai Wang  */
28182de3b87aSKai Wang 
28192de3b87aSKai Wang /* 32-bit entry. */
28202de3b87aSKai Wang typedef struct {
28212de3b87aSKai Wang 	Elf32_Half	si_boundto;  /* Entry index with additional flags. */
28222de3b87aSKai Wang 	Elf32_Half	si_flags;    /* Flags. */
28232de3b87aSKai Wang } Elf32_Syminfo;
28242de3b87aSKai Wang 
28252de3b87aSKai Wang /* 64-bit entry. */
28262de3b87aSKai Wang typedef struct {
28272de3b87aSKai Wang 	Elf64_Half	si_boundto;  /* Entry index with additional flags. */
28282de3b87aSKai Wang 	Elf64_Half	si_flags;    /* Flags. */
28292de3b87aSKai Wang } Elf64_Syminfo;
28302de3b87aSKai Wang 
28312de3b87aSKai Wang /*
28322de3b87aSKai Wang  * Relocation descriptors.
28332de3b87aSKai Wang  */
28342de3b87aSKai Wang 
28352de3b87aSKai Wang typedef struct {
28362de3b87aSKai Wang 	Elf32_Addr	r_offset;    /* location to apply relocation to */
28372de3b87aSKai Wang 	Elf32_Word	r_info;	     /* type+section for relocation */
28382de3b87aSKai Wang } Elf32_Rel;
28392de3b87aSKai Wang 
28402de3b87aSKai Wang typedef struct {
28412de3b87aSKai Wang 	Elf32_Addr	r_offset;    /* location to apply relocation to */
28422de3b87aSKai Wang 	Elf32_Word	r_info;      /* type+section for relocation */
28432de3b87aSKai Wang 	Elf32_Sword	r_addend;    /* constant addend */
28442de3b87aSKai Wang } Elf32_Rela;
28452de3b87aSKai Wang 
28462de3b87aSKai Wang typedef struct {
28472de3b87aSKai Wang 	Elf64_Addr	r_offset;    /* location to apply relocation to */
28482de3b87aSKai Wang 	Elf64_Xword	r_info;      /* type+section for relocation */
28492de3b87aSKai Wang } Elf64_Rel;
28502de3b87aSKai Wang 
28512de3b87aSKai Wang typedef struct {
28522de3b87aSKai Wang 	Elf64_Addr	r_offset;    /* location to apply relocation to */
28532de3b87aSKai Wang 	Elf64_Xword	r_info;      /* type+section for relocation */
28542de3b87aSKai Wang 	Elf64_Sxword	r_addend;    /* constant addend */
28552de3b87aSKai Wang } Elf64_Rela;
28562de3b87aSKai Wang 
28572de3b87aSKai Wang 
28582de3b87aSKai Wang #define ELF32_R_SYM(I)		((I) >> 8)
28592de3b87aSKai Wang #define ELF32_R_TYPE(I)		((unsigned char) (I))
28602de3b87aSKai Wang #define ELF32_R_INFO(S,T)	(((S) << 8) + (unsigned char) (T))
28612de3b87aSKai Wang 
28622de3b87aSKai Wang #define ELF64_R_SYM(I)		((I) >> 32)
28632de3b87aSKai Wang #define ELF64_R_TYPE(I)		((I) & 0xFFFFFFFFUL)
2864d003e0d7SEd Maste #define ELF64_R_INFO(S,T)	\
2865d003e0d7SEd Maste 	(((Elf64_Xword) (S) << 32) + ((T) & 0xFFFFFFFFUL))
28662de3b87aSKai Wang 
28672de3b87aSKai Wang /*
28682de3b87aSKai Wang  * Symbol versioning structures.
28692de3b87aSKai Wang  */
28702de3b87aSKai Wang 
28712de3b87aSKai Wang /* 32-bit structures. */
28722de3b87aSKai Wang typedef struct
28732de3b87aSKai Wang {
28742de3b87aSKai Wang 	Elf32_Word	vda_name;    /* Index to name. */
28752de3b87aSKai Wang 	Elf32_Word	vda_next;    /* Offset to next entry. */
28762de3b87aSKai Wang } Elf32_Verdaux;
28772de3b87aSKai Wang 
28782de3b87aSKai Wang typedef struct
28792de3b87aSKai Wang {
28802de3b87aSKai Wang 	Elf32_Word	vna_hash;    /* Hash value of dependency name. */
28812de3b87aSKai Wang 	Elf32_Half	vna_flags;   /* Flags. */
28822de3b87aSKai Wang 	Elf32_Half	vna_other;   /* Unused. */
28832de3b87aSKai Wang 	Elf32_Word	vna_name;    /* Offset to dependency name. */
28842de3b87aSKai Wang 	Elf32_Word	vna_next;    /* Offset to next vernaux entry. */
28852de3b87aSKai Wang } Elf32_Vernaux;
28862de3b87aSKai Wang 
28872de3b87aSKai Wang typedef struct
28882de3b87aSKai Wang {
28892de3b87aSKai Wang 	Elf32_Half	vd_version;  /* Version information. */
28902de3b87aSKai Wang 	Elf32_Half	vd_flags;    /* Flags. */
28912de3b87aSKai Wang 	Elf32_Half	vd_ndx;	     /* Index into the versym section. */
28922de3b87aSKai Wang 	Elf32_Half	vd_cnt;	     /* Number of aux entries. */
28932de3b87aSKai Wang 	Elf32_Word	vd_hash;     /* Hash value of name. */
28942de3b87aSKai Wang 	Elf32_Word	vd_aux;	     /* Offset to aux entries. */
28952de3b87aSKai Wang 	Elf32_Word	vd_next;     /* Offset to next version definition. */
28962de3b87aSKai Wang } Elf32_Verdef;
28972de3b87aSKai Wang 
28982de3b87aSKai Wang typedef struct
28992de3b87aSKai Wang {
29002de3b87aSKai Wang 	Elf32_Half	vn_version;  /* Version number. */
29012de3b87aSKai Wang 	Elf32_Half	vn_cnt;	     /* Number of aux entries. */
29022de3b87aSKai Wang 	Elf32_Word	vn_file;     /* Offset of associated file name. */
29032de3b87aSKai Wang 	Elf32_Word	vn_aux;	     /* Offset of vernaux array. */
29042de3b87aSKai Wang 	Elf32_Word	vn_next;     /* Offset of next verneed entry. */
29052de3b87aSKai Wang } Elf32_Verneed;
29062de3b87aSKai Wang 
29072de3b87aSKai Wang typedef Elf32_Half	Elf32_Versym;
29082de3b87aSKai Wang 
29092de3b87aSKai Wang /* 64-bit structures. */
29102de3b87aSKai Wang 
29112de3b87aSKai Wang typedef struct {
29122de3b87aSKai Wang 	Elf64_Word	vda_name;    /* Index to name. */
29132de3b87aSKai Wang 	Elf64_Word	vda_next;    /* Offset to next entry. */
29142de3b87aSKai Wang } Elf64_Verdaux;
29152de3b87aSKai Wang 
29162de3b87aSKai Wang typedef struct {
29172de3b87aSKai Wang 	Elf64_Word	vna_hash;    /* Hash value of dependency name. */
29182de3b87aSKai Wang 	Elf64_Half	vna_flags;   /* Flags. */
29192de3b87aSKai Wang 	Elf64_Half	vna_other;   /* Unused. */
29202de3b87aSKai Wang 	Elf64_Word	vna_name;    /* Offset to dependency name. */
29212de3b87aSKai Wang 	Elf64_Word	vna_next;    /* Offset to next vernaux entry. */
29222de3b87aSKai Wang } Elf64_Vernaux;
29232de3b87aSKai Wang 
29242de3b87aSKai Wang typedef struct {
29252de3b87aSKai Wang 	Elf64_Half	vd_version;  /* Version information. */
29262de3b87aSKai Wang 	Elf64_Half	vd_flags;    /* Flags. */
29272de3b87aSKai Wang 	Elf64_Half	vd_ndx;	     /* Index into the versym section. */
29282de3b87aSKai Wang 	Elf64_Half	vd_cnt;	     /* Number of aux entries. */
29292de3b87aSKai Wang 	Elf64_Word	vd_hash;     /* Hash value of name. */
29302de3b87aSKai Wang 	Elf64_Word	vd_aux;	     /* Offset to aux entries. */
29312de3b87aSKai Wang 	Elf64_Word	vd_next;     /* Offset to next version definition. */
29322de3b87aSKai Wang } Elf64_Verdef;
29332de3b87aSKai Wang 
29342de3b87aSKai Wang typedef struct {
29352de3b87aSKai Wang 	Elf64_Half	vn_version;  /* Version number. */
29362de3b87aSKai Wang 	Elf64_Half	vn_cnt;	     /* Number of aux entries. */
29372de3b87aSKai Wang 	Elf64_Word	vn_file;     /* Offset of associated file name. */
29382de3b87aSKai Wang 	Elf64_Word	vn_aux;	     /* Offset of vernaux array. */
29392de3b87aSKai Wang 	Elf64_Word	vn_next;     /* Offset of next verneed entry. */
29402de3b87aSKai Wang } Elf64_Verneed;
29412de3b87aSKai Wang 
29422de3b87aSKai Wang typedef Elf64_Half	Elf64_Versym;
29432de3b87aSKai Wang 
29442de3b87aSKai Wang 
29452de3b87aSKai Wang /*
29462de3b87aSKai Wang  * The header for GNU-style hash sections.
29472de3b87aSKai Wang  */
29482de3b87aSKai Wang 
29492de3b87aSKai Wang typedef struct {
29502de3b87aSKai Wang 	uint32_t	gh_nbuckets;	/* Number of hash buckets. */
29512de3b87aSKai Wang 	uint32_t	gh_symndx;	/* First visible symbol in .dynsym. */
29522de3b87aSKai Wang 	uint32_t	gh_maskwords;	/* #maskwords used in bloom filter. */
29532de3b87aSKai Wang 	uint32_t	gh_shift2;	/* Bloom filter shift count. */
29542de3b87aSKai Wang } Elf_GNU_Hash_Header;
29552de3b87aSKai Wang 
29562de3b87aSKai Wang #endif	/* _ELFDEFINITIONS_H_ */
2957