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