melf-1.3.1: src/Data/Elf/Constants/Data.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Data.Elf.Constants.Data where
import Data.Binary
import Data.Binary.Put
import Data.Binary.Get
import Data.Bits
import Data.Elf.Constants.TH
import Data.Endian
-- | Operating system and ABI for which the object is prepared
$(mkDeclarations BaseWord8 "ElfOSABI" "ELFOSABI"
[ ("_SYSV", 0, "No extensions or unspecified")
, ("_HPUX", 1, "Hewlett-Packard HP-UX")
, ("_NETBSD", 2, "NetBSD")
, ("_LINUX", 3, "Linux")
, ("_SOLARIS", 6, "Sun Solaris")
, ("_AIX", 7, "AIX")
, ("_IRIX", 8, "IRIX")
, ("_FREEBSD", 9, "FreeBSD")
, ("_TRU64", 10, "Compaq TRU64 UNIX")
, ("_MODESTO", 11, "Novell Modesto")
, ("_OPENBSD", 12, "Open BSD")
, ("_OPENVMS", 13, "Open VMS")
, ("_NSK", 14, "Hewlett-Packard Non-Stop Kernel")
, ("_AROS", 15, "Amiga Research OS")
, ("_ARM", 97, "ARM")
, ("_STANDALONE", 255, "Standalone (embedded) application")
])
-- | Object file type
$(mkDeclarations BaseWord16 "ElfType" "ET"
[ ("_NONE", 0, "Unspecified type")
, ("_REL", 1, "Relocatable object file")
, ("_EXEC", 2, "Executable object file")
, ("_DYN", 3, "Shared object file")
, ("_CORE", 4, "Core dump object file")
])
-- | Target architecture
$(mkDeclarations BaseWord16 "ElfMachine" "EM"
[ ("_NONE", 0, "No machine")
, ("_M32", 1, "AT&T WE 32100")
, ("_SPARC", 2, "SPARC")
, ("_386", 3, "Intel 80386")
, ("_68K", 4, "Motorola 68000")
, ("_88K", 5, "Motorola 88000")
, ("_486", 6, "Intel i486 (DO NOT USE THIS ONE)")
, ("_860", 7, "Intel 80860")
, ("_MIPS", 8, "MIPS I Architecture")
, ("_S370", 9, "IBM System/370 Processor")
, ("_MIPS_RS3_LE", 10, "MIPS RS3000 Little-endian")
, ("_SPARC64", 11, "SPARC 64-bit")
, ("_PARISC", 15, "Hewlett-Packard PA-RISC")
, ("_VPP500", 17, "Fujitsu VPP500")
, ("_SPARC32PLUS", 18, "Enhanced instruction set SPARC")
, ("_960", 19, "Intel 80960")
, ("_PPC", 20, "PowerPC")
, ("_PPC64", 21, "64-bit PowerPC")
, ("_S390", 22, "IBM System/390 Processor")
, ("_SPU", 23, "Cell SPU")
, ("_V800", 36, "NEC V800")
, ("_FR20", 37, "Fujitsu FR20")
, ("_RH32", 38, "TRW RH-32")
, ("_RCE", 39, "Motorola RCE")
, ("_ARM", 40, "Advanced RISC Machines ARM")
, ("_ALPHA", 41, "Digital Alpha")
, ("_SH", 42, "Hitachi SH")
, ("_SPARCV9", 43, "SPARC Version 9")
, ("_TRICORE", 44, "Siemens TriCore embedded processor")
, ("_ARC", 45, "Argonaut RISC Core, Argonaut Technologies Inc.")
, ("_H8_300", 46, "Hitachi H8/300")
, ("_H8_300H", 47, "Hitachi H8/300H")
, ("_H8S", 48, "Hitachi H8S")
, ("_H8_500", 49, "Hitachi H8/500")
, ("_IA_64", 50, "Intel IA-64 processor architecture")
, ("_MIPS_X", 51, "Stanford MIPS-X")
, ("_COLDFIRE", 52, "Motorola ColdFire")
, ("_68HC12", 53, "Motorola M68HC12")
, ("_MMA", 54, "Fujitsu MMA Multimedia Accelerator")
, ("_PCP", 55, "Siemens PCP")
, ("_NCPU", 56, "Sony nCPU embedded RISC processor")
, ("_NDR1", 57, "Denso NDR1 microprocessor")
, ("_STARCORE", 58, "Motorola Star*Core processor")
, ("_ME16", 59, "Toyota ME16 processor")
, ("_ST100", 60, "STMicroelectronics ST100 processor")
, ("_TINYJ", 61, "Advanced Logic Corp. TinyJ embedded processor family")
, ("_X86_64", 62, "AMD x86-64 architecture")
, ("_PDSP", 63, "Sony DSP Processor")
, ("_FX66", 66, "Siemens FX66 microcontroller")
, ("_ST9PLUS", 67, "STMicroelectronics ST9+ 8/16 bit microcontroller")
, ("_ST7", 68, "STMicroelectronics ST7 8-bit microcontroller")
, ("_68HC16", 69, "Motorola MC68HC16 Microcontroller")
, ("_68HC11", 70, "Motorola MC68HC11 Microcontroller")
, ("_68HC08", 71, "Motorola MC68HC08 Microcontroller")
, ("_68HC05", 72, "Motorola MC68HC05 Microcontroller")
, ("_SVX", 73, "Silicon Graphics SVx")
, ("_ST19", 74, "STMicroelectronics ST19 8-bit microcontroller")
, ("_VAX", 75, "Digital VAX")
, ("_CRIS", 76, "Axis Communications 32-bit embedded processor")
, ("_JAVELIN", 77, "Infineon Technologies 32-bit embedded processor")
, ("_FIREPATH", 78, "Element 14 64-bit DSP Processor")
, ("_ZSP", 79, "LSI Logic 16-bit DSP Processor")
, ("_MMIX", 80, "Donald Knuth's educational 64-bit processor")
, ("_HUANY", 81, "Harvard University machine-independent object files")
, ("_PRISM", 82, "SiTera Prism")
, ("_AVR", 83, "Atmel AVR 8-bit microcontroller")
, ("_FR30", 84, "Fujitsu FR30")
, ("_D10V", 85, "Mitsubishi D10V")
, ("_D30V", 86, "Mitsubishi D30V")
, ("_V850", 87, "NEC v850")
, ("_M32R", 88, "Mitsubishi M32R")
, ("_MN10300", 89, "Matsushita MN10300")
, ("_MN10200", 90, "Matsushita MN10200")
, ("_PJ", 91, "picoJava")
, ("_OPENRISC", 92, "OpenRISC 32-bit embedded processor")
, ("_ARC_A5", 93, "ARC Cores Tangent-A5")
, ("_XTENSA", 94, "Tensilica Xtensa Architecture")
, ("_VIDEOCORE", 95, "Alphamosaic VideoCore processor")
, ("_TMM_GPP", 96, "Thompson Multimedia General Purpose Processor")
, ("_NS32K", 97, "National Semiconductor 32000 series")
, ("_TPC", 98, "Tenor Network TPC processor")
, ("_SNP1K", 99, "Trebia SNP 1000 processor")
, ("_ST200", 100, "STMicroelectronics (www.st.com) ST200 microcontroller")
, ("_IP2K", 101, "Ubicom IP2xxx microcontroller family")
, ("_MAX", 102, "MAX Processor")
, ("_CR", 103, "National Semiconductor CompactRISC microprocessor")
, ("_F2MC16", 104, "Fujitsu F2MC16")
, ("_MSP430", 105, "Texas Instruments embedded microcontroller msp430")
, ("_BLACKFIN", 106, "Analog Devices Blackfin (DSP) processor")
, ("_SE_C33", 107, "S1C33 Family of Seiko Epson processors")
, ("_SEP", 108, "Sharp embedded microprocessor")
, ("_ARCA", 109, "Arca RISC Microprocessor")
, ("_UNICORE", 110, "Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University")
, ("_AARCH64", 183, "ELF for the Arm 64-bit Architecture (AArch64)")
])
-- | Section type
$(mkDeclarations BaseWord32 "ElfSectionType" "SHT"
[ ("_NULL", 0, "Identifies an empty section header.")
, ("_PROGBITS", 1, "Contains information defined by the program")
, ("_SYMTAB", 2, "Contains a linker symbol table")
, ("_STRTAB", 3, "Contains a string table")
, ("_RELA", 4, "Contains \"Rela\" type relocation entries")
, ("_HASH", 5, "Contains a symbol hash table")
, ("_DYNAMIC", 6, "Contains dynamic linking tables")
, ("_NOTE", 7, "Contains note information")
, ("_NOBITS", 8, "Contains uninitialized space; does not occupy any space in the file")
, ("_REL", 9, "Contains \"Rel\" type relocation entries")
, ("_SHLIB", 10, "Reserved")
, ("_DYNSYM", 11, "Contains a dynamic loader symbol table")
])
-- | Segment type
$(mkDeclarations BaseWord32 "ElfSegmentType" "PT"
[ ("_NULL", 0, "Unused entry")
, ("_LOAD", 1, "Loadable segment")
, ("_DYNAMIC", 2, "Dynamic linking tables")
, ("_INTERP", 3, "Program interpreter path name")
, ("_NOTE", 4, "Note section")
, ("_SHLIB", 5, "Reserved")
, ("_PHDR", 6, "Program header table")
])
-- | Attributes of the section
$(mkDeclarations BaseWord64 "ElfSectionFlag" "SHF"
[ ("_WRITE", 1 `shiftL` 0, "Section contains writable data")
, ("_ALLOC", 1 `shiftL` 1, "Section is allocated in memory image of program")
, ("_EXECINSTR", 1 `shiftL` 2, "Section contains executable instructions")
])
-- | Attributes of the segment
$(mkDeclarations BaseWord32 "ElfSegmentFlag" "PF"
[ ("_X", 1 `shiftL` 0, "Execute permission")
, ("_W", 1 `shiftL` 1, "Write permission")
, ("_R", 1 `shiftL` 2, "Read permission")
])
-- | Symbol type
$(mkDeclarations BaseWord8 "ElfSymbolType" "STT"
[ ("_NoType", 0, "NoType")
, ("_Object", 1, "Object")
, ("_Func", 2, "Func")
, ("_Section", 3, "Section")
, ("_File", 4, "File")
, ("_Common", 5, "Common")
, ("_TLS", 6, "TLS")
, ("_LoOS", 10, "LoOS")
, ("_HiOS", 12, "HiOS")
, ("_LoProc", 13, "LoProc")
, ("_HiProc", 15, "HiProc")
])
-- | Symbol binding
$(mkDeclarations BaseWord8 "ElfSymbolBinding" "STB"
[ ("_Local", 0, "")
, ("_Global", 1, "")
, ("_Weak", 2, "")
, ("_LoOS", 10, "")
, ("_HiOS", 12, "")
, ("_LoProc", 13, "")
, ("_HiProc", 15, "")
])
-- | Section index
$(mkDeclarations BaseWord16 "ElfSectionIndex" "SHN"
[ ("_Undef", 0, "")
, ("_LoProc", 0xFF00, "")
, ("_HiProc", 0xFF1F, "")
, ("_LoOS", 0xFF20, "")
, ("_HiOS", 0xFF3F, "")
, ("_Abs", 0xFFF1, "")
, ("_Common", 0xFFF2, "")
])
-- | AARCH64 relocation type
$(mkDeclarations BaseWord32 "ElfRelocationType_AARCH64" "R_AARCH64"
-- Null relocation codes
[ ("_NONE", 0, "None")
, ("_NONE_", 256, "None")
-- Data relocations
, ("_ABS64", 257, "S + A | No overflow check")
, ("_ABS32", 258, "S + A | Check that -2^31 <= X < 2^32")
, ("_ABS16", 259, "S + A | Check that -2^15 <= X < 2^16")
, ("_PREL64", 260, "S + A - P | No overflow check")
, ("_PREL32", 261, "S + A - P | Check that -2^31 <= X < 2^32")
, ("_PREL16", 262, "S + A - P | Check that -2^15 <= X < 2^16")
, ("_PLT32", 314, "S + A - P | Check that -2^31 <= X < 2^31 see call and jump relocations")
-- Group relocations to create a 16-, 32-, 48-, or 64-bit unsigned data value or address inline
, ("_MOVW_UABS_G0", 263, "S + A | Set a MOV[KZ] immediate field to bits [15: 0] of X; check that 0 <= X < 2^16")
, ("_MOVW_UABS_G0_NC", 264, "S + A | Set a MOV[KZ] immediate field to bits [15: 0] of X. No overflow check")
, ("_MOVW_UABS_G1", 265, "S + A | Set a MOV[KZ] immediate field to bits [31:16] of X; check that 0 <= X < 2^32")
, ("_MOVW_UABS_G1_NC", 266, "S + A | Set a MOV[KZ] immediate field to bits [31:16] of X. No overflow check")
, ("_MOVW_UABS_G2", 267, "S + A | Set a MOV[KZ] immediate field to bits [47:32] of X; check that 0 <= X < 2^48")
, ("_MOVW_UABS_G2_NC", 268, "S + A | Set a MOV[KZ] immediate field to bits [47:32] of X. No overflow check")
, ("_MOVW_UABS_G3", 269, "S + A | Set a MOV[KZ] immediate field to bits [63:48] of X (no overflow check needed)")
-- Group relocations to create a 16, 32, 48, or 64 bit signed data or offset value inline
, ("_MOVW_SABS_G0", 270, "S + A | Set a MOV[NZ] immediate field using bits [15: 0] of X; check -2^16 <= X < 2^16")
, ("_MOVW_SABS_G1", 271, "S + A | Set a MOV[NZ] immediate field using bits [31:16] of X; check -2^32 <= X < 2^32")
, ("_MOVW_SABS_G2", 272, "S + A | Set a MOV[NZ] immediate field using bits [47:32] of X; check -2^48 <= X < 2^48")
-- Relocations to generate 19, 21 and 33 bit PC-relative addresses
, ("_LD_PREL_LO19", 273, "S + A - P | Set a load-literal immediate value to bits [20:2] of X; check that -2^20 <= X < 2^20")
, ("_ADR_PREL_LO21", 274, "S + A - P | Set an ADR immediate value to bits [20:0] of X; check that -2^20 <= X < 2^20")
, ("_ADR_PREL_PG_HI21", 275, "Page(S + A) - Page(P) | Set an ADRP immediate value to bits [32:12] of the X; check that -2^32 <= X < 2^32")
, ("_ADR_PREL_PG_HI21_NC", 276, "Page(S + A) - Page(P) | Set an ADRP immediate value to bits [32:12] of the X. No overflow check")
, ("_ADD_ABS_LO12_NC", 277, "S + A | Set an ADD immediate value to bits [11:0] of X. No overflow check. Used with relocations ADR_PREL_PG_HI21 and ADR_PREL_PG_HI21_NC")
, ("_LDST8_ABS_LO12_NC", 278, "S + A | Set an LD/ST immediate value to bits [11:0] of X. No overflow check. Used with relocations ADR_PREL_PG_HI21 and ADR_PREL_PG_HI21_NC")
, ("_LDST16_ABS_LO12_NC", 284, "S + A | Set an LD/ST immediate value to bits [11:1] of X. No overflow check")
, ("_LDST32_ABS_LO12_NC", 285, "S + A | Set the LD/ST immediate value to bits [11:2] of X. No overflow check")
, ("_LDST64_ABS_LO12_NC", 286, "S + A | Set the LD/ST immediate value to bits [11:3] of X. No overflow check")
, ("_LDST128_ABS_LO12_NC", 299, "S + A | Set the LD/ST immediate value to bits [11:4] of X. No overflow check")
-- Relocations for control-flow instructions - all offsets are a multiple of 4
, ("_TSTBR14", 279, "S + A - P | Set the immediate field of a TBZ/TBNZ instruction to bits [15:2] of X; check -2^15 <= X < 2^15")
, ("_CONDBR19", 280, "S + A - P | Set the immediate field of a conditional branch instruction to bits [20:2] of X; check -2^20 <= X< 2^20")
, ("_JUMP26", 282, "S + A - P | Set a B immediate field to bits [27:2] of X; check that -2^27 <= X < 2^27")
, ("_CALL26", 283, "S + A - P | Set a CALL immediate field to bits [27:2] of X; check that -2^27 <= X < 2^27")
-- Group relocations to create a 16, 32, 48, or 64 bit PC-relative offset inline
, ("_MOVW_PREL_G0", 287, "S + A - P | Set a MOV[NZ]immediate field to bits [15:0] of X")
, ("_MOVW_PREL_G0_NC", 288, "S + A - P | Set a MOVK immediate field to bits [15:0] of X. No overflow check")
, ("_MOVW_PREL_G1", 289, "S + A - P | Set a MOV[NZ]immediate field to bits [31:16] of X")
, ("_MOVW_PREL_G1_NC", 290, "S + A - P | Set a MOVK immediate field to bits [31:16] of X. No overflow check")
, ("_MOVW_PREL_G2", 291, "S + A - P | Set a MOV[NZ]immediate value to bits [47:32] of X")
, ("_MOVW_PREL_G2_NC", 292, "S + A - P | Set a MOVK immediate field to bits [47:32] of X. No overflow check")
, ("_MOVW_PREL_G3", 293, "S + A - P | Set a MOV[NZ]immediate value to bits [63:48] of X")
-- Group relocations to create a 16, 32, 48, or 64 bit GOT-relative offsets inline
, ("_MOVW_GOTOFF_G0", 300, "G(GDAT(S + A)) - GOT | Set a MOV[NZ] immediate field to bits [15:0] of X")
, ("_MOVW_GOTOFF_G0_NC", 301, "G(GDAT(S + A)) - GOT | Set a MOVK immediate field to bits [15:0] of X. No overflow check")
, ("_MOVW_GOTOFF_G1", 302, "G(GDAT(S + A)) - GOT | Set a MOV[NZ] immediate value to bits [31:16] of X")
, ("_MOVW_GOTOFF_G1_NC", 303, "G(GDAT(S + A)) - GOT | Set a MOVK immediate value to bits [31:16] of X. No overflow check")
, ("_MOVW_GOTOFF_G2", 304, "G(GDAT(S + A)) - GOT | Set a MOV[NZ] immediate value to bits [47:32] of X")
, ("_MOVW_GOTOFF_G2_NC", 305, "G(GDAT(S + A)) - GOT | Set a MOVK immediate value to bits [47:32] of X. No overflow check")
, ("_MOVW_GOTOFF_G3", 306, "G(GDAT(S + A)) - GOT | Set a MOV[NZ] immediate value to bits [63:48] of X")
-- GOT-relative data relocations
, ("_GOTREL64", 307, "S + A - GOT | Set the data to a 64-bit offset relative to the GOT")
, ("_GOTREL32", 308, "S + A - GOT | Set the data to a 32-bit offset relative to GOT, treated as signed; check that -2^31 <= X < 2^31")
-- GOT-relative instruction relocations
, ("_GOT_LD_PREL19", 309, "G(GDAT(S + A))- P | Set a load-literal immediate field to bits [20:2] of X; check –2^20 <= X < 2^20")
, ("_LD64_GOTOFF_LO15", 310, "G(GDAT(S + A))- GOT | Set a LD/ST immediate field to bits [14:3] of X; check that 0 <= X < 2^15 , X&7 = 0")
, ("_ADR_GOT_PAGE", 311, "Page(G(GDAT(S + A)))- Page(P) | Set the immediate value of an ADRP to bits [32:12] of X; check that –2^32 <= X < 2^32")
, ("_LD64_GOT_LO12_NC", 312, "G(GDAT(S + A)) | Set the LD/ST immediate field to bits [11:3] of X. No overflow check; check that X&7 = 0")
, ("_LD64_GOTPAGE_LO15", 313, "G(GDAT(S + A))- Page(GOT) | Set the LD/ST immediate field to bits [14:3] of X; check that 0 <= X < 2^15, X&7 = 0")
-- Local Dynamic TLS relocations
, ("_TLSLD_ADR_PREL21", 517, "G(GLDM(S))) - P | Set an ADR immediate field to bits [20:0] of X; check –2^20 <= X < 2^20")
, ("_TLSLD_ADR_PAGE21", 518, "Page(G(GLDM(S))) - Page(P) | Set an ADRP immediate field to bits [32:12] of X; check –2^32 <= X < 2^32")
, ("_TLSLD_ADD_LO12_NC", 519, "G(GLDM(S)) | Set an ADD immediate field to bits [11:0] of X. No overflow check")
, ("_TLSLD_MOVW_G1", 520, "G(GLDM(S)) - GOT | Set a MOV[NZ] immediate field to bits [31:16] of X")
, ("_TLSLD_MOVW_G0_NC", 521, "G(GLDM(S)) - GOT | Set a MOVK immediate field to bits [15:0] of X. No overflow check")
, ("_TLSLD_LD_PREL19", 522, "G(GLDM(S)) - P | Set a load-literal immediate field to bits [20:2] of X; check –2^20 <= X < 2^20")
, ("_TLSLD_MOVW_DTPREL_G2", 523, "DTPREL(S+A) | Set a MOV[NZ] immediate field to bits [47:32] of X")
, ("_TLSLD_MOVW_DTPREL_G1", 524, "DTPREL(S+A) | Set a MOV[NZ] immediate field to bits [31:16] of X")
, ("_TLSLD_MOVW_DTPREL_G1_NC", 525, "DTPREL(S+A) | Set a MOVK immediate field to bits [31:16] of X. No overflow check")
, ("_TLSLD_MOVW_DTPREL_G0", 526, "DTPREL(S+A) | Set a MOV[NZ] immediate field to bits [15:0] of X")
, ("_TLSLD_MOVW_DTPREL_G0_NC", 527, "DTPREL(S+A) | Set a MOVK immediate field to bits [15:0] of X. No overflow check")
, ("_TLSLD_ADD_DTPREL_HI12", 528, "DTPREL(S+A) | Set an ADD immediate field to bits [23:12] of X; check 0 <= X < 2^24")
, ("_TLSLD_ADD_DTPREL_LO12", 529, "DTPREL(S+A) | Set an ADD immediate field to bits [11:0] of X; check 0 <= X < 2^12")
, ("_TLSLD_ADD_DTPREL_LO12_NC", 530, "DTPREL(S+A) | Set an ADD immediate field to bits [11:0] of X. No overflow check")
, ("_TLSLD_LDST8_DTPREL_LO12", 531, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:0] of X; check 0 <= X < 2^12")
, ("_TLSLD_LDST8_DTPREL_LO12_NC", 532, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:0] of X. No overflow check")
, ("_TLSLD_LDST16_DTPREL_LO12", 533, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:1] of X; check 0 <= X < 2^12")
, ("_TLSLD_LDST16_DTPREL_LO12_NC", 534, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:1] of X. No overflow check")
, ("_TLSLD_LDST32_DTPREL_LO12", 535, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:2] of X; check 0 <= X < 2^12")
, ("_TLSLD_LDST32_DTPREL_LO12_NC", 536, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:2] of X. No overflow check")
, ("_TLSLD_LDST64_DTPREL_LO12", 537, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:3] of X; check 0 <= X < 2^12")
, ("_TLSLD_LDST64_DTPREL_LO12_NC", 538, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:3] of X. No overflow check")
, ("_TLSLD_LDST128_DTPREL_LO12", 572, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:4] of X; check 0 <= X < 2^12")
, ("_TLSLD_LDST128_DTPREL_LO12_NC", 573, "DTPREL(S+A) | Set a LD/ST offset field to bits [11:4] of X. No overflow check")
-- Initial Exec TLS relocations
, ("_TLSIE_MOVW_GOTTPREL_G1", 539, "G(GTPREL(S+A)) - | GOT Set a MOV[NZ] immediate field to bits [31:16] of X")
, ("_TLSIE_MOVW_GOTTPREL_G0_NC", 540, "G(GTPREL(S+A)) - | GOT Set MOVK immediate to bits [15:0] of X. No overflow check")
, ("_TLSIE_ADR_GOTTPREL_PAGE21", 541, "Page(G(GTPREL(S+A))) - Page(P) | Set an ADRP immediate field to bits [32:12] of X; check –2^32 <= X < 2^32")
, ("_TLSIE_LD64_GOTTPREL_LO12_NC", 542, "G(GTPREL(S+A)) | Set an LD offset field to bits [11:3] of X. No overflow check; check that X&7=0")
, ("_TLSIE_LD_GOTTPREL_PREL19", 543, "G(GTPREL(S+A)) - P | Set a load-literal immediate to bits [20:2] of X; check –2^20 <= X < 2^20")
-- Local Exec TLS relocations
, ("_TLSLE_MOVW_TPREL_G2", 544, "TPREL(S+A) | Set a MOV[NZ] immediate field to bits [47:32] of X")
, ("_TLSLE_MOVW_TPREL_G1", 545, "TPREL(S+A) | Set a MOV[NZ] immediate field to bits [31:16] of X")
, ("_TLSLE_MOVW_TPREL_G1_NC", 546, "TPREL(S+A) | Set a MOVK immediate field to bits [31:16] of X. No overflow check")
, ("_TLSLE_MOVW_TPREL_G0", 547, "TPREL(S+A) | Set a MOV[NZ] immediate field to bits [15:0] of X")
, ("_TLSLE_MOVW_TPREL_G0_NC", 548, "TPREL(S+A) | Set a MOVK immediate field to bits [15:0] of X. No overflow check")
, ("_TLSLE_ADD_TPREL_HI12", 549, "TPREL(S+A) | Set an ADD immediate field to bits [23:12] of X; check 0 <= X < 2^24")
, ("_TLSLE_ADD_TPREL_LO12", 550, "TPREL(S+A) | Set an ADD immediate field to bits [11:0] of X; check 0 <= X < 2^12")
, ("_TLSLE_ADD_TPREL_LO12_NC", 551, "TPREL(S+A) | Set an ADD immediate field to bits [11:0] of X. No overflow check")
, ("_TLSLE_LDST8_TPREL_LO12", 552, "TPREL(S+A) | Set a LD/ST offset field to bits [11:0] of X; check 0 <= X < 2^12")
, ("_TLSLE_LDST8_TPREL_LO12_NC", 553, "TPREL(S+A) | Set a LD/ST offset field to bits [11:0] of X. No overflow check")
, ("_TLSLE_LDST16_TPREL_LO12", 554, "TPREL(S+A) | Set a LD/ST offset field to bits [11:1] of X; check 0 <= X < 2^12")
, ("_TLSLE_LDST16_TPREL_LO12_NC", 555, "TPREL(S+A) | Set a LD/ST offset field to bits [11:1] of X. No overflow check")
, ("_TLSLE_LDST32_TPREL_LO12", 556, "TPREL(S+A) | Set a LD/ST offset field to bits [11:2] of X; check 0 <= X < 2^12")
, ("_TLSLE_LDST32_TPREL_LO12_NC", 557, "TPREL(S+A) | Set a LD/ST offset field to bits [11:2] of X. No overflow check")
, ("_TLSLE_LDST64_TPREL_LO12", 558, "TPREL(S+A) | Set a LD/ST offset field to bits [11:3] of X; check 0 <= X < 2^12")
, ("_TLSLE_LDST64_TPREL_LO12_NC", 559, "TPREL(S+A) | Set a LD/ST offset field to bits [11:3] of X. No overflow check")
, ("_TLSLE_LDST128_TPREL_LO12", 570, "TPREL(S+A) | Set a LD/ST offset field to bits [11:4] of X; check 0 <= X < 2^12")
, ("_TLSLE_LDST128_TPREL_LO12_NC", 571, "TPREL(S+A) | Set a LD/ST offset field to bits [11:4] of X. No overflow check")
-- TLS descriptor relocations
, ("_TLSDESC_LD_PREL19", 560, "G(GTLSDESC(S+A)) - P | Set a load-literal immediate to bits [20:2]; check -2^20 <= X < 2^20 ; check X & 3 = 0")
, ("_TLSDESC_ADR_PREL21", 561, "G(GTLSDESC(S+A)) - P | Set an ADR immediate field to bits [20:0]; check -2^20 <= X < 2^20")
, ("_TLSDESC_ADR_PAGE21", 562, "Page(G(GTLSDESC(S+A))) - Page(P) | Set an ADRP immediate field to bits [32:12] of X; check -2^32 <= X < 2^32")
, ("_TLSDESC_LD64_LO12", 563, "G(GTLSDESC(S+A)) | Set an LD offset field to bits [11:3] of X. No overflow check; check X & 7 = 0")
, ("_TLSDESC_ADD_LO12", 564, "G(GTLSDESC(S+A)) | Set an ADD immediate field to bits [11:0] of X. No overflow check")
, ("_TLSDESC_OFF_G1", 565, "G(GTLSDESC(S+A)) - GOT | Set a MOV[NZ] immediate field to bits [31:16] of X; check -2^32 <= X < 2^32")
, ("_TLSDESC_OFF_G0_NC", 566, "G(GTLSDESC(S+A)) - GOT | Set a MOVK immediate field to bits [15:0] of X. No overflow check")
, ("_TLSDESC_LDR", 567, "None | For relaxation only. Must be used to identify an LDR instruction which loads the TLS descriptor function pointer for S + A if it has no other relocation")
, ("_TLSDESC_ADD", 568, "None | For relaxation only. Must be used to identify an ADD instruction which computes the address of the TLS Descriptor for S + A if it has no other relocation")
, ("_TLSDESC_CALL", 569, "None | For relaxation only. Must be used to identify a BLR instruction which performs an indirect call to the TLS descriptor function for S + A")
-- Dynamic relocations
, ("_COPY", 1024, "")
, ("_GLOB_DAT", 1025, "S + A")
, ("_JUMP_SLOT", 1026, "S + A")
, ("_RELATIVE", 1027, "Delta(S + A)")
, ("_TLS_DTPMOD", 1028, "DTPREL(S + A)")
, ("_TLS_DTPREL", 1029, "LDM(S)")
, ("_TLS_TPREL", 1030, "TPREL(S + A)")
, ("_TLSDESC", 1031, "TLSDESC(S + A)")
, ("_IRELATIVE", 1032, "Indirect(Delta(S) + A)")
])