about summary refs log tree commit diff stats
path: root/src/miasm/loader/elf.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/miasm/loader/elf.py')
-rw-r--r--src/miasm/loader/elf.py1538
1 files changed, 1538 insertions, 0 deletions
diff --git a/src/miasm/loader/elf.py b/src/miasm/loader/elf.py
new file mode 100644
index 00000000..74258782
--- /dev/null
+++ b/src/miasm/loader/elf.py
@@ -0,0 +1,1538 @@
+#! /usr/bin/env python
+
+from miasm.loader.cstruct import CStruct
+
+class Ehdr(CStruct):
+    _fields = [ ("ident","16s"),
+                ("type","u16"),
+                ("machine","u16"),
+                ("version","u32"),
+                ("entry","ptr"),
+                ("phoff","ptr"),
+                ("shoff","ptr"),
+                ("flags","u32"),
+                ("ehsize","u16"),
+                ("phentsize","u16"),
+                ("phnum","u16"),
+                ("shentsize","u16"),
+                ("shnum","u16"),
+                ("shstrndx","u16") ]
+
+
+class Shdr(CStruct):
+    _fields = [ ("name","u32"),
+                ("type","u32"),
+                ("flags","ptr"),
+                ("addr","ptr"),
+                ("offset","ptr"),
+                ("size","ptr"),
+                ("link","u32"),
+                ("info","u32"),
+                ("addralign","ptr"),
+                ("entsize","ptr") ]
+
+class Phdr(CStruct):
+    _fields = [ ("type","u32"),
+                ("offset","u32"),
+                ("vaddr","u32"),
+                ("paddr","u32"),
+                ("filesz","u32"),
+                ("memsz","u32"),
+                ("flags","u32"),
+                ("align","u32") ]
+
+class Phdr64(CStruct):
+    _fields = [ ("type","u32"),
+                ("flags","u32"),
+                ("offset","ptr"),
+                ("vaddr","ptr"),
+                ("paddr","ptr"),
+                ("filesz","ptr"),
+                ("memsz","ptr"),
+                ("align","ptr") ]
+
+class Nhdr(CStruct):
+    _fields = [ ("namesz","u32"),
+                ("descsz","u32"),
+                ("type", "u32") ]
+
+
+class Sym32(CStruct):
+    _fields = [ ("name","u32"),
+                ("value","u32"),
+                ("size","u32"),
+                ("info","u08"),
+                ("other","u08"),
+                ("shndx","u16") ]
+
+class Sym64(CStruct):
+    _fields = [ ("name","u32"),
+                ("info","u08"),
+                ("other","u08"),
+                ("shndx","u16"),
+                ("value","u64"),
+                ("size","u64") ]
+
+class Dym(CStruct):
+    _fields = [ ("tag","u32"),
+                ("val","u32") ]
+
+class Rel32(CStruct):
+    _fields = [ ("offset","ptr"),
+                ("info","u32") ]
+
+class Rel64(CStruct):
+    _fields = [ ("offset","ptr"),
+                ("info","u64") ]
+
+class Rela32(CStruct):
+    _fields = [ ("offset","ptr"),
+                ("info","u32"),
+                ("addend","ptr") ]
+
+class Rela64(CStruct):
+    _fields = [ ("offset","ptr"),
+                ("info","u64"),
+                ("addend","ptr") ]
+
+class Dynamic(CStruct):
+    _fields = [ ("type","ptr"),
+                ("name","ptr") ]
+
+
+# Legal values for e_ident (identification indexes)
+
+EI_MAG0	=       0	# File identification
+EI_MAG1	=       1	# File identification
+EI_MAG2	=       2	# File identification
+EI_MAG3	=       3	# File identification
+EI_CLASS =      4	# File class
+EI_DATA	=       5	# Data encoding
+EI_VERSION =    6	# File version
+EI_OSABI =      7	# Operating system/ABI identification
+EI_ABIVERSION = 8	# ABI version
+EI_PAD =        9	# Start of padding bytes
+EI_NIDENT =     16	# Size of e_ident[]
+
+# Legal values for e_ident[EI_CLASS]
+
+ELFCLASSNONE =  0	# Invalid class
+ELFCLASS32 =	1	# 32-bit objects
+ELFCLASS64 =    2	# 64-bit objects
+
+# Legal values for e_ident[EI_DATA]
+
+ELFDATANONE =	0	# Invalid data encoding
+ELFDATA2LSB =	1	# Least significant byte at lowest address
+ELFDATA2MSB =	2	# Most significant byte at lowest address
+
+# Legal values for e_type (object file type).
+
+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).
+
+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_486 =          6              # Intel 80486
+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_AARCH64 =     183             # Aarch64 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_ALPHA =       0x9026
+
+# Legal values for sh_type (section type).
+
+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 indices
+SHT_NUM =           19            # Number of defined types.
+SHT_LOOS =          0x60000000   # Start OS-specific
+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).
+
+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
+
+# Section group handling.
+
+GRP_COMDAT =      0x1             # Mark group as COMDAT.
+
+# Legal values for p_type (segment type).
+
+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_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).
+
+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.
+
+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
+
+# Legal values for the note segment descriptor types for object files.
+
+NT_VERSION =      1               # Contains a version string.
+
+# Legal values for ST_BIND subfield of st_info (symbol binding).
+# bind = Sym.info >> 4
+# val = Sym.info 0xf
+
+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).
+
+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_GNU_IFUNC   = 10              # Symbol is indirect code object
+STT_HIOS        = 12              # End of OS-specific
+STT_LOPROC      = 13              # Start of processor-specific
+STT_HIPROC      = 15              # End of processor-specific
+
+# Legal values for d_tag (dynamic entry type).
+
+DT_NULL         = 0               # Marks end of dynamic section
+DT_NEEDED       = 1               # Name of needed library
+DT_PLTRELSZ     = 2               # Size in bytes of PLT relocs
+DT_PLTGOT       = 3               # Processor defined value
+DT_HASH         = 4               # Address of symbol hash table
+DT_STRTAB       = 5               # Address of string table
+DT_SYMTAB       = 6               # Address of symbol table
+DT_RELA         = 7               # Address of Rela relocs
+DT_RELASZ       = 8               # Total size of Rela relocs
+DT_RELAENT      = 9               # Size of one Rela reloc
+DT_STRSZ        = 10              # Size of string table
+DT_SYMENT       = 11              # Size of one symbol table entry
+DT_INIT         = 12              # Address of init function
+DT_FINI         = 13              # Address of termination function
+DT_SONAME       = 14              # Name of shared object
+DT_RPATH        = 15              # Library search path (deprecated)
+DT_SYMBOLIC     = 16              # Start symbol search here
+DT_REL          = 17              # Address of Rel relocs
+DT_RELSZ        = 18              # Total size of Rel relocs
+DT_RELENT       = 19              # Size of one Rel reloc
+DT_PLTREL       = 20              # Type of reloc in PLT
+DT_DEBUG        = 21              # For debugging; unspecified
+DT_TEXTREL      = 22              # Reloc might modify .text
+DT_JMPREL       = 23              # Address of PLT relocs
+DT_BIND_NOW     = 24              # Process relocations of object
+DT_INIT_ARRAY   = 25              # Array with addresses of init fct
+DT_FINI_ARRAY   = 26              # Array with addresses of fini fct
+DT_INIT_ARRAYSZ = 27              # Size in bytes of DT_INIT_ARRAY
+DT_FINI_ARRAYSZ = 28              # Size in bytes of DT_FINI_ARRAY
+DT_RUNPATH      = 29              # Library search path
+DT_FLAGS        = 30              # Flags for the object being loaded
+DT_ENCODING     = 32              # Start of encoded range
+DT_PREINIT_ARRAY = 32             # Array with addresses of preinit fct
+DT_PREINIT_ARRAYSZ = 33           # size in bytes of DT_PREINIT_ARRAY
+DT_NUM          = 34              # Number used
+DT_LOOS         = 0x6000000d      # Start of OS-specific
+DT_HIOS         = 0x6ffff000      # End of OS-specific
+DT_LOPROC       = 0x70000000      # Start of processor-specific
+DT_HIPROC       = 0x7fffffff      # End of processor-specific
+#DT_PROCNUM      = DT_MIPS_NUM     # Most used by any processor
+
+# DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
+# Dyn.d_un.d_val field of the Elf*_Dyn structure.  This follows Sun's
+# approach.
+DT_VALRNGLO     = 0x6ffffd00
+DT_GNU_PRELINKED = 0x6ffffdf5     # Prelinking timestamp
+DT_GNU_CONFLICTSZ = 0x6ffffdf6    # Size of conflict section
+DT_GNU_LIBLISTSZ = 0x6ffffdf7     # Size of library list
+DT_CHECKSUM     = 0x6ffffdf8
+DT_PLTPADSZ     = 0x6ffffdf9
+DT_MOVEENT      = 0x6ffffdfa
+DT_MOVESZ       = 0x6ffffdfb
+DT_FEATURE_1    = 0x6ffffdfc      # Feature selection (DTF_*).
+DT_POSFLAG_1    = 0x6ffffdfd      # Flags for DT_* entries, effecting the following DT_* entry.
+DT_SYMINSZ      = 0x6ffffdfe      # Size of syminfo table (in bytes)
+DT_SYMINENT     = 0x6ffffdff      # Entry size of syminfo
+DT_VALRNGHI     = 0x6ffffdff
+DT_VALNUM = 12
+
+# DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
+# Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
+#
+# If any adjustment is made to the ELF object after it has been
+# built these entries will need to be adjusted.
+DT_ADDRRNGLO    = 0x6ffffe00
+DT_GNU_CONFLICT = 0x6ffffef8      # Start of conflict section
+DT_GNU_LIBLIST  = 0x6ffffef9      # Library list
+DT_CONFIG       = 0x6ffffefa      # Configuration information.
+DT_DEPAUDIT     = 0x6ffffefb      # Dependency auditing.
+DT_AUDIT        = 0x6ffffefc      # Object auditing.
+DT_PLTPAD       = 0x6ffffefd      # PLT padding.
+DT_MOVETAB      = 0x6ffffefe      # Move table.
+DT_SYMINFO      = 0x6ffffeff      # Syminfo table.
+DT_ADDRRNGHI    = 0x6ffffeff
+DT_ADDRNUM = 10
+
+# The versioning entry types.  The next are defined as part of the
+# GNU extension.
+DT_VERSYM       = 0x6ffffff0
+
+DT_RELACOUNT    = 0x6ffffff9
+DT_RELCOUNT     = 0x6ffffffa
+
+# These were chosen by Sun.
+DT_FLAGS_1      = 0x6ffffffb      # State flags, see DF_1_* below.
+DT_VERDEF       = 0x6ffffffc      # Address of version definition table
+DT_VERDEFNUM    = 0x6ffffffd      # Number of version definitions
+DT_VERNEED      = 0x6ffffffe      # Address of table with needed versions
+DT_VERNEEDNUM   = 0x6fffffff      # Number of needed versions
+DT_VERSIONTAGNUM = 16
+
+# Sun added these machine-independent extensions in the "processor-specific"
+# range.  Be compatible.
+DT_AUXILIARY    = 0x7ffffffd      # Shared object to load before self
+DT_FILTER       = 0x7fffffff      # Shared object to get values from
+DT_EXTRANUM     = 3
+
+# Values of `d_un.d_val' in the DT_FLAGS entry.
+DF_ORIGIN       = 0x00000001      # Object may use DF_ORIGIN
+DF_SYMBOLIC     = 0x00000002      # Symbol resolutions starts here
+DF_TEXTREL      = 0x00000004      # Object contains text relocations
+DF_BIND_NOW     = 0x00000008      # No lazy binding for this object
+DF_STATIC_TLS   = 0x00000010      # Module uses the static TLS model
+
+# State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
+# entry in the dynamic section.
+DF_1_NOW        = 0x00000001      # Set RTLD_NOW for this object.
+DF_1_GLOBAL     = 0x00000002      # Set RTLD_GLOBAL for this object.
+DF_1_GROUP      = 0x00000004      # Set RTLD_GROUP for this object.
+DF_1_NODELETE   = 0x00000008      # Set RTLD_NODELETE for this object.
+DF_1_LOADFLTR   = 0x00000010      # Trigger filtee loading at runtime.
+DF_1_INITFIRST  = 0x00000020      # Set RTLD_INITFIRST for this object
+DF_1_NOOPEN     = 0x00000040      # Set RTLD_NOOPEN for this object.
+DF_1_ORIGIN     = 0x00000080      # $ORIGIN must be handled.
+DF_1_DIRECT     = 0x00000100      # Direct binding enabled.
+DF_1_TRANS      = 0x00000200
+DF_1_INTERPOSE  = 0x00000400      # Object is used to interpose.
+DF_1_NODEFLIB   = 0x00000800      # Ignore default lib search path.
+DF_1_NODUMP     = 0x00001000      # Object can't be dldump'ed.
+DF_1_CONFALT    = 0x00002000      # Configuration alternative created.
+DF_1_ENDFILTEE  = 0x00004000      # Filtee terminates filters search.
+DF_1_DISPRELDNE = 0x00008000      # Disp reloc applied at build time.
+DF_1_DISPRELPND = 0x00010000      # Disp reloc applied at run-time.
+
+# Flags for the feature selection in DT_FEATURE_1.
+DTF_1_PARINIT   = 0x00000001
+DTF_1_CONFEXP   = 0x00000002
+
+# Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry.
+DF_P1_LAZYLOAD  = 0x00000001      # Lazyload following object.
+DF_P1_GROUPPERM = 0x00000002      # Symbols from next object are not generally available.
+
+# GNU Versioning
+VER_FLG_BASE     = 1              # Version of the file itself, must not be used to match symbols
+VER_FLG_WEAK     = 2              # Reference to this version is weak
+VER_NEED_CURRENT = 1              # Versioning implementation number
+
+# Relocs
+
+# Motorola 68k relocations
+
+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
+R_68K_TLS_GD32      = 25          # 32 bit GOT offset for GD
+R_68K_TLS_GD16      = 26          # 16 bit GOT offset for GD
+R_68K_TLS_GD8       = 27          # 8 bit GOT offset for GD
+R_68K_TLS_LDM32     = 28          # 32 bit GOT offset for LDM
+R_68K_TLS_LDM16     = 29          # 16 bit GOT offset for LDM
+R_68K_TLS_LDM8      = 30          # 8 bit GOT offset for LDM
+R_68K_TLS_LDO32     = 31          # 32 bit module-relative offset
+R_68K_TLS_LDO16     = 32          # 16 bit module-relative offset
+R_68K_TLS_LDO8      = 33          # 8 bit module-relative offset
+R_68K_TLS_IE32      = 34          # 32 bit GOT offset for IE
+R_68K_TLS_IE16      = 35          # 16 bit GOT offset for IE
+R_68K_TLS_IE8       = 36          # 8 bit GOT offset for IE
+R_68K_TLS_LE32      = 37          # 32 bit offset relative to static TLS block
+R_68K_TLS_LE16      = 38          # 16 bit offset relative to static TLS block
+R_68K_TLS_LE8       = 39          # 8 bit offset relative to static TLS block
+R_68K_TLS_DTPMOD32  = 40          # 32 bit module number
+R_68K_TLS_DTPREL32  = 41          # 32 bit module-relative offset
+R_68K_TLS_TPREL32   = 42          # 32 bit TP-relative offset
+# Keep this the last entry.
+R_68K_NUM       = 43
+
+# Intel 80386 relocations
+
+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
+# 38?
+R_386_TLS_GOTDESC  = 39           # GOT offset for TLS descriptor.
+R_386_TLS_DESC_CALL = 40          # Marker of call through TLS descriptor for relaxation.
+R_386_TLS_DESC     = 41           # TLS descriptor containing pointer to code and to argument, returning the TLS offset for the symbol.
+R_386_IRELATIVE    = 42           # Adjust indirectly by program base
+# Keep this the last entry.
+R_386_NUM          = 43
+
+# SUN SPARC relocations
+
+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_GLOB_JMP        = 42      # was part of v9 ABI but was removed
+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
+R_SPARC_GOTDATA_HIX22   = 80
+R_SPARC_GOTDATA_LOX10   = 81
+R_SPARC_GOTDATA_OP_HIX22        = 82
+R_SPARC_GOTDATA_OP_LOX10        = 83
+R_SPARC_GOTDATA_OP      = 84
+R_SPARC_H34             = 85
+R_SPARC_SIZE32          = 86
+R_SPARC_SIZE64          = 87
+R_SPARC_JMP_IREL        = 248
+R_SPARC_IRELATIVE       = 249
+R_SPARC_GNU_VTINHERIT   = 250
+R_SPARC_GNU_VTENTRY     = 251
+R_SPARC_REV32           = 252
+# Keep this the last entry.
+R_SPARC_NUM             = 253
+
+# MIPS R3000 relocations
+
+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
+R_MIPS_COPY             = 126
+R_MIPS_JUMP_SLOT        = 127
+# Keep this the last entry.
+R_MIPS_NUM              = 128
+
+# HPPA relocations
+
+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 relocations
+
+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
+
+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
+
+# 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 extension to support local ifunc.
+R_PPC_IRELATIVE         = 248
+
+# GNU relocs used in PIC code sequences.
+R_PPC_REL16             = 249     # half16   (sym+add-.)
+R_PPC_REL16_LO          = 250     # half16   (sym+add-.)@l
+R_PPC_REL16_HI          = 251     # half16   (sym+add-.)@h
+R_PPC_REL16_HA          = 252     # half16   (sym+add-.)@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
+
+# GNU extension to support local ifunc.
+R_PPC64_JMP_IREL        = 247
+R_PPC64_IRELATIVE       = 248
+R_PPC64_REL16           = 249     # half16   (sym+add-.)
+R_PPC64_REL16_LO        = 250     # half16   (sym+add-.)@l
+R_PPC64_REL16_HI        = 251     # half16   (sym+add-.)@h
+R_PPC64_REL16_HA        = 252     # half16   (sym+add-.)@ha
+
+# PowerPC64 specific values for the Dyn d_tag field.
+DT_PPC64_GLINK  = (DT_LOPROC + 0)
+DT_PPC64_OPD    = (DT_LOPROC + 1)
+DT_PPC64_OPDSZ  = (DT_LOPROC + 2)
+DT_PPC64_NUM    = 3
+
+# ARM relocations
+
+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      # Obsolete static relocation.
+R_ARM_TLS_DESC          = 13      # Dynamic relocation.
+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_TLS_GOTDESC       = 90
+R_ARM_TLS_CALL          = 91
+R_ARM_TLS_DESCSEQ       = 92
+R_ARM_THM_TLS_CALL      = 93
+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_THM_TLS_DESCSEQ   = 129
+R_ARM_IRELATIVE         = 160
+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 relocations
+
+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
+
+# S/390 relocations
+
+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
+
+
+# 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_PC64           = 24      # PC relative 64 bit
+R_X86_64_GOTOFF64       = 25      # 64 bit offset to GOT
+R_X86_64_GOTPC32        = 26      # 32 bit signed pc relative offset to GOT
+R_X86_64_GOT64          = 27      # 64-bit GOT entry offset
+R_X86_64_GOTPCREL64     = 28      # 64-bit PC relative offset to GOT entry
+R_X86_64_GOTPC64        = 29      # 64-bit PC relative offset to GOT
+R_X86_64_GOTPLT64       = 30      # like GOT64, says PLT entry needed
+R_X86_64_PLTOFF64       = 31      # 64-bit GOT relative offset to PLT entry
+R_X86_64_SIZE32         = 32      # Size of symbol plus 32-bit addend
+R_X86_64_SIZE64         = 33      # Size of symbol plus 64-bit addend
+R_X86_64_GOTPC32_TLSDESC = 34     # GOT offset for TLS descriptor.
+R_X86_64_TLSDESC_CALL   = 35      # Marker for call through TLS descriptor.
+R_X86_64_TLSDESC        = 36      # TLS descriptor.
+R_X86_64_IRELATIVE      = 37      # Adjust indirectly by program base
+
+R_X86_64_NUM            = 38
+
+
+# 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
+
+
+# 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.