dnl 	$NetBSD: elfconstants.m4,v 1.9 2025/02/10 18:52:26 jkoshy Exp $
# Copyright (c) 2010,2021 Joseph Koshy
# All rights reserved.

# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.

# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.

define(`VCSID_ELFCONSTANTS_M4',
	`Id: elfconstants.m4 4172 2025-02-06 21:19:36Z jkoshy')

define(`COMPATIBILITY_NOTICE',`dnl
# These definitions are believed to be compatible with:
#
# - The public specification of the ELF format as defined in the
#   October 2009 draft of System V ABI.
#   http://www.sco.com/developers/gabi/latest/ch4.intro.html
#
# - The May 1998 (version 1.5) draft of "The ELF-64 object format".
#
# - The "Linkers and Libraries Guide", from Sun Microsystems.
#
# - Processor-specific ELF ABI definitions for the aarch64, arm, i386,
#   ia_64, loongarch, mips, ppc, ppc64, riscv, s390, sparc, vax and
#   x86_64 architectures:
#
#   i386 ::
#     System V Application Binary Interface
#     Intel386 Architecture Processor Supplement Version 1.2
#     https://gitlab.com/x86-psABIs/i386-ABI/-/tree/hjl/x86/master
#
#   aarch64 ::
#     ELF for the Arm® 64-bit Architecture (AArch64)
#     https://github.com/ARM-software/abi-aa/blob/main/aaelf64/aaelf64.rst
#
#   arm ::
#     ELF for the Arm® Architecture
#     https://github.com/ARM-software/abi-aa/blob/main/aaelf32/aaelf32.rst
#
#   ia_64 ::
#      Intel® Itanium™ Processor-specific Application Binary Interface (ABI)
#      Document Number: 245370-003
#      http://refspecs.linux-foundation.org/elf/IA64-SysV-psABI.pdf
#
#   loongarch ::
#     ELF for the LoongArch™ Architecture
#     https://github.com/loongson/la-abi-specs/blob/release/laelf.adoc.
#
#   mips ::
#     SYSTEM V APPLICATION BINARY INTERFACE, MIPS RISC Processor Supplement,
#     3rd Edition, 1996.
#     https://refspecs.linuxfoundation.org/elf/mipsabi.pdf
#     
#   ppc ::
#     Power Architecture® 32-bit Application Binary Interface
#     Supplement 1.0 - Linux® & Embedded
#     (Archived link) https://web.archive.org/web/20120608002551/\
#       https://www.power.org/resources/downloads/\
#       Power-Arch-32-bit-ABI-supp-1.0-Unified.pdf
#
#   ppc64 ::
#     64-bit ELF ABI Specification for OpenPOWER Architecture
#     https://openpowerfoundation.org/specifications/64bitelfabi/
#
#   riscv ::
#     RISC-V ELF Specification
#     https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc
#
#   s390 ::
#     S/390 ELF Application Binary Interface Supplement
#     https://refspecs.linuxfoundation.org/ELF/zSeries/lzsabi0_zSeries.htm
#
#   sparc ::
#     Oracle Solaris Linkers and Libraries Guide
#     November 2024, Document E36783-04.
#
#   x86_64 ::
#     ELF x86-64-ABI psABI
#     https://gitlab.com/x86-psABIs/x86-64-ABI')

# In the following definitions, `_' is an M4 macro that is meant to be
# expanded later.  Its intended usage is:
#
#   `_(ELF_SYMBOL, VALUE, OPTIONAL-DESCRIPTION)'
#
# These (deferred) macros are then grouped together into named collections.
#
# At the point of use, `_' would be defined to expand to the desired
# replacement text.
#
#   # File: example_expansion.m4
#
#   define(`_',`case $2: return ("$1");')
#   include(`elfconstants.m4')
#
#   const char *name_of_capability(int capability)
#   {
#       switch(capability) {
#       DEFINE_CAPABILITIES();
#       default:
#           return (NULL);
#       }
#   }   


# The `__' macro is used to record comments.
#
# Provide a default definition for the macro that ignores its arguments.
define(`__',`')

#
# Types of capabilities.
# 
define(`DEFINE_CAPABILITIES',`
_(`CA_SUNW_NULL',	0,	`ignored')
_(`CA_SUNW_HW_1',	1,	`hardware capability')
_(`CA_SUNW_SW_1',	2,	`software capability')')

#
# Flags used with dynamic linking entries.
#
define(`DEFINE_DYN_FLAGS',`
_(`DF_ORIGIN',           0x1,
	`object being loaded may refer to `$ORIGIN'')
_(`DF_SYMBOLIC',         0x2,
	`search library for references before executable')
_(`DF_TEXTREL',          0x4,
	`relocation entries may modify text segment')
_(`DF_BIND_NOW',         0x8,
	`process relocation entries at load time')
_(`DF_STATIC_TLS',       0x10,
	`uses static thread-local storage')
_(`DF_1_BIND_NOW',       0x1,
	`process relocation entries at load time')
_(`DF_1_GLOBAL',         0x2,
	`unused')
_(`DF_1_GROUP',          0x4,
	`object is a member of a group')
_(`DF_1_NODELETE',       0x8,
	`object cannot be deleted from a process')
_(`DF_1_LOADFLTR',       0x10,
	`immediate load filtees')
_(`DF_1_INITFIRST',      0x20,
	`initialize object first')
_(`DF_1_NOOPEN',         0x40,
	`disallow dlopen()')
_(`DF_1_ORIGIN',         0x80,
	`object being loaded may refer to $ORIGIN')
_(`DF_1_DIRECT',         0x100,
	`direct bindings enabled')
_(`DF_1_INTERPOSE',      0x400,
	`object is interposer')
_(`DF_1_NODEFLIB',       0x800,
	`ignore default library search path')
_(`DF_1_NODUMP',         0x1000,
	`disallow dldump()')
_(`DF_1_CONFALT',        0x2000,
	`object is a configuration alternative')
_(`DF_1_ENDFILTEE',      0x4000,
	`filtee terminates filter search')
_(`DF_1_DISPRELDNE',     0x8000,
	`displacement relocation done')
_(`DF_1_DISPRELPND',     0x10000,
	`displacement relocation pending')')

#
# Dynamic linking entry types.
#
define(`DEFINE_DYN_TYPES',`
_(`DT_NULL',             0,
	`end of array')
_(`DT_NEEDED',           1,
	`names a needed library')
_(`DT_PLTRELSZ',         2,
	`size in bytes of associated relocation entries')
_(`DT_PLTGOT',           3,
	`address associated with the procedure linkage table')
_(`DT_HASH',             4,
	`address of the symbol hash table')
_(`DT_STRTAB',           5,
	`address of the string table')
_(`DT_SYMTAB',           6,
	`address of the symbol table')
_(`DT_RELA',             7,
	`address of the relocation table')
_(`DT_RELASZ',           8,
	`size of the DT_RELA table')
_(`DT_RELAENT',          9,
	`size of each DT_RELA entry')
_(`DT_STRSZ',            10,
	`size of the string table')
_(`DT_SYMENT',           11,
	`size of a symbol table entry')
_(`DT_INIT',             12,
	`address of the initialization function')
_(`DT_FINI',             13,
	`address of the finalization function')
_(`DT_SONAME',           14,
	`names the shared object')
_(`DT_RPATH',            15,
	`runtime library search path')
_(`DT_SYMBOLIC',         16,
	`alter symbol resolution algorithm')
_(`DT_REL',              17,
	`address of the DT_REL table')
_(`DT_RELSZ',            18,
	`size of the DT_REL table')
_(`DT_RELENT',           19,
	`size of each DT_REL entry')
_(`DT_PLTREL',           20,
	`type of relocation entry in the procedure linkage table')
_(`DT_DEBUG',            21,
	`used for debugging')
_(`DT_TEXTREL',          22,
	`text segment may be written to during relocation')
_(`DT_JMPREL',           23,
	`address of relocation entries associated with the procedure linkage table')
_(`DT_BIND_NOW',         24,
	`bind symbols at loading time')
_(`DT_INIT_ARRAY',       25,
	`pointers to initialization functions')
_(`DT_FINI_ARRAY',       26,
	`pointers to termination functions')
_(`DT_INIT_ARRAYSZ',     27,
	`size of the DT_INIT_ARRAY')
_(`DT_FINI_ARRAYSZ',     28,
	`size of the DT_FINI_ARRAY')
_(`DT_RUNPATH',          29,
	`index of library search path string')
_(`DT_FLAGS',            30,
	`flags specific to the object being loaded')
_(`DT_ENCODING',         32,
	`standard semantics')
_(`DT_PREINIT_ARRAY',    32,
	`pointers to pre-initialization functions')
_(`DT_PREINIT_ARRAYSZ',  33,
	`size of pre-initialization array')
_(`DT_MAXPOSTAGS',       34,
	`the number of positive tags')
_(`DT_LOOS',             0x6000000D,
	`start of OS-specific types')
_(`DT_SUNW_AUXILIARY',   0x6000000D,
	`offset of string naming auxiliary filtees')
_(`DT_SUNW_RTLDINF',     0x6000000E,
	`rtld internal use')
_(`DT_SUNW_FILTER',      0x6000000F,
	`offset of string naming standard filtees')
_(`DT_SUNW_CAP',         0x60000010,
	`address of hardware capabilities section')
_(`DT_SUNW_ASLR',        0x60000023,
	`Address Space Layout Randomization flag')
_(`DT_HIOS',             0x6FFFF000,
	`end of OS-specific types')
_(`DT_VALRNGLO',         0x6FFFFD00,
	`start of range using the d_val field')
_(`DT_GNU_PRELINKED',    0x6FFFFDF5,
	`prelinking timestamp')
_(`DT_GNU_CONFLICTSZ',   0x6FFFFDF6,
	`size of conflict section')
_(`DT_GNU_LIBLISTSZ',    0x6FFFFDF7,
	`size of library list')
_(`DT_CHECKSUM',         0x6FFFFDF8,
	`checksum for the object')
_(`DT_PLTPADSZ',         0x6FFFFDF9,
	`size of PLT padding')
_(`DT_MOVEENT',          0x6FFFFDFA,
	`size of DT_MOVETAB entries')
_(`DT_MOVESZ',           0x6FFFFDFB,
	`total size of the MOVETAB table')
_(`DT_FEATURE',          0x6FFFFDFC,
	`feature values')
_(`DT_POSFLAG_1',        0x6FFFFDFD,
	`dynamic position flags')
_(`DT_SYMINSZ',          0x6FFFFDFE,
	`size of the DT_SYMINFO table')
_(`DT_SYMINENT',         0x6FFFFDFF,
	`size of a DT_SYMINFO entry')
_(`DT_VALRNGHI',         0x6FFFFDFF,
	`end of range using the d_val field')
_(`DT_ADDRRNGLO',        0x6FFFFE00,
	`start of range using the d_ptr field')
_(`DT_GNU_HASH',	       0x6FFFFEF5,
	`GNU style hash tables')
_(`DT_TLSDESC_PLT',      0x6FFFFEF6,
	`location of PLT entry for TLS descriptor resolver calls')
_(`DT_TLSDESC_GOT',      0x6FFFFEF7,
	`location of GOT entry used by TLS descriptor resolver PLT entry')
_(`DT_GNU_CONFLICT',     0x6FFFFEF8,
	`address of conflict section')
_(`DT_GNU_LIBLIST',      0x6FFFFEF9,
	`address of conflict section')
_(`DT_CONFIG',           0x6FFFFEFA,
	`configuration file')
_(`DT_DEPAUDIT',         0x6FFFFEFB,
	`string defining audit libraries')
_(`DT_AUDIT',            0x6FFFFEFC,
	`string defining audit libraries')
_(`DT_PLTPAD',           0x6FFFFEFD,
	`PLT padding')
_(`DT_MOVETAB',          0x6FFFFEFE,
	`address of a move table')
_(`DT_SYMINFO',          0x6FFFFEFF,
	`address of the symbol information table')
_(`DT_ADDRRNGHI',        0x6FFFFEFF,
	`end of range using the d_ptr field')
_(`DT_VERSYM',	       0x6FFFFFF0,
	`address of the version section')
_(`DT_RELACOUNT',        0x6FFFFFF9,
	`count of RELA relocations')
_(`DT_RELCOUNT',         0x6FFFFFFA,
	`count of REL relocations')
_(`DT_FLAGS_1',          0x6FFFFFFB,
	`flag values')
_(`DT_VERDEF',	       0x6FFFFFFC,
	`address of the version definition segment')
_(`DT_VERDEFNUM',	       0x6FFFFFFD,
	`the number of version definition entries')
_(`DT_VERNEED',	       0x6FFFFFFE,
	`address of section with needed versions')
_(`DT_VERNEEDNUM',       0x6FFFFFFF,
	`the number of version needed entries')
_(`DT_LOPROC',           0x70000000,
	`start of processor-specific types')
_(`DT_ARM_SYMTABSZ',     0x70000001,
	`number of entries in the dynamic symbol table')
_(`DT_SPARC_REGISTER',   0x70000001,
	`index of an STT_SPARC_REGISTER symbol')
_(`DT_ARM_PREEMPTMAP',   0x70000002,
	`address of the preemption map')
_(`DT_MIPS_RLD_VERSION', 0x70000001,
	`version ID for runtime linker interface')
_(`DT_MIPS_TIME_STAMP',  0x70000002,
	`timestamp')
_(`DT_MIPS_ICHECKSUM',   0x70000003,
	`checksum of all external strings and common sizes')
_(`DT_MIPS_IVERSION',    0x70000004,
	`string table index of a version string')
_(`DT_MIPS_FLAGS',       0x70000005,
	`MIPS-specific flags')
_(`DT_MIPS_BASE_ADDRESS', 0x70000006,
	`base address for the executable/DSO')
_(`DT_MIPS_CONFLICT',    0x70000008,
	`address of .conflict section')
_(`DT_MIPS_LIBLIST',     0x70000009,
	`address of .liblist section')
_(`DT_MIPS_LOCAL_GOTNO', 0x7000000A,
	`number of local GOT entries')
_(`DT_MIPS_CONFLICTNO',  0x7000000B,
	`number of entries in the .conflict section')
_(`DT_MIPS_LIBLISTNO',   0x70000010,
	`number of entries in the .liblist section')
_(`DT_MIPS_SYMTABNO',    0x70000011,
	`number of entries in the .dynsym section')
_(`DT_MIPS_UNREFEXTNO',  0x70000012,
	`index of first external dynamic symbol not referenced locally')
_(`DT_MIPS_GOTSYM',      0x70000013,
	`index of first dynamic symbol corresponds to a GOT entry')
_(`DT_MIPS_HIPAGENO',    0x70000014,
	`number of page table entries in GOT')
_(`DT_MIPS_RLD_MAP',     0x70000016,
	`address of runtime linker map')
_(`DT_MIPS_DELTA_CLASS', 0x70000017,
	`Delta C++ class definition')
_(`DT_MIPS_DELTA_CLASS_NO', 0x70000018,
	`number of entries in DT_MIPS_DELTA_CLASS')
_(`DT_MIPS_DELTA_INSTANCE', 0x70000019,
	`Delta C++ class instances')
_(`DT_MIPS_DELTA_INSTANCE_NO', 0x7000001A,
	`number of entries in DT_MIPS_DELTA_INSTANCE')
_(`DT_MIPS_DELTA_RELOC', 0x7000001B,
	`Delta relocations')
_(`DT_MIPS_DELTA_RELOC_NO', 0x7000001C,
	`number of entries in DT_MIPS_DELTA_RELOC')
_(`DT_MIPS_DELTA_SYM',   0x7000001D,
	`Delta symbols referred by Delta relocations')
_(`DT_MIPS_DELTA_SYM_NO', 0x7000001E,
	`number of entries in DT_MIPS_DELTA_SYM')
_(`DT_MIPS_DELTA_CLASSSYM', 0x70000020,
	`Delta symbols for class declarations')
_(`DT_MIPS_DELTA_CLASSSYM_NO', 0x70000021,
	`number of entries in DT_MIPS_DELTA_CLASSSYM')
_(`DT_MIPS_CXX_FLAGS',   0x70000022,
	`C++ flavor flags')
_(`DT_MIPS_PIXIE_INIT',  0x70000023,
	`address of an initialization routine created by pixie')
_(`DT_MIPS_SYMBOL_LIB',  0x70000024,
	`address of .MIPS.symlib section')
_(`DT_MIPS_LOCALPAGE_GOTIDX', 0x70000025,
	`GOT index of first page table entry for a segment')
_(`DT_MIPS_LOCAL_GOTIDX', 0x70000026,
	`GOT index of first page table entry for a local symbol')
_(`DT_MIPS_HIDDEN_GOTIDX', 0x70000027,
	`GOT index of first page table entry for a hidden symbol')
_(`DT_MIPS_PROTECTED_GOTIDX', 0x70000028,
	`GOT index of first page table entry for a protected symbol')
_(`DT_MIPS_OPTIONS',     0x70000029,
	`address of .MIPS.options section')
_(`DT_MIPS_INTERFACE',   0x7000002A,
	`address of .MIPS.interface section')
_(`DT_MIPS_DYNSTR_ALIGN', 0x7000002B,
	`???')
_(`DT_MIPS_INTERFACE_SIZE', 0x7000002C,
	`size of .MIPS.interface section')
_(`DT_MIPS_RLD_TEXT_RESOLVE_ADDR', 0x7000002D,
	`address of _rld_text_resolve in GOT')
_(`DT_MIPS_PERF_SUFFIX', 0x7000002E,
	`default suffix of DSO to be appended by dlopen')
_(`DT_MIPS_COMPACT_SIZE', 0x7000002F,
	`size of a ucode compact relocation record (o32)')
_(`DT_MIPS_GP_VALUE',    0x70000030,
	`GP value of a specified GP relative range')
_(`DT_MIPS_AUX_DYNAMIC', 0x70000031,
	`address of an auxiliary dynamic table')
_(`DT_MIPS_PLTGOT',      0x70000032,
	`address of the PLTGOT')
_(`DT_MIPS_RLD_OBJ_UPDATE', 0x70000033,
	`object list update callback')
_(`DT_MIPS_RWPLT',       0x70000034,
	`address of a writable PLT')
_(`DT_PPC_GOT',          0x70000000,
	`value of _GLOBAL_OFFSET_TABLE_')
_(`DT_PPC_TLSOPT',       0x70000001,
	`TLS descriptor should be optimized')
_(`DT_PPC64_GLINK',      0x70000000,
	`address of .glink section')
_(`DT_PPC64_OPD',        0x70000001,
	`address of .opd section')
_(`DT_PPC64_OPDSZ',      0x70000002,
	`size of .opd section')
_(`DT_PPC64_TLSOPT',     0x70000003,
	`TLS descriptor should be optimized')
_(`DT_AUXILIARY',        0x7FFFFFFD,
	`offset of string naming auxiliary filtees')
_(`DT_USED',             0x7FFFFFFE,
	`ignored')
_(`DT_FILTER',           0x7FFFFFFF,
	`index of string naming filtees')
_(`DT_HIPROC',           0x7FFFFFFF,
	`end of processor-specific types')
')

define(`DEFINE_DYN_TYPE_ALIASES',`
_(`DT_DEPRECATED_SPARC_REGISTER', `DT_SPARC_REGISTER')
')

#
# Flags used in the executable header (field: e_flags).
#
define(`DEFINE_EHDR_FLAGS',`
_(EF_ARM_RELEXEC,      0x00000001U,
	`dynamic segment describes only how to relocate segments')
_(EF_ARM_HASENTRY,     0x00000002U,
	`e_entry contains a program entry point')
_(EF_ARM_SYMSARESORTED, 0x00000004U,
	`subsection of symbol table is sorted by symbol value')
_(EF_ARM_DYNSYMSUSESEGIDX, 0x00000008U,
	`dynamic symbol st_shndx = containing segment index + 1')
_(EF_ARM_MAPSYMSFIRST, 0x00000010U,
	`mapping symbols precede other local symbols in symtab')
_(EF_ARM_BE8,          0x00800000U,
	`file contains BE-8 code')
_(EF_ARM_LE8,          0x00400000U,
	`file contains LE-8 code')
_(EF_ARM_EABIMASK,     0xFF000000U,
	`mask for ARM EABI version number (0 denotes GNU or unknown)')
_(EF_ARM_EABI_UNKNOWN, 0x00000000U,
	`Unknown or GNU ARM EABI version number')
_(EF_ARM_EABI_VER1,    0x01000000U,
	`ARM EABI version 1')
_(EF_ARM_EABI_VER2,    0x02000000U,
	`ARM EABI version 2')
_(EF_ARM_EABI_VER3,    0x03000000U,
	`ARM EABI version 3')
_(EF_ARM_EABI_VER4,    0x04000000U,
	`ARM EABI version 4')
_(EF_ARM_EABI_VER5,    0x05000000U,
	`ARM EABI version 5')
_(EF_ARM_INTERWORK,    0x00000004U,
	`GNU EABI extension')
_(EF_ARM_APCS_26,      0x00000008U,
	`GNU EABI extension')
_(EF_ARM_APCS_FLOAT,   0x00000010U,
	`GNU EABI extension')
_(EF_ARM_PIC,          0x00000020U,
	`GNU EABI extension')
_(EF_ARM_ALIGN8,       0x00000040U,
	`GNU EABI extension')
_(EF_ARM_NEW_ABI,      0x00000080U,
	`GNU EABI extension')
_(EF_ARM_OLD_ABI,      0x00000100U,
	`GNU EABI extension')
_(EF_ARM_SOFT_FLOAT,   0x00000200U,
	`GNU EABI extension')
_(EF_ARM_VFP_FLOAT,    0x00000400U,
	`GNU EABI extension')
_(EF_ARM_MAVERICK_FLOAT, 0x00000800U,
	`GNU EABI extension')
_(EF_LOONGARCH_ABI_SOFT_FLOAT,     0x00000001U,
	`LoongArch software floating point emulation')
_(EF_LOONGARCH_ABI_SINGLE_FLOAT,   0x00000002U,
	`LoongArch 32-bit floating point registers')
_(EF_LOONGARCH_ABI_DOUBLE_FLOAT,   0x00000003U,
	`LoongArch 64-bit floating point registers')
_(EF_LOONGARCH_ABI_MODIFIER_MASK,  0x00000007U,
	`LoongArch floating point modifier mask')
_(EF_LOONGARCH_OBJABI_V0,          0x00000000U,
	`LoongArch object file ABI version 0')
_(EF_LOONGARCH_OBJABI_V1,          0x00000040U,
	`LoongArch object file ABI version 1')
_(EF_LOONGARCH_OBJABI_MASK,        0x000000C0U,
	`LoongArch object file ABI version mask')
_(EF_MIPS_NOREORDER,   0x00000001U,
	`at least one .noreorder directive appeared in the source')
_(EF_MIPS_PIC,         0x00000002U,
	`file contains position independent code')
_(EF_MIPS_CPIC,        0x00000004U,
	`file code uses standard conventions for calling PIC')
_(EF_MIPS_UCODE,       0x00000010U,
	`file contains UCODE (obsolete)')
_(EF_MIPS_ABI,	      0x00007000U,
	`Application binary interface, see E_MIPS_* values')
_(EF_MIPS_ABI2,        0x00000020U,
	`file follows MIPS III 32-bit ABI')
_(EF_MIPS_OPTIONS_FIRST, 0x00000080U,
	`ld(1) should process .MIPS.options section first')
_(EF_MIPS_ARCH_ASE,    0x0F000000U,
	`file uses application-specific architectural extensions')
_(EF_MIPS_ARCH_ASE_MDMX, 0x08000000U,
	`file uses MDMX multimedia extensions')
_(EF_MIPS_ARCH_ASE_M16, 0x04000000U,
	`file uses MIPS-16 ISA extensions')
_(EF_MIPS_ARCH_ASE_MICROMIPS, 0x02000000U,
	`MicroMIPS architecture')
_(EF_MIPS_ARCH,         0xF0000000U,
	`4-bit MIPS architecture field')
_(EF_MIPS_ARCH_1,	0x00000000U,
	`MIPS I instruction set')
_(EF_MIPS_ARCH_2,	0x10000000U,
	`MIPS II instruction set')
_(EF_MIPS_ARCH_3,	0x20000000U,
	`MIPS III instruction set')
_(EF_MIPS_ARCH_4,	0x30000000U,
	`MIPS IV instruction set')
_(EF_MIPS_ARCH_5,	0x40000000U,
	`Never introduced')
_(EF_MIPS_ARCH_32,	0x50000000U,
	`Mips32 Revision 1')
_(EF_MIPS_ARCH_64,	0x60000000U,
	`Mips64 Revision 1')
_(EF_MIPS_ARCH_32R2,	0x70000000U,
	`Mips32 Revision 2')
_(EF_MIPS_ARCH_64R2,	0x80000000U,
	`Mips64 Revision 2')
_(EF_PPC_EMB,          0x80000000U,
	`Embedded PowerPC flag')
_(EF_PPC_RELOCATABLE,  0x00010000U,
	`-mrelocatable flag')
_(EF_PPC_RELOCATABLE_LIB, 0x00008000U,
	`-mrelocatable-lib flag')
_(EF_RISCV_RVC,	    0x00000001U,
	`Compressed instruction extension')
_(EF_RISCV_FLOAT_ABI_MASK, 0x00000006U,
	`Floating point ABI')
_(EF_RISCV_FLOAT_ABI_SOFT, 0x00000000U,
	`Software emulated floating point')
_(EF_RISCV_FLOAT_ABI_SINGLE, 0x00000002U,
	`Single precision floating point')
_(EF_RISCV_FLOAT_ABI_DOUBLE, 0x00000004U,
	`Double precision floating point')
_(EF_RISCV_FLOAT_ABI_QUAD, 0x00000006U,
	`Quad precision floating point')
_(EF_RISCV_RVE,	    0x00000008U,
	`Compressed instruction ABI')
_(EF_RISCV_TSO,	    0x00000010U,
	`RVTSO memory consistency model')
_(EF_SPARC_EXT_MASK,   0x00FFFF00U,
	`Vendor Extension mask')
_(EF_SPARC_32PLUS,     0x00000100U,
	`Generic V8+ features')
_(EF_SPARC_SUN_US1,    0x00000200U,
	`Sun UltraSPARCTM 1 Extensions')
_(EF_SPARC_HAL_R1,     0x00000400U,
	`HAL R1 Extensions')
_(EF_SPARC_SUN_US3,    0x00000800U,
	`Sun UltraSPARC 3 Extensions')
_(EF_SPARCV9_MM,       0x00000003U,
	`Mask for Memory Model')
_(EF_SPARCV9_TSO,      0x00000000U,
	`Total Store Ordering')
_(EF_SPARCV9_PSO,      0x00000001U,
	`Partial Store Ordering')
_(EF_SPARCV9_RMO,      0x00000002U,
	`Relaxed Memory Ordering')
')

#
# Offsets in the `ei_ident[]` field of an ELF executable header.
#
define(`DEFINE_EI_OFFSETS',`
_(EI_MAG0,     0,
	`magic number')
_(EI_MAG1,     1,
	`magic number')
_(EI_MAG2,     2,
	`magic number')
_(EI_MAG3,     3,
	`magic number')
_(EI_CLASS,    4,
	`file class')
_(EI_DATA,     5,
	`data encoding')
_(EI_VERSION,  6,
	`file version')
_(EI_OSABI,    7,
	`OS ABI kind')
_(EI_ABIVERSION, 8,
	`OS ABI version')
_(EI_PAD,	    9,
	`padding start')
_(EI_NIDENT,  16,
	`total size')
')

#
# The ELF class of an object.
#
define(`DEFINE_ELF_CLASSES',`
_(ELFCLASSNONE, 0U,
	`Unknown ELF class')
_(ELFCLASS32,   1U,
	`32 bit objects')
_(ELFCLASS64,   2U,
	`64 bit objects')
')

#
# Endianness of data in an ELF object.
#
define(`DEFINE_ELF_DATA_ENDIANNESSES',`
_(ELFDATANONE, 0U,
	`Unknown data endianness')
_(ELFDATA2LSB, 1U,
	`little endian')
_(ELFDATA2MSB, 2U,
	`big endian')
')


#
# The magic numbers used in the initial four bytes of an ELF object.
#
# These numbers are: 0x7F, 'E', 'L' and 'F'.
define(`DEFINE_ELF_MAGIC_VALUES',`
_(ELFMAG0, 0x7FU)
_(ELFMAG1, 0x45U)
_(ELFMAG2, 0x4CU)
_(ELFMAG3, 0x46U)
')

# Additional ELFMAG related constants.
define(`DEFINE_ELF_MAGIC_ADDITIONAL_CONSTANTS',`
_(ELFMAG,  "\177ELF")
_(SELFMAG, 4)
')

#
# ELF OS ABI field.
#
define(`DEFINE_ELF_OSABIS',`
_(ELFOSABI_NONE,       0U,
	`No extensions or unspecified')
_(ELFOSABI_SYSV,       0U,
	`SYSV')
_(ELFOSABI_HPUX,       1U,
	`Hewlett-Packard HP-UX')
_(ELFOSABI_NETBSD,     2U,
	`NetBSD')
_(ELFOSABI_GNU,        3U,
	`GNU')
_(ELFOSABI_HURD,       4U,
	`GNU/HURD')
_(ELFOSABI_86OPEN,     5U,
	`86Open Common ABI')
_(ELFOSABI_SOLARIS,    6U,
	`Sun Solaris')
_(ELFOSABI_AIX,        7U,
	`AIX')
_(ELFOSABI_IRIX,       8U,
	`IRIX')
_(ELFOSABI_FREEBSD,    9U,
	`FreeBSD')
_(ELFOSABI_TRU64,      10U,
	`Compaq TRU64 UNIX')
_(ELFOSABI_MODESTO,    11U,
	`Novell Modesto')
_(ELFOSABI_OPENBSD,    12U,
	`Open BSD')
_(ELFOSABI_OPENVMS,    13U,
	`Open VMS')
_(ELFOSABI_NSK,        14U,
	`Hewlett-Packard Non-Stop Kernel')
_(ELFOSABI_AROS,       15U,
	`Amiga Research OS')
_(ELFOSABI_FENIXOS,    16U,
	`The FenixOS highly scalable multi-core OS')
_(ELFOSABI_CLOUDABI,   17U,
	`Nuxi CloudABI')
_(ELFOSABI_OPENVOS,    18U,
	`Stratus Technologies OpenVOS')
_(ELFOSABI_ARM_AEABI,  64U,
	`ARM specific symbol versioning extensions')
_(ELFOSABI_ARM,        97U,
	`ARM ABI')
_(ELFOSABI_STANDALONE, 255U,
	`Standalone (embedded) application')
')

# OS ABI aliases.
define(`DEFINE_ELF_OSABI_ALIASES',`
_(ELFOSABI_LINUX,	ELFOSABI_GNU)
')

#
# ELF Machine types: (EM_*).
#
define(`DEFINE_ELF_MACHINE_TYPES',`
_(EM_NONE,             0U,
	`No machine')
_(EM_M32,              1U,
	`AT&T WE 32100')
_(EM_SPARC,            2U,
	`SPARC')
_(EM_386,              3U,
	`Intel 80386')
_(EM_68K,              4U,
	`Motorola 68000')
_(EM_88K,              5U,
	`Motorola 88000')
_(EM_IAMCU,            6U,
	`Intel MCU')
_(EM_860,              7U,
	`Intel 80860')
_(EM_MIPS,             8U,
	`MIPS I Architecture')
_(EM_S370,             9U,
	`IBM System/370 Processor')
_(EM_MIPS_RS3_LE,      10U,
	`MIPS RS3000 Little-endian')
_(EM_PARISC,           15U,
	`Hewlett-Packard PA-RISC')
_(EM_VPP500,           17U,
	`Fujitsu VPP500')
_(EM_SPARC32PLUS,      18U,
	`Enhanced instruction set SPARC')
_(EM_960,              19U,
	`Intel 80960')
_(EM_PPC,              20U,
	`PowerPC')
_(EM_PPC64,            21U,
	`64-bit PowerPC')
_(EM_S390,             22U,
	`IBM System/390 Processor')
_(EM_SPU,              23U,
	`IBM SPU/SPC')
_(EM_V800,             36U,
	`NEC V800')
_(EM_FR20,             37U,
	`Fujitsu FR20')
_(EM_RH32,             38U,
	`TRW RH-32')
_(EM_RCE,              39U,
	`Motorola RCE')
_(EM_ARM,              40U,
	`Advanced RISC Machines ARM')
_(EM_ALPHA,            41U,
	`Digital Alpha')
_(EM_SH,               42U,
	`Hitachi SH')
_(EM_SPARCV9,          43U,
	`SPARC Version 9')
_(EM_TRICORE,          44U,
	`Siemens TriCore embedded processor')
_(EM_ARC,              45U,
	`Argonaut RISC Core, Argonaut Technologies Inc.')
_(EM_H8_300,           46U,
	`Hitachi H8/300')
_(EM_H8_300H,          47U,
	`Hitachi H8/300H')
_(EM_H8S,              48U,
	`Hitachi H8S')
_(EM_H8_500,           49U,
	`Hitachi H8/500')
_(EM_IA_64,            50U,
	`Intel IA-64 processor architecture')
_(EM_MIPS_X,           51U,
	`Stanford MIPS-X')
_(EM_COLDFIRE,         52U,
	`Motorola ColdFire')
_(EM_68HC12,           53U,
	`Motorola M68HC12')
_(EM_MMA,              54U,
	`Fujitsu MMA Multimedia Accelerator')
_(EM_PCP,              55U,
	`Siemens PCP')
_(EM_NCPU,             56U,
	`Sony nCPU embedded RISC processor')
_(EM_NDR1,             57U,
	`Denso NDR1 microprocessor')
_(EM_STARCORE,         58U,
	`Motorola Star*Core processor')
_(EM_ME16,             59U,
	`Toyota ME16 processor')
_(EM_ST100,            60U,
	`STMicroelectronics ST100 processor')
_(EM_TINYJ,            61U,
	`Advanced Logic Corp. TinyJ embedded processor family')
_(EM_X86_64,           62U,
	`AMD x86-64 architecture')
_(EM_PDSP,             63U,
	`Sony DSP Processor')
_(EM_PDP10,            64U,
	`Digital Equipment Corp. PDP-10')
_(EM_PDP11,            65U,
	`Digital Equipment Corp. PDP-11')
_(EM_FX66,             66U,
	`Siemens FX66 microcontroller')
_(EM_ST9PLUS,          67U,
	`STMicroelectronics ST9+ 8/16 bit microcontroller')
_(EM_ST7,              68U,
	`STMicroelectronics ST7 8-bit microcontroller')
_(EM_68HC16,           69U,
	`Motorola MC68HC16 Microcontroller')
_(EM_68HC11,           70U,
	`Motorola MC68HC11 Microcontroller')
_(EM_68HC08,           71U,
	`Motorola MC68HC08 Microcontroller')
_(EM_68HC05,           72U,
	`Motorola MC68HC05 Microcontroller')
_(EM_SVX,              73U,
	`Silicon Graphics SVx')
_(EM_ST19,             74U,
	`STMicroelectronics ST19 8-bit microcontroller')
_(EM_VAX,              75U,
	`Digital VAX')
_(EM_CRIS,             76U,
	`Axis Communications 32-bit embedded processor')
_(EM_JAVELIN,          77U,
	`Infineon Technologies 32-bit embedded processor')
_(EM_FIREPATH,         78U,
	`Element 14 64-bit DSP Processor')
_(EM_ZSP,              79U,
	`LSI Logic 16-bit DSP Processor')
_(EM_MMIX,             80U,
	`Educational 64-bit processor by Donald Knuth')
_(EM_HUANY,            81U,
	`Harvard University machine-independent object files')
_(EM_PRISM,            82U,
	`SiTera Prism')
_(EM_AVR,              83U,
	`Atmel AVR 8-bit microcontroller')
_(EM_FR30,             84U,
	`Fujitsu FR30')
_(EM_D10V,             85U,
	`Mitsubishi D10V')
_(EM_D30V,             86U,
	`Mitsubishi D30V')
_(EM_V850,             87U,
	`NEC v850')
_(EM_M32R,             88U,
	`Mitsubishi M32R')
_(EM_MN10300,          89U,
	`Matsushita MN10300')
_(EM_MN10200,          90U,
	`Matsushita MN10200')
_(EM_PJ,               91U,
	`picoJava')
_(EM_OPENRISC,         92U,
	`OpenRISC 32-bit embedded processor')
_(EM_ARC_COMPACT,      93U,
	`ARC International ARCompact processor')
_(EM_XTENSA,           94U,
	`Tensilica Xtensa Architecture')
_(EM_VIDEOCORE,        95U,
	`Alphamosaic VideoCore processor')
_(EM_TMM_GPP,          96U,
	`Thompson Multimedia General Purpose Processor')
_(EM_NS32K,            97U,
	`National Semiconductor 32000 series')
_(EM_TPC,              98U,
	`Tenor Network TPC processor')
_(EM_SNP1K,            99U,
	`Trebia SNP 1000 processor')
_(EM_ST200,            100U,
	`STMicroelectronics (www.st.com) ST200 microcontroller')
_(EM_IP2K,             101U,
	`Ubicom IP2xxx microcontroller family')
_(EM_MAX,              102U,
	`MAX Processor')
_(EM_CR,               103U,
	`National Semiconductor CompactRISC microprocessor')
_(EM_F2MC16,           104U,
	`Fujitsu F2MC16')
_(EM_MSP430,           105U,
	`Texas Instruments embedded microcontroller msp430')
_(EM_BLACKFIN,         106U,
	`Analog Devices Blackfin (DSP) processor')
_(EM_SE_C33,           107U,
	`S1C33 Family of Seiko Epson processors')
_(EM_SEP,              108U,
	`Sharp embedded microprocessor')
_(EM_ARCA,             109U,
	`Arca RISC Microprocessor')
_(EM_UNICORE,          110U,
	`Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University')
_(EM_EXCESS,           111U,
	`eXcess: 16/32/64-bit configurable embedded CPU')
_(EM_DXP,              112U,
	`Icera Semiconductor Inc. Deep Execution Processor')
_(EM_ALTERA_NIOS2,     113U,
	`Altera Nios II soft-core processor')
_(EM_CRX,              114U,
	`National Semiconductor CompactRISC CRX microprocessor')
_(EM_XGATE,            115U,
	`Motorola XGATE embedded processor')
_(EM_C166,             116U,
	`Infineon C16x/XC16x processor')
_(EM_M16C,             117U,
	`Renesas M16C series microprocessors')
_(EM_DSPIC30F,         118U,
	`Microchip Technology dsPIC30F Digital Signal Controller')
_(EM_CE,               119U,
	`Freescale Communication Engine RISC core')
_(EM_M32C,             120U,
	`Renesas M32C series microprocessors')
_(EM_TSK3000,          131U,
	`Altium TSK3000 core')
_(EM_RS08,             132U,
	`Freescale RS08 embedded processor')
_(EM_SHARC,            133U,
	`Analog Devices SHARC family of 32-bit DSP processors')
_(EM_ECOG2,            134U,
	`Cyan Technology eCOG2 microprocessor')
_(EM_SCORE7,           135U,
	`Sunplus S+core7 RISC processor')
_(EM_DSP24,            136U,
	`New Japan Radio (NJR) 24-bit DSP Processor')
_(EM_VIDEOCORE3,       137U,
	`Broadcom VideoCore III processor')
_(EM_LATTICEMICO32,    138U,
	`RISC processor for Lattice FPGA architecture')
_(EM_SE_C17,           139U,
	`Seiko Epson C17 family')
_(EM_TI_C6000,         140U,
	`The Texas Instruments TMS320C6000 DSP family')
_(EM_TI_C2000,         141U,
	`The Texas Instruments TMS320C2000 DSP family')
_(EM_TI_C5500,         142U,
	`The Texas Instruments TMS320C55x DSP family')
_(EM_TI_ARP32,         143U,
	`Texas Instruments Application Specific RISC Processor, 32bit fetch')
_(EM_TI_PRU,           144U,
	`Texas Instruments Programmable Realtime Unit')
_(EM_MMDSP_PLUS,       160U,
	`STMicroelectronics 64bit VLIW Data Signal Processor')
_(EM_CYPRESS_M8C,      161U,
	`Cypress M8C microprocessor')
_(EM_R32C,             162U,
	`Renesas R32C series microprocessors')
_(EM_TRIMEDIA,         163U,
	`NXP Semiconductors TriMedia architecture family')
_(EM_QDSP6,            164U,
	`QUALCOMM DSP6 Processor')
_(EM_8051,             165U,
	`Intel 8051 and variants')
_(EM_STXP7X,           166U,
	`STMicroelectronics STxP7x family of configurable and extensible RISC processors')
_(EM_NDS32,            167U,
	`Andes Technology compact code size embedded RISC processor family')
_(EM_ECOG1X,           168U,
	`Cyan Technology eCOG1X family')
_(EM_MAXQ30,           169U,
	`Dallas Semiconductor MAXQ30 Core Micro-controllers')
_(EM_XIMO16,           170U,
	`New Japan Radio (NJR) 16-bit DSP Processor')
_(EM_MANIK,            171U,
	`M2000 Reconfigurable RISC Microprocessor')
_(EM_CRAYNV2,          172U,
	`Cray Inc. NV2 vector architecture')
_(EM_RX,               173U,
	`Renesas RX family')
_(EM_METAG,            174U,
	`Imagination Technologies META processor architecture')
_(EM_MCST_ELBRUS,      175U,
	`MCST Elbrus general purpose hardware architecture')
_(EM_ECOG16,           176U,
	`Cyan Technology eCOG16 family')
_(EM_CR16,             177U,
	`National Semiconductor CompactRISC CR16 16-bit microprocessor')
_(EM_ETPU,             178U,
	`Freescale Extended Time Processing Unit')
_(EM_SLE9X,            179U,
	`Infineon Technologies SLE9X core')
_(EM_L10M,             180U,
	`Intel L10M')
_(EM_K10M,             181U,
	`Intel K10M')
_(EM_AARCH64,          183U,
	`AArch64 (64-bit ARM)')
_(EM_AVR32,            185U,
	`Atmel Corporation 32-bit microprocessor family')
_(EM_STM8,             186U,
	`STMicroeletronics STM8 8-bit microcontroller')
_(EM_TILE64,           187U,
	`Tilera TILE64 multicore architecture family')
_(EM_TILEPRO,          188U,
	`Tilera TILEPro multicore architecture family')
_(EM_MICROBLAZE,       189U,
	`Xilinx MicroBlaze 32-bit RISC soft processor core')
_(EM_CUDA,             190U,
	`NVIDIA CUDA architecture')
_(EM_TILEGX,           191U,
	`Tilera TILE-Gx multicore architecture family')
_(EM_CLOUDSHIELD,      192U,
	`CloudShield architecture family')
_(EM_COREA_1ST,        193U,
	`KIPO-KAIST Core-A 1st generation processor family')
_(EM_COREA_2ND,        194U,
	`KIPO-KAIST Core-A 2nd generation processor family')
_(EM_ARC_COMPACT2,     195U,
	`Synopsys ARCompact V2')
_(EM_OPEN8,            196U,
	`Open8 8-bit RISC soft processor core')
_(EM_RL78,             197U,
	`Renesas RL78 family')
_(EM_VIDEOCORE5,       198U,
	`Broadcom VideoCore V processor')
_(EM_78KOR,            199U,
	`Renesas 78KOR family')
_(EM_56800EX,          200U,
	`Freescale 56800EX Digital Signal Controller')
_(EM_BA1,              201U,
	`Beyond BA1 CPU architecture')
_(EM_BA2,              202U,
	`Beyond BA2 CPU architecture')
_(EM_XCORE,            203U,
	`XMOS xCORE processor family')
_(EM_MCHP_PIC,         204U,
	`Microchip 8-bit PIC(r) family')
_(EM_INTEL205,         205U,
	`Intel Graphics Technology')
_(EM_INTEL206,         206U,
	`Reserved by Intel')
_(EM_INTEL207,         207U,
	`Reserved by Intel')
_(EM_INTEL208,         208U,
	`Reserved by Intel')
_(EM_INTEL209,         209U,
	`Reserved by Intel')
_(EM_KM32,             210U,
	`KM211 KM32 32-bit processor')
_(EM_KMX32,            211U,
	`KM211 KMX32 32-bit processor')
_(EM_KMX16,            212U,
	`KM211 KMX16 16-bit processor')
_(EM_KMX8,             213U,
	`KM211 KMX8 8-bit processor')
_(EM_KVARC,            214U,
	`KM211 KMX32 KVARC processor')
_(EM_CDP,              215U,
	`Paneve CDP architecture family')
_(EM_COGE,             216U,
	`Cognitive Smart Memory Processor')
_(EM_COOL,             217U,
	`Bluechip Systems CoolEngine')
_(EM_NORC,             218U,
	`Nanoradio Optimized RISC')
_(EM_CSR_KALIMBA,      219U,
	`CSR Kalimba architecture family')
_(EM_Z80,              220U,
	`Zilog Z80')
_(EM_VISIUM,           221U,
	`Controls and Data Services VISIUMcore processor')
_(EM_FT32,             222U,
	`FTDI Chip FT32 high performance 32-bit RISC architecture')
_(EM_MOXIE,            223U,
	`Moxie processor family')
_(EM_AMDGPU,           224U,
	`AMD GPU architecture')
_(EM_RISCV,            243U,
	`RISC-V')
_(EM_LANAI,            244U,
	`Lanai processor')
_(EM_CEVA,             245U,
	`CEVA Processor Architecture Family')
_(EM_CEVA_X2,          246U,
	`CEVA X2 Processor Family')
_(EM_BPF,              247U,
	`Linux BPF – in-kernel virtual machine')
_(EM_GRAPHCORE_IPU,    248U,
	`Graphcore Intelligent Processing Unit')
_(EM_IMG1,             249U,
	`Imagination Technologies')
_(EM_NFP,              250U,
	`Netronome Flow Processor (NFP)')
_(EM_VE,               251U,
	`NEC Vector Engine')
_(EM_CSKY,             252U,
	`C-SKY processor family')
_(EM_ARC_COMPACT3_64,  253U,
	`Synopsys ARCv2.3 64-bit')
_(EM_MCS6502,          254U,
	`MOS Technology MCS 6502 processor')
_(EM_ARC_COMPACT3,     255U,
	`Synopsys ARCv2.3 32-bit')
_(EM_KVX,              256U,
	`Kalray VLIW core of the MPPA processor family')
_(EM_65816,            257U,
	`WDC 65816/65C816')
_(EM_LOONGARCH,        258U,
	`Loongson LoongArch')
_(EM_KF32,             259U,
	`ChipON KungFu 32')
_(EM_U16_U8CORE,       260U,
	`LAPIS nX-U16/U8')
_(EM_TACHYUM,          261U,
	`Reserved for Tachyum processor')
_(EM_56800EF,          262U,
	`NXP 56800EF Digital Signal Controller (DSC)')
_(EM_SBF,              263U,
	`Solana Bytecode Format')
_(EM_AIENGINE,         264U,
	`AMD/Xilinx AIEngine architecture')
_(EM_SIMA_MLA,         265U,
	`SiMa MLA')
_(EM_BANG,             266U,
	`Cambricon BANG')
_(EM_LOONGGPU,         267U,
	`Loongson LoongArch GPU')
')

define(`DEFINE_ELF_MACHINE_TYPE_SYNONYMS',`
_(EM_AMD64, EM_X86_64)
_(EM_ARC_A5, EM_ARC_COMPACT)
_(EM_ECOG1, EM_ECOG1X)
_(EM_INTELGT, EM_INTEL205)
')

#
# ELF file types: (ET_*).
#
define(`DEFINE_ELF_TYPES',`
_(ET_NONE,   0U,
	`No file type')
_(ET_REL,    1U,
	`Relocatable object')
_(ET_EXEC,   2U,
	`Executable')
_(ET_DYN,    3U,
	`Shared object')
_(ET_CORE,   4U,
	`Core file')
_(ET_LOOS,   0xFE00U,
	`Begin OS-specific range')
_(ET_HIOS,   0xFEFFU,
	`End OS-specific range')
_(ET_LOPROC, 0xFF00U,
	`Begin processor-specific range')
_(ET_HIPROC, 0xFFFFU,
	`End processor-specific range')
')

# ELF file format version numbers.
define(`DEFINE_ELF_FILE_VERSIONS',`
_(EV_NONE, 0U)
_(EV_CURRENT, 1U)
')

#
# Flags for section groups.
#
define(`DEFINE_GRP_FLAGS',`
_(GRP_COMDAT, 	0x1,
	`COMDAT semantics')
_(GRP_MASKOS,	0x0ff00000,
	`OS-specific flags')
_(GRP_MASKPROC, 	0xf0000000,
	`processor-specific flags')
')

#
# Flags / mask for .gnu.versym sections.
#
define(`DEFINE_VERSYMS',`
_(VERSYM_VERSION,	0x7fff)
_(VERSYM_HIDDEN,	0x8000)
')

#
# Flags used by program header table entries.
#
define(`DEFINE_PHDR_FLAGS',`
_(PF_X,                0x1,
	`Execute')
_(PF_W,                0x2,
	`Write')
_(PF_R,                0x4,
	`Read')
_(PF_MASKOS,           0x0ff00000,
	`OS-specific flags')
_(PF_MASKPROC,         0xf0000000,
	`Processor-specific flags')
_(PF_ARM_SB,           0x10000000,
	`segment contains the location addressed by the static base')
_(PF_ARM_PI,           0x20000000,
	`segment is position-independent')
_(PF_ARM_ABS,          0x40000000,
	`segment must be loaded at its base address')
')

#
# Types of program header table entries.
#
define(`DEFINE_PHDR_TYPES',`
_(PT_NULL,             0U,
	`ignored entry')
_(PT_LOAD,             1U,
	`loadable segment')
_(PT_DYNAMIC,          2U,
	`contains dynamic linking information')
_(PT_INTERP,           3U,
	`names an interpreter')
_(PT_NOTE,             4U,
	`auxiliary information')
_(PT_SHLIB,            5U,
	`reserved')
_(PT_PHDR,             6U,
	`describes the program header itself')
_(PT_TLS,              7U,
	`thread local storage')
_(PT_LOOS,             0x60000000U,
	`start of OS-specific range')
_(PT_SUNW_UNWIND,      0x6464E550U,
	`Solaris/amd64 stack unwind tables')
_(PT_GNU_EH_FRAME,     0x6474E550U,
	`GCC generated .eh_frame_hdr segment')
_(PT_GNU_STACK,	    0x6474E551U,
	`Stack flags')
_(PT_GNU_RELRO,	    0x6474E552U,
	`Segment becomes read-only after relocation')
_(PT_OPENBSD_RANDOMIZE,0x65A3DBE6U,
	`Segment filled with random data')
_(PT_OPENBSD_WXNEEDED, 0x65A3DBE7U,
	`Program violates W^X')
_(PT_OPENBSD_BOOTDATA, 0x65A41BE6U,
	`Boot data')
_(PT_SUNWBSS,          0x6FFFFFFAU,
	`A Solaris .SUNW_bss section')
_(PT_SUNWSTACK,        0x6FFFFFFBU,
	`A Solaris process stack')
_(PT_SUNWDTRACE,       0x6FFFFFFCU,
	`Used by dtrace(1)')
_(PT_SUNWCAP,          0x6FFFFFFDU,
	`Special hardware capability requirements')
_(PT_HIOS,             0x6FFFFFFFU,
	`end of OS-specific range')
_(PT_LOPROC,           0x70000000U,
	`start of processor-specific range')
_(PT_AARCH64_ARCHEXT,  0x70000000U,
	`platform architecture compatibility information')
_(PT_AARCH64_UNWIND,   0x70000001U,
	`exception unwinding tables')
_(PT_AARCH64_MEMTAG_MTE, 0x70000002U,
	`MTE memory tag data dumps in core files')
_(PT_ARM_ARCHEXT,      0x70000000U,
	`platform architecture compatibility information')
_(PT_ARM_EXIDX,        0x70000001U,
	`exception unwind tables')
_(PT_MIPS_REGINFO,     0x70000000U,
	`register usage information')
_(PT_MIPS_RTPROC,      0x70000001U,
	`runtime procedure table')
_(PT_MIPS_OPTIONS,     0x70000002U,
	`options segment')
_(PT_HIPROC,           0x7FFFFFFFU,
	`end of processor-specific range')
')

define(`DEFINE_PHDR_TYPE_SYNONYMS',`
_(PT_ARM_UNWIND,	PT_ARM_EXIDX)
_(PT_HISUNW,	PT_HIOS)
_(PT_LOSUNW,	PT_SUNWBSS)
')

#
# Section flags.
#
define(`DEFINE_SECTION_FLAGS',`
_(SHF_WRITE,           0x1U,
	`writable during program execution')
_(SHF_ALLOC,           0x2U,
	`occupies memory during program execution')
_(SHF_EXECINSTR,       0x4U,
	`executable instructions')
_(SHF_MERGE,           0x10U,
	`may be merged to prevent duplication')
_(SHF_STRINGS,         0x20U,
	`NUL-terminated character strings')
_(SHF_INFO_LINK,       0x40U,
	`the sh_info field holds a link')
_(SHF_LINK_ORDER,      0x80U,
	`special ordering requirements during linking')
_(SHF_OS_NONCONFORMING, 0x100U,
	`requires OS-specific processing during linking')
_(SHF_GROUP,           0x200U,
	`member of a section group')
_(SHF_TLS,             0x400U,
	`holds thread-local storage')
_(SHF_COMPRESSED,      0x800U,
	`holds compressed data')
_(SHF_MASKOS,          0x0FF00000U,
	`bits reserved for OS-specific semantics')
_(SHF_AMD64_LARGE,     0x10000000U,
	`section uses large code model')
_(SHF_ENTRYSECT,       0x10000000U,
	`section contains an entry point (ARM)')
_(SHF_COMDEF,          0x80000000U,
	`section may be multiply defined in input to link step (ARM)')
_(SHF_MIPS_GPREL,      0x10000000U,
	`section must be part of global data area')
_(SHF_MIPS_MERGE,      0x20000000U,
	`section data should be merged to eliminate duplication')
_(SHF_MIPS_ADDR,       0x40000000U,
	`section data is addressed by default')
_(SHF_MIPS_STRING,     0x80000000U,
	`section data is string data by default')
_(SHF_MIPS_NOSTRIP,    0x08000000U,
	`section data may not be stripped')
_(SHF_MIPS_LOCAL,      0x04000000U,
	`section data local to process')
_(SHF_MIPS_NAMES,      0x02000000U,
	`linker must generate implicit hidden weak names')
_(SHF_MIPS_NODUPE,     0x01000000U,
	`linker must retain only one copy')
_(SHF_ORDERED,         0x40000000U,
	`section is ordered with respect to other sections')
_(SHF_EXCLUDE,         0x80000000U,
	`section is excluded from executables and shared objects')
_(SHF_MASKPROC,        0xF0000000U,
	`bits reserved for processor-specific semantics')
')

#
# Special section indices.
#
define(`DEFINE_SECTION_INDICES',`
_(SHN_UNDEF, 	0U,
	 `undefined section')
_(SHN_LORESERVE, 	0xFF00U,
	`start of reserved area')
_(SHN_LOPROC, 	0xFF00U,
	`start of processor-specific range')
_(SHN_BEFORE,	0xFF00U,
	`used for section ordering')
_(SHN_AFTER,	0xFF01U,
	`used for section ordering')
_(SHN_AMD64_LCOMMON, 0xFF02U,
	`large common block label')
_(SHN_MIPS_ACOMMON, 0xFF00U,
	`allocated common symbols in a DSO')
_(SHN_MIPS_TEXT,	0xFF01U,
	`Reserved (obsolete)')
_(SHN_MIPS_DATA,	0xFF02U,
	`Reserved (obsolete)')
_(SHN_MIPS_SCOMMON, 0xFF03U,
	`gp-addressable common symbols')
_(SHN_MIPS_SUNDEFINED, 0xFF04U,
	`gp-addressable undefined symbols')
_(SHN_MIPS_LCOMMON, 0xFF05U,
	`local common symbols')
_(SHN_MIPS_LUNDEFINED, 0xFF06U,
	`local undefined symbols')
_(SHN_HIPROC, 	0xFF1FU,
	`end of processor-specific range')
_(SHN_LOOS, 	0xFF20U,
	`start of OS-specific range')
_(SHN_SUNW_IGNORE, 0xFF3FU,
	`used by dtrace')
_(SHN_HIOS, 	0xFF3FU,
	`end of OS-specific range')
_(SHN_ABS, 	0xFFF1U,
	`absolute references')
_(SHN_COMMON, 	0xFFF2U,
	`references to COMMON areas')
_(SHN_XINDEX, 	0xFFFFU,
	`extended index')
_(SHN_HIRESERVE, 	0xFFFFU,
	`end of reserved area')
')

#
# Section types.
#
define(`DEFINE_SECTION_TYPES',`
_(SHT_NULL,            0U, `inactive header')
_(SHT_PROGBITS,        1U, `program defined information')
_(SHT_SYMTAB,          2U, `symbol table')
_(SHT_STRTAB,          3U, `string table')
_(SHT_RELA,            4U,
	`relocation entries with addends')
_(SHT_HASH,            5U, `symbol hash table')
_(SHT_DYNAMIC,         6U,
	`information for dynamic linking')
_(SHT_NOTE,            7U, `additional notes')
_(SHT_NOBITS,          8U, `section occupying no space')
_(SHT_REL,             9U,
	`relocation entries without addends')
_(SHT_SHLIB,           10U, `reserved')
_(SHT_DYNSYM,          11U, `symbol table')
_(SHT_INIT_ARRAY,      14U,
	`pointers to initialization functions')
_(SHT_FINI_ARRAY,      15U,
	`pointers to termination functions')
_(SHT_PREINIT_ARRAY,   16U,
	`pointers to functions called before initialization')
_(SHT_GROUP,           17U, `defines a section group')
_(SHT_SYMTAB_SHNDX,    18U,
	`used for extended section numbering')
_(SHT_LOOS,            0x60000000U,
	`start of OS-specific range')
_(SHT_SUNW_dof,	     0x6FFFFFF4U,
	`used by dtrace')
_(SHT_SUNW_cap,	     0x6FFFFFF5U,
	`capability requirements')
_(SHT_GNU_ATTRIBUTES,  0x6FFFFFF5U,
	`object attributes')
_(SHT_SUNW_SIGNATURE,  0x6FFFFFF6U,
	`module verification signature')
_(SHT_GNU_HASH,	     0x6FFFFFF6U,
	`GNU Hash sections')
_(SHT_GNU_LIBLIST,     0x6FFFFFF7U,
	`List of libraries to be prelinked')
_(SHT_SUNW_ANNOTATE,   0x6FFFFFF7U,
	`special section where unresolved references are allowed')
_(SHT_SUNW_DEBUGSTR,   0x6FFFFFF8U,
	`debugging information')
_(SHT_CHECKSUM, 	     0x6FFFFFF8U,
	`checksum for dynamic shared objects')
_(SHT_SUNW_DEBUG,      0x6FFFFFF9U,
	`debugging information')
_(SHT_SUNW_move,       0x6FFFFFFAU,
	`information to handle partially initialized symbols')
_(SHT_SUNW_COMDAT,     0x6FFFFFFBU,
	`section supporting merging of multiple copies of data')
_(SHT_SUNW_syminfo,    0x6FFFFFFCU,
	`additional symbol information')
_(SHT_SUNW_verdef,     0x6FFFFFFDU,
	`symbol versioning information')
_(SHT_SUNW_verneed,    0x6FFFFFFEU,
	`symbol versioning requirements')
_(SHT_SUNW_versym,     0x6FFFFFFFU,
	`symbol versioning table')
_(SHT_HIOS,            0x6FFFFFFFU,
	`end of OS-specific range')
_(SHT_LOPROC,          0x70000000U,
	`start of processor-specific range')
_(SHT_ARM_EXIDX,       0x70000001U,
	`exception index table')
_(SHT_ARM_PREEMPTMAP,  0x70000002U,
	`BPABI DLL dynamic linking preemption map')
_(SHT_ARM_ATTRIBUTES,  0x70000003U,
	`object file compatibility attributes')
_(SHT_ARM_DEBUGOVERLAY, 0x70000004U,
	`overlay debug information')
_(SHT_ARM_OVERLAYSECTION, 0x70000005U,
	`overlay debug information')
_(SHT_MIPS_LIBLIST,    0x70000000U,
	`DSO library information used in link')
_(SHT_MIPS_MSYM,       0x70000001U,
	`MIPS symbol table extension')
_(SHT_MIPS_CONFLICT,   0x70000002U,
	`symbol conflicting with DSO-defined symbols ')
_(SHT_MIPS_GPTAB,      0x70000003U,
	`global pointer table')
_(SHT_MIPS_UCODE,      0x70000004U,
	`reserved')
_(SHT_MIPS_DEBUG,      0x70000005U,
	`reserved (obsolete debug information)')
_(SHT_MIPS_REGINFO,    0x70000006U,
	`register usage information')
_(SHT_MIPS_PACKAGE,    0x70000007U,
	`OSF reserved')
_(SHT_MIPS_PACKSYM,    0x70000008U,
	`OSF reserved')
_(SHT_MIPS_RELD,       0x70000009U,
	`dynamic relocation')
_(SHT_MIPS_IFACE,      0x7000000BU,
	`subprogram interface information')
_(SHT_MIPS_CONTENT,    0x7000000CU,
	`section content classification')
_(SHT_MIPS_OPTIONS,     0x7000000DU,
	`general options')
_(SHT_MIPS_DELTASYM,   0x7000001BU,
	`Delta C++: symbol table')
_(SHT_MIPS_DELTAINST,  0x7000001CU,
	`Delta C++: instance table')
_(SHT_MIPS_DELTACLASS, 0x7000001DU,
	`Delta C++: class table')
_(SHT_MIPS_DWARF,      0x7000001EU,
	`DWARF debug information')
_(SHT_MIPS_DELTADECL,  0x7000001FU,
	`Delta C++: declarations')
_(SHT_MIPS_SYMBOL_LIB, 0x70000020U,
	`symbol-to-library mapping')
_(SHT_MIPS_EVENTS,     0x70000021U,
	`event locations')
_(SHT_MIPS_TRANSLATE,  0x70000022U,
	`???')
_(SHT_MIPS_PIXIE,      0x70000023U,
	`special pixie sections')
_(SHT_MIPS_XLATE,      0x70000024U,
	`address translation table')
_(SHT_MIPS_XLATE_DEBUG, 0x70000025U,
	`SGI internal address translation table')
_(SHT_MIPS_WHIRL,      0x70000026U,
	`intermediate code')
_(SHT_MIPS_EH_REGION,  0x70000027U,
	`C++ exception handling region info')
_(SHT_MIPS_XLATE_OLD,  0x70000028U,
	`obsolete')
_(SHT_MIPS_PDR_EXCEPTION, 0x70000029U,
	`runtime procedure descriptor table exception information')
_(SHT_MIPS_ABIFLAGS,   0x7000002AU,
	`ABI flags')
_(SHT_SPARC_GOTDATA,   0x70000000U,
	`SPARC-specific data')
_(SHT_X86_64_UNWIND,   0x70000001U,
	`unwind tables for the AMD64')
_(SHT_ORDERED,         0x7FFFFFFFU,
	`sort entries in the section')
_(SHT_HIPROC,          0x7FFFFFFFU,
	`end of processor-specific range')
_(SHT_LOUSER,          0x80000000U,
	`start of application-specific range')
_(SHT_HIUSER,          0xFFFFFFFFU,
	`end of application-specific range')
')

# Aliases for section types.
define(`DEFINE_SECTION_TYPE_ALIASES',`
_(SHT_AMD64_UNWIND,	SHT_X86_64_UNWIND)
_(SHT_GNU_verdef,	SHT_SUNW_verdef)
_(SHT_GNU_verneed,	SHT_SUNW_verneed)
_(SHT_GNU_versym,	SHT_SUNW_versym)
')

#
# Symbol binding information.
#
define(`DEFINE_SYMBOL_BINDINGS',`
_(STB_LOCAL,           0,
	`not visible outside defining object file')
_(STB_GLOBAL,          1,
	`visible across all object files being combined')
_(STB_WEAK,            2,
	`visible across all object files but with low precedence')
_(STB_LOOS,            10,
	`start of OS-specific range')
_(STB_GNU_UNIQUE,      10,
	`unique symbol (GNU)')
_(STB_HIOS,            12,
	`end of OS-specific range')
_(STB_LOPROC,          13,
	`start of processor-specific range')
_(STB_HIPROC,          15,
	`end of processor-specific range')
')

#
# Symbol types
#
define(`DEFINE_SYMBOL_TYPES',`
_(STT_NOTYPE,          0,
	`unspecified type')
_(STT_OBJECT,          1,
	`data object')
_(STT_FUNC,            2,
	`executable code')
_(STT_SECTION,         3,
	`section')
_(STT_FILE,            4,
	`source file')
_(STT_COMMON,          5,
	`uninitialized common block')
_(STT_TLS,             6,
	`thread local storage')
_(STT_LOOS,            10,
	`start of OS-specific types')
_(STT_GNU_IFUNC,       10,
	`indirect function')
_(STT_HIOS,            12,
	`end of OS-specific types')
_(STT_LOPROC,          13,
	`start of processor-specific types')
_(STT_ARM_TFUNC,       13,
	`Thumb function (GNU)')
_(STT_ARM_16BIT,       15,
	`Thumb label (GNU)')
_(STT_SPARC_REGISTER,  13,
	`SPARC register information')
_(STT_HIPROC,          15,
	`end of processor-specific types')
')

# Additional symbol type related constants.
define(`DEFINE_SYMBOL_TYPES_ADDITIONAL_CONSTANTS',`
_(STT_NUM,             7,
	`the number of symbol types')
')

#
# Symbol binding.
#
define(`DEFINE_SYMBOL_BINDING_KINDS',`
_(SYMINFO_BT_SELF,	0xFFFFU,
	`bound to self')
_(SYMINFO_BT_PARENT,	0xFFFEU,
	`bound to parent')
_(SYMINFO_BT_NONE,	0xFFFDU,
	`no special binding')
')

#
# Symbol visibility.
#
define(`DEFINE_SYMBOL_VISIBILITIES',`
_(STV_DEFAULT,         0,
	`as specified by symbol type')
_(STV_INTERNAL,        1,
	`as defined by processor semantics')
_(STV_HIDDEN,          2,
	`hidden from other components')
_(STV_PROTECTED,       3,
	`local references are not preemptable')
')

#
# Symbol flags.
#
define(`DEFINE_SYMBOL_FLAGS',`
_(SYMINFO_FLG_DIRECT,	0x01,
	`directly assocated reference')
_(SYMINFO_FLG_COPY,	0x04,
	`definition by copy-relocation')
_(SYMINFO_FLG_LAZYLOAD,	0x08,
	`object should be lazily loaded')
_(SYMINFO_FLG_DIRECTBIND,	0x10,
	`reference should be directly bound')
_(SYMINFO_FLG_NOEXTDIRECT, 0x20,
	`external references not allowed to bind to definition')
')

#
# Version dependencies.
#
define(`DEFINE_VERSIONING_DEPENDENCIES',`
_(VER_NDX_LOCAL,	0,
	`local scope')
_(VER_NDX_GLOBAL,	1,
	`global scope')
')

#
# Version flags.
#
define(`DEFINE_VERSIONING_FLAGS',`
_(VER_FLG_BASE,		0x1,
	`file version')
_(VER_FLG_WEAK,		0x2,
	`weak version')
')

#
# Version needs
#
define(`DEFINE_VERSIONING_NEEDS',`
_(VER_NEED_NONE,		0,
	`invalid version')
_(VER_NEED_CURRENT,	1,
	`current version')
')

#
# Versioning numbers.
#
define(`DEFINE_VERSIONING_NUMBERS',`
_(VER_DEF_NONE,		0,
	`invalid version')
_(VER_DEF_CURRENT,	1, 
	`current version')
')

#
# Relocation types.
#
define(`DEFINE_386_RELOCATION_TYPES',`
__(`EM_386')
_(R_386_NONE,		0)
_(R_386_32,		1)
_(R_386_PC32,		2)
_(R_386_GOT32,		3)
_(R_386_PLT32,		4)
_(R_386_COPY,		5)
_(R_386_GLOB_DAT,	6)
_(R_386_JUMP_SLOT,	7)
_(R_386_RELATIVE,	8)
_(R_386_GOTOFF,		9)
_(R_386_GOTPC,		10)
_(R_386_32PLT,		11)
__(`	', `unused: 12-13')
_(R_386_TLS_TPOFF,	14)
_(R_386_TLS_IE,		15)
_(R_386_TLS_GOTIE,	16)
_(R_386_TLS_LE,		17)
_(R_386_TLS_GD,		18)
_(R_386_TLS_LDM,	19)
_(R_386_16,		20)
_(R_386_PC16,		21)
_(R_386_8,		22)
_(R_386_PC8,		23)
_(R_386_TLS_GD_32,	24)
_(R_386_TLS_GD_PUSH,	25)
_(R_386_TLS_GD_CALL,	26)
_(R_386_TLS_GD_POP,	27)
_(R_386_TLS_LDM_32,	28)
_(R_386_TLS_LDM_PUSH,	29)
_(R_386_TLS_LDM_CALL,	30)
_(R_386_TLS_LDM_POP,	31)
_(R_386_TLS_LDO_32,	32)
_(R_386_TLS_IE_32,	33)
_(R_386_TLS_LE_32,	34)
_(R_386_TLS_DTPMOD32,	35)
_(R_386_TLS_DTPOFF32,	36)
_(R_386_TLS_TPOFF32,	37)
_(R_386_SIZE32,		38)
_(R_386_TLS_GOTDESC,	39)
_(R_386_TLS_DESC_CALL,	40)
_(R_386_TLS_DESC,	41)
_(R_386_IRELATIVE,	42)
_(R_386_GOT32X,		43)
')

define(`DEFINE_386_RELOCATION_TYPE_SYNONYMS',`
_(R_386_JMP_SLOT, 7)
')

define(`DEFINE_AARCH64_RELOCATION_TYPES',`
__(`EM_AARCH64')
_(R_AARCH64_NONE,				0)
_(R_AARCH64_P32_ABS32,				1)
_(R_AARCH64_P32_ABS16,				2)
_(R_AARCH64_P32_PREL32,				3)
_(R_AARCH64_P32_PREL16,				4)
_(R_AARCH64_P32_MOVW_UABS_G0,			5)
_(R_AARCH64_P32_MOVW_UABS_G0_NC,		6)
_(R_AARCH64_P32_MOVW_UABS_G1,			7)
_(R_AARCH64_P32_MOVW_SABS_G0,			8)
_(R_AARCH64_P32_LD_PREL_LO19,			9)
_(R_AARCH64_P32_ADR_PREL_LO21,			10)
_(R_AARCH64_P32_ADR_PREL_PG_HI21,		11)
_(R_AARCH64_P32_ADD_ABS_LO12_NC,		12)
_(R_AARCH64_P32_LDST8_ABS_LO12_NC,		13)
_(R_AARCH64_P32_LDST16_ABS_LO12_NC,		14)
_(R_AARCH64_P32_LDST32_ABS_LO12_NC,		15)
_(R_AARCH64_P32_LDST64_ABS_LO12_NC,		16)
_(R_AARCH64_P32_LDST128_ABS_LO12_NC,		17)
_(R_AARCH64_P32_TSTBR14,			18)
_(R_AARCH64_P32_CONDBR19,			19)
_(R_AARCH64_P32_JUMP26,				20)
_(R_AARCH64_P32_CALL26,				21)
_(R_AARCH64_P32_MOVW_PREL_G0,			22)
_(R_AARCH64_P32_MOVW_PREL_G0_NC,		23)
_(R_AARCH64_P32_MOVW_PREL_G1,			24)
_(R_AARCH64_P32_GOT_LD_PREL19,			25)
_(R_AARCH64_P32_ADR_GOT_PAGE,			26)
_(R_AARCH64_P32_LD32_GOT_LO12_NC,		27)
_(R_AARCH64_P32_LD32_GOTPAGE_LO14,		28)
_(R_AARCH64_P32_PLT32,				29)
__(`	', `Unused: 30-79.')
_(R_AARCH64_P32_TLSGD_ADR_PREL21,		80)
_(R_AARCH64_P32_TLSGD_ADR_PAGE21,		81)
_(R_AARCH64_P32_TLSGD_ADD_LO12_NC,		82)
_(R_AARCH64_P32_TLSLD_ADR_PREL21,		83)
_(R_AARCH64_P32_TLSLD_ADR_PAGE21,		84)
_(R_AARCH64_P32_TLSLD_ADD_LO12_NC,		85)
_(R_AARCH64_P32_TLSLD_LD_PREL19,		86)
_(R_AARCH64_P32_TLSLD_MOVW_DTPREL_G1,		87)
_(R_AARCH64_P32_TLSLD_MOVW_DTPREL_G0,		88)
_(R_AARCH64_P32_TLSLD_MOVW_DTPREL_G0_NC,	89)
_(R_AARCH64_P32_TLSLD_ADD_DTPREL_HI12,		90)
_(R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12,		91)
_(R_AARCH64_P32_TLSLD_ADD_DTPREL_LO12_NC,	92)
_(R_AARCH64_P32_TLSLD_LDST8_DTPREL_LO12,	93)
_(R_AARCH64_P32_TLSLD_LDST8_DTPREL_LO12_NC,	94)
_(R_AARCH64_P32_TLSLD_LDST16_DTPREL_LO12,	95)
_(R_AARCH64_P32_TLSLD_LDST16_DTPREL_LO12_NC,	96)
_(R_AARCH64_P32_TLSLD_LDST32_DTPREL_LO12,	97)
_(R_AARCH64_P32_TLSLD_LDST32_DTPREL_LO12_NC,	98)
_(R_AARCH64_P32_TLSLD_LDST64_DTPREL_LO12,	99)
_(R_AARCH64_P32_TLSLD_LDST64_DTPREL_LO12_NC,	100)
_(R_AARCH64_P32_TLSLD_LDST128_DTPREL_LO12,	101)
_(R_AARCH64_P32_TLSLD_LDST128_DTPREL_LO12_NC,	102)
_(R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21,	103)
_(R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC,	104)
_(R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19,	105)
_(R_AARCH64_P32_TLSLE_MOVW_TPREL_G1,		106)
_(R_AARCH64_P32_TLSLE_MOVW_TPREL_G0,		107)
_(R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC,		108)
_(R_AARCH64_P32_TLSLE_ADD_TPREL_HI12,		109)
_(R_AARCH64_P32_TLSLE_ADD_TPREL_LO12,		110)
_(R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC,	111)
_(R_AARCH64_P32_TLSLE_LDST8_TPREL_LO12,		112)
_(R_AARCH64_P32_TLSLE_LDST8_TPREL_LO12_NC,	113)
_(R_AARCH64_P32_TLSLE_LDST16_TPREL_LO12,	114)
_(R_AARCH64_P32_TLSLE_LDST16_TPREL_LO12_NC,	115)
_(R_AARCH64_P32_TLSLE_LDST32_TPREL_LO12,	116)
_(R_AARCH64_P32_TLSLE_LDST32_TPREL_LO12_NC,	117)
_(R_AARCH64_P32_TLSLE_LDST64_TPREL_LO12,	118)
_(R_AARCH64_P32_TLSLE_LDST64_TPREL_LO12_NC,	119)
_(R_AARCH64_P32_TLSLE_LDST128_TPREL_LO12,	120)
_(R_AARCH64_P32_TLSLE_LDST128_TPREL_LO12_NC,	121)
_(R_AARCH64_P32_TLSDESC_LD_PREL19,		122)
_(R_AARCH64_P32_TLSDESC_ADR_PREL21,		123)
_(R_AARCH64_P32_TLSDESC_ADR_PAGE21,		124)
_(R_AARCH64_P32_TLSDESC_LD32_LO12,		125)
_(R_AARCH64_P32_TLSDESC_ADD_LO12,		126)
_(R_AARCH64_P32_TLSDESC_CALL,			127)
__(`	', `Unused: 128-179.')
_(R_AARCH64_P32_COPY,				180)
_(R_AARCH64_P32_GLOB_DAT,			181)
_(R_AARCH64_P32_JUMP_SLOT,			182)
_(R_AARCH64_P32_RELATIVE,			183)
_(R_AARCH64_P32_TLS_IMPDEF1,			184,
	`R_AARCH64_P32_TLS_DTPREL or R_AARCH64_P32_TLS_DTPMOD.')
_(R_AARCH64_P32_TLS_IMPDEF2,			185,
	`R_AARCH64_P32_TLS_DTPMOD or R_AARCH64_P32_TLS_DTPREL.')
_(R_AARCH64_P32_TLS_TPREL,			186)
_(R_AARCH64_P32_TLSDESC,			187)
_(R_AARCH64_P32_IRELATIVE,			188)
__(`	', `Unused: 189-256.')
_(R_AARCH64_ABS64,				257)
_(R_AARCH64_ABS32,				258)
_(R_AARCH64_ABS16,				259)
_(R_AARCH64_PREL64,				260)
_(R_AARCH64_PREL32,				261)
_(R_AARCH64_PREL16,				262)
_(R_AARCH64_MOVW_UABS_G0,			263)
_(R_AARCH64_MOVW_UABS_G0_NC,			264)
_(R_AARCH64_MOVW_UABS_G1,			265)
_(R_AARCH64_MOVW_UABS_G1_NC,			266)
_(R_AARCH64_MOVW_UABS_G2,			267)
_(R_AARCH64_MOVW_UABS_G2_NC,			268)
_(R_AARCH64_MOVW_UABS_G3,			269)
_(R_AARCH64_MOVW_SABS_G0,			270)
_(R_AARCH64_MOVW_SABS_G1,			271)
_(R_AARCH64_MOVW_SABS_G2,			272)
_(R_AARCH64_LD_PREL_LO19,			273)
_(R_AARCH64_ADR_PREL_LO21,			274)
_(R_AARCH64_ADR_PREL_PG_HI21,			275)
_(R_AARCH64_ADR_PREL_PG_HI21_NC,		276)
_(R_AARCH64_ADD_ABS_LO12_NC,			277)
_(R_AARCH64_LDST8_ABS_LO12_NC,			278)
_(R_AARCH64_TSTBR14,				279)
_(R_AARCH64_CONDBR19,				280)
__(`	', `unused: 281')
_(R_AARCH64_JUMP26,				282)
_(R_AARCH64_CALL26,				283)
_(R_AARCH64_LDST16_ABS_LO12_NC,			284)
_(R_AARCH64_LDST32_ABS_LO12_NC,			285)
_(R_AARCH64_LDST64_ABS_LO12_NC,			286)
_(R_AARCH64_MOVW_PREL_G0,			287)
_(R_AARCH64_MOVW_PREL_G0_NC,			288)
_(R_AARCH64_MOVW_PREL_G1,			289)
_(R_AARCH64_MOVW_PREL_G1_NC,			290)
_(R_AARCH64_MOVW_PREL_G2,			291)
_(R_AARCH64_MOVW_PREL_G2_NC,			292)
_(R_AARCH64_MOVW_PREL_G3,			293)
__(`	', `unused: 294-298')
_(R_AARCH64_LDST128_ABS_LO12_NC,		299)
_(R_AARCH64_MOVW_GOTOFF_G0,			300)
_(R_AARCH64_MOVW_GOTOFF_G0_NC,			301)
_(R_AARCH64_MOVW_GOTOFF_G1,			302)
_(R_AARCH64_MOVW_GOTOFF_G1_NC,			303)
_(R_AARCH64_MOVW_GOTOFF_G2,			304)
_(R_AARCH64_MOVW_GOTOFF_G2_NC,			305)
_(R_AARCH64_MOVW_GOTOFF_G3,			306)
_(R_AARCH64_GOTREL64,				307)
_(R_AARCH64_GOTREL32,				308)
_(R_AARCH64_GOT_LD_PREL19,			309)
_(R_AARCH64_LD64_GOTOFF_LO15,			310)
_(R_AARCH64_ADR_GOT_PAGE,			311)
_(R_AARCH64_LD64_GOT_LO12_NC,			312)
_(R_AARCH64_LD64_GOTPAGE_LO15,			313)
_(R_AARCH64_PLT32,				314)
_(R_AARCH64_GOTPCREL32,				315)
__(`	', `unused: 316-511')
_(R_AARCH64_TLSGD_ADR_PREL21,			512)
_(R_AARCH64_TLSGD_ADR_PAGE21,			513)
_(R_AARCH64_TLSGD_ADD_LO12_NC,			514)
_(R_AARCH64_TLSGD_MOVW_G1,			515)
_(R_AARCH64_TLSGD_MOVW_G0_NC,			516)
_(R_AARCH64_TLSLD_ADR_PREL21,			517)
_(R_AARCH64_TLSLD_ADR_PAGE21,			518)
_(R_AARCH64_TLSLD_ADD_LO12_NC,			519)
_(R_AARCH64_TLSLD_MOVW_G1,			520)
_(R_AARCH64_TLSLD_MOVW_G0_NC,			521)
_(R_AARCH64_TLSLD_LD_PREL19,			522)
_(R_AARCH64_TLSLD_MOVW_DTPREL_G2,		523)
_(R_AARCH64_TLSLD_MOVW_DTPREL_G1,		524)
_(R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC,		525)
_(R_AARCH64_TLSLD_MOVW_DTPREL_G0,		526)
_(R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC,		527)
_(R_AARCH64_TLSLD_ADD_DTPREL_HI12,		528)
_(R_AARCH64_TLSLD_ADD_DTPREL_LO12,		529)
_(R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC,		530)
_(R_AARCH64_TLSLD_LDST8_DTPREL_LO12,		531)
_(R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC,		532)
_(R_AARCH64_TLSLD_LDST16_DTPREL_LO12,		533)
_(R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC,	534)
_(R_AARCH64_TLSLD_LDST32_DTPREL_LO12,		535)
_(R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC,	536)
_(R_AARCH64_TLSLD_LDST64_DTPREL_LO12,		537)
_(R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC,	538)
_(R_AARCH64_TLSIE_MOVW_GOTTPREL_G1,		539)
_(R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC,		540)
_(R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21,		541)
_(R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC,	542)
_(R_AARCH64_TLSIE_LD_GOTTPREL_PREL19,		543)
_(R_AARCH64_TLSLE_MOVW_TPREL_G2,		544)
_(R_AARCH64_TLSLE_MOVW_TPREL_G1,		545)
_(R_AARCH64_TLSLE_MOVW_TPREL_G1_NC,		546)
_(R_AARCH64_TLSLE_MOVW_TPREL_G0,		547)
_(R_AARCH64_TLSLE_MOVW_TPREL_G0_NC,		548)
_(R_AARCH64_TLSLE_ADD_TPREL_HI12,		549)
_(R_AARCH64_TLSLE_ADD_TPREL_LO12,		550)
_(R_AARCH64_TLSLE_ADD_TPREL_LO12_NC,		551)
_(R_AARCH64_TLSLE_LDST8_TPREL_LO12,		552)
_(R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC,		553)
_(R_AARCH64_TLSLE_LDST16_TPREL_LO12,		554)
_(R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC,		555)
_(R_AARCH64_TLSLE_LDST32_TPREL_LO12,		556)
_(R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC,		557)
_(R_AARCH64_TLSLE_LDST64_TPREL_LO12,		558)
_(R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC,		559)
_(R_AARCH64_TLSDESC_LD_PREL19,			560)
_(R_AARCH64_TLSDESC_ADR_PREL21,			561)
_(R_AARCH64_TLSDESC_ADR_PAGE21,			562)
_(R_AARCH64_TLSDESC_LD64_LO12,			563)
_(R_AARCH64_TLSDESC_ADD_LO12,			564)
_(R_AARCH64_TLSDESC_OFF_G1,			565)
_(R_AARCH64_TLSDESC_OFF_G0_NC,			566)
_(R_AARCH64_TLSDESC_LDR,			567)
_(R_AARCH64_TLSDESC_ADD,			568)
_(R_AARCH64_TLSDESC_CALL,			569)
_(R_AARCH64_TLSLE_LDST128_TPREL_LO12,		570)
_(R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC,	571)
_(R_AARCH64_TLSLD_LDST128_DTPREL_LO12,		572)
_(R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC,	573)
__(`	', `unused: 574-579')
_(R_AARCH64_AUTH_ABS64,				580)
_(R_AARCH64_AUTH_MOVW_GOTOFF_G0,		581)
_(R_AARCH64_AUTH_MOVW_GOTOFF_G0_NC,		582)
_(R_AARCH64_AUTH_MOVW_GOTOFF_G1,		583)
_(R_AARCH64_AUTH_MOVW_GOTOFF_G1_NC,		584)
_(R_AARCH64_AUTH_MOVW_GOTOFF_G2,		585)
_(R_AARCH64_AUTH_MOVW_GOTOFF_G2_NC,		586)
_(R_AARCH64_AUTH_MOVW_GOTOFF_G3,		587)
_(R_AARCH64_AUTH_GOT_LD_PREL19,			588)
_(R_AARCH64_AUTH_LD64_GOTOFF_LO15,		589)
_(R_AARCH64_AUTH_ADR_GOT_PAGE,			590)
_(R_AARCH64_AUTH_LD64_GOT_LO12_NC,		591)
_(R_AARCH64_AUTH_LD64_GOTPAGE_LO15,		592)
_(R_AARCH64_AUTH_GOT_ADD_LO12_NC,		593)
_(R_AARCH64_AUTH_GOT_ADR_PREL_LO21,		594)
_(R_AARCH64_AUTH_TLSDESC_ADR_PAGE21,		595)
_(R_AARCH64_AUTH_TLSDESC_LD64_LO12,		596)
_(R_AARCH64_AUTH_TLSDESC_ADD_LO12,		597)
__(`	', `unused: 598-1023')
_(R_AARCH64_COPY,				1024)
_(R_AARCH64_GLOB_DAT,				1025)
_(R_AARCH64_JUMP_SLOT,				1026)
_(R_AARCH64_RELATIVE,				1027)
_(R_AARCH64_TLS_IMPDEF1,			1028,
	`R_AARCH64_TLS_DTPREL or R_AARCH64_TLS_DTPMOD.')
_(R_AARCH64_TLS_IMPDEF2,			1029,
	`R_AARCH64_TLS_DTPMOD or R_AARCH64_TLS_DTPREL.')
_(R_AARCH64_TLS_TPREL,				1030)
_(R_AARCH64_TLSDESC,				1031)
_(R_AARCH64_IRELATIVE,				1032)
__(`	', `unused: 1033-1040')
_(R_AARCH64_AUTH_RELATIVE,			1041)
_(R_AARCH64_AUTH_GLOB_DAT,			1042)
_(R_AARCH64_AUTH_TLSDESC,			1043)
_(R_AARCH64_AUTH_IRELATIVE,			1044)
')

define(`DEFINE_AARCH64_RELOCATION_TYPE_SYNONYMS',`
_(R_AARCH64_TLS_TPREL64,			R_AARCH64_TLS_TPREL)
')

#
# Relocation definitions from the ARM ELF ABI, version "ARM IHI
# 0044E" released on 30th November 2012.
#
define(`DEFINE_ARM_RELOCATION_TYPES',`
__(`EM_ARM')
_(R_ARM_NONE,			0)
_(R_ARM_PC24,			1, `Deprecated.')
_(R_ARM_ABS32,			2)
_(R_ARM_REL32,			3)
_(R_ARM_LDR_PC_G0,		4)
_(R_ARM_ABS16,			5)
_(R_ARM_ABS12,			6)
_(R_ARM_THM_ABS5,		7)
_(R_ARM_ABS8,			8)
_(R_ARM_SBREL32,		9)
_(R_ARM_THM_CALL,		10)
_(R_ARM_THM_PC8,		11)
_(R_ARM_BREL_ADJ,		12)
_(R_ARM_TLS_DESC,		13)
_(R_ARM_THM_SWI8,		14, `Obsolete.')
_(R_ARM_XPC25,			15, `Obsolete.')
_(R_ARM_THM_XPC22,		16, `Obsolete.')
_(R_ARM_TLS_DTPMOD32,		17)
_(R_ARM_TLS_DTPOFF32,		18)
_(R_ARM_TLS_TPOFF32,		19)
_(R_ARM_COPY,			20)
_(R_ARM_GLOB_DAT,		21)
_(R_ARM_JUMP_SLOT,		22)
_(R_ARM_RELATIVE,		23)
_(R_ARM_GOTOFF32,		24)
_(R_ARM_BASE_PREL,		25)
_(R_ARM_GOT_BREL,		26)
_(R_ARM_PLT32,			27, `Deprecated.')
_(R_ARM_CALL,			28)
_(R_ARM_JUMP24,			29)
_(R_ARM_THM_JUMP24,		30)
_(R_ARM_BASE_ABS,		31)
_(R_ARM_ALU_PCREL_7_0,		32, `Obsolete.')
_(R_ARM_ALU_PCREL_15_8,		33, `Obsolete.')
_(R_ARM_ALU_PCREL_23_15,	34, `Obsolete.')
_(R_ARM_LDR_SBREL_11_0_NC,	35, `Deprecated.')
_(R_ARM_ALU_SBREL_19_12_NC,	36, `Deprecated.')
_(R_ARM_ALU_SBREL_27_20_CK,	37, `Deprecated.')
_(R_ARM_TARGET1,		38)
_(R_ARM_SBREL31,		39, `Deprecated.')
_(R_ARM_V4BX,			40)
_(R_ARM_TARGET2,		41)
_(R_ARM_PREL31,			42)
_(R_ARM_MOVW_ABS_NC,		43)
_(R_ARM_MOVT_ABS,		44)
_(R_ARM_MOVW_PREL_NC,		45)
_(R_ARM_MOVT_PREL,		46)
_(R_ARM_THM_MOVW_ABS_NC,	47)
_(R_ARM_THM_MOVT_ABS,		48)
_(R_ARM_THM_MOVW_PREL_NC,	49)
_(R_ARM_THM_MOVT_PREL,		50)
_(R_ARM_THM_JUMP19,		51)
_(R_ARM_THM_JUMP6,		52)
_(R_ARM_THM_ALU_PREL_11_0,	53)
_(R_ARM_THM_PC12,		54)
_(R_ARM_ABS32_NOI,		55)
_(R_ARM_REL32_NOI,		56)
_(R_ARM_ALU_PC_G0_NC,		57)
_(R_ARM_ALU_PC_G0,		58)
_(R_ARM_ALU_PC_G1_NC,		59)
_(R_ARM_ALU_PC_G1,		60)
_(R_ARM_ALU_PC_G2,		61)
_(R_ARM_LDR_PC_G1,		62)
_(R_ARM_LDR_PC_G2,		63)
_(R_ARM_LDRS_PC_G0,		64)
_(R_ARM_LDRS_PC_G1,		65)
_(R_ARM_LDRS_PC_G2,		66)
_(R_ARM_LDC_PC_G0,		67)
_(R_ARM_LDC_PC_G1,		68)
_(R_ARM_LDC_PC_G2,		69)
_(R_ARM_ALU_SB_G0_NC,		70)
_(R_ARM_ALU_SB_G0,		71)
_(R_ARM_ALU_SB_G1_NC,		72)
_(R_ARM_ALU_SB_G1,		73)
_(R_ARM_ALU_SB_G2,		74)
_(R_ARM_LDR_SB_G0,		75)
_(R_ARM_LDR_SB_G1,		76)
_(R_ARM_LDR_SB_G2,		77)
_(R_ARM_LDRS_SB_G0,		78)
_(R_ARM_LDRS_SB_G1,		79)
_(R_ARM_LDRS_SB_G2,		80)
_(R_ARM_LDC_SB_G0,		81)
_(R_ARM_LDC_SB_G1,		82)
_(R_ARM_LDC_SB_G2,		83)
_(R_ARM_MOVW_BREL_NC,		84)
_(R_ARM_MOVT_BREL,		85)
_(R_ARM_MOVW_BREL,		86)
_(R_ARM_THM_MOVW_BREL_NC,	87)
_(R_ARM_THM_MOVT_BREL,		88)
_(R_ARM_THM_MOVW_BREL,		89)
_(R_ARM_TLS_GOTDESC,		90)
_(R_ARM_TLS_CALL,		91)
_(R_ARM_TLS_DESCSEQ,		92)
_(R_ARM_THM_TLS_CALL,		93)
_(R_ARM_PLT32_ABS,		94)
_(R_ARM_GOT_ABS,		95)
_(R_ARM_GOT_PREL,		96)
_(R_ARM_GOT_BREL12,		97)
_(R_ARM_GOTOFF12,		98)
_(R_ARM_GOTRELAX,		99)
_(R_ARM_GNU_VTENTRY,		100, `Deprecated.')
_(R_ARM_GNU_VTINHERIT,		101, `Deprecated.')
_(R_ARM_THM_JUMP11,		102)
_(R_ARM_THM_JUMP8,		103)
_(R_ARM_TLS_GD32,		104)
_(R_ARM_TLS_LDM32,		105)
_(R_ARM_TLS_LDO32,		106)
_(R_ARM_TLS_IE32,		107)
_(R_ARM_TLS_LE32,		108)
_(R_ARM_TLS_LDO12,		109)
_(R_ARM_TLS_LE12,		110)
_(R_ARM_TLS_IE12GP,		111)
_(R_ARM_PRIVATE_0,		112)
_(R_ARM_PRIVATE_1,		113)
_(R_ARM_PRIVATE_2,		114)
_(R_ARM_PRIVATE_3,		115)
_(R_ARM_PRIVATE_4,		116)
_(R_ARM_PRIVATE_5,		117)
_(R_ARM_PRIVATE_6,		118)
_(R_ARM_PRIVATE_7,		119)
_(R_ARM_PRIVATE_8,		120)
_(R_ARM_PRIVATE_9,		121)
_(R_ARM_PRIVATE_10,		122)
_(R_ARM_PRIVATE_11,		123)
_(R_ARM_PRIVATE_12,		124)
_(R_ARM_PRIVATE_13,		125)
_(R_ARM_PRIVATE_14,		126)
_(R_ARM_PRIVATE_15,		127)
_(R_ARM_ME_TOO,			128, `Obsolete.')
_(R_ARM_THM_TLS_DESCSEQ16,	129)
_(R_ARM_THM_TLS_DESCSEQ32,	130)
_(R_ARM_THM_GOT_BREL12,		131)
_(R_ARM_THM_ALU_ABS_G0_NC,	132)
_(R_ARM_THM_ALU_ABS_G1_NC,	133)
_(R_ARM_THM_ALU_ABS_G2_NC,	134)
_(R_ARM_THM_ALU_ABS_G3,		135)
_(R_ARM_THM_BF16,		136)
_(R_ARM_THM_BF12,		137)
_(R_ARM_THM_BF18,		138)
__(`	', `Reserved: 139-159.')
_(R_ARM_IRELATIVE,		160)
_(R_ARM_PRIVATE_16,		161)
_(R_ARM_PRIVATE_17,		162)
_(R_ARM_PRIVATE_18,		163)
_(R_ARM_PRIVATE_19,		164)
_(R_ARM_PRIVATE_20,		165)
_(R_ARM_PRIVATE_21,		166)
_(R_ARM_PRIVATE_22,		167)
_(R_ARM_PRIVATE_23,		168)
_(R_ARM_PRIVATE_24,		169)
_(R_ARM_PRIVATE_25,		170)
_(R_ARM_PRIVATE_26,		171)
_(R_ARM_PRIVATE_27,		172)
_(R_ARM_PRIVATE_28,		173)
_(R_ARM_PRIVATE_29,		174)
_(R_ARM_PRIVATE_30,		175)
_(R_ARM_PRIVATE_31,		176)
__(`	', `Reserved: 177-255.')
')

define(`DEFINE_ARM_OBSOLETE_RELOCATION_TYPES',`
_(R_ARM_PC13, 	       	     	4)
_(R_ARM_THM_PC22,		10)
_(R_ARM_AMP_VCALL9,		12)
_(R_ARM_SWI24,			13)
_(R_ARM_GOTOFF,			24)
_(R_ARM_GOTPC,			25)
_(R_ARM_GOT32,			26)
_(R_ARM_THM_PC11,		102)
_(R_ARM_THM_PC9,		103)
')

define(`DEFINE_IA_64_RELOCATION_TYPES',`
__(`EM_IA_64')
_(R_IA_64_NONE,			0)
__(`	', `unused: 0x1-0x20')
_(R_IA_64_IMM14,		0x21)
_(R_IA_64_IMM22,		0x22)
_(R_IA_64_IMM64,		0x23)
_(R_IA_64_DIR32MSB,		0x24)
_(R_IA_64_DIR32LSB,		0x25)
_(R_IA_64_DIR64MSB,		0x26)
_(R_IA_64_DIR64LSB,		0x27)
__(`	', `unused: 0x28-0x29')
_(R_IA_64_GPREL22,		0x2a)
_(R_IA_64_GPREL64I,		0x2b)
_(R_IA_64_GPREL32MSB,		0x2c)
_(R_IA_64_GPREL32LSB,		0x2d)
_(R_IA_64_GPREL64MSB,		0x2e)
_(R_IA_64_GPREL64LSB,		0x2f)
__(`	', `unused: 0x30-0x31')
_(R_IA_64_LTOFF22,		0x32)
_(R_IA_64_LTOFF64I,		0x33)
__(`	', `unused: 0x34-0x39')
_(R_IA_64_PLTOFF22,		0x3a)
_(R_IA_64_PLTOFF64I,		0x3b)
__(`	', `unused: 0x3c-0x3d')
_(R_IA_64_PLTOFF64MSB,		0x3e)
_(R_IA_64_PLTOFF64LSB,		0x3f)
__(`	', `unused: 0x40-0x42')
_(R_IA_64_FPTR64I,		0x43)
_(R_IA_64_FPTR32MSB,		0x44)
_(R_IA_64_FPTR32LSB,		0x45)
_(R_IA_64_FPTR64MSB,		0x46)
_(R_IA_64_FPTR64LSB,		0x47)
_(R_IA_64_PCREL60B,		0x48)
_(R_IA_64_PCREL21B,		0x49)
_(R_IA_64_PCREL21M,		0x4a)
_(R_IA_64_PCREL21F,		0x4b)
_(R_IA_64_PCREL32MSB,		0x4c)
_(R_IA_64_PCREL32LSB,		0x4d)
_(R_IA_64_PCREL64MSB,		0x4e)
_(R_IA_64_PCREL64LSB,		0x4f)
__(`	', `unused: 0x50-0x51')
_(R_IA_64_LTOFF_FPTR22,		0x52)
_(R_IA_64_LTOFF_FPTR64I,	0x53)
_(R_IA_64_LTOFF_FPTR32MSB,	0x54)
_(R_IA_64_LTOFF_FPTR32LSB,	0x55)
_(R_IA_64_LTOFF_FPTR64MSB,	0x56)
_(R_IA_64_LTOFF_FPTR64LSB,	0x57)
__(`	', `unused: 0x58-0x5b')
_(R_IA_64_SEGREL32MSB,		0x5c)
_(R_IA_64_SEGREL32LSB,		0x5d)
_(R_IA_64_SEGREL64MSB,		0x5e)
_(R_IA_64_SEGREL64LSB,		0x5f)
__(`	', `unused: 0x60-0x63')
_(R_IA_64_SECREL32MSB,		0x64)
_(R_IA_64_SECREL32LSB,		0x65)
_(R_IA_64_SECREL64MSB,		0x66)
_(R_IA_64_SECREL64LSB,		0x67)
__(`	', `unused: 0x68-0x6b')
_(R_IA_64_REL32MSB,		0x6c)
_(R_IA_64_REL32LSB,		0x6d)
_(R_IA_64_REL64MSB,		0x6e)
_(R_IA_64_REL64LSB,		0x6f)
__(`	', `unused: 0x70-0x73')
_(R_IA_64_LTV32MSB,		0x74)
_(R_IA_64_LTV32LSB,		0x75)
_(R_IA_64_LTV64MSB,		0x76)
_(R_IA_64_LTV64LSB,		0x77)
__(`	', `unused: 0x78')
_(R_IA_64_PCREL21BI,		0x79)
_(R_IA_64_PCREL22,		0x7A)
_(R_IA_64_PCREL64I,		0x7B)
__(`	', `unused: 0x7C-0x7F')
_(R_IA_64_IPLTMSB,		0x80)
_(R_IA_64_IPLTLSB,		0x81)
__(`	', `unused: 0x82-0x84')
_(R_IA_64_SUB,			0x85)
_(R_IA_64_LTOFF22X,		0x86)
_(R_IA_64_LDXMOV,		0x87)
__(`	', `unused: 0x88-0x90')
_(R_IA_64_TPREL14,		0x91)
_(R_IA_64_TPREL22,		0x92)
_(R_IA_64_TPREL64I,		0x93)
__(`	', `unused: 0x94-0x95')
_(R_IA_64_TPREL64MSB,		0x96)
_(R_IA_64_TPREL64LSB,		0x97)
__(`	', `unused: 0x98-0x99')
_(R_IA_64_LTOFF_TPREL22,	0x9A)
__(`	', `unused: 0x9B-0xA5')
_(R_IA_64_DTPMOD64MSB,		0xA6)
_(R_IA_64_DTPMOD64LSB,		0xA7)
__(`	', `unused: 0xA8-0xA9')
_(R_IA_64_LTOFF_DTPMOD22,	0xAA)
__(`	', `unused: 0xAB-0xB0')
_(R_IA_64_DTPREL14,		0xB1)
_(R_IA_64_DTPREL22,		0xB2)
_(R_IA_64_DTPREL64I,		0xB3)
_(R_IA_64_DTPREL32MSB,		0xB4)
_(R_IA_64_DTPREL32LSB,		0xB5)
_(R_IA_64_DTPREL64MSB,		0xB6)
_(R_IA_64_DTPREL64LSB,		0xB7)
__(`	', `unused: 0xB8-0xB9')
_(R_IA_64_LTOFF_DTPREL22,	0xBA)
')

define(`DEFINE_IA_64_RELOCATION_TYPE_SYNONYMS',`
_(R_IA64_NONE,			R_IA_64_NONE)
_(R_IA64_IMM14,			R_IA_64_IMM14)
_(R_IA64_IMM22,			R_IA_64_IMM22)
_(R_IA64_IMM64,			R_IA_64_IMM64)
_(R_IA64_DIR32MSB,		R_IA_64_DIR32MSB)
_(R_IA64_DIR32LSB,		R_IA_64_DIR32LSB)
_(R_IA64_DIR64MSB,		R_IA_64_DIR64MSB)
_(R_IA64_DIR64LSB,		R_IA_64_DIR64LSB)
_(R_IA64_GPREL22,		R_IA_64_GPREL22)
_(R_IA64_GPREL64I,		R_IA_64_GPREL64I)
_(R_IA64_GPREL64MSB,		R_IA_64_GPREL64MSB)
_(R_IA64_GPREL64LSB,		R_IA_64_GPREL64LSB)
_(R_IA64_LTOFF22,		R_IA_64_LTOFF22)
_(R_IA64_LTOFF64I,		R_IA_64_LTOFF64I)
_(R_IA64_PLTOFF22,		R_IA_64_PLTOFF22)
_(R_IA64_PLTOFF64I,		R_IA_64_PLTOFF64I)
_(R_IA64_PLTOFF64MSB,		R_IA_64_PLTOFF64MSB)
_(R_IA64_PLTOFF64LSB,		R_IA_64_PLTOFF64LSB)
_(R_IA64_FPTR64I,		R_IA_64_FPTR64I)
_(R_IA64_FPTR32MSB,		R_IA_64_FPTR32MSB)
_(R_IA64_FPTR32LSB,		R_IA_64_FPTR32LSB)
_(R_IA64_FPTR64MSB,		R_IA_64_FPTR64MSB)
_(R_IA64_FPTR64LSB,		R_IA_64_FPTR64LSB)
_(R_IA64_PCREL21B,		R_IA_64_PCREL21B)
_(R_IA64_PCREL21M,		R_IA_64_PCREL21M)
_(R_IA64_PCREL21F,		R_IA_64_PCREL21F)
_(R_IA64_PCREL32MSB,		R_IA_64_PCREL32MSB)
_(R_IA64_PCREL32LSB,		R_IA_64_PCREL32LSB)
_(R_IA64_PCREL64MSB,		R_IA_64_PCREL64MSB)
_(R_IA64_PCREL64LSB,		R_IA_64_PCREL64LSB)
_(R_IA64_LTOFF_FPTR22,		R_IA_64_LTOFF_FPTR22)
_(R_IA64_LTOFF_FPTR64I,		R_IA_64_LTOFF_FPTR64I)
_(R_IA64_LTOFF_FPTR32MSB,	R_IA_64_LTOFF_FPTR32MSB)
_(R_IA64_LTOFF_FPTR32LSB,	R_IA_64_LTOFF_FPTR32LSB)
_(R_IA64_LTOFF_FPTR64MSB,	R_IA_64_LTOFF_FPTR64MSB)
_(R_IA64_LTOFF_FPTR64LSB,	R_IA_64_LTOFF_FPTR64LSB)
_(R_IA64_SEGREL32MSB,		R_IA_64_SEGREL32MSB)
_(R_IA64_SEGREL32LSB,		R_IA_64_SEGREL32LSB)
_(R_IA64_SEGREL64MSB,		R_IA_64_SEGREL64MSB)
_(R_IA64_SEGREL64LSB,		R_IA_64_SEGREL64LSB)
_(R_IA64_SECREL32MSB,		R_IA_64_SECREL32MSB)
_(R_IA64_SECREL32LSB,		R_IA_64_SECREL32LSB)
_(R_IA64_SECREL64MSB,		R_IA_64_SECREL64MSB)
_(R_IA64_SECREL64LSB,		R_IA_64_SECREL64LSB)
_(R_IA64_REL32MSB,		R_IA_64_REL32MSB)
_(R_IA64_REL32LSB,		R_IA_64_REL32LSB)
_(R_IA64_REL64MSB,		R_IA_64_REL64MSB)
_(R_IA64_REL64LSB,		R_IA_64_REL64LSB)
_(R_IA64_LTV32MSB,		R_IA_64_LTV32MSB)
_(R_IA64_LTV32LSB,		R_IA_64_LTV32LSB)
_(R_IA64_LTV64MSB,		R_IA_64_LTV64MSB)
_(R_IA64_LTV64LSB,		R_IA_64_LTV64LSB)
_(R_IA64_IPLTMSB,		R_IA_64_IPLTMSB)
_(R_IA64_IPLTLSB,		R_IA_64_IPLTLSB)
_(R_IA64_SUB,			R_IA_64_SUB)
_(R_IA64_LTOFF22X,		R_IA_64_LTOFF22X)
_(R_IA64_LDXMOV,		R_IA_64_LDXMOV)
_(R_IA64_TPREL14,		R_IA_64_TPREL14)
_(R_IA64_TPREL22,		R_IA_64_TPREL22)
_(R_IA64_TPREL64I,		R_IA_64_TPREL64I)
_(R_IA64_TPREL64MSB,		R_IA_64_TPREL64MSB)
_(R_IA64_TPREL64LSB,		R_IA_64_TPREL64LSB)
_(R_IA64_LTOFF_TPREL22,		R_IA_64_LTOFF_TPREL22)
_(R_IA64_DTPMOD64MSB,		R_IA_64_DTPMOD64MSB)
_(R_IA64_DTPMOD64LSB,		R_IA_64_DTPMOD64LSB)
_(R_IA64_LTOFF_DTPMOD22,	R_IA_64_LTOFF_DTPMOD22)
_(R_IA64_DTPREL14,		R_IA_64_DTPREL14)
_(R_IA64_DTPREL22,		R_IA_64_DTPREL22)
_(R_IA64_DTPREL64I,		R_IA_64_DTPREL64I)
_(R_IA64_DTPREL32MSB,		R_IA_64_DTPREL32MSB)
_(R_IA64_DTPREL32LSB,		R_IA_64_DTPREL32LSB)
_(R_IA64_DTPREL64MSB,		R_IA_64_DTPREL64MSB)
_(R_IA64_DTPREL64LSB,		R_IA_64_DTPREL64LSB)
_(R_IA64_LTOFF_DTPREL22,	R_IA_64_LTOFF_DTPREL22)
')

define(`DEFINE_LOONGARCH_RELOCATION_TYPES',`
__(`EM_LOONGARCH')
_(R_LARCH_NONE,				0)
_(R_LARCH_32,				1)
_(R_LARCH_64,				2)
_(R_LARCH_RELATIVE,			3)
_(R_LARCH_COPY,				4)
_(R_LARCH_JUMP_SLOT,			5)
_(R_LARCH_TLS_DTPMOD32,			6)
_(R_LARCH_TLS_DTPMOD64,			7)
_(R_LARCH_TLS_DTPREL32,			8)
_(R_LARCH_TLS_DTPREL64,			9)
_(R_LARCH_TLS_TPREL32,			10)
_(R_LARCH_TLS_TPREL64,			11)
_(R_LARCH_IRELATIVE,			12)
_(R_LARCH_TLS_DESC32,			13)
_(R_LARCH_TLS_DESC64,			14)
__(`	', `reserved for the dynamic linker: 15-19')
_(R_LARCH_MARK_LA,			20)
_(R_LARCH_MARK_PCREL,			21)
_(R_LARCH_SOP_PUSH_PCREL,		22)
_(R_LARCH_SOP_PUSH_ABSOLUTE,		23)
_(R_LARCH_SOP_PUSH_DUP,			24)
_(R_LARCH_SOP_PUSH_GPREL,		25)
_(R_LARCH_SOP_PUSH_TLS_TPREL,		26)
_(R_LARCH_SOP_PUSH_TLS_GOT,		27)
_(R_LARCH_SOP_PUSH_TLS_GD,		28)
_(R_LARCH_SOP_PUSH_PLT_PCREL,		29)
_(R_LARCH_SOP_ASSERT,			30)
_(R_LARCH_SOP_NOT,			31)
_(R_LARCH_SOP_SUB,			32)
_(R_LARCH_SOP_SL,			33)
_(R_LARCH_SOP_SR,			34)
_(R_LARCH_SOP_ADD,			35)
_(R_LARCH_SOP_AND,			36)
_(R_LARCH_SOP_IF_ELSE,			37)
_(R_LARCH_SOP_POP_32_S_10_5,		38)
_(R_LARCH_SOP_POP_32_U_10_12,		39)
_(R_LARCH_SOP_POP_32_S_10_12,		40)
_(R_LARCH_SOP_POP_32_S_10_16,		41)
_(R_LARCH_SOP_POP_32_S_10_16_S2,	42)
_(R_LARCH_SOP_POP_32_S_5_20,		43)
_(R_LARCH_SOP_POP_32_S_0_5_10_16_S2,	44)
_(R_LARCH_SOP_POP_32_S_0_10_10_16_S2,	45)
_(R_LARCH_SOP_POP_32_U,			46)
_(R_LARCH_ADD8,				47)
_(R_LARCH_ADD16,			48)
_(R_LARCH_ADD24,			49)
_(R_LARCH_ADD32,			50)
_(R_LARCH_ADD64,			51)
_(R_LARCH_SUB8,				52)
_(R_LARCH_SUB16,			53)
_(R_LARCH_SUB24,			54)
_(R_LARCH_SUB32,			55)
_(R_LARCH_SUB64,			56)
_(R_LARCH_GNU_VTINHERIT,		57)
_(R_LARCH_GNU_VTENTRY,			58)
__(`	', `reserved: 59-63')
_(R_LARCH_B16,				64)
_(R_LARCH_B21,				65)
_(R_LARCH_B26,				66)
_(R_LARCH_ABS_HI20,			67)
_(R_LARCH_ABS_LO12,			68)
_(R_LARCH_ABS64_LO20,			69)
_(R_LARCH_ABS64_HI12,			70)
_(R_LARCH_PCALA_HI20,			71)
_(R_LARCH_PCALA_LO12,			72)
_(R_LARCH_PCALA64_LO20,			73)
_(R_LARCH_PCALA64_HI12,			74)
_(R_LARCH_GOT_PC_HI20,			75)
_(R_LARCH_GOT_PC_LO12,			76)
_(R_LARCH_GOT64_PC_LO20,		77)
_(R_LARCH_GOT64_PC_HI12,		78)
_(R_LARCH_GOT_HI20,			79)
_(R_LARCH_GOT_LO12,			80)
_(R_LARCH_GOT64_LO20,			81)
_(R_LARCH_GOT64_HI12,			82)
_(R_LARCH_TLS_LE_HI20,			83)
_(R_LARCH_TLS_LE_LO12,			84)
_(R_LARCH_TLS_LE64_LO20,		85)
_(R_LARCH_TLS_LE64_HI12,		86)
_(R_LARCH_TLS_IE_PC_HI20,		87)
_(R_LARCH_TLS_IE_PC_LO12,		88)
_(R_LARCH_TLS_IE64_PC_LO20,		89)
_(R_LARCH_TLS_IE64_PC_HI12,		90)
_(R_LARCH_TLS_IE_HI20,			91)
_(R_LARCH_TLS_IE_LO12,			92)
_(R_LARCH_TLS_IE64_LO20,		93)
_(R_LARCH_TLS_IE64_HI12,		94)
_(R_LARCH_TLS_LD_PC_HI20,		95)
_(R_LARCH_TLS_LD_HI20,			96)
_(R_LARCH_TLS_GD_PC_HI20,		97)
_(R_LARCH_TLS_GD_HI20,			98)
_(R_LARCH_32_PCREL,			99)
_(R_LARCH_RELAX,			100)
__(`	', `reserved: 101')
_(R_LARCH_ALIGN,			102)
_(R_LARCH_PCREL20_S2,			103)
__(`	', `reserved: 104')
_(R_LARCH_ADD6,				105)
_(R_LARCH_SUB6,				106)
_(R_LARCH_ADD_ULEB128,			107)
_(R_LARCH_SUB_ULEB128,			108)
_(R_LARCH_64_PCREL,			109)
_(R_LARCH_CALL36,			110)
_(R_LARCH_TLS_DESC_PC_HI20,		111)
_(R_LARCH_TLS_DESC_PC_LO12,		112)
_(R_LARCH_TLS_DESC64_PC_LO20,		113)
_(R_LARCH_TLS_DESC64_PC_HI12,		114)
_(R_LARCH_TLS_DESC_HI20,		115)
_(R_LARCH_TLS_DESC_LO12,		116)
_(R_LARCH_TLS_DESC64_LO20,		117)
_(R_LARCH_TLS_DESC64_HI12,		118)
_(R_LARCH_TLS_DESC_LD,			119)
_(R_LARCH_TLS_DESC_CALL,		120)
_(R_LARCH_TLS_LE_HI20_R,		121)
_(R_LARCH_TLS_LE_ADD_R,			122)
_(R_LARCH_TLS_LE_LO12_R,		123)
_(R_LARCH_TLS_LD_PCREL20_S2,		124)
_(R_LARCH_TLS_GD_PCREL20_S2,		125)
_(R_LARCH_TLS_DESC_PCREL20_S2,		126)
')

define(`DEFINE_MIPS_RELOCATION_TYPES',`
__(`EM_MIPS')
_(R_MIPS_NONE,			0, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_16,			1, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_32,			2, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_REL32,			3, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_26,			4, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_HI16,			5, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_LO16,			6, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_GPREL16,		7, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_LITERAL, 		8, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_GOT16,			9, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_PC16,			10, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_CALL16,		11, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_GPREL32,		12, `GNU binutils, LLVM, MIPS psABI.')
__(`	', `Unused: 13-15.')
_(R_MIPS_SHIFT5,		16, `GNU binutils, LLVM.')
_(R_MIPS_SHIFT6,		17, `GNU binutils, LLVM.')
_(R_MIPS_64,			18, `GNU binutils, LLVM')
_(R_MIPS_GOT_DISP,		19, `GNU binutils, LLVM.')
_(R_MIPS_GOT_PAGE,		20, `GNU binutils, LLVM.')
_(R_MIPS_GOTHI16,		21, `MIPS psABI.')
_(R_MIPS_GOTLO16,		22, `MIPS psABI.')
_(R_MIPS_GOT_LO16,		23, `GNU binutils, LLVM.')
_(R_MIPS_SUB,			24, `GNU binutils, LLVM.')
_(R_MIPS_INSERT_A,		25, `GNU binutils, LLVM.')
_(R_MIPS_INSERT_B,		26, `GNU binutils, LLVM.')
_(R_MIPS_DELETE,		27, `GNU binutils, LLVM.')
_(R_MIPS_HIGHER,		28, `GNU binutils, LLVM.')
_(R_MIPS_HIGHEST,		29, `GNU binutils, LLVM.')
_(R_MIPS_CALLHI16,		30, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_CALLLO16,		31, `GNU binutils, LLVM, MIPS psABI.')
_(R_MIPS_SCN_DISP,		32, `GNU binutils, LLVM.')
_(R_MIPS_REL16,			33, `GNU binutils, LLVM.')
_(R_MIPS_ADD_IMMEDIATE,		34, `GNU binutils, LLVM.')
_(R_MIPS_PJUMP,			35, `GNU binutils, LLVM.')
_(R_MIPS_RELGOT,		36, `GNU binutils, LLVM.')
_(R_MIPS_JALR,			37, `GNU binutils, LLVM.')
_(R_MIPS_TLS_DTPMOD32,		38, `GNU binutils, LLVM.')
_(R_MIPS_TLS_DTPREL32,		39, `GNU binutils, LLVM.')
_(R_MIPS_TLS_DTPMOD64,		40, `GNU binutils, LLVM.')
_(R_MIPS_TLS_DTPREL64,		41, `GNU binutils, LLVM.')
_(R_MIPS_TLS_GD,		42, `GNU binutils, LLVM.')
_(R_MIPS_TLS_LDM,		43, `GNU binutils, LLVM.')
_(R_MIPS_TLS_DTPREL_HI16,	44, `GNU binutils, LLVM.')
_(R_MIPS_TLS_DTPREL_LO16,	45, `GNU binutils, LLVM.')
_(R_MIPS_TLS_GOTTPREL,		46, `GNU binutils, LLVM.')
_(R_MIPS_TLS_TPREL32,		47, `GNU binutils, LLVM.')
_(R_MIPS_TLS_TPREL64,		48, `GNU binutils, LLVM.')
_(R_MIPS_TLS_TPREL_HI16,	49, `GNU binutils, LLVM.')
_(R_MIPS_TLS_TPREL_LO16,	50, `GNU binutils, LLVM.')
_(R_MIPS_GLOB_DAT,		51, `GNU binutils, LLVM.')
__(`	', `Unused: 52-59.')
_(R_MIPS_PC21_S2,		60, `GNU binutils, LLVM.')
_(R_MIPS_PC26_S2,		61, `GNU binutils, LLVM.')
_(R_MIPS_PC18_S3,		62, `GNU binutils, LLVM.')
_(R_MIPS_PC19_S2,		63, `GNU binutils, LLVM.')
_(R_MIPS_PCHI16,		64, `GNU binutils, LLVM.')
_(R_MIPS_PCLO16,		65, `GNU binutils, LLVM.')
__(`	', `Unused: 66-99.')
_(R_MIPS16_26,			100, `GNU binutils, LLVM.')
_(R_MIPS16_GPREL,		101, `GNU binutils, LLVM.')
_(R_MIPS16_GOT16,		102, `GNU binutils, LLVM.')
_(R_MIPS16_CALL16,		103, `GNU binutils, LLVM.')
_(R_MIPS16_HI16,		104, `GNU binutils, LLVM.')
_(R_MIPS16_LO16,		105, `GNU binutils, LLVM.')
_(R_MIPS16_TLS_GD,		106, `GNU binutils, LLVM.')
_(R_MIPS16_TLS_LDM,		107, `GNU binutils, LLVM.')
_(R_MIPS16_TLS_DTPREL_HI16,	108, `GNU binutils, LLVM.')
_(R_MIPS16_TLS_DTPREL_LO16,	109, `GNU binutils, LLVM.')
_(R_MIPS16_TLS_GOTTPREL,	110, `GNU binutils, LLVM.')
_(R_MIPS16_TLS_TPREL_HI16,	111, `GNU binutils, LLVM.')
_(R_MIPS16_TLS_TPREL_LO16,	112, `GNU binutils, LLVM.')
__(`	', `Unused: 113-125.')
_(R_MIPS_COPY,			126, `GNU binutils, LLVM.')
_(R_MIPS_JUMP_SLOT,		127, `GNU binutils, LLVM.')
__(`	', `Unused: 128-132.')
_(R_MICROMIPS_26_S1,		133, `GNU binutils, LLVM.')
_(R_MICROMIPS_HI16,		134, `GNU binutils, LLVM.')
_(R_MICROMIPS_LO16,		135, `GNU binutils, LLVM.')
_(R_MICROMIPS_GPREL16,		136, `GNU binutils, LLVM.')
_(R_MICROMIPS_LITERAL,		137, `GNU binutils, LLVM.')
_(R_MICROMIPS_GOT16,		138, `GNU binutils, LLVM.')
_(R_MICROMIPS_PC7_S1,		139, `GNU binutils, LLVM.')
_(R_MICROMIPS_PC10_S1,		140, `GNU binutils, LLVM.')
_(R_MICROMIPS_PC16_S1,		141, `GNU binutils, LLVM.')
_(R_MICROMIPS_CALL16,		142, `GNU binutils, LLVM.')
__(`	', `Unused: 143-144.')
_(R_MICROMIPS_GOT_DISP,		145, `GNU binutils, LLVM.')
_(R_MICROMIPS_GOT_PAGE,		146, `GNU binutils, LLVM.')
_(R_MICROMIPS_GOT_OFST,		147, `GNU binutils, LLVM.')
_(R_MICROMIPS_GOT_HI16,		148, `GNU binutils, LLVM.')
_(R_MICROMIPS_GOT_LO16,		149, `GNU binutils, LLVM.')
_(R_MICROMIPS_SUB,		150, `GNU binutils, LLVM.')
_(R_MICROMIPS_HIGHER,		151, `GNU binutils, LLVM.')
_(R_MICROMIPS_HIGHEST,		152, `GNU binutils, LLVM.')
_(R_MICROMIPS_CALL_HI16,	153, `GNU binutils, LLVM.')
_(R_MICROMIPS_CALL_LO16,	154, `GNU binutils, LLVM.')
_(R_MICROMIPS_SCN_DISP,		155, `GNU binutils, LLVM.')
_(R_MICROMIPS_JALR,		156, `GNU binutils, LLVM.')
_(R_MICROMIPS_HI0_LO16,		157, `GNU binutils, LLVM.')
__(`	', `Unused: 158-161.')
_(R_MICROMIPS_TLS_GD,		162, `GNU binutils, LLVM.')
_(R_MICROMIPS_TLS_LDM,		163, `GNU binutils, LLVM.')
_(R_MICROMIPS_TLS_DTPREL_HI16,	164, `GNU binutils, LLVM.')
_(R_MICROMIPS_TLS_DTPREL_LO16,	165, `GNU binutils, LLVM.')
_(R_MICROMIPS_TLS_GOTTPREL,	166, `GNU binutils, LLVM.')
__(`	', `Unused: 167-168.')
_(R_MICROMIPS_TLS_TPREL_HI16,	169, `GNU binutils, LLVM.')
_(R_MICROMIPS_TLS_TPREL_LO16,	170, `GNU binutils, LLVM.')
__(`	', `Unused: 171.')
_(R_MICROMIPS_GPREL7_S2,	172, `GNU binutils, LLVM.')
_(R_MICROMIPS_PC23_S2,		173, `GNU binutils, LLVM.')
_(R_MICROMIPS_PC21_S1,		174, `LLVM.')
_(R_MICROMIPS_PC26_S1,		175, `LLVM.')
_(R_MICROMIPS_PC18_S3,		176, `LLVM.')
_(R_MICROMIPS_PC19_S2,		177, `LLVM.')
__(`	', `Unused: 178-247.')
_(R_MIPS_PC32,			248, `GNU binutils, LLVM.')
_(R_MIPS_EH,			249, `GNU binutils, LLVM.')
__(`	', `GNU extensions.')
_(R_MIPS_GNU_REL16_S2,		250, `GNU binutils.')
_(R_MIPS_GNU_VTINHERIT,		251, `GNU binutils.')
_(R_MIPS_GNU_VTENTRY,		252, `GNU binutils.')
')

define(`DEFINE_MIPS_RELOCATION_TYPE_SYNONYMS',`
_(R_MIPS_GOT_OFST,		21, `GNU binutils, LLVM.')
_(R_MIPS_GOT_HI16,		22, `GNU binutils, LLVM.')
')

define(`DEFINE_PPC_RELOCATION_TYPES',`
__(EM_PPC)
_(R_PPC_NONE,		0)
_(R_PPC_ADDR32,		1)
_(R_PPC_ADDR24,		2)
_(R_PPC_ADDR16,		3)
_(R_PPC_ADDR16_LO,	4)
_(R_PPC_ADDR16_HI,	5)
_(R_PPC_ADDR16_HA,	6)
_(R_PPC_ADDR14,		7)
_(R_PPC_ADDR14_BRTAKEN,	8)
_(R_PPC_ADDR14_BRNTAKEN, 9)
_(R_PPC_REL24,		10)
_(R_PPC_REL14,		11)
_(R_PPC_REL14_BRTAKEN,	12)
_(R_PPC_REL14_BRNTAKEN,	13)
_(R_PPC_GOT16,		14)
_(R_PPC_GOT16_LO,	15)
_(R_PPC_GOT16_HI,	16)
_(R_PPC_GOT16_HA,	17)
_(R_PPC_PLTREL24,	18)
_(R_PPC_COPY,		19)
_(R_PPC_GLOB_DAT,	20)
_(R_PPC_JMP_SLOT,	21)
_(R_PPC_RELATIVE,	22)
_(R_PPC_LOCAL24PC,	23)
_(R_PPC_UADDR32,	24)
_(R_PPC_UADDR16,	25)
_(R_PPC_REL32,		26)
_(R_PPC_PLT32,		27)
_(R_PPC_PLTREL32,	28)
_(R_PPC_PLT16_LO,	29)
_(R_PPC_PLT16_HI,	30)
_(R_PPC_PLT16_HA,	31)
__(`	', `Not in the psABI: 32')
_(R_PPC_SDAREL16,	32)
_(R_PPC_SECTOFF,	33)
_(R_PPC_SECTOFF_LO,	34)
_(R_PPC_SECTOFF_HI,	35)
_(R_PPC_SECTOFF_HA,	36)
_(R_PPC_ADDR30,		37)
__(`	', `Used by the PPC64 ABI: 38-66.')
_(R_PPC_TLS,		67)
_(R_PPC_DTPMOD32,	68)
_(R_PPC_TPREL16,	69)
_(R_PPC_TPREL16_LO,	70)
_(R_PPC_TPREL16_HI,	71)
_(R_PPC_TPREL16_HA,	72)
_(R_PPC_TPREL32,	73)
_(R_PPC_DTPREL16,	74)
_(R_PPC_DTPREL16_LO,	75)
_(R_PPC_DTPREL16_HI,	76)
_(R_PPC_DTPREL16_HA,	77)
_(R_PPC_DTPREL32,	78)
_(R_PPC_GOT_TLSGD16,	79)
_(R_PPC_GOT_TLSGD16_LO,	80)
_(R_PPC_GOT_TLSGD16_HI,	81)
_(R_PPC_GOT_TLSGD16_HA,	82)
_(R_PPC_GOT_TLSLD16,	83)
_(R_PPC_GOT_TLSLD16_LO,	84)
_(R_PPC_GOT_TLSLD16_HI,	85)
_(R_PPC_GOT_TLSLD16_HA,	86)
_(R_PPC_GOT_TPREL16,	87)
_(R_PPC_GOT_TPREL16_LO,	88)
_(R_PPC_GOT_TPREL16_HI,	89)
_(R_PPC_GOT_TPREL16_HA,	90)
__(`	', `Not in the psABI: 91-94.')
_(R_PPC_GOT_DTPREL16,	91)
_(R_PPC_GOT_DTPREL16_LO, 92)
_(R_PPC_GOT_DTPREL16_HI, 93)
_(R_PPC_GOT_DTPREL16_HA, 94)
_(R_PPC_TLSGD,		95)
_(R_PPC_TLSLD,		96)
__(`	', `Reserved: 97-100.')
_(R_PPC_EMB_NADDR32,	101)
_(R_PPC_EMB_NADDR16,	102)
_(R_PPC_EMB_NADDR16_LO,	103)
_(R_PPC_EMB_NADDR16_HI,	104)
_(R_PPC_EMB_NADDR16_HA,	105)
_(R_PPC_EMB_SDAI16,	106)
_(R_PPC_EMB_SDA2I16,	107)
_(R_PPC_EMB_SDA2REL,	108)
_(R_PPC_EMB_SDA21,	109)
_(R_PPC_EMB_MRKREF,	110)
_(R_PPC_EMB_RELSEC16,	111)
_(R_PPC_EMB_RELST_LO,	112)
_(R_PPC_EMB_RELST_HI,	113)
_(R_PPC_EMB_RELST_HA,	114)
_(R_PPC_EMB_BIT_FLD,	115)
_(R_PPC_EMB_RELSDA,	116)
__(`	', `Reserved: 117-179.')
_(R_PPC_DIAB_SDA21_LO,	180)
_(R_PPC_DIAB_SDA21_HI,	181)
_(R_PPC_DIAB_SDA21_HA,	182)
_(R_PPC_DIAB_RELSDA_LO,	183)
_(R_PPC_DIAB_RELSDA_HI,	184)
_(R_PPC_DIAB_RELSDA_HA,	185)
__(`	', `Reserved: 201-200.')
_(R_PPC_EMB_SPE_DOUBLE,	201)
_(R_PPC_EMB_SPE_WORD,	202)
_(R_PPC_EMB_SPE_HALF,	203)
_(R_PPC_EMB_SPE_DOUBLE_SDAREL,	204)
_(R_PPC_EMB_SPE_WORD_SDAREL,	205)
_(R_PPC_EMB_SPE_HALF_SDAREL,	206)
_(R_PPC_EMB_SPE_DOUBLE_SDA2REL,	207)
_(R_PPC_EMB_SPE_WORD_SDA2REL,	208)
_(R_PPC_EMB_SPE_HALF_SDA2REL,	209)
_(R_PPC_EMB_SPE_DOUBLE_SDA0REL,	210)
_(R_PPC_EMB_SPE_WORD_SDA0REL,	211)
_(R_PPC_EMB_SPE_HALF_SDA0REL,	212)
_(R_PPC_EMB_SPE_DOUBLE_SDA,	213)
_(R_PPC_EMB_SPE_WORD_SDA,	214)
_(R_PPC_EMB_SPE_HALF_SDA,	215)
_(R_PPC_VLE_REL8,	216)
_(R_PPC_VLE_REL15,	217)
_(R_PPC_VLE_REL24,	218)
_(R_PPC_VLE_LO16A,	219)
_(R_PPC_VLE_LO16D,	220)
_(R_PPC_VLE_HI16A,	221)
_(R_PPC_VLE_HI16D,	222)
_(R_PPC_VLE_HA16A,	223)
_(R_PPC_VLE_HA16D,	224)
_(R_PPC_VLE_SDA21,	225)
_(R_PPC_VLE_SDA21_LO,	226)
_(R_PPC_VLE_SDAREL_LO16A,	227)
_(R_PPC_VLE_SDAREL_LO16D,	228)
_(R_PPC_VLE_SDAREL_HI16A,	229)
_(R_PPC_VLE_SDAREL_HI16D,	230)
_(R_PPC_VLE_SDAREL_HA16A,	231)
_(R_PPC_VLE_SDAREL_HA16D,	232)
_(R_PPC_VLE_ADDR20,	233)
__(`	', `Reserved: 234-248.')
_(R_PPC_REL16,		249)
_(R_PPC_REL16_LO,	250)
_(R_PPC_REL16_HI,	251)
_(R_PPC_REL16_HA,	252)
__(`	', `Reserved: 253-255.')
')

define(`DEFINE_PPC64_RELOCATION_TYPES',`
__(EM_PPC64)
_(R_PPC64_NONE,			0)
_(R_PPC64_ADDR32,		1)
_(R_PPC64_ADDR24,		2)
_(R_PPC64_ADDR16,		3)
_(R_PPC64_ADDR16_LO,		4)
_(R_PPC64_ADDR16_HI,		5)
_(R_PPC64_ADDR16_HA,		6)
_(R_PPC64_ADDR14,		7)
__(`	', `unused: 8-9.')
_(R_PPC64_REL24,		10)
_(R_PPC64_REL14,		11)
__(`	', `unused: 12-13.')
_(R_PPC64_GOT16,		14)
_(R_PPC64_GOT16_LO,		15)
_(R_PPC64_GOT16_HI,		16)
_(R_PPC64_GOT16_HA,		17)
__(`	', `unused: 18.')
_(R_PPC64_COPY,			19)
_(R_PPC64_GLOB_DAT,		20)
_(R_PPC64_JMP_SLOT,		21)
_(R_PPC64_RELATIVE,		22)
__(`	', `unused: 23.')
_(R_PPC64_UADDR32,		24)
_(R_PPC64_UADDR16,		25)
_(R_PPC64_REL32,		26)
_(R_PPC64_PLT32,		27)
_(R_PPC64_PLTREL32,		28)
_(R_PPC64_PLT16_LO,		29)
_(R_PPC64_PLT16_HI,		30)
_(R_PPC64_PLT16_HA,		31)
__(`	', `unused: 32.')
_(R_PPC64_SECTOFF,		33)
_(R_PPC64_SECTOFF_LO,		34)
_(R_PPC64_SECTOFF_HI,		35)
_(R_PPC64_SECTOFF_HA,		36)
_(R_PPC64_REL30,		37)
_(R_PPC64_ADDR64,		38)
_(R_PPC64_ADDR16_HIGHER,	39)
_(R_PPC64_ADDR16_HIGHERA,	40)
_(R_PPC64_ADDR16_HIGHEST,	41)
_(R_PPC64_ADDR16_HIGHESTA,	42)
_(R_PPC64_UADDR64,		43)
_(R_PPC64_REL64,		44)
_(R_PPC64_PLT64,		45)
_(R_PPC64_PLTREL64,		46)
_(R_PPC64_TOC16,		47)
_(R_PPC64_TOC16_LO,		48)
_(R_PPC64_TOC16_HI,		49)
_(R_PPC64_TOC16_HA,		50)
_(R_PPC64_TOC,			51)
_(R_PPC64_PLTGOT16,		52)
_(R_PPC64_PLTGOT16_LO,		53)
_(R_PPC64_PLTGOT16_HI,		54)
_(R_PPC64_PLTGOT16_HA,		55)
_(R_PPC64_ADDR16_DS,		56)
_(R_PPC64_ADDR16_LO_DS,		57)
_(R_PPC64_GOT16_DS,		58)
_(R_PPC64_GOT16_LO_DS,		59)
_(R_PPC64_PLT16_LO_DS,		60)
_(R_PPC64_SECTOFF_DS,		61)
_(R_PPC64_SECTOFF_LO_DS,	62)
_(R_PPC64_TOC16_DS,		63)
_(R_PPC64_TOC16_LO_DS,		64)
_(R_PPC64_PLTGOT16_DS,		65)
_(R_PPC64_PLTGOT16_LO_DS,	66)
_(R_PPC64_TLS,			67)
_(R_PPC64_DTPMOD64,		68)
_(R_PPC64_TPREL16,		69)
_(R_PPC64_TPREL16_LO,		70)
_(R_PPC64_TPREL16_HI,		71)
_(R_PPC64_TPREL16_HA,		72)
_(R_PPC64_TPREL64,		73)
_(R_PPC64_DTPREL16,		74)
_(R_PPC64_DTPREL16_LO,		75)
_(R_PPC64_DTPREL16_HI,		76)
_(R_PPC64_DTPREL16_HA,		77)
_(R_PPC64_DTPREL64,		78)
_(R_PPC64_GOT_TLSGD16,		79)
_(R_PPC64_GOT_TLSGD16_LO,	80)
_(R_PPC64_GOT_TLSGD16_HI,	81)
_(R_PPC64_GOT_TLSGD16_HA,	82)
_(R_PPC64_GOT_TLSLD16,		83)
_(R_PPC64_GOT_TLSLD16_LO,	84)
_(R_PPC64_GOT_TLSLD16_HI,	85)
_(R_PPC64_GOT_TLSLD16_HA,	86)
_(R_PPC64_GOT_TPREL16_DS,	87)
_(R_PPC64_GOT_TPREL16_LO_DS,	88)
_(R_PPC64_GOT_TPREL16_HI,	89)
_(R_PPC64_GOT_TPREL16_HA,	90)
_(R_PPC64_GOT_DTPREL16_DS,	91)
_(R_PPC64_GOT_DTPREL16_LO_DS,	92)
_(R_PPC64_GOT_DTPREL16_HI,	93)
_(R_PPC64_GOT_DTPREL16_HA,	94)
_(R_PPC64_TPREL16_DS,		95)
_(R_PPC64_TPREL16_LO_DS,	96)
_(R_PPC64_TPREL16_HIGHER,	97)
_(R_PPC64_TPREL16_HIGHERA,	98)
_(R_PPC64_TPREL16_HIGHEST,	99)
_(R_PPC64_TPREL16_HIGHESTA,	100)
_(R_PPC64_DTPREL16_DS,		101)
_(R_PPC64_DTPREL16_LO_DS,	102)
_(R_PPC64_DTPREL16_HIGHER,	103)
_(R_PPC64_DTPREL16_HIGHERA,	104)
_(R_PPC64_DTPREL16_HIGHEST,	105)
_(R_PPC64_DTPREL16_HIGHESTA,	106)
_(R_PPC64_TLSGD,		107)
_(R_PPC64_TLSLD,		108)
_(R_PPC64_TOCSAVE,		109)
_(R_PPC64_ADDR16_HIGH,		110)
_(R_PPC64_ADDR16_HIGHA,		111)
_(R_PPC64_TPREL16_HIGH,		112)
_(R_PPC64_TPREL16_HIGHA,	113)
_(R_PPC64_DTPREL16_HIGH,	114)
_(R_PPC64_DTPREL16_HIGHA,	115)
_(R_PPC64_REL24_NOTOC,		116)
_(R_PPC64_ADDR64_LOCAL,		117)
_(R_PPC64_ENTRY,		118)
_(R_PPC64_PLTSEQ,		119)
_(R_PPC64_PLTCALL,		120)
_(R_PPC64_PLTSEQ_NOTOC,		121)
_(R_PPC64_PLTCALL_NOTOC,	122)
_(R_PPC64_PCREL_OPT,		123)
__(`	', `unused: 124-127.')
_(R_PPC64_D34,			128)
_(R_PPC64_D34_LO,		129)
_(R_PPC64_D34_HI30,		130)
_(R_PPC64_D34_HA30,		131)
_(R_PPC64_PCREL34,		132)
_(R_PPC64_GOT_PCREL34,		133)
_(R_PPC64_PLT_PCREL34,		134)
_(R_PPC64_PLT_PCREL34_NOTOC,	135)
_(R_PPC64_ADDR16_HIGHER34,	136)
_(R_PPC64_ADDR16_HIGHERA34,	137)
_(R_PPC64_ADDR16_HIGHEST34,	138)
_(R_PPC64_ADDR16_HIGHESTA34,	139)
_(R_PPC64_REL16_HIGHER34,	140)
_(R_PPC64_REL16_HIGHERA34,	141)
_(R_PPC64_REL16_HIGHEST34,	142)
_(R_PPC64_REL16_HIGHESTA34,	143)
_(R_PPC64_D28,			144)
_(R_PPC64_PCREL28,		145)
_(R_PPC64_TPREL34,		146)
_(R_PPC64_DTPREL34,		147)
_(R_PPC64_GOT_TLSGD_PCREL34,	148)
_(R_PPC64_GOT_TLSLD_PCREL34,	149)
_(R_PPC64_GOT_TPREL_PCREL34,	150)
_(R_PPC64_GOT_DTPREL_PCREL34,	151)
__(`	', `unused: 152-239.')
_(R_PPC64_REL16_HIGH,		240)
_(R_PPC64_REL16_HIGHA,		241)
_(R_PPC64_REL16_HIGHER,		242)
_(R_PPC64_REL16_HIGHERA,	243)
_(R_PPC64_REL16_HIGHEST,	244)
_(R_PPC64_REL16_HIGHESTA,	245)
_(R_PPC64_REL16DX_HA,		246)
__(`	', `unused: 247.')
_(R_PPC64_IRELATIVE,		248)
_(R_PPC64_REL16,		249)
_(R_PPC64_REL16_LO,		250)
_(R_PPC64_REL16_HI,		251)
_(R_PPC64_REL16_HA,		252)
_(R_PPC64_GNU_VTINHERIT,	253)
_(R_PPC64_GNU_VTENTRY,		254)
')

define(`DEFINE_PPC64_OBSOLETE_RELOCATION_TYPES',`
_(R_PPC64_ADDR14_BRTAKEN,	8)
_(R_PPC64_ADDR14_BRNTAKEN,	9)
_(R_PPC64_REL14_BRTAKEN,	12)
_(R_PPC64_REL14_BRNTAKEN,	13)
_(R_PPC64_ADDR30,		37)
')

define(`DEFINE_RISCV_RELOCATION_TYPES',`
__(`EM_RISCV')
_(R_RISCV_NONE,			0)
_(R_RISCV_32,			1)
_(R_RISCV_64,			2)
_(R_RISCV_RELATIVE,		3)
_(R_RISCV_COPY,			4)
_(R_RISCV_JUMP_SLOT,		5)
_(R_RISCV_TLS_DTPMOD32,		6)
_(R_RISCV_TLS_DTPMOD64,		7)
_(R_RISCV_TLS_DTPREL32,		8)
_(R_RISCV_TLS_DTPREL64,		9)
_(R_RISCV_TLS_TPREL32,		10)
_(R_RISCV_TLS_TPREL64,		11)
_(R_RISCV_TLSDESC,		12)
__(`	', `unused: 13-15')
_(R_RISCV_BRANCH,		16)
_(R_RISCV_JAL,			17)
_(R_RISCV_CALL,			18)
_(R_RISCV_CALL_PLT,		19)
_(R_RISCV_GOT_HI20,		20)
_(R_RISCV_TLS_GOT_HI20,		21)
_(R_RISCV_TLS_GD_HI20,		22)
_(R_RISCV_PCREL_HI20,		23)
_(R_RISCV_PCREL_LO12_I,		24)
_(R_RISCV_PCREL_LO12_S,		25)
_(R_RISCV_HI20,			26)
_(R_RISCV_LO12_I,		27)
_(R_RISCV_LO12_S,		28)
_(R_RISCV_TPREL_HI20,		29)
_(R_RISCV_TPREL_LO12_I,		30)
_(R_RISCV_TPREL_LO12_S,		31)
_(R_RISCV_TPREL_ADD,		32)
_(R_RISCV_ADD8,			33)
_(R_RISCV_ADD16,		34)
_(R_RISCV_ADD32,		35)
_(R_RISCV_ADD64,		36)
_(R_RISCV_SUB8,			37)
_(R_RISCV_SUB16,		38)
_(R_RISCV_SUB32,		39)
_(R_RISCV_SUB64,		40)
_(R_RISCV_GOT32_PCREL,		41)
__(`	', `reserved: 42')
_(R_RISCV_ALIGN,		43)
_(R_RISCV_RVC_BRANCH,		44)
_(R_RISCV_RVC_JUMP,		45)
__(`	', `reserved: 46-50')
_(R_RISCV_RELAX,		51)
_(R_RISCV_SUB6,			52)
_(R_RISCV_SET6,			53)
_(R_RISCV_SET8,			54)
_(R_RISCV_SET16,		55)
_(R_RISCV_SET32,		56)
_(R_RISCV_32_PCREL,		57)
_(R_RISCV_IRELATIVE,		58)
_(R_RISCV_PLT32,		59)
_(R_RISCV_SET_ULEB128,		60)
_(R_RISCV_SUB_ULEB128,		61)
_(R_RISCV_TLSDESC_HI20,		62)
_(R_RISCV_TLSDESC_LOAD_LO12,	63)
_(R_RISCV_TLSDESC_ADD_LO12,	64)
_(R_RISCV_TLSDESC_CALL,		65)
__(`	', `reserved: 66-190')
_(R_RISCV_VENDOR,		191)
__(`	', `reserved: 192-255')
')

define(`DEFINE_RISCV_OBSOLETE_RELOCATION_TYPES',`
_(R_RISCV_GNU_VTINHERIT,	41)
_(R_RISCV_GNU_VTENTRY,		42)
_(R_RISCV_RVC_LUI,		46)
_(R_RISCV_GPREL_I,		47)
_(R_RISCV_GPREL_S,		48)
_(R_RISCV_TPREL_I,		49)
_(R_RISCV_TPREL_S,		50)
')

define(`DEFINE_S390_RELOCATION_TYPES',`
__(`EM_S390')
_(R_390_NONE,		0)
_(R_390_8,		1)
_(R_390_12,		2)
_(R_390_16,		3)
_(R_390_32,		4)
_(R_390_PC32,		5)
_(R_390_GOT12,		6)
_(R_390_GOT32,		7)
_(R_390_PLT32,		8)
_(R_390_COPY,		9)
_(R_390_GLOB_DAT,	10)
_(R_390_JMP_SLOT,	11)
_(R_390_RELATIVE,	12)
_(R_390_GOTOFF,		13)
_(R_390_GOTPC,		14)
_(R_390_GOT16,		15)
_(R_390_PC16,		16)
_(R_390_PC16DBL,	17)
_(R_390_PLT16DBL,	18)
_(R_390_PC32DBL,	19)
_(R_390_PLT32DBL,	20)
_(R_390_GOTPCDBL,	21)
_(R_390_64,		22)
_(R_390_PC64,		23)
_(R_390_GOT64,		24)
_(R_390_PLT64,		25)
_(R_390_GOTENT,		26)
')

define(`DEFINE_SPARC_RELOCATION_TYPES',`
__(`EM_SPARC')
_(R_SPARC_NONE,		0)
_(R_SPARC_8,		1)
_(R_SPARC_16,		2)
_(R_SPARC_32, 		3)
_(R_SPARC_DISP8,	4)
_(R_SPARC_DISP16,	5)
_(R_SPARC_DISP32,	6)
_(R_SPARC_WDISP30,	7)
_(R_SPARC_WDISP22,	8)
_(R_SPARC_HI22,		9)
_(R_SPARC_22,		10)
_(R_SPARC_13,		11)
_(R_SPARC_LO10,		12)
_(R_SPARC_GOT10,	13)
_(R_SPARC_GOT13,	14)
_(R_SPARC_GOT22,	15)
_(R_SPARC_PC10,		16)
_(R_SPARC_PC22,		17)
_(R_SPARC_WPLT30,	18)
_(R_SPARC_COPY,		19)
_(R_SPARC_GLOB_DAT,	20)
_(R_SPARC_JMP_SLOT,	21)
_(R_SPARC_RELATIVE,	22)
_(R_SPARC_UA32,		23)
_(R_SPARC_PLT32,	24)
_(R_SPARC_HIPLT22,	25)
_(R_SPARC_LOPLT10,	26)
_(R_SPARC_PCPLT32,	27)
_(R_SPARC_PCPLT22,	28)
_(R_SPARC_PCPLT10,	29)
_(R_SPARC_10,		30)
_(R_SPARC_11,		31)
_(R_SPARC_64,		32)
_(R_SPARC_OLO10,	33)
_(R_SPARC_HH22,		34)
_(R_SPARC_HM10,		35)
_(R_SPARC_LM22,		36)
_(R_SPARC_PC_HH22,	37)
_(R_SPARC_PC_HM10,	38)
_(R_SPARC_PC_LM22,	39)
_(R_SPARC_WDISP16,	40)
_(R_SPARC_WDISP19,	41)
__(`	', `unused: 42')
_(R_SPARC_7,		43)
_(R_SPARC_5,		44)
_(R_SPARC_6,		45)
_(R_SPARC_DISP64,	46)
_(R_SPARC_PLT64,	47)
_(R_SPARC_HIX22,	48)
_(R_SPARC_LOX10,	49)
_(R_SPARC_H44,		50)
_(R_SPARC_M44,		51)
_(R_SPARC_L44,		52)
_(R_SPARC_REGISTER,	53)
_(R_SPARC_UA64,		54)
_(R_SPARC_UA16,		55)
_(R_SPARC_TLS_GD_HI22,	56)
_(R_SPARC_TLS_GD_LO10,	57)
_(R_SPARC_TLS_GD_ADD,	58)
_(R_SPARC_TLS_GD_CALL,	59)
_(R_SPARC_TLS_LDM_HI22,	60)
_(R_SPARC_TLS_LDM_LO10,	61)
_(R_SPARC_TLS_LDM_ADD,	62)
_(R_SPARC_TLS_LDM_CALL,	63)
_(R_SPARC_TLS_LDO_HIX22, 64)
_(R_SPARC_TLS_LDO_LOX10, 65)
_(R_SPARC_TLS_LDO_ADD,	66)
_(R_SPARC_TLS_IE_HI22,	67)
_(R_SPARC_TLS_IE_LO10,	68)
_(R_SPARC_TLS_IE_LD,	69)
_(R_SPARC_TLS_IE_LDX,	70)
_(R_SPARC_TLS_IE_ADD,	71)
_(R_SPARC_TLS_LE_HIX22,	72)
_(R_SPARC_TLS_LE_LOX10,	73)
_(R_SPARC_TLS_DTPMOD32,	74)
_(R_SPARC_TLS_DTPMOD64,	75)
_(R_SPARC_TLS_DTPOFF32,	76)
_(R_SPARC_TLS_DTPOFF64,	77)
_(R_SPARC_TLS_TPOFF32,	78)
_(R_SPARC_TLS_TPOFF64,	79)
_(R_SPARC_GOTDATA_HIX22, 80)
_(R_SPARC_GOTDATA_LOX10, 81)
_(R_SPARC_GOTDATA_OP_HIX22, 82)
_(R_SPARC_GOTDATA_OP_LOX10, 83)
_(R_SPARC_GOTDATA_OP,	84)
_(R_SPARC_H34,		85)
_(R_SPARC_SIZE32,	86)
_(R_SPARC_SIZE64,	87)
_(R_SPARC_WDISP10,	88)
')

define(`DEFINE_SPARC_OBSOLETE_RELOCATION_TYPES',`
_(R_SPARC_GLOB_JMP,	42)
')

define(`DEFINE_VAX_RELOCATION_TYPES',`
__(`EM_VAX')
_(R_VAX_NONE,           0)
_(R_VAX_32,             1)
_(R_VAX_16,             2)
_(R_VAX_8,              3)
_(R_VAX_PC32,           4)
_(R_VAX_PC16,           5)
_(R_VAX_PC8,            6)
_(R_VAX_GOT32,          7)
_(R_VAX_PLT32,         13)
_(R_VAX_COPY,          19)
_(R_VAX_GLOB_DAT,      20)
_(R_VAX_JMP_SLOT,      21)
_(R_VAX_RELATIVE,      22)
')

define(`DEFINE_X86_64_RELOCATION_TYPES',`
__(`EM_X86_64')
_(R_X86_64_NONE,	0)
_(R_X86_64_64,		1)
_(R_X86_64_PC32,	2)
_(R_X86_64_GOT32,	3)
_(R_X86_64_PLT32,	4)
_(R_X86_64_COPY,	5)
_(R_X86_64_GLOB_DAT,	6)
_(R_X86_64_JUMP_SLOT,	7)
_(R_X86_64_RELATIVE,	8)
_(R_X86_64_GOTPCREL,	9)
_(R_X86_64_32,		10)
_(R_X86_64_32S,		11)
_(R_X86_64_16,		12)
_(R_X86_64_PC16,	13)
_(R_X86_64_8,		14)
_(R_X86_64_PC8,		15)
_(R_X86_64_DTPMOD64,	16)
_(R_X86_64_DTPOFF64,	17)
_(R_X86_64_TPOFF64,	18)
_(R_X86_64_TLSGD,	19)
_(R_X86_64_TLSLD,	20)
_(R_X86_64_DTPOFF32,	21)
_(R_X86_64_GOTTPOFF,	22)
_(R_X86_64_TPOFF32,	23)
_(R_X86_64_PC64,	24)
_(R_X86_64_GOTOFF64,	25)
_(R_X86_64_GOTPC32,	26)
_(R_X86_64_GOT64,	27)
_(R_X86_64_GOTPCREL64,	28)
_(R_X86_64_GOTPC64,	29)
__(`	', `deprecated: 30')
_(R_X86_64_PLTOFF64,	31)
_(R_X86_64_SIZE32,	32)
_(R_X86_64_SIZE64,	33)
_(R_X86_64_GOTPC32_TLSDESC,	34)
_(R_X86_64_TLSDESC_CALL,	35)
_(R_X86_64_TLSDESC,	36)
_(R_X86_64_IRELATIVE,	37)
_(R_X86_64_RELATIVE64,	38)
__(`	', `deprecated: 39-40')
_(R_X86_64_GOTPCRELX,	41)
_(R_X86_64_REX_GOTPCRELX,	42)
_(R_X86_64_CODE_4_GOTPCRELX,	43)
_(R_X86_64_CODE_4_GOTTPOFF,	44)
_(R_X86_64_CODE_4_GOTPC32_TLSDESC,	45)
_(R_X86_64_CODE_5_GOTPCRELX,	46)
_(R_X86_64_CODE_5_GOTTPOFF,	47)
_(R_X86_64_CODE_5_GOTPC32_TLSDESC,	48)
_(R_X86_64_CODE_6_GOTPCRELX,	49)
_(R_X86_64_CODE_6_GOTTPOFF,	50)
_(R_X86_64_CODE_6_GOTPC32_TLSDESC,	51)
')

define(`DEFINE_X86_64_OBSOLETE_RELOCATION_TYPES', `
_(R_X86_64_GOTPLT64,	30)
_(R_X86_64_PC32_BND,	39)
_(R_X86_64_PLT32_BND,	40)
')

# These are the symbols used in the Sun ``Linkers and Loaders
# Guide'', Document No: 817-1984-17.  See the X86_64 relocations
# list above for the spellings used in the ELF specification.
define(`DEFINE_X86_64_RELOCATION_TYPE_SYNONYMS',`
_(R_AMD64_NONE,		R_X86_64_NONE)
_(R_AMD64_64,		R_X86_64_64)
_(R_AMD64_PC32,		R_X86_64_PC32)
_(R_AMD64_GOT32,	R_X86_64_GOT32)
_(R_AMD64_PLT32,	R_X86_64_PLT32)
_(R_AMD64_COPY,		R_X86_64_COPY)
_(R_AMD64_GLOB_DAT,	R_X86_64_GLOB_DAT)
_(R_AMD64_JUMP_SLOT,	R_X86_64_JUMP_SLOT)
_(R_AMD64_RELATIVE,	R_X86_64_RELATIVE)
_(R_AMD64_GOTPCREL,	R_X86_64_GOTPCREL)
_(R_AMD64_32,		R_X86_64_32)
_(R_AMD64_32S,		R_X86_64_32S)
_(R_AMD64_16,		R_X86_64_16)
_(R_AMD64_PC16,		R_X86_64_PC16)
_(R_AMD64_8,		R_X86_64_8)
_(R_AMD64_PC8,		R_X86_64_PC8)
_(R_AMD64_PC64,		R_X86_64_PC64)
_(R_AMD64_GOTOFF64,	R_X86_64_GOTOFF64)
_(R_AMD64_GOTPC32,	R_X86_64_PC32)
')

define(`DEFINE_RELOCATION_TYPES',`
DEFINE_386_RELOCATION_TYPES()
DEFINE_AARCH64_RELOCATION_TYPES()
DEFINE_ARM_RELOCATION_TYPES()
DEFINE_IA_64_RELOCATION_TYPES()
DEFINE_LOONGARCH_RELOCATION_TYPES()
DEFINE_MIPS_RELOCATION_TYPES()
DEFINE_PPC64_RELOCATION_TYPES()
DEFINE_PPC_RELOCATION_TYPES()
DEFINE_RISCV_RELOCATION_TYPES()
DEFINE_S390_RELOCATION_TYPES()
DEFINE_SPARC_RELOCATION_TYPES()
DEFINE_VAX_RELOCATION_TYPES()
DEFINE_X86_64_RELOCATION_TYPES()
')

# Obsolete relocation types.
define(`DEFINE_OBSOLETE_RELOCATION_TYPES',`dnl
DEFINE_ARM_OBSOLETE_RELOCATION_TYPES()
DEFINE_PPC64_OBSOLETE_RELOCATION_TYPES()
DEFINE_RISCV_OBSOLETE_RELOCATION_TYPES()
DEFINE_SPARC_OBSOLETE_RELOCATION_TYPES()
DEFINE_X86_64_OBSOLETE_RELOCATION_TYPES()
')

# Alternate spellings for relocation types.
define(`DEFINE_RELOCATION_TYPE_SYNONYMS',`
DEFINE_386_RELOCATION_TYPE_SYNONYMS()
DEFINE_AARCH64_RELOCATION_TYPE_SYNONYMS()
DEFINE_IA_64_RELOCATION_TYPE_SYNONYMS()
DEFINE_MIPS_RELOCATION_TYPE_SYNONYMS()
DEFINE_X86_64_RELOCATION_TYPE_SYNONYMS()
')

define(`DEFINE_LL_FLAGS',`
_(LL_NONE,			0,
	`no flags')
_(LL_EXACT_MATCH,		0x1,
	`require an exact match')
_(LL_IGNORE_INT_VER,	0x2,
	`ignore version incompatibilities')
_(LL_REQUIRE_MINOR,	0x4,
	`')
_(LL_EXPORTS,		0x8,
	`')
_(LL_DELAY_LOAD,		0x10,
	`')
_(LL_DELTA,		0x20,
	`')
')

#
# Note tags
#
define(`DEFINE_NOTE_ENTRY_TYPES',`
_(NT_ABI_TAG,			1,
	`Tag indicating the ABI')
_(NT_GNU_HWCAP,			2,
	`Hardware capabilities')
_(NT_GNU_BUILD_ID,		3,
	`Build id, set by ld(1)')
_(NT_GNU_GOLD_VERSION,		4,
	`Version number of the GNU gold linker')
_(NT_PRSTATUS,			1,
	`Process status')
_(NT_FPREGSET,			2,
	`Floating point information')
_(NT_PRPSINFO,			3,
	`Process information')
_(NT_AUXV,			6,
	`Auxiliary vector')
_(NT_PRXFPREG,		0x46E62B7FU,
	`Linux user_xfpregs structure')
_(NT_PSTATUS,			10,
	`Linux process status')
_(NT_FPREGS,			12,
	`Linux floating point regset')
_(NT_PSINFO,			13,
	`Linux process information')
_(NT_LWPSTATUS,			16,
	`Linux lwpstatus_t type')
_(NT_LWPSINFO,			17,
	`Linux lwpinfo_t type')
_(NT_FREEBSD_NOINIT_TAG,	2,
	`FreeBSD no .init tag')
_(NT_FREEBSD_ARCH_TAG,		3,
	`FreeBSD arch tag')
_(NT_FREEBSD_FEATURE_CTL,	4,
	`FreeBSD feature control')
')

# Aliases for the ABI tag.
define(`DEFINE_NOTE_ENTRY_ALIASES',`
_(NT_FREEBSD_ABI_TAG,	NT_ABI_TAG)
_(NT_GNU_ABI_TAG,		NT_ABI_TAG)
_(NT_NETBSD_IDENT,	NT_ABI_TAG)
_(NT_OPENBSD_IDENT,	NT_ABI_TAG)
')

#
# Option kinds.
#
define(`DEFINE_OPTION_KINDS',`
_(ODK_NULL,       0,
	`undefined')
_(ODK_REGINFO,    1,
	`register usage info')
_(ODK_EXCEPTIONS, 2,
	`exception processing info')
_(ODK_PAD,        3,
	`section padding')
_(ODK_HWPATCH,    4,
	`hardware patch applied')
_(ODK_FILL,       5,
	`fill value used by linker')
_(ODK_TAGS,       6,
	`reserved space for tools')
_(ODK_HWAND,      7,
	`hardware AND patch applied')
_(ODK_HWOR,       8,
	`hardware OR patch applied')
_(ODK_GP_GROUP,   9,
	`GP group to use for text/data sections')
_(ODK_IDENT,      10,
	`ID information')
_(ODK_PAGESIZE,   11,
	`page size information')
')

#
# ODK_EXCEPTIONS info field masks.
#
define(`DEFINE_OPTION_EXCEPTIONS',`
_(OEX_FPU_MIN,    0x0000001FU,
	`minimum FPU exception which must be enabled')
_(OEX_FPU_MAX,    0x00001F00U,
	`maximum FPU exception which can be enabled')
_(OEX_PAGE0,      0x00010000U,
	`page zero must be mapped')
_(OEX_SMM,        0x00020000U,
	`run in sequential memory mode')
_(OEX_PRECISEFP,  0x00040000U,
	`run in precise FP exception mode')
_(OEX_DISMISS,    0x00080000U,
	`dismiss invalid address traps')
')

#
# ODK_PAD info field masks.
#
define(`DEFINE_OPTION_PADS',`
_(OPAD_PREFIX,   0x0001)
_(OPAD_POSTFIX,  0x0002)
_(OPAD_SYMBOL,   0x0004)
')

#
# ODK_HWPATCH info field masks and ODK_HWAND/ODK_HWOR
# info field and hwp_flags[12] masks.
#
define(`DEFINE_ODK_HWPATCH_MASKS',`
_(OHW_R4KEOP,     0x00000001U,
	`patch for R4000 branch at end-of-page bug')
_(OHW_R8KPFETCH,  0x00000002U,
	`R8000 prefetch bug may occur')
_(OHW_R5KEOP,     0x00000004U,
	`patch for R5000 branch at end-of-page bug')
_(OHW_R5KCVTL,    0x00000008U,
	`R5000 cvt.[ds].l bug: clean == 1')
_(OHW_R10KLDL,    0x00000010U,
	`need patch for R10000 misaligned load')
_(OHWA0_R4KEOP_CHECKED, 0x00000001U,
	`object checked for R4000 end-of-page bug')
_(OHWA0_R4KEOP_CLEAN, 0x00000002U,
	`object verified clean for R4000 end-of-page bug')
_(OHWO0_FIXADE,   0x00000001U,
	`object requires call to fixade')
')

#
# ODK_IDENT/ODK_GP_GROUP info field masks.
#
define(`DEFINE_ODK_GP_MASKS',`
_(OGP_GROUP,      0x0000FFFFU,
	`GP group number')
_(OGP_SELF,       0x00010000U,
	`GP group is self-contained')
')

# MIPS ABI related constants.
define(`DEFINE_MIPS_ABIS',`
_(E_MIPS_ABI_O32,		0x00001000,
	`MIPS 32 bit ABI (UCODE)')
_(E_MIPS_ABI_O64,		0x00002000,
	`UCODE MIPS 64 bit ABI')
_(E_MIPS_ABI_EABI32,	0x00003000,
	`Embedded ABI for 32-bit')
_(E_MIPS_ABI_EABI64,	0x00004000,
	`Embedded ABI for 64-bit')
')