/* This file is part of Libelfpp. Libelfpp is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Libelfpp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with Libelfpp. If not, see . Based on part of the GNU C Library (LGPL). Copyright (C) 1995-2003,2004,2005,2006,2007 Free Software Foundation, Inc. */ #ifndef ELFPP_BITS_H_ #define ELFPP_BITS_H_ #include /// Provide bit mask operations for an enum type #define ELF_ENUM_OPS(type) \ \ inline type operator| (type a, type b) \ { \ return (type)((int)a | (int)b); \ } \ \ inline type operator& (type a, type b) \ { \ return (type)((int)a & (int)b); \ } \ \ inline type operator~ (type a) \ { \ return (type)(~(int)a); \ } namespace elfpp { /* Standard ELF types. */ /** @multiple Type for a 16-bit quantity. */ typedef uint16_t Elf32_Half; typedef uint16_t Elf64_Half; /** @multiple Type for signed and unsigned 32-bit quantities. */ typedef uint32_t Elf32_Word; typedef int32_t Elf32_Sword; typedef uint32_t Elf64_Word; typedef int32_t Elf64_Sword; /** @multiple Type for signed and unsigned 64-bit quantities. */ typedef uint64_t Elf32_Xword; typedef int64_t Elf32_Sxword; typedef uint64_t Elf64_Xword; typedef int64_t Elf64_Sxword; /** @multiple Type of addresses. */ typedef uint32_t Elf32_Addr; typedef uint64_t Elf64_Addr; /** @multiple Type of file offsets. */ typedef uint32_t Elf32_Off; typedef uint64_t Elf64_Off; /** @multiple Type for section indices, which are 16-bit quantities. */ typedef uint16_t Elf32_Section; typedef uint16_t Elf64_Section; /** @multiple Type for version symbol information. */ typedef Elf32_Half Elf32_Versym; typedef Elf64_Half Elf64_Versym; /** @multiple The ELF file header. This appears at the start of every ELF file. */ static const unsigned int EI_NIDENT = 16; struct Elf32_Ehdr { unsigned char e_ident[EI_NIDENT]; //< Magic number and other info Elf32_Half e_type; //< Object file type Elf32_Half e_machine; //< Architecture Elf32_Word e_version; //< Object file version Elf32_Addr e_entry; //< Entry point virtual address Elf32_Off e_phoff; //< Program header table file offset Elf32_Off e_shoff; //< Section header table file offset Elf32_Word e_flags; //< Processor-specific flags Elf32_Half e_ehsize; //< ELF header size in bytes Elf32_Half e_phentsize; //< Program header table entry size Elf32_Half e_phnum; //< Program header table entry count Elf32_Half e_shentsize; //< Section header table entry size Elf32_Half e_shnum; //< Section header table entry count Elf32_Half e_shstrndx; //< Section header string table index }; struct Elf64_Ehdr { unsigned char e_ident[EI_NIDENT]; //< Magic number and other info Elf64_Half e_type; //< Object file type Elf64_Half e_machine; //< Architecture Elf64_Word e_version; //< Object file version Elf64_Addr e_entry; //< Entry point virtual address Elf64_Off e_phoff; //< Program header table file offset Elf64_Off e_shoff; //< Section header table file offset Elf64_Word e_flags; //< Processor-specific flags Elf64_Half e_ehsize; //< ELF header size in bytes Elf64_Half e_phentsize; //< Program header table entry size Elf64_Half e_phnum; //< Program header table entry count Elf64_Half e_shentsize; //< Section header table entry size Elf64_Half e_shnum; //< Section header table entry count Elf64_Half e_shstrndx; //< Section header string table index }; /* Fields in the e_ident array. The EI_* macros are indices into the array. The macros under each EI_* macro are the values the byte may have. */ /** @multiple Conglomeration of the identification bytes, for easy testing as a word. */ #define ELFMAG "\177ELF" static const unsigned int EI_CLASS = 4; //< File class byte index enum ei_class_e { ELFCLASSNONE = 0, //< Invalid class ELFCLASS32 = 1, //< 32-bit objects ELFCLASS64 = 2, //< 64-bit objects ELFCLASSNUM = 3, }; static const unsigned int EI_DATA = 5; //< Data encoding byte index enum ei_data_e { ELFDATANONE = 0, //< Invalid data encoding ELFDATA2LSB = 1, //< 2's complement, little endian ELFDATA2MSB = 2, //< 2's complement, big endian ELFDATANUM = 3, }; static const unsigned int EI_VERSION = 6; //< File version byte index Value must be EV_CURRENT static const unsigned int EI_OSABI = 7; //< OS ABI identification enum ei_osabi_e { ELFOSABI_NONE = 0, //< UNIX System V ABI ELFOSABI_SYSV = 0, //< Alias. ELFOSABI_HPUX = 1, //< HP-UX ELFOSABI_NETBSD = 2, //< NetBSD. ELFOSABI_LINUX = 3, //< Linux. ELFOSABI_SOLARIS = 6, //< Sun Solaris. ELFOSABI_AIX = 7, //< IBM AIX. ELFOSABI_IRIX = 8, //< SGI Irix. ELFOSABI_FREEBSD = 9, //< FreeBSD. ELFOSABI_TRU64 = 10, //< Compaq TRU64 UNIX. ELFOSABI_MODESTO = 11, //< Novell Modesto. ELFOSABI_OPENBSD = 12, //< OpenBSD. ELFOSABI_ARM = 97, //< ARM ELFOSABI_STANDALONE = 255, //< Standalone (embedded) application }; static const unsigned int EI_ABIVERSION = 8; //< ABI version static const unsigned int EI_PAD = 9; //< Byte index of padding bytes /** Legal values for e_type (object file type). */ enum e_type_e { ET_NONE = 0, //< No file type ET_REL = 1, //< Relocatable file ET_EXEC = 2, //< Executable file ET_DYN = 3, //< Shared object file ET_CORE = 4, //< Core file ET_NUM = 5, //< Number of defined types ET_LOOS = 0xfe00, //< OS-specific range start ET_HIOS = 0xfeff, //< OS-specific range end ET_LOPROC = 0xff00, //< Processor-specific range start ET_HIPROC = 0xffff, //< Processor-specific range end }; /** Legal values for e_machine (architecture). */ enum e_machine_e { EM_NONE = 0, //< No machine EM_M32 = 1, //< AT&T WE 32100 EM_SPARC = 2, //< SUN SPARC EM_386 = 3, //< Intel 80386 EM_68K = 4, //< Motorola m68k family EM_88K = 5, //< Motorola m88k family EM_860 = 7, //< Intel 80860 EM_MIPS = 8, //< MIPS R3000 big-endian EM_S370 = 9, //< IBM System/370 EM_MIPS_RS3_LE = 10, //< MIPS R3000 little-endian EM_PARISC = 15, //< HPPA EM_VPP500 = 17, //< Fujitsu VPP500 EM_SPARC32PLUS = 18, //< Sun's "v8plus" EM_960 = 19, //< Intel 80960 EM_PPC = 20, //< PowerPC EM_PPC64 = 21, //< PowerPC 64-bit EM_S390 = 22, //< IBM S390 EM_V800 = 36, //< NEC V800 series EM_FR20 = 37, //< Fujitsu FR20 EM_RH32 = 38, //< TRW RH-32 EM_RCE = 39, //< Motorola RCE EM_ARM = 40, //< ARM EM_FAKE_ALPHA = 41, //< Digital Alpha EM_SH = 42, //< Hitachi SH EM_SPARCV9 = 43, //< SPARC v9 64-bit EM_TRICORE = 44, //< Siemens Tricore EM_ARC = 45, //< Argonaut RISC Core EM_H8_300 = 46, //< Hitachi H8/300 EM_H8_300H = 47, //< Hitachi H8/300H EM_H8S = 48, //< Hitachi H8S EM_H8_500 = 49, //< Hitachi H8/500 EM_IA_64 = 50, //< Intel Merced EM_MIPS_X = 51, //< Stanford MIPS-X EM_COLDFIRE = 52, //< Motorola Coldfire EM_68HC12 = 53, //< Motorola M68HC12 EM_MMA = 54, //< Fujitsu MMA Multimedia Accelerator EM_PCP = 55, //< Siemens PCP EM_NCPU = 56, //< Sony nCPU embeeded RISC EM_NDR1 = 57, //< Denso NDR1 microprocessor EM_STARCORE = 58, //< Motorola Start*Core processor EM_ME16 = 59, //< Toyota ME16 processor EM_ST100 = 60, //< STMicroelectronic ST100 processor EM_TINYJ = 61, //< Advanced Logic Corp. Tinyj emb.fam EM_X86_64 = 62, //< AMD x86-64 architecture EM_PDSP = 63, //< Sony DSP Processor EM_FX66 = 66, //< Siemens FX66 microcontroller EM_ST9PLUS = 67, //< STMicroelectronics ST9+ 8/16 mc EM_ST7 = 68, //< STmicroelectronics ST7 8 bit mc EM_68HC16 = 69, //< Motorola MC68HC16 microcontroller EM_68HC11 = 70, //< Motorola MC68HC11 microcontroller EM_68HC08 = 71, //< Motorola MC68HC08 microcontroller EM_68HC05 = 72, //< Motorola MC68HC05 microcontroller EM_SVX = 73, //< Silicon Graphics SVx EM_ST19 = 74, //< STMicroelectronics ST19 8 bit mc EM_VAX = 75, //< Digital VAX EM_CRIS = 76, //< Axis Communications 32-bit embedded processor EM_JAVELIN = 77, //< Infineon Technologies 32-bit embedded processor EM_FIREPATH = 78, //< Element 14 64-bit DSP Processor EM_ZSP = 79, //< LSI Logic 16-bit DSP Processor EM_MMIX = 80, //< Donald Knuth's educational 64-bit processor EM_HUANY = 81, //< Harvard University machine-independent object files EM_PRISM = 82, //< SiTera Prism EM_AVR = 83, //< Atmel AVR 8-bit microcontroller EM_FR30 = 84, //< Fujitsu FR30 EM_D10V = 85, //< Mitsubishi D10V EM_D30V = 86, //< Mitsubishi D30V EM_V850 = 87, //< NEC v850 EM_M32R = 88, //< Mitsubishi M32R EM_MN10300 = 89, //< Matsushita MN10300 EM_MN10200 = 90, //< Matsushita MN10200 EM_PJ = 91, //< picoJava EM_OPENRISC = 92, //< OpenRISC 32-bit embedded processor EM_ARC_A5 = 93, //< ARC Cores Tangent-A5 EM_XTENSA = 94, //< Tensilica Xtensa Architecture EM_NUM = 95, /* If it is necessary to assign new unofficial EM_* values, please pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision with official or non-GNU unofficial values. */ EM_ALPHA = 0x9026, }; /** Legal values for e_version (version). */ static const unsigned int EV_NONE = 0; //< Invalid ELF version static const unsigned int EV_CURRENT = 1; //< Current version static const unsigned int EV_NUM = 2; /** 32 bits section header. */ struct Elf32_Shdr { Elf32_Word sh_name; //< Section name (string tbl index) Elf32_Word sh_type; //< Section type Elf32_Word sh_flags; //< Section flags Elf32_Addr sh_addr; //< Section virtual addr at execution Elf32_Off sh_offset; //< Section file offset Elf32_Word sh_size; //< Section size in bytes Elf32_Word sh_link; //< Link to another section Elf32_Word sh_info; //< Additional section information Elf32_Word sh_addralign; //< Section alignment Elf32_Word sh_entsize; //< Entry size if section holds table }; /** 64 bits section header. */ struct Elf64_Shdr { Elf64_Word sh_name; //< Section name (string tbl index) Elf64_Word sh_type; //< Section type Elf64_Xword sh_flags; //< Section flags Elf64_Addr sh_addr; //< Section virtual addr at execution Elf64_Off sh_offset; //< Section file offset Elf64_Xword sh_size; //< Section size in bytes Elf64_Word sh_link; //< Link to another section Elf64_Word sh_info; //< Additional section information Elf64_Xword sh_addralign; //< Section alignment Elf64_Xword sh_entsize; //< Entry size if section holds table }; /** Special section indices. */ #define SHN_UNDEF 0 //< Undefined section #define SHN_LORESERVE 0xff00 //< Start of reserved indices #define SHN_LOPROC 0xff00 //< Start of processor-specific #define SHN_BEFORE 0xff00 //< Order section before all others (Solaris). #define SHN_AFTER 0xff01 //< Order section after all others (Solaris). #define SHN_HIPROC 0xff1f //< End of processor-specific #define SHN_LOOS 0xff20 //< Start of OS-specific #define SHN_HIOS 0xff3f //< End of OS-specific #define SHN_ABS 0xfff1 //< Associated symbol is absolute #define SHN_COMMON 0xfff2 //< Associated symbol is common #define SHN_XINDEX 0xffff //< Index is in extra table. #define SHN_HIRESERVE 0xffff //< End of reserved indices /** Legal values for sh_type (section type). */ enum sh_type_e { SHT_NULL = 0, //< Section header table entry unused SHT_PROGBITS = 1, //< Program data SHT_SYMTAB = 2, //< Symbol table SHT_STRTAB = 3, //< String table SHT_RELA = 4, //< Relocation entries with addends SHT_HASH = 5, //< Symbol hash table SHT_DYNAMIC = 6, //< Dynamic linking information SHT_NOTE = 7, //< Notes SHT_NOBITS = 8, //< Program space with no data (bss) SHT_REL = 9, //< Relocation entries, no addends SHT_SHLIB = 10, //< Reserved SHT_DYNSYM = 11, //< Dynamic linker symbol table SHT_INIT_ARRAY = 14, //< Array of constructors SHT_FINI_ARRAY = 15, //< Array of destructors SHT_PREINIT_ARRAY = 16, //< Array of pre-constructors SHT_GROUP = 17, //< Section group SHT_SYMTAB_SHNDX = 18, //< Extended section indeces SHT_NUM = 19, //< Number of defined types. SHT_LOOS = 0x60000000, //< Start OS-specific. SHT_GNU_HASH = 0x6ffffff6, //< GNU-style hash table. SHT_GNU_LIBLIST = 0x6ffffff7, //< Prelink library list SHT_CHECKSUM = 0x6ffffff8, //< Checksum for DSO content. SHT_LOSUNW = 0x6ffffffa, //< Sun-specific low bound. SHT_SUNW_move = 0x6ffffffa, SHT_SUNW_COMDAT = 0x6ffffffb, SHT_SUNW_syminfo = 0x6ffffffc, SHT_GNU_verdef = 0x6ffffffd, //< Version definition section. SHT_GNU_verneed = 0x6ffffffe, //< Version needs section. SHT_GNU_versym = 0x6fffffff, //< Version symbol table. SHT_HISUNW = 0x6fffffff, //< Sun-specific high bound. SHT_HIOS = 0x6fffffff, //< End OS-specific type SHT_LOPROC = 0x70000000, //< Start of processor-specific SHT_HIPROC = 0x7fffffff, //< End of processor-specific SHT_LOUSER = 0x80000000, //< Start of application-specific SHT_HIUSER = 0x8fffffff, //< End of application-specific }; /** Legal values for sh_flags (section flags). */ enum sh_flags_e { SHF_NONE = 0, SHF_WRITE = (1 << 0), //< Writable SHF_ALLOC = (1 << 1), //< Occupies memory during execution SHF_EXECINSTR = (1 << 2), //< Executable SHF_MERGE = (1 << 4), //< Might be merged SHF_STRINGS = (1 << 5), //< Contains nul-terminated strings SHF_INFO_LINK = (1 << 6), //< `sh_info' contains SHT index SHF_LINK_ORDER = (1 << 7), //< Preserve order after combining SHF_OS_NONCONFORMING = (1 << 8), //< Non-standard OS specific handling required SHF_GROUP = (1 << 9), //< Section is member of a group. SHF_TLS = (1 << 10), //< Section hold thread-local data. SHF_MASKOS = 0x0ff00000, //< OS-specific. SHF_MASKPROC = 0xf0000000, //< Processor-specific SHF_ORDERED = (1 << 30), //< Special ordering requirement (Solaris). SHF_EXCLUDE = (1 << 31), //< Section is excluded unless referenced or allocated (Solaris). }; ELF_ENUM_OPS(sh_flags_e) /** Section group handling. */ static const unsigned int GRP_COMDAT = 0x1; //< Mark group as COMDAT. /** 32 bits symbol table entry. */ struct Elf32_Sym { Elf32_Word st_name; //< Symbol name (string tbl index) Elf32_Addr st_value; //< Symbol value Elf32_Word st_size; //< Symbol size unsigned char st_info; //< Symbol type and binding unsigned char st_other; //< Symbol visibility Elf32_Section st_shndx; //< Section index }; /** 64 bits symbol table entry. */ struct Elf64_Sym { Elf64_Word st_name; //< Symbol name (string tbl index) unsigned char st_info; //< Symbol type and binding unsigned char st_other; //< Symbol visibility Elf64_Section st_shndx; //< Section index Elf64_Addr st_value; //< Symbol value Elf64_Xword st_size; //< Symbol size }; /** 32 bits syminfo section if available contains additional information about every dynamic symbol. */ struct Elf32_Syminfo { Elf32_Half si_boundto; //< Direct bindings, symbol bound to Elf32_Half si_flags; //< Per symbol flags }; /** 64 bits syminfo section if available contains additional information about every dynamic symbol. */ struct Elf64_Syminfo { Elf64_Half si_boundto; //< Direct bindings, symbol bound to Elf64_Half si_flags; //< Per symbol flags }; /** Possible values for si_boundto. */ enum si_boundto_e { SYMINFO_BT_SELF = 0xffff, //< Symbol bound to self SYMINFO_BT_PARENT = 0xfffe, //< Symbol bound to parent SYMINFO_BT_LOWRESERVE = 0xff00, //< Beginning of reserved entries }; /** Possible bitmasks for si_flags. */ enum si_flags_e { SYMINFO_FLG_DIRECT = 0x0001, //< Direct bound symbol SYMINFO_FLG_PASSTHRU = 0x0002, //< Pass-thru symbol for translator SYMINFO_FLG_COPY = 0x0004, //< Symbol is a copy-reloc SYMINFO_FLG_LAZYLOAD = 0x0008, //< Symbol bound to object to be lazy loaded }; /** Syminfo version values. */ enum si_version_e { SYMINFO_NONE = 0, SYMINFO_CURRENT = 1, SYMINFO_NUM = 2, }; /** Extract bind information held in the st_info field. */ #define ELF_ST_BIND(val) ((::elfpp::st_info_bind_e)(((unsigned char) (val)) >> 4)) /** Extract type information held in the st_info field. */ #define ELF_ST_TYPE(val) ((::elfpp::st_info_type_e)((val) & 0xf)) /** Insert information held in the st_info field. */ #define ELF_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) /** Legal values for ST_BIND subfield of st_info (symbol binding). */ enum st_info_bind_e { STB_LOCAL = 0, //< Local symbol STB_GLOBAL = 1, //< Global symbol STB_WEAK = 2, //< Weak symbol STB_NUM = 3, //< Number of defined types. STB_LOOS = 10, //< Start of OS-specific STB_HIOS = 12, //< End of OS-specific STB_LOPROC = 13, //< Start of processor-specific STB_HIPROC = 15, //< End of processor-specific }; /** Legal values for ST_TYPE subfield of st_info (symbol type). */ enum st_info_type_e { STT_NOTYPE = 0, //< Symbol type is unspecified STT_OBJECT = 1, //< Symbol is a data object STT_FUNC = 2, //< Symbol is a code object STT_SECTION = 3, //< Symbol associated with a section STT_FILE = 4, //< Symbol's name is file name STT_COMMON = 5, //< Symbol is a common data object STT_TLS = 6, //< Symbol is thread-local data object STT_NUM = 7, //< Number of defined types. STT_LOOS = 10, //< Start of OS-specific STT_HIOS = 12, //< End of OS-specific STT_LOPROC = 13, //< Start of processor-specific STT_HIPROC = 15, //< End of processor-specific }; /* Symbol table indices are found in the hash buckets and chain table of a symbol hash table section. This special index value indicates the end of a chain, meaning no further symbols are found in that bucket. */ static const unsigned int STN_UNDEF = 0; //< End of a chain. /** @multiple How to extract and insert information held in the st_other field. */ #define ELF32_ST_VISIBILITY(o) ((o) & 0x03) #define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) /** Symbol visibility specification encoded in the st_other field. */ enum st_other_e { STV_DEFAULT = 0, //< Default symbol visibility rules STV_INTERNAL = 1, //< Processor specific hidden class STV_HIDDEN = 2, //< Sym unavailable in other modules STV_PROTECTED = 3, //< Not preemptible, not exported }; /** Relocation table entry without addend (in section of type SHT_REL). */ struct Elf32_Rel { Elf32_Addr r_offset; //< Address Elf32_Word r_info; //< Relocation type and symbol index }; /* I have seen two different definitions of the Elf64_Rel and Elf64_Rela structures, so we'll leave them out until Novell (or whoever) gets their act together. */ /** The following, at least, is used on Sparc v9, MIPS, and Alpha. */ struct Elf64_Rel { Elf64_Addr r_offset; //< Address Elf64_Xword r_info; //< Relocation type and symbol index }; /** @multiple Relocation table entry with addend (in section of type SHT_RELA). */ struct Elf32_Rela { Elf32_Addr r_offset; //< Address Elf32_Word r_info; //< Relocation type and symbol index Elf32_Sword r_addend; //< Addend }; struct Elf64_Rela { Elf64_Addr r_offset; //< Address Elf64_Xword r_info; //< Relocation type and symbol index Elf64_Sxword r_addend; //< Addend }; /** @multiple @showcontent How to extract and insert information held in the @tt r_info field. */ #define ELF32_R_SYM(val) ((val) >> 8) #define ELF32_R_TYPE(val) ((val) & 0xff) #define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) #define ELF64_R_SYM(i) ((i) >> 32) #define ELF64_R_TYPE(i) ((i) & 0xffffffff) #define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) /** @multiple Program segment header. */ struct Elf32_Phdr { Elf32_Word p_type; //< Segment type Elf32_Off p_offset; //< Segment file offset Elf32_Addr p_vaddr; //< Segment virtual address Elf32_Addr p_paddr; //< Segment physical address Elf32_Word p_filesz; //< Segment size in file Elf32_Word p_memsz; //< Segment size in memory Elf32_Word p_flags; //< Segment flags Elf32_Word p_align; //< Segment alignment }; struct Elf64_Phdr { Elf64_Word p_type; //< Segment type Elf64_Word p_flags; //< Segment flags Elf64_Off p_offset; //< Segment file offset Elf64_Addr p_vaddr; //< Segment virtual address Elf64_Addr p_paddr; //< Segment physical address Elf64_Xword p_filesz; //< Segment size in file Elf64_Xword p_memsz; //< Segment size in memory Elf64_Xword p_align; //< Segment alignment }; /** Legal values for p_type (segment type). */ enum p_type_e { PT_NULL = 0, //< Program header table entry unused PT_LOAD = 1, //< Loadable program segment PT_DYNAMIC = 2, //< Dynamic linking information PT_INTERP = 3, //< Program interpreter PT_NOTE = 4, //< Auxiliary information PT_SHLIB = 5, //< Reserved PT_PHDR = 6, //< Entry for header table itself PT_TLS = 7, //< Thread-local storage segment PT_NUM = 8, //< Number of defined types PT_LOOS = 0x60000000, //< Start of OS-specific PT_GNU_EH_FRAME = 0x6474e550, //< GCC .eh_frame_hdr segment PT_GNU_STACK = 0x6474e551, //< Indicates stack executability PT_GNU_RELRO = 0x6474e552, //< Read-only after relocation PT_LOSUNW = 0x6ffffffa, PT_SUNWBSS = 0x6ffffffa, //< Sun Specific segment PT_SUNWSTACK = 0x6ffffffb, //< Stack segment PT_HISUNW = 0x6fffffff, PT_HIOS = 0x6fffffff, //< End of OS-specific PT_LOPROC = 0x70000000, //< Start of processor-specific PT_HIPROC = 0x7fffffff, //< End of processor-specific }; /** Legal values for p_flags (segment flags). */ enum p_flags_e { PF_X = (1 << 0), //< Segment is executable PF_W = (1 << 1), //< Segment is writable PF_R = (1 << 2), //< Segment is readable PF_MASKOS = 0x0ff00000, //< OS-specific PF_MASKPROC = 0xf0000000, //< Processor-specific }; /** Legal values for note segment descriptor types for core files. */ enum note_desc_type_e { NT_PRSTATUS = 1, //< Contains copy of prstatus struct NT_FPREGSET = 2, //< Contains copy of fpregset struct NT_PRPSINFO = 3, //< Contains copy of prpsinfo struct NT_PRXREG = 4, //< Contains copy of prxregset struct NT_TASKSTRUCT = 4, //< Contains copy of task structure NT_PLATFORM = 5, //< String from sysinfo(SI_PLATFORM) NT_AUXV = 6, //< Contains copy of auxv array NT_GWINDOWS = 7, //< Contains copy of gwindows struct NT_ASRS = 8, //< Contains copy of asrset struct NT_PSTATUS = 10, //< Contains copy of pstatus struct NT_PSINFO = 13, //< Contains copy of psinfo struct NT_PRCRED = 14, //< Contains copy of prcred struct NT_UTSNAME = 15, //< Contains copy of utsname struct NT_LWPSTATUS = 16, //< Contains copy of lwpstatus struct NT_LWPSINFO = 17, //< Contains copy of lwpinfo struct NT_PRFPXREG = 20, //< Contains copy of fprxregset struct NT_PRXFPREG = 0x46e62b7f, //< Contains copy of user_fxsr_struct NT_VERSION = 1, //< Contains a version string. }; /** Version definition sections. */ struct Elf32_Verdef { Elf32_Half vd_version; //< Version revision Elf32_Half vd_flags; //< Version information Elf32_Half vd_ndx; //< Version Index Elf32_Half vd_cnt; //< Number of associated aux entries Elf32_Word vd_hash; //< Version name hash value Elf32_Word vd_aux; //< Offset in bytes to verdaux array Elf32_Word vd_next; //< Offset in bytes to next verdef entry }; struct Elf64_Verdef { Elf64_Half vd_version; //< Version revision Elf64_Half vd_flags; //< Version information Elf64_Half vd_ndx; //< Version Index Elf64_Half vd_cnt; //< Number of associated aux entries Elf64_Word vd_hash; //< Version name hash value Elf64_Word vd_aux; //< Offset in bytes to verdaux array Elf64_Word vd_next; //< Offset in bytes to next verdef entry }; /** Legal values for vd_version (version revision). */ enum vd_version_e { VER_DEF_NONE = 0, //< No version VER_DEF_CURRENT = 1, //< Current version VER_DEF_NUM = 2, //< Given version number }; /** Legal values for vd_flags (version information flags). */ enum vd_flags { VER_FLG_BASE = 0x1, //< Version definition of file itself VER_FLG_WEAK = 0x2, //< Weak version identifier }; /** Versym symbol index values. */ enum ver_ndx_e { VER_NDX_LOCAL = 0, //< Symbol is local. VER_NDX_GLOBAL = 1, //< Symbol is global. VER_NDX_LORESERVE = 0xff00, //< Beginning of reserved entries. VER_NDX_ELIMINATE = 0xff01, //< Symbol is to be eliminated. }; /** Auxialiary version information. */ struct Elf32_Verdaux { Elf32_Word vda_name; //< Version or dependency names Elf32_Word vda_next; //< Offset in bytes to next verdaux entry }; struct Elf64_Verdaux { Elf64_Word vda_name; //< Version or dependency names Elf64_Word vda_next; //< Offset in bytes to next verdaux entry }; /** Version dependency section. */ struct Elf32_Verneed { Elf32_Half vn_version; //< Version of structure Elf32_Half vn_cnt; //< Number of associated aux entries Elf32_Word vn_file; //< Offset of filename for this dependency Elf32_Word vn_aux; //< Offset in bytes to vernaux array Elf32_Word vn_next; //< Offset in bytes to next verneed entry }; struct Elf64_Verneed { Elf64_Half vn_version; //< Version of structure Elf64_Half vn_cnt; //< Number of associated aux entries Elf64_Word vn_file; //< Offset of filename for this dependency Elf64_Word vn_aux; //< Offset in bytes to vernaux array Elf64_Word vn_next; //< Offset in bytes to next verneed entry }; /** Legal values for vn_version (version revision). */ enum vn_version_e { VER_NEED_NONE = 0, //< No version VER_NEED_CURRENT = 1, //< Current version VER_NEED_NUM = 2, //< Given version number }; /** Auxiliary needed version information. */ struct Elf32_Vernaux { Elf32_Word vna_hash; //< Hash value of dependency name Elf32_Half vna_flags; //< Dependency specific information Elf32_Half vna_other; //< Unused Elf32_Word vna_name; //< Dependency name string offset Elf32_Word vna_next; //< Offset in bytes to next vernaux entry }; struct Elf64_Vernaux { Elf64_Word vna_hash; //< Hash value of dependency name Elf64_Half vna_flags; //< Dependency specific information Elf64_Half vna_other; //< Unused Elf64_Word vna_name; //< Dependency name string offset Elf64_Word vna_next; //< Offset in bytes to next vernaux entry }; /* Auxiliary vector. */ /** @multiple This vector is normally only used by the program interpreter. The usual definition in an ABI supplement uses the name auxv_t. The vector is not usually defined in a standard file, but it can't hurt. We rename it to avoid conflicts. The sizes of these types are an arrangement between the exec server and the program interpreter, so we don't fully specify them here. */ struct Elf32_auxv_t { uint32_t a_type; //< Entry type union { uint32_t a_val; //< Integer value /** We use to have pointer elements added here. We cannot do that, though, since it does not work when using 32-bit definitions on 64-bit platforms and vice versa. */ } a_un; }; struct Elf64_auxv_t { uint64_t a_type; //< Entry type union { uint64_t a_val; //< Integer value /** We use to have pointer elements added here. We cannot do that, though, since it does not work when using 32-bit definitions on 64-bit platforms and vice versa. */ } a_un; }; /** Legal values for a_type (entry type). */ enum a_type_e { AT_NULL = 0, //< End of vector AT_IGNORE = 1, //< Entry should be ignored AT_EXECFD = 2, //< File descriptor of program AT_PHDR = 3, //< Program headers for program AT_PHENT = 4, //< Size of program header entry AT_PHNUM = 5, //< Number of program headers AT_PAGESZ = 6, //< System page size AT_BASE = 7, //< Base address of interpreter AT_FLAGS = 8, //< Flags AT_ENTRY = 9, //< Entry point of program AT_NOTELF = 10, //< Program is not ELF AT_UID = 11, //< Real uid AT_EUID = 12, //< Effective uid AT_GID = 13, //< Real gid AT_EGID = 14, //< Effective gid AT_CLKTCK = 17, //< Frequency of times() /** Some more special a_type values describing the hardware. */ AT_PLATFORM = 15, //< String identifying platform. AT_HWCAP = 16, //< Machine dependent hints about processor capabilities. }; /** This entry gives some information about the FPU initialization performed by the kernel. */ #define AT_FPUCW 18 /** Used FPU control word. */ /* Cache block sizes. */ #define AT_DCACHEBSIZE 19 //< Data cache block size #define AT_ICACHEBSIZE 20 //< Instruction cache block size. #define AT_UCACHEBSIZE 21 //< Unified cache block size. /* A special ignored value for PPC, used by the kernel to control the interpretation of the AUXV. Must be > 16. */ #define AT_IGNOREPPC 22 //< Entry should be ignored. #define AT_SECURE 23 //< Boolean, was exec setuid-like? /** @multiple Pointer to the global system page used for system calls and other nice things. */ #define AT_SYSINFO 32 #define AT_SYSINFO_EHDR 33 /** @multiple Shapes of the caches. Bits 0-3 contains associativity; bits 4-7 contains log2 of line size; mask those to get cache size. */ #define AT_L1I_CACHESHAPE 34 #define AT_L1D_CACHESHAPE 35 #define AT_L2_CACHESHAPE 36 #define AT_L3_CACHESHAPE 37 /** @multiple Note section contents. Each entry in the note section begins with a header of a fixed form. */ struct Elf32_Nhdr { Elf32_Word n_namesz; //< Length of the note's name. Elf32_Word n_descsz; //< Length of the note's descriptor. Elf32_Word n_type; //< Type of the note. }; struct Elf64_Nhdr { Elf64_Word n_namesz; //< Length of the note's name. Elf64_Word n_descsz; //< Length of the note's descriptor. Elf64_Word n_type; //< Type of the note. }; /* Known names of notes. */ /** Solaris entries in the note section have this name. */ #define ELF_NOTE_SOLARIS "SUNW Solaris" /** Note entries for GNU systems have this name. */ #define ELF_NOTE_GNU "GNU" /* Defined types of notes for Solaris. */ /** Value of descriptor (one word) is desired pagesize for the binary. */ #define ELF_NOTE_PAGESIZE_HINT 1 /* Defined note types for GNU systems. */ /** ABI information. The descriptor consists of words: word 0: OS descriptor word 1: major version of the ABI word 2: minor version of the ABI word 3: subminor version of the ABI */ #define ELF_NOTE_ABI 1 /** Known OSes. These value can appear in word 0 of an ELF_NOTE_ABI note section entry. */ #define ELF_NOTE_OS_LINUX 0 #define ELF_NOTE_OS_GNU 1 #define ELF_NOTE_OS_SOLARIS2 2 #define ELF_NOTE_OS_FREEBSD 3 /** @multiple Move records. */ struct Elf32_Move { Elf32_Xword m_value; //< Symbol value. Elf32_Word m_info; //< Size and index. Elf32_Word m_poffset; //< Symbol offset. Elf32_Half m_repeat; //< Repeat count. Elf32_Half m_stride; //< Stride info. }; struct Elf64_Move { Elf64_Xword m_value; //< Symbol value. Elf64_Xword m_info; //< Size and index. Elf64_Xword m_poffset;//< Symbol offset. Elf64_Half m_repeat; //< Repeat count. Elf64_Half m_stride; //< Stride info. }; /** @multiple Macro to construct move records. */ #define ELF32_M_SYM(info) ((info) >> 8) #define ELF32_M_SIZE(info) ((unsigned char) (info)) #define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) #define ELF64_M_SYM(info) ELF32_M_SYM (info) #define ELF64_M_SIZE(info) ELF32_M_SIZE (info) #define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) /** Motorola 68k specific definitions. */ /** Values for Elf32_Ehdr.e_flags. */ #define EF_CPU32 0x00810000 /** Relocation ids */ enum reloc_e { R_NONE = 0, //< No reloc /* m68k relocs. */ R_68K_NONE = 0, //< No reloc R_68K_32 = 1, //< Direct 32 bit R_68K_16 = 2, //< Direct 16 bit R_68K_8 = 3, //< Direct 8 bit R_68K_PC32 = 4, //< PC relative 32 bit R_68K_PC16 = 5, //< PC relative 16 bit R_68K_PC8 = 6, //< PC relative 8 bit R_68K_GOT32 = 7, //< 32 bit PC relative GOT entry R_68K_GOT16 = 8, //< 16 bit PC relative GOT entry R_68K_GOT8 = 9, //< 8 bit PC relative GOT entry R_68K_GOT32O = 10, //< 32 bit GOT offset R_68K_GOT16O = 11, //< 16 bit GOT offset R_68K_GOT8O = 12, //< 8 bit GOT offset R_68K_PLT32 = 13, //< 32 bit PC relative PLT address R_68K_PLT16 = 14, //< 16 bit PC relative PLT address R_68K_PLT8 = 15, //< 8 bit PC relative PLT address R_68K_PLT32O = 16, //< 32 bit PLT offset R_68K_PLT16O = 17, //< 16 bit PLT offset R_68K_PLT8O = 18, //< 8 bit PLT offset R_68K_COPY = 19, //< Copy symbol at runtime R_68K_GLOB_DAT = 20, //< Create GOT entry R_68K_JMP_SLOT = 21, //< Create PLT entry R_68K_RELATIVE = 22, //< Adjust by program base /* Keep this the last entry. */ R_68K_NUM = 23, /* i386 relocs. */ R_386_NONE = 0, //< No reloc R_386_32 = 1, //< Direct 32 bit R_386_PC32 = 2, //< PC relative 32 bit R_386_GOT32 = 3, //< 32 bit GOT entry R_386_PLT32 = 4, //< 32 bit PLT address R_386_COPY = 5, //< Copy symbol at runtime R_386_GLOB_DAT = 6, //< Create GOT entry R_386_JMP_SLOT = 7, //< Create PLT entry R_386_RELATIVE = 8, //< Adjust by program base R_386_GOTOFF = 9, //< 32 bit offset to GOT R_386_GOTPC = 10, //< 32 bit PC relative offset to GOT R_386_32PLT = 11, R_386_TLS_TPOFF = 14, //< Offset in static TLS block R_386_TLS_IE = 15, //< Address of GOT entry for static TLS block offset R_386_TLS_GOTIE = 16, //< GOT entry for static TLS block offset R_386_TLS_LE = 17, //< Offset relative to static TLS block R_386_TLS_GD = 18, //< Direct 32 bit for GNU version of general dynamic thread local data R_386_TLS_LDM = 19, //< Direct 32 bit for GNU version of local dynamic thread local data in LE code R_386_16 = 20, R_386_PC16 = 21, R_386_8 = 22, R_386_PC8 = 23, R_386_TLS_GD_32 = 24, //< Direct 32 bit for general dynamic thread local data R_386_TLS_GD_PUSH = 25, //< Tag for pushl in GD TLS code R_386_TLS_GD_CALL = 26, //< Relocation for call to __tls_get_addr() R_386_TLS_GD_POP = 27, //< Tag for popl in GD TLS code R_386_TLS_LDM_32 = 28, //< Direct 32 bit for local dynamic thread local data in LE code R_386_TLS_LDM_PUSH = 29, //< Tag for pushl in LDM TLS code R_386_TLS_LDM_CALL = 30, //< Relocation for call to __tls_get_addr() in LDM code R_386_TLS_LDM_POP = 31, //< Tag for popl in LDM TLS code R_386_TLS_LDO_32 = 32, //< Offset relative to TLS block R_386_TLS_IE_32 = 33, //< GOT entry for negated static TLS block offset R_386_TLS_LE_32 = 34, //< Negated offset relative to static TLS block R_386_TLS_DTPMOD32 = 35, //< ID of module containing symbol R_386_TLS_DTPOFF32 = 36, //< Offset in TLS block R_386_TLS_TPOFF32 = 37, //< Negated offset in static TLS block /* Keep this the last entry. */ R_386_NUM = 38, /* SPARC relocs. */ R_SPARC_NONE = 0, //< No reloc R_SPARC_8 = 1, //< Direct 8 bit R_SPARC_16 = 2, //< Direct 16 bit R_SPARC_32 = 3, //< Direct 32 bit R_SPARC_DISP8 = 4, //< PC relative 8 bit R_SPARC_DISP16 = 5, //< PC relative 16 bit R_SPARC_DISP32 = 6, //< PC relative 32 bit R_SPARC_WDISP30 = 7, //< PC relative 30 bit shifted R_SPARC_WDISP22 = 8, //< PC relative 22 bit shifted R_SPARC_HI22 = 9, //< High 22 bit R_SPARC_22 = 10, //< Direct 22 bit R_SPARC_13 = 11, //< Direct 13 bit R_SPARC_LO10 = 12, //< Truncated 10 bit R_SPARC_GOT10 = 13, //< Truncated 10 bit GOT entry R_SPARC_GOT13 = 14, //< 13 bit GOT entry R_SPARC_GOT22 = 15, //< 22 bit GOT entry shifted R_SPARC_PC10 = 16, //< PC relative 10 bit truncated R_SPARC_PC22 = 17, //< PC relative 22 bit shifted R_SPARC_WPLT30 = 18, //< 30 bit PC relative PLT address R_SPARC_COPY = 19, //< Copy symbol at runtime R_SPARC_GLOB_DAT = 20, //< Create GOT entry R_SPARC_JMP_SLOT = 21, //< Create PLT entry R_SPARC_RELATIVE = 22, //< Adjust by program base R_SPARC_UA32 = 23, //< Direct 32 bit unaligned /* Additional Sparc64 relocs. */ R_SPARC_PLT32 = 24, //< Direct 32 bit ref to PLT entry R_SPARC_HIPLT22 = 25, //< High 22 bit PLT entry R_SPARC_LOPLT10 = 26, //< Truncated 10 bit PLT entry R_SPARC_PCPLT32 = 27, //< PC rel 32 bit ref to PLT entry R_SPARC_PCPLT22 = 28, //< PC rel high 22 bit PLT entry R_SPARC_PCPLT10 = 29, //< PC rel trunc 10 bit PLT entry R_SPARC_10 = 30, //< Direct 10 bit R_SPARC_11 = 31, //< Direct 11 bit R_SPARC_64 = 32, //< Direct 64 bit R_SPARC_OLO10 = 33, //< 10bit with secondary 13bit addend R_SPARC_HH22 = 34, //< Top 22 bits of direct 64 bit R_SPARC_HM10 = 35, //< High middle 10 bits of ... R_SPARC_LM22 = 36, //< Low middle 22 bits of ... R_SPARC_PC_HH22 = 37, //< Top 22 bits of pc rel 64 bit R_SPARC_PC_HM10 = 38, //< High middle 10 bit of ... R_SPARC_PC_LM22 = 39, //< Low miggle 22 bits of ... R_SPARC_WDISP16 = 40, //< PC relative 16 bit shifted R_SPARC_WDISP19 = 41, //< PC relative 19 bit shifted R_SPARC_7 = 43, //< Direct 7 bit R_SPARC_5 = 44, //< Direct 5 bit R_SPARC_6 = 45, //< Direct 6 bit R_SPARC_DISP64 = 46, //< PC relative 64 bit R_SPARC_PLT64 = 47, //< Direct 64 bit ref to PLT entry R_SPARC_HIX22 = 48, //< High 22 bit complemented R_SPARC_LOX10 = 49, //< Truncated 11 bit complemented R_SPARC_H44 = 50, //< Direct high 12 of 44 bit R_SPARC_M44 = 51, //< Direct mid 22 of 44 bit R_SPARC_L44 = 52, //< Direct low 10 of 44 bit R_SPARC_REGISTER = 53, //< Global register usage R_SPARC_UA64 = 54, //< Direct 64 bit unaligned R_SPARC_UA16 = 55, //< Direct 16 bit unaligned 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, /* Keep this the last entry. */ R_SPARC_NUM = 80, /* MIPS relocs. */ R_MIPS_NONE = 0, //< No reloc R_MIPS_16 = 1, //< Direct 16 bit R_MIPS_32 = 2, //< Direct 32 bit R_MIPS_REL32 = 3, //< PC relative 32 bit R_MIPS_26 = 4, //< Direct 26 bit shifted R_MIPS_HI16 = 5, //< High 16 bit R_MIPS_LO16 = 6, //< Low 16 bit R_MIPS_GPREL16 = 7, //< GP relative 16 bit R_MIPS_LITERAL = 8, //< 16 bit literal entry R_MIPS_GOT16 = 9, //< 16 bit GOT entry R_MIPS_PC16 = 10, //< PC relative 16 bit R_MIPS_CALL16 = 11, //< 16 bit GOT entry for function R_MIPS_GPREL32 = 12, //< GP relative 32 bit R_MIPS_SHIFT5 = 16, R_MIPS_SHIFT6 = 17, R_MIPS_64 = 18, R_MIPS_GOT_DISP = 19, R_MIPS_GOT_PAGE = 20, R_MIPS_GOT_OFST = 21, R_MIPS_GOT_HI16 = 22, R_MIPS_GOT_LO16 = 23, R_MIPS_SUB = 24, R_MIPS_INSERT_A = 25, R_MIPS_INSERT_B = 26, R_MIPS_DELETE = 27, R_MIPS_HIGHER = 28, R_MIPS_HIGHEST = 29, R_MIPS_CALL_HI16 = 30, R_MIPS_CALL_LO16 = 31, R_MIPS_SCN_DISP = 32, R_MIPS_REL16 = 33, R_MIPS_ADD_IMMEDIATE = 34, R_MIPS_PJUMP = 35, R_MIPS_RELGOT = 36, R_MIPS_JALR = 37, R_MIPS_TLS_DTPMOD32 = 38, //< Module number 32 bit R_MIPS_TLS_DTPREL32 = 39, //< Module-relative offset 32 bit R_MIPS_TLS_DTPMOD64 = 40, //< Module number 64 bit R_MIPS_TLS_DTPREL64 = 41, //< Module-relative offset 64 bit R_MIPS_TLS_GD = 42, //< 16 bit GOT offset for GD R_MIPS_TLS_LDM = 43, //< 16 bit GOT offset for LDM R_MIPS_TLS_DTPREL_HI16 = 44, //< Module-relative offset, high 16 bits R_MIPS_TLS_DTPREL_LO16 = 45, //< Module-relative offset, low 16 bits R_MIPS_TLS_GOTTPREL = 46, //< 16 bit GOT offset for IE R_MIPS_TLS_TPREL32 = 47, //< TP-relative offset, 32 bit R_MIPS_TLS_TPREL64 = 48, //< TP-relative offset, 64 bit R_MIPS_TLS_TPREL_HI16 = 49, //< TP-relative offset, high 16 bits R_MIPS_TLS_TPREL_LO16 = 50, //< TP-relative offset, low 16 bits R_MIPS_GLOB_DAT = 51, /* Keep this the last entry. */ R_MIPS_NUM = 52, /* HPPA relocs. */ R_PARISC_NONE = 0, //< No reloc. R_PARISC_DIR32 = 1, //< Direct 32-bit reference. R_PARISC_DIR21L = 2, //< Left 21 bits of eff. address. R_PARISC_DIR17R = 3, //< Right 17 bits of eff. address. R_PARISC_DIR17F = 4, //< 17 bits of eff. address. R_PARISC_DIR14R = 6, //< Right 14 bits of eff. address. R_PARISC_PCREL32 = 9, //< 32-bit rel. address. R_PARISC_PCREL21L = 10, //< Left 21 bits of rel. address. R_PARISC_PCREL17R = 11, //< Right 17 bits of rel. address. R_PARISC_PCREL17F = 12, //< 17 bits of rel. address. R_PARISC_PCREL14R = 14, //< Right 14 bits of rel. address. R_PARISC_DPREL21L = 18, //< Left 21 bits of rel. address. R_PARISC_DPREL14R = 22, //< Right 14 bits of rel. address. R_PARISC_GPREL21L = 26, //< GP-relative, left 21 bits. R_PARISC_GPREL14R = 30, //< GP-relative, right 14 bits. R_PARISC_LTOFF21L = 34, //< LT-relative, left 21 bits. R_PARISC_LTOFF14R = 38, //< LT-relative, right 14 bits. R_PARISC_SECREL32 = 41, //< 32 bits section rel. address. R_PARISC_SEGBASE = 48, //< No relocation, set segment base. R_PARISC_SEGREL32 = 49, //< 32 bits segment rel. address. R_PARISC_PLTOFF21L = 50, //< PLT rel. address, left 21 bits. R_PARISC_PLTOFF14R = 54, //< PLT rel. address, right 14 bits. R_PARISC_LTOFF_FPTR32 = 57, //< 32 bits LT-rel. function pointer. R_PARISC_LTOFF_FPTR21L = 58, //< LT-rel. fct ptr, left 21 bits. R_PARISC_LTOFF_FPTR14R = 62, //< LT-rel. fct ptr, right 14 bits. R_PARISC_FPTR64 = 64, //< 64 bits function address. R_PARISC_PLABEL32 = 65, //< 32 bits function address. R_PARISC_PLABEL21L = 66, //< Left 21 bits of fdesc address R_PARISC_PLABEL14R = 70, //< Right 14 bits of fdesc address R_PARISC_PCREL64 = 72, //< 64 bits PC-rel. address. R_PARISC_PCREL22F = 74, //< 22 bits PC-rel. address. R_PARISC_PCREL14WR = 75, //< PC-rel. address, right 14 bits. R_PARISC_PCREL14DR = 76, //< PC rel. address, right 14 bits. R_PARISC_PCREL16F = 77, //< 16 bits PC-rel. address. R_PARISC_PCREL16WF = 78, //< 16 bits PC-rel. address. R_PARISC_PCREL16DF = 79, //< 16 bits PC-rel. address. R_PARISC_DIR64 = 80, //< 64 bits of eff. address. R_PARISC_DIR14WR = 83, //< 14 bits of eff. address. R_PARISC_DIR14DR = 84, //< 14 bits of eff. address. R_PARISC_DIR16F = 85, //< 16 bits of eff. address. R_PARISC_DIR16WF = 86, //< 16 bits of eff. address. R_PARISC_DIR16DF = 87, //< 16 bits of eff. address. R_PARISC_GPREL64 = 88, //< 64 bits of GP-rel. address. R_PARISC_GPREL14WR = 91, //< GP-rel. address, right 14 bits. R_PARISC_GPREL14DR = 92, //< GP-rel. address, right 14 bits. R_PARISC_GPREL16F = 93, //< 16 bits GP-rel. address. R_PARISC_GPREL16WF = 94, //< 16 bits GP-rel. address. R_PARISC_GPREL16DF = 95, //< 16 bits GP-rel. address. R_PARISC_LTOFF64 = 96, //< 64 bits LT-rel. address. R_PARISC_LTOFF14WR = 99, //< LT-rel. address, right 14 bits. R_PARISC_LTOFF14DR = 100, //< LT-rel. address, right 14 bits. R_PARISC_LTOFF16F = 101, //< 16 bits LT-rel. address. R_PARISC_LTOFF16WF = 102, //< 16 bits LT-rel. address. R_PARISC_LTOFF16DF = 103, //< 16 bits LT-rel. address. R_PARISC_SECREL64 = 104, //< 64 bits section rel. address. R_PARISC_SEGREL64 = 112, //< 64 bits segment rel. address. R_PARISC_PLTOFF14WR = 115, //< PLT-rel. address, right 14 bits. R_PARISC_PLTOFF14DR = 116, //< PLT-rel. address, right 14 bits. R_PARISC_PLTOFF16F = 117, //< 16 bits LT-rel. address. R_PARISC_PLTOFF16WF = 118, //< 16 bits PLT-rel. address. R_PARISC_PLTOFF16DF = 119, //< 16 bits PLT-rel. address. R_PARISC_LTOFF_FPTR64 = 120, //< 64 bits LT-rel. function ptr. R_PARISC_LTOFF_FPTR14WR = 123, //< LT-rel. fct. ptr., right 14 bits. R_PARISC_LTOFF_FPTR14DR = 124, //< LT-rel. fct. ptr., right 14 bits. R_PARISC_LTOFF_FPTR16F = 125, //< 16 bits LT-rel. function ptr. R_PARISC_LTOFF_FPTR16WF = 126, //< 16 bits LT-rel. function ptr. R_PARISC_LTOFF_FPTR16DF = 127, //< 16 bits LT-rel. function ptr. R_PARISC_LORESERVE = 128, R_PARISC_COPY = 128, //< Copy relocation. R_PARISC_IPLT = 129, //< Dynamic reloc, imported PLT R_PARISC_EPLT = 130, //< Dynamic reloc, exported PLT R_PARISC_TPREL32 = 153, //< 32 bits TP-rel. address. R_PARISC_TPREL21L = 154, //< TP-rel. address, left 21 bits. R_PARISC_TPREL14R = 158, //< TP-rel. address, right 14 bits. R_PARISC_LTOFF_TP21L = 162, //< LT-TP-rel. address, left 21 bits. R_PARISC_LTOFF_TP14R = 166, //< LT-TP-rel. address, right 14 bits. R_PARISC_LTOFF_TP14F = 167, //< 14 bits LT-TP-rel. address. R_PARISC_TPREL64 = 216, //< 64 bits TP-rel. address. R_PARISC_TPREL14WR = 219, //< TP-rel. address, right 14 bits. R_PARISC_TPREL14DR = 220, //< TP-rel. address, right 14 bits. R_PARISC_TPREL16F = 221, //< 16 bits TP-rel. address. R_PARISC_TPREL16WF = 222, //< 16 bits TP-rel. address. R_PARISC_TPREL16DF = 223, //< 16 bits TP-rel. address. R_PARISC_LTOFF_TP64 = 224, //< 64 bits LT-TP-rel. address. R_PARISC_LTOFF_TP14WR = 227, //< LT-TP-rel. address, right 14 bits. R_PARISC_LTOFF_TP14DR = 228, //< LT-TP-rel. address, right 14 bits. R_PARISC_LTOFF_TP16F = 229, //< 16 bits LT-TP-rel. address. R_PARISC_LTOFF_TP16WF = 230, //< 16 bits LT-TP-rel. address. R_PARISC_LTOFF_TP16DF = 231, //< 16 bits LT-TP-rel. address. R_PARISC_GNU_VTENTRY = 232, R_PARISC_GNU_VTINHERIT = 233, R_PARISC_TLS_GD21L = 234, //< GD 21-bit left R_PARISC_TLS_GD14R = 235, //< GD 14-bit right R_PARISC_TLS_GDCALL = 236, //< GD call to __t_g_a R_PARISC_TLS_LDM21L = 237, //< LD module 21-bit left R_PARISC_TLS_LDM14R = 238, //< LD module 14-bit right R_PARISC_TLS_LDMCALL = 239, //< LD module call to __t_g_a R_PARISC_TLS_LDO21L = 240, //< LD offset 21-bit left R_PARISC_TLS_LDO14R = 241, //< LD offset 14-bit right R_PARISC_TLS_DTPMOD32 = 242, //< DTP module 32-bit R_PARISC_TLS_DTPMOD64 = 243, //< DTP module 64-bit R_PARISC_TLS_DTPOFF32 = 244, //< DTP offset 32-bit R_PARISC_TLS_DTPOFF64 = 245, //< DTP offset 32-bit R_PARISC_TLS_LE21L = R_PARISC_TPREL21L, R_PARISC_TLS_LE14R = R_PARISC_TPREL14R, R_PARISC_TLS_IE21L = R_PARISC_LTOFF_TP21L, R_PARISC_TLS_IE14R = R_PARISC_LTOFF_TP14R, R_PARISC_TLS_TPREL32 = R_PARISC_TPREL32, R_PARISC_TLS_TPREL64 = R_PARISC_TPREL64, R_PARISC_HIRESERVE = 255, /* Alpha relocs. */ R_ALPHA_NONE = 0, //< No reloc R_ALPHA_REFLONG = 1, //< Direct 32 bit R_ALPHA_REFQUAD = 2, //< Direct 64 bit R_ALPHA_GPREL32 = 3, //< GP relative 32 bit R_ALPHA_LITERAL = 4, //< GP relative 16 bit w/optimization R_ALPHA_LITUSE = 5, //< Optimization hint for LITERAL R_ALPHA_GPDISP = 6, //< Add displacement to GP R_ALPHA_BRADDR = 7, //< PC+4 relative 23 bit shifted R_ALPHA_HINT = 8, //< PC+4 relative 16 bit shifted R_ALPHA_SREL16 = 9, //< PC relative 16 bit R_ALPHA_SREL32 = 10, //< PC relative 32 bit R_ALPHA_SREL64 = 11, //< PC relative 64 bit R_ALPHA_GPRELHIGH = 17, //< GP relative 32 bit, high 16 bits R_ALPHA_GPRELLOW = 18, //< GP relative 32 bit, low 16 bits R_ALPHA_GPREL16 = 19, //< GP relative 16 bit R_ALPHA_COPY = 24, //< Copy symbol at runtime R_ALPHA_GLOB_DAT = 25, //< Create GOT entry R_ALPHA_JMP_SLOT = 26, //< Create PLT entry R_ALPHA_RELATIVE = 27, //< Adjust by program base R_ALPHA_TLS_GD_HI = 28, R_ALPHA_TLSGD = 29, R_ALPHA_TLS_LDM = 30, R_ALPHA_DTPMOD64 = 31, R_ALPHA_GOTDTPREL = 32, R_ALPHA_DTPREL64 = 33, R_ALPHA_DTPRELHI = 34, R_ALPHA_DTPRELLO = 35, R_ALPHA_DTPREL16 = 36, R_ALPHA_GOTTPREL = 37, R_ALPHA_TPREL64 = 38, R_ALPHA_TPRELHI = 39, R_ALPHA_TPRELLO = 40, R_ALPHA_TPREL16 = 41, /* Keep this the last entry. */ R_ALPHA_NUM = 46, /* PowerPC relocations defined by the ABIs */ R_PPC_NONE = 0, R_PPC_ADDR32 = 1, //< 32bit absolute address R_PPC_ADDR24 = 2, //< 26bit address, 2 bits ignored. R_PPC_ADDR16 = 3, //< 16bit absolute address R_PPC_ADDR16_LO = 4, //< lower 16bit of absolute address R_PPC_ADDR16_HI = 5, //< high 16bit of absolute address R_PPC_ADDR16_HA = 6, //< adjusted high 16bit R_PPC_ADDR14 = 7, //< 16bit address, 2 bits ignored R_PPC_ADDR14_BRTAKEN = 8, R_PPC_ADDR14_BRNTAKEN = 9, R_PPC_REL24 = 10, //< PC relative 26 bit R_PPC_REL14 = 11, //< PC relative 16 bit 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, R_PPC_SDAREL16 = 32, R_PPC_SECTOFF = 33, R_PPC_SECTOFF_LO = 34, R_PPC_SECTOFF_HI = 35, R_PPC_SECTOFF_HA = 36, /* PowerPC relocations defined for the TLS access ABI. */ R_PPC_TLS = 67, //< none (sym+add)@@tls R_PPC_DTPMOD32 = 68, //< word32 (sym+add)@@dtpmod R_PPC_TPREL16 = 69, //< half16* (sym+add)@@tprel R_PPC_TPREL16_LO = 70, //< half16 (sym+add)@@tprel@@l R_PPC_TPREL16_HI = 71, //< half16 (sym+add)@@tprel@@h R_PPC_TPREL16_HA = 72, //< half16 (sym+add)@@tprel@@ha R_PPC_TPREL32 = 73, //< word32 (sym+add)@@tprel R_PPC_DTPREL16 = 74, //< half16* (sym+add)@@dtprel R_PPC_DTPREL16_LO = 75, //< half16 (sym+add)@@dtprel@@l R_PPC_DTPREL16_HI = 76, //< half16 (sym+add)@@dtprel@@h R_PPC_DTPREL16_HA = 77, //< half16 (sym+add)@@dtprel@@ha R_PPC_DTPREL32 = 78, //< word32 (sym+add)@@dtprel R_PPC_GOT_TLSGD16 = 79, //< half16* (sym+add)@@got@@tlsgd R_PPC_GOT_TLSGD16_LO = 80, //< half16 (sym+add)@@got@@tlsgd@@l R_PPC_GOT_TLSGD16_HI = 81, //< half16 (sym+add)@@got@@tlsgd@@h R_PPC_GOT_TLSGD16_HA = 82, //< half16 (sym+add)@@got@@tlsgd@@ha R_PPC_GOT_TLSLD16 = 83, //< half16* (sym+add)@@got@@tlsld R_PPC_GOT_TLSLD16_LO = 84, //< half16 (sym+add)@@got@@tlsld@@l R_PPC_GOT_TLSLD16_HI = 85, //< half16 (sym+add)@@got@@tlsld@@h R_PPC_GOT_TLSLD16_HA = 86, //< half16 (sym+add)@@got@@tlsld@@ha R_PPC_GOT_TPREL16 = 87, //< half16* (sym+add)@@got@@tprel R_PPC_GOT_TPREL16_LO = 88, //< half16 (sym+add)@@got@@tprel@@l R_PPC_GOT_TPREL16_HI = 89, //< half16 (sym+add)@@got@@tprel@@h R_PPC_GOT_TPREL16_HA = 90, //< half16 (sym+add)@@got@@tprel@@ha R_PPC_GOT_DTPREL16 = 91, //< half16* (sym+add)@@got@@dtprel R_PPC_GOT_DTPREL16_LO = 92, //< half16* (sym+add)@@got@@dtprel@@l R_PPC_GOT_DTPREL16_HI = 93, //< half16* (sym+add)@@got@@dtprel@@h R_PPC_GOT_DTPREL16_HA = 94, //< half16* (sym+add)@@got@@dtprel@@ha /* Keep this the last entry. */ R_PPC_NUM = 95, /* The remaining relocs are from the Embedded ELF ABI, and are not in the SVR4 ELF ABI. */ 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, //< 16 bit offset in SDA 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, //< 16 bit relative offset in SDA /* Diab tool relocations. */ R_PPC_DIAB_SDA21_LO = 180, //< like EMB_SDA21, but lower 16 bit R_PPC_DIAB_SDA21_HI = 181, //< like EMB_SDA21, but high 16 bit R_PPC_DIAB_SDA21_HA = 182, //< like EMB_SDA21, adjusted high 16 R_PPC_DIAB_RELSDA_LO = 183, //< like EMB_RELSDA, but lower 16 bit R_PPC_DIAB_RELSDA_HI = 184, //< like EMB_RELSDA, but high 16 bit R_PPC_DIAB_RELSDA_HA = 185, //< like EMB_RELSDA, adjusted high 16 /* GNU relocs used in PIC code sequences. */ R_PPC_REL16 = 249, //< word32 (sym-.) R_PPC_REL16_LO = 250, //< half16 (sym-.)@@l R_PPC_REL16_HI = 251, //< half16 (sym-.)@@h R_PPC_REL16_HA = 252, //< half16 (sym-.)@@ha /* This is a phony reloc to handle any old fashioned TOC16 references that may still be in object files. */ R_PPC_TOC16 = 255, /* PowerPC64 relocations defined by the ABIs */ R_PPC64_NONE = R_PPC_NONE, R_PPC64_ADDR32 = R_PPC_ADDR32, //< 32bit absolute address R_PPC64_ADDR24 = R_PPC_ADDR24, //< 26bit address, word aligned R_PPC64_ADDR16 = R_PPC_ADDR16, //< 16bit absolute address R_PPC64_ADDR16_LO = R_PPC_ADDR16_LO, //< lower 16bits of address R_PPC64_ADDR16_HI = R_PPC_ADDR16_HI, //< high 16bits of address. R_PPC64_ADDR16_HA = R_PPC_ADDR16_HA, //< adjusted high 16bits. R_PPC64_ADDR14 = R_PPC_ADDR14, //< 16bit address, word aligned R_PPC64_ADDR14_BRTAKEN = R_PPC_ADDR14_BRTAKEN, R_PPC64_ADDR14_BRNTAKEN = R_PPC_ADDR14_BRNTAKEN, R_PPC64_REL24 = R_PPC_REL24, //< PC-rel. 26 bit, word aligned R_PPC64_REL14 = R_PPC_REL14, //< PC relative 16 bit R_PPC64_REL14_BRTAKEN = R_PPC_REL14_BRTAKEN, R_PPC64_REL14_BRNTAKEN = R_PPC_REL14_BRNTAKEN, R_PPC64_GOT16 = R_PPC_GOT16, R_PPC64_GOT16_LO = R_PPC_GOT16_LO, R_PPC64_GOT16_HI = R_PPC_GOT16_HI, R_PPC64_GOT16_HA = R_PPC_GOT16_HA, R_PPC64_COPY = R_PPC_COPY, R_PPC64_GLOB_DAT = R_PPC_GLOB_DAT, R_PPC64_JMP_SLOT = R_PPC_JMP_SLOT, R_PPC64_RELATIVE = R_PPC_RELATIVE, R_PPC64_UADDR32 = R_PPC_UADDR32, R_PPC64_UADDR16 = R_PPC_UADDR16, R_PPC64_REL32 = R_PPC_REL32, R_PPC64_PLT32 = R_PPC_PLT32, R_PPC64_PLTREL32 = R_PPC_PLTREL32, R_PPC64_PLT16_LO = R_PPC_PLT16_LO, R_PPC64_PLT16_HI = R_PPC_PLT16_HI, R_PPC64_PLT16_HA = R_PPC_PLT16_HA, R_PPC64_SECTOFF = R_PPC_SECTOFF, R_PPC64_SECTOFF_LO = R_PPC_SECTOFF_LO, R_PPC64_SECTOFF_HI = R_PPC_SECTOFF_HI, R_PPC64_SECTOFF_HA = R_PPC_SECTOFF_HA, R_PPC64_ADDR30 = 37, //< word30 (S + A - P) >> 2 R_PPC64_ADDR64 = 38, //< doubleword64 S + A R_PPC64_ADDR16_HIGHER = 39, //< half16 #higher(S + A) R_PPC64_ADDR16_HIGHERA = 40, //< half16 #highera(S + A) R_PPC64_ADDR16_HIGHEST = 41, //< half16 #highest(S + A) R_PPC64_ADDR16_HIGHESTA = 42, //< half16 #highesta(S + A) R_PPC64_UADDR64 = 43, //< doubleword64 S + A R_PPC64_REL64 = 44, //< doubleword64 S + A - P R_PPC64_PLT64 = 45, //< doubleword64 L + A R_PPC64_PLTREL64 = 46, //< doubleword64 L + A - P R_PPC64_TOC16 = 47, //< half16* S + A - .TOC R_PPC64_TOC16_LO = 48, //< half16 #lo(S + A - .TOC.) R_PPC64_TOC16_HI = 49, //< half16 #hi(S + A - .TOC.) R_PPC64_TOC16_HA = 50, //< half16 #ha(S + A - .TOC.) R_PPC64_TOC = 51, //< doubleword64 .TOC R_PPC64_PLTGOT16 = 52, //< half16* M + A R_PPC64_PLTGOT16_LO = 53, //< half16 #lo(M + A) R_PPC64_PLTGOT16_HI = 54, //< half16 #hi(M + A) R_PPC64_PLTGOT16_HA = 55, //< half16 #ha(M + A) R_PPC64_ADDR16_DS = 56, //< half16ds* (S + A) >> 2 R_PPC64_ADDR16_LO_DS = 57, //< half16ds #lo(S + A) >> 2 R_PPC64_GOT16_DS = 58, //< half16ds* (G + A) >> 2 R_PPC64_GOT16_LO_DS = 59, //< half16ds #lo(G + A) >> 2 R_PPC64_PLT16_LO_DS = 60, //< half16ds #lo(L + A) >> 2 R_PPC64_SECTOFF_DS = 61, //< half16ds* (R + A) >> 2 R_PPC64_SECTOFF_LO_DS = 62, //< half16ds #lo(R + A) >> 2 R_PPC64_TOC16_DS = 63, //< half16ds* (S + A - .TOC.) >> 2 R_PPC64_TOC16_LO_DS = 64, //< half16ds #lo(S + A - .TOC.) >> 2 R_PPC64_PLTGOT16_DS = 65, //< half16ds* (M + A) >> 2 R_PPC64_PLTGOT16_LO_DS = 66, //< half16ds #lo(M + A) >> 2 /* PowerPC64 relocations defined for the TLS access ABI. */ R_PPC64_TLS = 67, //< none (sym+add)@@tls R_PPC64_DTPMOD64 = 68, //< doubleword64 (sym+add)@@dtpmod R_PPC64_TPREL16 = 69, //< half16* (sym+add)@@tprel R_PPC64_TPREL16_LO = 70, //< half16 (sym+add)@@tprel@@l R_PPC64_TPREL16_HI = 71, //< half16 (sym+add)@@tprel@@h R_PPC64_TPREL16_HA = 72, //< half16 (sym+add)@@tprel@@ha R_PPC64_TPREL64 = 73, //< doubleword64 (sym+add)@@tprel R_PPC64_DTPREL16 = 74, //< half16* (sym+add)@@dtprel R_PPC64_DTPREL16_LO = 75, //< half16 (sym+add)@@dtprel@@l R_PPC64_DTPREL16_HI = 76, //< half16 (sym+add)@@dtprel@@h R_PPC64_DTPREL16_HA = 77, //< half16 (sym+add)@@dtprel@@ha R_PPC64_DTPREL64 = 78, //< doubleword64 (sym+add)@@dtprel R_PPC64_GOT_TLSGD16 = 79, //< half16* (sym+add)@@got@@tlsgd R_PPC64_GOT_TLSGD16_LO = 80, //< half16 (sym+add)@@got@@tlsgd@@l R_PPC64_GOT_TLSGD16_HI = 81, //< half16 (sym+add)@@got@@tlsgd@@h R_PPC64_GOT_TLSGD16_HA = 82, //< half16 (sym+add)@@got@@tlsgd@@ha R_PPC64_GOT_TLSLD16 = 83, //< half16* (sym+add)@@got@@tlsld R_PPC64_GOT_TLSLD16_LO = 84, //< half16 (sym+add)@@got@@tlsld@@l R_PPC64_GOT_TLSLD16_HI = 85, //< half16 (sym+add)@@got@@tlsld@@h R_PPC64_GOT_TLSLD16_HA = 86, //< half16 (sym+add)@@got@@tlsld@@ha R_PPC64_GOT_TPREL16_DS = 87, //< half16ds* (sym+add)@@got@@tprel R_PPC64_GOT_TPREL16_LO_DS = 88, //< half16ds (sym+add)@@got@@tprel@@l R_PPC64_GOT_TPREL16_HI = 89, //< half16 (sym+add)@@got@@tprel@@h R_PPC64_GOT_TPREL16_HA = 90, //< half16 (sym+add)@@got@@tprel@@ha R_PPC64_GOT_DTPREL16_DS = 91, //< half16ds* (sym+add)@@got@@dtprel R_PPC64_GOT_DTPREL16_LO_DS = 92, //< half16ds (sym+add)@@got@@dtprel@@l R_PPC64_GOT_DTPREL16_HI = 93, //< half16 (sym+add)@@got@@dtprel@@h R_PPC64_GOT_DTPREL16_HA = 94, //< half16 (sym+add)@@got@@dtprel@@ha R_PPC64_TPREL16_DS = 95, //< half16ds* (sym+add)@@tprel R_PPC64_TPREL16_LO_DS = 96, //< half16ds (sym+add)@@tprel@@l R_PPC64_TPREL16_HIGHER = 97, //< half16 (sym+add)@@tprel@@higher R_PPC64_TPREL16_HIGHERA = 98, //< half16 (sym+add)@@tprel@@highera R_PPC64_TPREL16_HIGHEST = 99, //< half16 (sym+add)@@tprel@@highest R_PPC64_TPREL16_HIGHESTA = 100, //< half16 (sym+add)@@tprel@@highesta R_PPC64_DTPREL16_DS = 101, //< half16ds* (sym+add)@@dtprel R_PPC64_DTPREL16_LO_DS = 102, //< half16ds (sym+add)@@dtprel@@l R_PPC64_DTPREL16_HIGHER = 103, //< half16 (sym+add)@@dtprel@@higher R_PPC64_DTPREL16_HIGHERA = 104, //< half16 (sym+add)@@dtprel@@highera R_PPC64_DTPREL16_HIGHEST = 105, //< half16 (sym+add)@@dtprel@@highest R_PPC64_DTPREL16_HIGHESTA = 106, //< half16 (sym+add)@@dtprel@@highesta /* Keep this the last entry. */ R_PPC64_NUM = 107, /* ARM relocs. */ R_ARM_NONE = 0, //< No reloc R_ARM_PC24 = 1, //< PC relative 26 bit branch R_ARM_ABS32 = 2, //< Direct 32 bit R_ARM_REL32 = 3, //< PC relative 32 bit R_ARM_PC13 = 4, R_ARM_ABS16 = 5, //< Direct 16 bit R_ARM_ABS12 = 6, //< Direct 12 bit R_ARM_THM_ABS5 = 7, R_ARM_ABS8 = 8, //< Direct 8 bit R_ARM_SBREL32 = 9, R_ARM_THM_PC22 = 10, R_ARM_THM_PC8 = 11, R_ARM_AMP_VCALL9 = 12, R_ARM_SWI24 = 13, R_ARM_THM_SWI8 = 14, R_ARM_XPC25 = 15, R_ARM_THM_XPC22 = 16, R_ARM_TLS_DTPMOD32 = 17, //< ID of module containing symbol R_ARM_TLS_DTPOFF32 = 18, //< Offset in TLS block R_ARM_TLS_TPOFF32 = 19, //< Offset in static TLS block R_ARM_COPY = 20, //< Copy symbol at runtime R_ARM_GLOB_DAT = 21, //< Create GOT entry R_ARM_JUMP_SLOT = 22, //< Create PLT entry R_ARM_RELATIVE = 23, //< Adjust by program base R_ARM_GOTOFF = 24, //< 32 bit offset to GOT R_ARM_GOTPC = 25, //< 32 bit PC relative offset to GOT R_ARM_GOT32 = 26, //< 32 bit GOT entry R_ARM_PLT32 = 27, //< 32 bit PLT address R_ARM_ALU_PCREL_7_0 = 32, R_ARM_ALU_PCREL_15_8 = 33, R_ARM_ALU_PCREL_23_15 = 34, R_ARM_LDR_SBREL_11_0 = 35, R_ARM_ALU_SBREL_19_12 = 36, R_ARM_ALU_SBREL_27_20 = 37, R_ARM_GNU_VTENTRY = 100, R_ARM_GNU_VTINHERIT = 101, R_ARM_THM_PC11 = 102, //< thumb unconditional branch R_ARM_THM_PC9 = 103, //< thumb conditional branch R_ARM_TLS_GD32 = 104, //< PC-rel 32 bit for global dynamic thread local data R_ARM_TLS_LDM32 = 105, //< PC-rel 32 bit for local dynamic thread local data R_ARM_TLS_LDO32 = 106, //< 32 bit offset relative to TLS block R_ARM_TLS_IE32 = 107, //< PC-rel 32 bit for GOT entry of static TLS block offset R_ARM_TLS_LE32 = 108, //< 32 bit offset relative to static TLS block R_ARM_RXPC25 = 249, R_ARM_RSBREL32 = 250, R_ARM_THM_RPC22 = 251, R_ARM_RREL32 = 252, R_ARM_RABS22 = 253, R_ARM_RPC24 = 254, R_ARM_RBASE = 255, /* Keep this the last entry. */ R_ARM_NUM = 256, /* IA-64 relocations. */ R_IA64_NONE = 0x00, //< none R_IA64_IMM14 = 0x21, //< symbol + addend, add imm14 R_IA64_IMM22 = 0x22, //< symbol + addend, add imm22 R_IA64_IMM64 = 0x23, //< symbol + addend, mov imm64 R_IA64_DIR32MSB = 0x24, //< symbol + addend, data4 MSB R_IA64_DIR32LSB = 0x25, //< symbol + addend, data4 LSB R_IA64_DIR64MSB = 0x26, //< symbol + addend, data8 MSB R_IA64_DIR64LSB = 0x27, //< symbol + addend, data8 LSB R_IA64_GPREL22 = 0x2a, //< @@gprel(sym + add), add imm22 R_IA64_GPREL64I = 0x2b, //< @@gprel(sym + add), mov imm64 R_IA64_GPREL32MSB = 0x2c, //< @@gprel(sym + add), data4 MSB R_IA64_GPREL32LSB = 0x2d, //< @@gprel(sym + add), data4 LSB R_IA64_GPREL64MSB = 0x2e, //< @@gprel(sym + add), data8 MSB R_IA64_GPREL64LSB = 0x2f, //< @@gprel(sym + add), data8 LSB R_IA64_LTOFF22 = 0x32, //< @@ltoff(sym + add), add imm22 R_IA64_LTOFF64I = 0x33, //< @@ltoff(sym + add), mov imm64 R_IA64_PLTOFF22 = 0x3a, //< @@pltoff(sym + add), add imm22 R_IA64_PLTOFF64I = 0x3b, //< @@pltoff(sym + add), mov imm64 R_IA64_PLTOFF64MSB = 0x3e, //< @@pltoff(sym + add), data8 MSB R_IA64_PLTOFF64LSB = 0x3f, //< @@pltoff(sym + add), data8 LSB R_IA64_FPTR64I = 0x43, //< @@fptr(sym + add), mov imm64 R_IA64_FPTR32MSB = 0x44, //< @@fptr(sym + add), data4 MSB R_IA64_FPTR32LSB = 0x45, //< @@fptr(sym + add), data4 LSB R_IA64_FPTR64MSB = 0x46, //< @@fptr(sym + add), data8 MSB R_IA64_FPTR64LSB = 0x47, //< @@fptr(sym + add), data8 LSB R_IA64_PCREL60B = 0x48, //< @@pcrel(sym + add), brl R_IA64_PCREL21B = 0x49, //< @@pcrel(sym + add), ptb, call R_IA64_PCREL21M = 0x4a, //< @@pcrel(sym + add), chk.s R_IA64_PCREL21F = 0x4b, //< @@pcrel(sym + add), fchkf R_IA64_PCREL32MSB = 0x4c, //< @@pcrel(sym + add), data4 MSB R_IA64_PCREL32LSB = 0x4d, //< @@pcrel(sym + add), data4 LSB R_IA64_PCREL64MSB = 0x4e, //< @@pcrel(sym + add), data8 MSB R_IA64_PCREL64LSB = 0x4f, //< @@pcrel(sym + add), data8 LSB R_IA64_LTOFF_FPTR22 = 0x52, //< @@ltoff(@@fptr(s+a)), imm22 R_IA64_LTOFF_FPTR64I = 0x53, //< @@ltoff(@@fptr(s+a)), imm64 R_IA64_LTOFF_FPTR32MSB = 0x54, //< @@ltoff(@@fptr(s+a)), data4 MSB R_IA64_LTOFF_FPTR32LSB = 0x55, //< @@ltoff(@@fptr(s+a)), data4 LSB R_IA64_LTOFF_FPTR64MSB = 0x56, //< @@ltoff(@@fptr(s+a)), data8 MSB R_IA64_LTOFF_FPTR64LSB = 0x57, //< @@ltoff(@@fptr(s+a)), data8 LSB R_IA64_SEGREL32MSB = 0x5c, //< @@segrel(sym + add), data4 MSB R_IA64_SEGREL32LSB = 0x5d, //< @@segrel(sym + add), data4 LSB R_IA64_SEGREL64MSB = 0x5e, //< @@segrel(sym + add), data8 MSB R_IA64_SEGREL64LSB = 0x5f, //< @@segrel(sym + add), data8 LSB R_IA64_SECREL32MSB = 0x64, //< @@secrel(sym + add), data4 MSB R_IA64_SECREL32LSB = 0x65, //< @@secrel(sym + add), data4 LSB R_IA64_SECREL64MSB = 0x66, //< @@secrel(sym + add), data8 MSB R_IA64_SECREL64LSB = 0x67, //< @@secrel(sym + add), data8 LSB R_IA64_REL32MSB = 0x6c, //< data 4 + REL R_IA64_REL32LSB = 0x6d, //< data 4 + REL R_IA64_REL64MSB = 0x6e, //< data 8 + REL R_IA64_REL64LSB = 0x6f, //< data 8 + REL R_IA64_LTV32MSB = 0x74, //< symbol + addend, data4 MSB R_IA64_LTV32LSB = 0x75, //< symbol + addend, data4 LSB R_IA64_LTV64MSB = 0x76, //< symbol + addend, data8 MSB R_IA64_LTV64LSB = 0x77, //< symbol + addend, data8 LSB R_IA64_PCREL21BI = 0x79, //< @@pcrel(sym + add), 21bit inst R_IA64_PCREL22 = 0x7a, //< @@pcrel(sym + add), 22bit inst R_IA64_PCREL64I = 0x7b, //< @@pcrel(sym + add), 64bit inst R_IA64_IPLTMSB = 0x80, //< dynamic reloc, imported PLT, MSB R_IA64_IPLTLSB = 0x81, //< dynamic reloc, imported PLT, LSB R_IA64_COPY = 0x84, //< copy relocation R_IA64_SUB = 0x85, //< Addend and symbol difference R_IA64_LTOFF22X = 0x86, //< LTOFF22, relaxable. R_IA64_LDXMOV = 0x87, //< Use of LTOFF22X. R_IA64_TPREL14 = 0x91, //< @@tprel(sym + add), imm14 R_IA64_TPREL22 = 0x92, //< @@tprel(sym + add), imm22 R_IA64_TPREL64I = 0x93, //< @@tprel(sym + add), imm64 R_IA64_TPREL64MSB = 0x96, //< @@tprel(sym + add), data8 MSB R_IA64_TPREL64LSB = 0x97, //< @@tprel(sym + add), data8 LSB R_IA64_LTOFF_TPREL22 = 0x9a, //< @@ltoff(@@tprel(s+a)), imm2 R_IA64_DTPMOD64MSB = 0xa6, //< @@dtpmod(sym + add), data8 MSB R_IA64_DTPMOD64LSB = 0xa7, //< @@dtpmod(sym + add), data8 LSB R_IA64_LTOFF_DTPMOD22 = 0xaa, //< @@ltoff(@@dtpmod(sym + add)), imm22 R_IA64_DTPREL14 = 0xb1, //< @@dtprel(sym + add), imm14 R_IA64_DTPREL22 = 0xb2, //< @@dtprel(sym + add), imm22 R_IA64_DTPREL64I = 0xb3, //< @@dtprel(sym + add), imm64 R_IA64_DTPREL32MSB = 0xb4, //< @@dtprel(sym + add), data4 MSB R_IA64_DTPREL32LSB = 0xb5, //< @@dtprel(sym + add), data4 LSB R_IA64_DTPREL64MSB = 0xb6, //< @@dtprel(sym + add), data8 MSB R_IA64_DTPREL64LSB = 0xb7, //< @@dtprel(sym + add), data8 LSB R_IA64_LTOFF_DTPREL22 = 0xba, //< @@ltoff(@@dtprel(s+a)), imm22 /* SH relocs. */ R_SH_NONE = 0, R_SH_DIR32 = 1, R_SH_REL32 = 2, R_SH_DIR8WPN = 3, R_SH_IND12W = 4, R_SH_DIR8WPL = 5, R_SH_DIR8WPZ = 6, R_SH_DIR8BP = 7, R_SH_DIR8W = 8, R_SH_DIR8L = 9, R_SH_SWITCH16 = 25, R_SH_SWITCH32 = 26, R_SH_USES = 27, R_SH_COUNT = 28, R_SH_ALIGN = 29, R_SH_CODE = 30, R_SH_DATA = 31, R_SH_LABEL = 32, R_SH_SWITCH8 = 33, R_SH_GNU_VTINHERIT = 34, R_SH_GNU_VTENTRY = 35, R_SH_TLS_GD_32 = 144, R_SH_TLS_LD_32 = 145, R_SH_TLS_LDO_32 = 146, R_SH_TLS_IE_32 = 147, R_SH_TLS_LE_32 = 148, R_SH_TLS_DTPMOD32 = 149, R_SH_TLS_DTPOFF32 = 150, R_SH_TLS_TPOFF32 = 151, R_SH_GOT32 = 160, R_SH_PLT32 = 161, R_SH_COPY = 162, R_SH_GLOB_DAT = 163, R_SH_JMP_SLOT = 164, R_SH_RELATIVE = 165, R_SH_GOTOFF = 166, R_SH_GOTPC = 167, /* Keep this the last entry. */ R_SH_NUM = 256, /* Additional s390 relocs */ R_390_NONE = 0, //< No reloc. R_390_8 = 1, //< Direct 8 bit. R_390_12 = 2, //< Direct 12 bit. R_390_16 = 3, //< Direct 16 bit. R_390_32 = 4, //< Direct 32 bit. R_390_PC32 = 5, //< PC relative 32 bit. R_390_GOT12 = 6, //< 12 bit GOT offset. R_390_GOT32 = 7, //< 32 bit GOT offset. R_390_PLT32 = 8, //< 32 bit PC relative PLT address. R_390_COPY = 9, //< Copy symbol at runtime. R_390_GLOB_DAT = 10, //< Create GOT entry. R_390_JMP_SLOT = 11, //< Create PLT entry. R_390_RELATIVE = 12, //< Adjust by program base. R_390_GOTOFF32 = 13, //< 32 bit offset to GOT. R_390_GOTPC = 14, //< 32 bit PC relative offset to GOT. R_390_GOT16 = 15, //< 16 bit GOT offset. R_390_PC16 = 16, //< PC relative 16 bit. R_390_PC16DBL = 17, //< PC relative 16 bit shifted by 1. R_390_PLT16DBL = 18, //< 16 bit PC rel. PLT shifted by 1. R_390_PC32DBL = 19, //< PC relative 32 bit shifted by 1. R_390_PLT32DBL = 20, //< 32 bit PC rel. PLT shifted by 1. R_390_GOTPCDBL = 21, //< 32 bit PC rel. GOT shifted by 1. R_390_64 = 22, //< Direct 64 bit. R_390_PC64 = 23, //< PC relative 64 bit. R_390_GOT64 = 24, //< 64 bit GOT offset. R_390_PLT64 = 25, //< 64 bit PC relative PLT address. R_390_GOTENT = 26, //< 32 bit PC rel. to GOT entry >> 1. R_390_GOTOFF16 = 27, //< 16 bit offset to GOT. R_390_GOTOFF64 = 28, //< 64 bit offset to GOT. R_390_GOTPLT12 = 29, //< 12 bit offset to jump slot. R_390_GOTPLT16 = 30, //< 16 bit offset to jump slot. R_390_GOTPLT32 = 31, //< 32 bit offset to jump slot. R_390_GOTPLT64 = 32, //< 64 bit offset to jump slot. R_390_GOTPLTENT = 33, //< 32 bit rel. offset to jump slot. R_390_PLTOFF16 = 34, //< 16 bit offset from GOT to PLT. R_390_PLTOFF32 = 35, //< 32 bit offset from GOT to PLT. R_390_PLTOFF64 = 36, //< 16 bit offset from GOT to PLT. R_390_TLS_LOAD = 37, //< Tag for load insn in TLS code. R_390_TLS_GDCALL = 38, //< Tag for function call in general dynamic TLS code. R_390_TLS_LDCALL = 39, //< Tag for function call in local dynamic TLS code. R_390_TLS_GD32 = 40, //< Direct 32 bit for general dynamic thread local data. R_390_TLS_GD64 = 41, //< Direct 64 bit for general dynamic thread local data. R_390_TLS_GOTIE12 = 42, //< 12 bit GOT offset for static TLS block offset. R_390_TLS_GOTIE32 = 43, //< 32 bit GOT offset for static TLS block offset. R_390_TLS_GOTIE64 = 44, //< 64 bit GOT offset for static TLS block offset. R_390_TLS_LDM32 = 45, //< Direct 32 bit for local dynamic thread local data in LE code. R_390_TLS_LDM64 = 46, //< Direct 64 bit for local dynamic thread local data in LE code. R_390_TLS_IE32 = 47, //< 32 bit address of GOT entry for negated static TLS block offset. R_390_TLS_IE64 = 48, //< 64 bit address of GOT entry for negated static TLS block offset. R_390_TLS_IEENT = 49, //< 32 bit rel. offset to GOT entry for negated static TLS block offset. R_390_TLS_LE32 = 50, //< 32 bit negated offset relative to static TLS block. R_390_TLS_LE64 = 51, //< 64 bit negated offset relative to static TLS block. R_390_TLS_LDO32 = 52, //< 32 bit offset relative to TLS block. R_390_TLS_LDO64 = 53, //< 64 bit offset relative to TLS block. R_390_TLS_DTPMOD = 54, //< ID of module containing symbol. R_390_TLS_DTPOFF = 55, //< Offset in TLS block. R_390_TLS_TPOFF = 56, //< Negated offset in static TLS block. R_390_20 = 57, //< Direct 20 bit. R_390_GOT20 = 58, //< 20 bit GOT offset. R_390_GOTPLT20 = 59, //< 20 bit offset to jump slot. R_390_TLS_GOTIE20 = 60, //< 20 bit GOT offset for static TLS block offset. /* Keep this the last entry. */ R_390_NUM = 61, /* CRIS relocations. */ R_CRIS_NONE = 0, R_CRIS_8 = 1, R_CRIS_16 = 2, R_CRIS_32 = 3, R_CRIS_8_PCREL = 4, R_CRIS_16_PCREL = 5, R_CRIS_32_PCREL = 6, R_CRIS_GNU_VTINHERIT = 7, R_CRIS_GNU_VTENTRY = 8, R_CRIS_COPY = 9, R_CRIS_GLOB_DAT = 10, R_CRIS_JUMP_SLOT = 11, R_CRIS_RELATIVE = 12, R_CRIS_16_GOT = 13, R_CRIS_32_GOT = 14, R_CRIS_16_GOTPLT = 15, R_CRIS_32_GOTPLT = 16, R_CRIS_32_GOTREL = 17, R_CRIS_32_PLT_GOTREL = 18, R_CRIS_32_PLT_PCREL = 19, R_CRIS_NUM = 20, /* AM33 relocations. */ R_MN10300_NONE = 0, //< No reloc. R_MN10300_32 = 1, //< Direct 32 bit. R_MN10300_16 = 2, //< Direct 16 bit. R_MN10300_8 = 3, //< Direct 8 bit. R_MN10300_PCREL32 = 4, //< PC-relative 32-bit. R_MN10300_PCREL16 = 5, //< PC-relative 16-bit signed. R_MN10300_PCREL8 = 6, //< PC-relative 8-bit signed. R_MN10300_GNU_VTINHERIT = 7, //< Ancient C++ vtable garbage... R_MN10300_GNU_VTENTRY = 8, //< ... collection annotation. R_MN10300_24 = 9, //< Direct 24 bit. R_MN10300_GOTPC32 = 10, //< 32-bit PCrel offset to GOT. R_MN10300_GOTPC16 = 11, //< 16-bit PCrel offset to GOT. R_MN10300_GOTOFF32 = 12, //< 32-bit offset from GOT. R_MN10300_GOTOFF24 = 13, //< 24-bit offset from GOT. R_MN10300_GOTOFF16 = 14, //< 16-bit offset from GOT. R_MN10300_PLT32 = 15, //< 32-bit PCrel to PLT entry. R_MN10300_PLT16 = 16, //< 16-bit PCrel to PLT entry. R_MN10300_GOT32 = 17, //< 32-bit offset to GOT entry. R_MN10300_GOT24 = 18, //< 24-bit offset to GOT entry. R_MN10300_GOT16 = 19, //< 16-bit offset to GOT entry. R_MN10300_COPY = 20, //< Copy symbol at runtime. R_MN10300_GLOB_DAT = 21, //< Create GOT entry. R_MN10300_JMP_SLOT = 22, //< Create PLT entry. R_MN10300_RELATIVE = 23, //< Adjust by program base. R_MN10300_NUM = 24, /* AMD x86-64 relocations. */ R_X86_64_NONE = 0, //< No reloc R_X86_64_64 = 1, //< Direct 64 bit R_X86_64_PC32 = 2, //< PC relative 32 bit signed R_X86_64_GOT32 = 3, //< 32 bit GOT entry R_X86_64_PLT32 = 4, //< 32 bit PLT address R_X86_64_COPY = 5, //< Copy symbol at runtime R_X86_64_GLOB_DAT = 6, //< Create GOT entry R_X86_64_JUMP_SLOT = 7, //< Create PLT entry R_X86_64_RELATIVE = 8, //< Adjust by program base R_X86_64_GOTPCREL = 9, //< 32 bit signed PC relative offset to GOT R_X86_64_32 = 10, //< Direct 32 bit zero extended R_X86_64_32S = 11, //< Direct 32 bit sign extended R_X86_64_16 = 12, //< Direct 16 bit zero extended R_X86_64_PC16 = 13, //< 16 bit sign extended pc relative R_X86_64_8 = 14, //< Direct 8 bit sign extended R_X86_64_PC8 = 15, //< 8 bit sign extended pc relative R_X86_64_DTPMOD64 = 16, //< ID of module containing symbol R_X86_64_DTPOFF64 = 17, //< Offset in module's TLS block R_X86_64_TPOFF64 = 18, //< Offset in initial TLS block R_X86_64_TLSGD = 19, //< 32 bit signed PC relative offset to two GOT entries for GD symbol R_X86_64_TLSLD = 20, //< 32 bit signed PC relative offset to two GOT entries for LD symbol R_X86_64_DTPOFF32 = 21, //< Offset in TLS block R_X86_64_GOTTPOFF = 22, //< 32 bit signed PC relative offset to GOT entry for IE symbol R_X86_64_TPOFF32 = 23, //< Offset in initial TLS block R_X86_64_NUM = 24, /* M32R relocs. */ R_M32R_NONE = 0, //< No reloc. R_M32R_16 = 1, //< Direct 16 bit. R_M32R_32 = 2, //< Direct 32 bit. R_M32R_24 = 3, //< Direct 24 bit. R_M32R_10_PCREL = 4, //< PC relative 10 bit shifted. R_M32R_18_PCREL = 5, //< PC relative 18 bit shifted. R_M32R_26_PCREL = 6, //< PC relative 26 bit shifted. R_M32R_HI16_ULO = 7, //< High 16 bit with unsigned low. R_M32R_HI16_SLO = 8, //< High 16 bit with signed low. R_M32R_LO16 = 9, //< Low 16 bit. R_M32R_SDA16 = 10, //< 16 bit offset in SDA. R_M32R_GNU_VTINHERIT = 11, R_M32R_GNU_VTENTRY = 12, /* M32R relocs use SHT_RELA. */ R_M32R_16_RELA = 33, //< Direct 16 bit. R_M32R_32_RELA = 34, //< Direct 32 bit. R_M32R_24_RELA = 35, //< Direct 24 bit. R_M32R_10_PCREL_RELA = 36, //< PC relative 10 bit shifted. R_M32R_18_PCREL_RELA = 37, //< PC relative 18 bit shifted. R_M32R_26_PCREL_RELA = 38, //< PC relative 26 bit shifted. R_M32R_HI16_ULO_RELA = 39, //< High 16 bit with unsigned low R_M32R_HI16_SLO_RELA = 40, //< High 16 bit with signed low R_M32R_LO16_RELA = 41, //< Low 16 bit R_M32R_SDA16_RELA = 42, //< 16 bit offset in SDA R_M32R_RELA_GNU_VTINHERIT = 43, R_M32R_RELA_GNU_VTENTRY = 44, R_M32R_REL32 = 45, //< PC relative 32 bit. R_M32R_GOT24 = 48, //< 24 bit GOT entry R_M32R_26_PLTREL = 49, //< 26 bit PC relative to PLT shifted R_M32R_COPY = 50, //< Copy symbol at runtime R_M32R_GLOB_DAT = 51, //< Create GOT entry R_M32R_JMP_SLOT = 52, //< Create PLT entry R_M32R_RELATIVE = 53, //< Adjust by program base R_M32R_GOTOFF = 54, //< 24 bit offset to GOT R_M32R_GOTPC24 = 55, //< 24 bit PC relative offset to GOT R_M32R_GOT16_HI_ULO = 56, //< High 16 bit GOT entry with unsigned low R_M32R_GOT16_HI_SLO = 57, //< High 16 bit GOT entry with signed low R_M32R_GOT16_LO = 58, //< Low 16 bit GOT entry R_M32R_GOTPC_HI_ULO = 59, //< High 16 bit PC relative offset to GOT with unsigned low R_M32R_GOTPC_HI_SLO = 60, //< High 16 bit PC relative offset to GOT with signed low R_M32R_GOTPC_LO = 61, //< Low 16 bit PC relative offset to GOT R_M32R_GOTOFF_HI_ULO = 62, //< High 16 bit offset to GOT with unsigned low R_M32R_GOTOFF_HI_SLO = 63, //< High 16 bit offset to GOT with signed low R_M32R_GOTOFF_LO = 64, //< Low 16 bit offset to GOT R_M32R_NUM = 256, //< Keep this the last entry. }; } #endif