LCOV - app.info - /usr/include/elf.h

LCOV - code coverage report
| Current view: | directory - usr/include - elf.h (source / functions) |  | Found | Hit | Coverage |
| Test: | app.info | Lines: | 7 | 6 | 85.7 %
| Date: | 2012-04-07 | Functions: | 7 | 6 | 85.7 %

           1                 : /* This file defines standard ELF types, structures, and macros.
           2                 :    Copyright (C) 1995-2003,2004,2005,2006 Free Software Foundation, Inc.
           3                 :    This file is part of the GNU C Library.
           4                 :
           5                 :    The GNU C Library is free software; you can redistribute it and/or
           6                 :    modify it under the terms of the GNU Lesser General Public
           7                 :    License as published by the Free Software Foundation; either
           8                 :    version 2.1 of the License, or (at your option) any later version.
           9                 :
          10                 :    The GNU C Library is distributed in the hope that it will be useful,
          11                 :    but WITHOUT ANY WARRANTY; without even the implied warranty of
          12                 :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
          13                 :    Lesser General Public License for more details.
          14                 :
          15                 :    You should have received a copy of the GNU Lesser General Public
          16                 :    License along with the GNU C Library; if not, write to the Free
          17                 :    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
          18                 :    02111-1307 USA.  */
          19                 :
          20                 : #ifndef _ELF_H
          21                 : #define _ELF_H 1
          22                 :
          23                 : #include <features.h>
          24                 :
          25                 : __BEGIN_DECLS
          26                 :
          27                 : /* Standard ELF types.  */
          28                 :
          29                 : #include <stdint.h>
          30                 :
          31                 : /* Type for a 16-bit quantity.  */
          32                 : typedef uint16_t Elf32_Half;
          33                 : typedef uint16_t Elf64_Half;
          34                 :
          35                 : /* Types for signed and unsigned 32-bit quantities.  */
          36                 : typedef uint32_t Elf32_Word;
          37                 : typedef int32_t  Elf32_Sword;
          38                 : typedef uint32_t Elf64_Word;
          39                 : typedef int32_t  Elf64_Sword;
          40                 :
          41                 : /* Types for signed and unsigned 64-bit quantities.  */
          42                 : typedef uint64_t Elf32_Xword;
          43                 : typedef int64_t  Elf32_Sxword;
          44                 : typedef uint64_t Elf64_Xword;
          45                 : typedef int64_t  Elf64_Sxword;
          46                 :
          47                 : /* Type of addresses.  */
          48                 : typedef uint32_t Elf32_Addr;
          49                 : typedef uint64_t Elf64_Addr;
          50                 :
          51                 : /* Type of file offsets.  */
          52                 : typedef uint32_t Elf32_Off;
          53                 : typedef uint64_t Elf64_Off;
          54                 :
          55                 : /* Type for section indices, which are 16-bit quantities.  */
          56                 : typedef uint16_t Elf32_Section;
          57                 : typedef uint16_t Elf64_Section;
          58                 :
          59                 : /* Type for version symbol information.  */
          60                 : typedef Elf32_Half Elf32_Versym;
          61                 : typedef Elf64_Half Elf64_Versym;
          62                 :
          63                 :
          64                 : /* The ELF file header.  This appears at the start of every ELF file.  */
          65                 :
          66                 : #define EI_NIDENT (16)
          67                 :
          68                 : typedef struct
          69                 : {
          70                 :   unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
          71                 :   Elf32_Half    e_type;                 /* Object file type */
          72                 :   Elf32_Half    e_machine;              /* Architecture */
          73                 :   Elf32_Word    e_version;              /* Object file version */
          74                 :   Elf32_Addr    e_entry;                /* Entry point virtual address */
          75                 :   Elf32_Off     e_phoff;                /* Program header table file offset */
          76                 :   Elf32_Off     e_shoff;                /* Section header table file offset */
          77                 :   Elf32_Word    e_flags;                /* Processor-specific flags */
          78                 :   Elf32_Half    e_ehsize;               /* ELF header size in bytes */
          79                 :   Elf32_Half    e_phentsize;            /* Program header table entry size */
          80                 :   Elf32_Half    e_phnum;                /* Program header table entry count */
          81                 :   Elf32_Half    e_shentsize;            /* Section header table entry size */
          82                 :   Elf32_Half    e_shnum;                /* Section header table entry count */
          83                 :   Elf32_Half    e_shstrndx;             /* Section header string table index */
          84              42 : } Elf32_Ehdr;
          85                 :
          86                 : typedef struct
          87                 : {
          88                 :   unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
          89                 :   Elf64_Half    e_type;                 /* Object file type */
          90                 :   Elf64_Half    e_machine;              /* Architecture */
          91                 :   Elf64_Word    e_version;              /* Object file version */
          92                 :   Elf64_Addr    e_entry;                /* Entry point virtual address */
          93                 :   Elf64_Off     e_phoff;                /* Program header table file offset */
          94                 :   Elf64_Off     e_shoff;                /* Section header table file offset */
          95                 :   Elf64_Word    e_flags;                /* Processor-specific flags */
          96                 :   Elf64_Half    e_ehsize;               /* ELF header size in bytes */
          97                 :   Elf64_Half    e_phentsize;            /* Program header table entry size */
          98                 :   Elf64_Half    e_phnum;                /* Program header table entry count */
          99                 :   Elf64_Half    e_shentsize;            /* Section header table entry size */
         100                 :   Elf64_Half    e_shnum;                /* Section header table entry count */
         101                 :   Elf64_Half    e_shstrndx;             /* Section header string table index */
         102                 : } Elf64_Ehdr;
         103                 :
         104                 : /* Fields in the e_ident array.  The EI_* macros are indices into the
         105                 :    array.  The macros under each EI_* macro are the values the byte
         106                 :    may have.  */
         107                 :
         108                 : #define EI_MAG0         0               /* File identification byte 0 index */
         109                 : #define ELFMAG0         0x7f            /* Magic number byte 0 */
         110                 :
         111                 : #define EI_MAG1         1               /* File identification byte 1 index */
         112                 : #define ELFMAG1         'E'             /* Magic number byte 1 */
         113                 :
         114                 : #define EI_MAG2         2               /* File identification byte 2 index */
         115                 : #define ELFMAG2         'L'             /* Magic number byte 2 */
         116                 :
         117                 : #define EI_MAG3         3               /* File identification byte 3 index */
         118                 : #define ELFMAG3         'F'             /* Magic number byte 3 */
         119                 :
         120                 : /* Conglomeration of the identification bytes, for easy testing as a word.  */
         121                 : #define ELFMAG          "\177ELF"
         122                 : #define SELFMAG         4
         123                 :
         124                 : #define EI_CLASS        4               /* File class byte index */
         125                 : #define ELFCLASSNONE    0               /* Invalid class */
         126                 : #define ELFCLASS32      1               /* 32-bit objects */
         127                 : #define ELFCLASS64      2               /* 64-bit objects */
         128                 : #define ELFCLASSNUM     3
         129                 :
         130                 : #define EI_DATA         5               /* Data encoding byte index */
         131                 : #define ELFDATANONE     0               /* Invalid data encoding */
         132                 : #define ELFDATA2LSB     1               /* 2's complement, little endian */
         133                 : #define ELFDATA2MSB     2               /* 2's complement, big endian */
         134                 : #define ELFDATANUM      3
         135                 :
         136                 : #define EI_VERSION      6               /* File version byte index */
         137                 :                                         /* Value must be EV_CURRENT */
         138                 :
         139                 : #define EI_OSABI        7               /* OS ABI identification */
         140                 : #define ELFOSABI_NONE           0       /* UNIX System V ABI */
         141                 : #define ELFOSABI_SYSV           0       /* Alias.  */
         142                 : #define ELFOSABI_HPUX           1       /* HP-UX */
         143                 : #define ELFOSABI_NETBSD         2       /* NetBSD.  */
         144                 : #define ELFOSABI_LINUX          3       /* Linux.  */
         145                 : #define ELFOSABI_SOLARIS        6       /* Sun Solaris.  */
         146                 : #define ELFOSABI_AIX            7       /* IBM AIX.  */
         147                 : #define ELFOSABI_IRIX           8       /* SGI Irix.  */
         148                 : #define ELFOSABI_FREEBSD        9       /* FreeBSD.  */
         149                 : #define ELFOSABI_TRU64          10      /* Compaq TRU64 UNIX.  */
         150                 : #define ELFOSABI_MODESTO        11      /* Novell Modesto.  */
         151                 : #define ELFOSABI_OPENBSD        12      /* OpenBSD.  */
         152                 : #define ELFOSABI_ARM            97      /* ARM */
         153                 : #define ELFOSABI_STANDALONE     255     /* Standalone (embedded) application */
         154                 :
         155                 : #define EI_ABIVERSION   8               /* ABI version */
         156                 :
         157                 : #define EI_PAD          9               /* Byte index of padding bytes */
         158                 :
         159                 : /* Legal values for e_type (object file type).  */
         160                 :
         161                 : #define ET_NONE         0               /* No file type */
         162                 : #define ET_REL          1               /* Relocatable file */
         163                 : #define ET_EXEC         2               /* Executable file */
         164                 : #define ET_DYN          3               /* Shared object file */
         165                 : #define ET_CORE         4               /* Core file */
         166                 : #define ET_NUM          5               /* Number of defined types */
         167                 : #define ET_LOOS         0xfe00          /* OS-specific range start */
         168                 : #define ET_HIOS         0xfeff          /* OS-specific range end */
         169                 : #define ET_LOPROC       0xff00          /* Processor-specific range start */
         170                 : #define ET_HIPROC       0xffff          /* Processor-specific range end */
         171                 :
         172                 : /* Legal values for e_machine (architecture).  */
         173                 :
         174                 : #define EM_NONE          0              /* No machine */
         175                 : #define EM_M32           1              /* AT&T WE 32100 */
         176                 : #define EM_SPARC         2              /* SUN SPARC */
         177                 : #define EM_386           3              /* Intel 80386 */
         178                 : #define EM_68K           4              /* Motorola m68k family */
         179                 : #define EM_88K           5              /* Motorola m88k family */
         180                 : #define EM_860           7              /* Intel 80860 */
         181                 : #define EM_MIPS          8              /* MIPS R3000 big-endian */
         182                 : #define EM_S370          9              /* IBM System/370 */
         183                 : #define EM_MIPS_RS3_LE  10              /* MIPS R3000 little-endian */
         184                 :
         185                 : #define EM_PARISC       15              /* HPPA */
         186                 : #define EM_VPP500       17              /* Fujitsu VPP500 */
         187                 : #define EM_SPARC32PLUS  18              /* Sun's "v8plus" */
         188                 : #define EM_960          19              /* Intel 80960 */
         189                 : #define EM_PPC          20              /* PowerPC */
         190                 : #define EM_PPC64        21              /* PowerPC 64-bit */
         191                 : #define EM_S390         22              /* IBM S390 */
         192                 :
         193                 : #define EM_V800         36              /* NEC V800 series */
         194                 : #define EM_FR20         37              /* Fujitsu FR20 */
         195                 : #define EM_RH32         38              /* TRW RH-32 */
         196                 : #define EM_RCE          39              /* Motorola RCE */
         197                 : #define EM_ARM          40              /* ARM */
         198                 : #define EM_FAKE_ALPHA   41              /* Digital Alpha */
         199                 : #define EM_SH           42              /* Hitachi SH */
         200                 : #define EM_SPARCV9      43              /* SPARC v9 64-bit */
         201                 : #define EM_TRICORE      44              /* Siemens Tricore */
         202                 : #define EM_ARC          45              /* Argonaut RISC Core */
         203                 : #define EM_H8_300       46              /* Hitachi H8/300 */
         204                 : #define EM_H8_300H      47              /* Hitachi H8/300H */
         205                 : #define EM_H8S          48              /* Hitachi H8S */
         206                 : #define EM_H8_500       49              /* Hitachi H8/500 */
         207                 : #define EM_IA_64        50              /* Intel Merced */
         208                 : #define EM_MIPS_X       51              /* Stanford MIPS-X */
         209                 : #define EM_COLDFIRE     52              /* Motorola Coldfire */
         210                 : #define EM_68HC12       53              /* Motorola M68HC12 */
         211                 : #define EM_MMA          54              /* Fujitsu MMA Multimedia Accelerator*/
         212                 : #define EM_PCP          55              /* Siemens PCP */
         213                 : #define EM_NCPU         56              /* Sony nCPU embeeded RISC */
         214                 : #define EM_NDR1         57              /* Denso NDR1 microprocessor */
         215                 : #define EM_STARCORE     58              /* Motorola Start*Core processor */
         216                 : #define EM_ME16         59              /* Toyota ME16 processor */
         217                 : #define EM_ST100        60              /* STMicroelectronic ST100 processor */
         218                 : #define EM_TINYJ        61              /* Advanced Logic Corp. Tinyj emb.fam*/
         219                 : #define EM_X86_64       62              /* AMD x86-64 architecture */
         220                 : #define EM_PDSP         63              /* Sony DSP Processor */
         221                 :
         222                 : #define EM_FX66         66              /* Siemens FX66 microcontroller */
         223                 : #define EM_ST9PLUS      67              /* STMicroelectronics ST9+ 8/16 mc */
         224                 : #define EM_ST7          68              /* STmicroelectronics ST7 8 bit mc */
         225                 : #define EM_68HC16       69              /* Motorola MC68HC16 microcontroller */
         226                 : #define EM_68HC11       70              /* Motorola MC68HC11 microcontroller */
         227                 : #define EM_68HC08       71              /* Motorola MC68HC08 microcontroller */
         228                 : #define EM_68HC05       72              /* Motorola MC68HC05 microcontroller */
         229                 : #define EM_SVX          73              /* Silicon Graphics SVx */
         230                 : #define EM_ST19         74              /* STMicroelectronics ST19 8 bit mc */
         231                 : #define EM_VAX          75              /* Digital VAX */
         232                 : #define EM_CRIS         76              /* Axis Communications 32-bit embedded processor */
         233                 : #define EM_JAVELIN      77              /* Infineon Technologies 32-bit embedded processor */
         234                 : #define EM_FIREPATH     78              /* Element 14 64-bit DSP Processor */
         235                 : #define EM_ZSP          79              /* LSI Logic 16-bit DSP Processor */
         236                 : #define EM_MMIX         80              /* Donald Knuth's educational 64-bit processor */
         237                 : #define EM_HUANY        81              /* Harvard University machine-independent object files */
         238                 : #define EM_PRISM        82              /* SiTera Prism */
         239                 : #define EM_AVR          83              /* Atmel AVR 8-bit microcontroller */
         240                 : #define EM_FR30         84              /* Fujitsu FR30 */
         241                 : #define EM_D10V         85              /* Mitsubishi D10V */
         242                 : #define EM_D30V         86              /* Mitsubishi D30V */
         243                 : #define EM_V850         87              /* NEC v850 */
         244                 : #define EM_M32R         88              /* Mitsubishi M32R */
         245                 : #define EM_MN10300      89              /* Matsushita MN10300 */
         246                 : #define EM_MN10200      90              /* Matsushita MN10200 */
         247                 : #define EM_PJ           91              /* picoJava */
         248                 : #define EM_OPENRISC     92              /* OpenRISC 32-bit embedded processor */
         249                 : #define EM_ARC_A5       93              /* ARC Cores Tangent-A5 */
         250                 : #define EM_XTENSA       94              /* Tensilica Xtensa Architecture */
         251                 : #define EM_NUM          95
         252                 :
         253                 : /* If it is necessary to assign new unofficial EM_* values, please
         254                 :    pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
         255                 :    chances of collision with official or non-GNU unofficial values.  */
         256                 :
         257                 : #define EM_ALPHA        0x9026
         258                 :
         259                 : /* Legal values for e_version (version).  */
         260                 :
         261                 : #define EV_NONE         0               /* Invalid ELF version */
         262                 : #define EV_CURRENT      1               /* Current version */
         263                 : #define EV_NUM          2
         264                 :
         265                 : /* Section header.  */
         266                 :
         267                 : typedef struct
         268                 : {
         269                 :   Elf32_Word    sh_name;                /* Section name (string tbl index) */
         270                 :   Elf32_Word    sh_type;                /* Section type */
         271                 :   Elf32_Word    sh_flags;               /* Section flags */
         272                 :   Elf32_Addr    sh_addr;                /* Section virtual addr at execution */
         273                 :   Elf32_Off     sh_offset;              /* Section file offset */
         274                 :   Elf32_Word    sh_size;                /* Section size in bytes */
         275                 :   Elf32_Word    sh_link;                /* Link to another section */
         276                 :   Elf32_Word    sh_info;                /* Additional section information */
         277                 :   Elf32_Word    sh_addralign;           /* Section alignment */
         278                 :   Elf32_Word    sh_entsize;             /* Entry size if section holds table */
         279            1070 : } Elf32_Shdr;
         280                 :
         281                 : typedef struct
         282                 : {
         283                 :   Elf64_Word    sh_name;                /* Section name (string tbl index) */
         284                 :   Elf64_Word    sh_type;                /* Section type */
         285                 :   Elf64_Xword   sh_flags;               /* Section flags */
         286                 :   Elf64_Addr    sh_addr;                /* Section virtual addr at execution */
         287                 :   Elf64_Off     sh_offset;              /* Section file offset */
         288                 :   Elf64_Xword   sh_size;                /* Section size in bytes */
         289                 :   Elf64_Word    sh_link;                /* Link to another section */
         290                 :   Elf64_Word    sh_info;                /* Additional section information */
         291                 :   Elf64_Xword   sh_addralign;           /* Section alignment */
         292                 :   Elf64_Xword   sh_entsize;             /* Entry size if section holds table */
         293                 : } Elf64_Shdr;
         294                 :
         295                 : /* Special section indices.  */
         296                 :
         297                 : #define SHN_UNDEF       0               /* Undefined section */
         298                 : #define SHN_LORESERVE   0xff00          /* Start of reserved indices */
         299                 : #define SHN_LOPROC      0xff00          /* Start of processor-specific */
         300                 : #define SHN_BEFORE      0xff00          /* Order section before all others
         301                 :                                            (Solaris).  */
         302                 : #define SHN_AFTER       0xff01          /* Order section after all others
         303                 :                                            (Solaris).  */
         304                 : #define SHN_HIPROC      0xff1f          /* End of processor-specific */
         305                 : #define SHN_LOOS        0xff20          /* Start of OS-specific */
         306                 : #define SHN_HIOS        0xff3f          /* End of OS-specific */
         307                 : #define SHN_ABS         0xfff1          /* Associated symbol is absolute */
         308                 : #define SHN_COMMON      0xfff2          /* Associated symbol is common */
         309                 : #define SHN_XINDEX      0xffff          /* Index is in extra table.  */
         310                 : #define SHN_HIRESERVE   0xffff          /* End of reserved indices */
         311                 :
         312                 : /* Legal values for sh_type (section type).  */
         313                 :
         314                 : #define SHT_NULL          0             /* Section header table entry unused */
         315                 : #define SHT_PROGBITS      1             /* Program data */
         316                 : #define SHT_SYMTAB        2             /* Symbol table */
         317                 : #define SHT_STRTAB        3             /* String table */
         318                 : #define SHT_RELA          4             /* Relocation entries with addends */
         319                 : #define SHT_HASH          5             /* Symbol hash table */
         320                 : #define SHT_DYNAMIC       6             /* Dynamic linking information */
         321                 : #define SHT_NOTE          7             /* Notes */
         322                 : #define SHT_NOBITS        8             /* Program space with no data (bss) */
         323                 : #define SHT_REL           9             /* Relocation entries, no addends */
         324                 : #define SHT_SHLIB         10            /* Reserved */
         325                 : #define SHT_DYNSYM        11            /* Dynamic linker symbol table */
         326                 : #define SHT_INIT_ARRAY    14            /* Array of constructors */
         327                 : #define SHT_FINI_ARRAY    15            /* Array of destructors */
         328                 : #define SHT_PREINIT_ARRAY 16            /* Array of pre-constructors */
         329                 : #define SHT_GROUP         17            /* Section group */
         330                 : #define SHT_SYMTAB_SHNDX  18            /* Extended section indeces */
         331                 : #define SHT_NUM           19            /* Number of defined types.  */
         332                 : #define SHT_LOOS          0x60000000    /* Start OS-specific.  */
         333                 : #define SHT_GNU_HASH      0x6ffffff6    /* GNU-style hash table.  */
         334                 : #define SHT_GNU_LIBLIST   0x6ffffff7    /* Prelink library list */
         335                 : #define SHT_CHECKSUM      0x6ffffff8    /* Checksum for DSO content.  */
         336                 : #define SHT_LOSUNW        0x6ffffffa    /* Sun-specific low bound.  */
         337                 : #define SHT_SUNW_move     0x6ffffffa
         338                 : #define SHT_SUNW_COMDAT   0x6ffffffb
         339                 : #define SHT_SUNW_syminfo  0x6ffffffc
         340                 : #define SHT_GNU_verdef    0x6ffffffd    /* Version definition section.  */
         341                 : #define SHT_GNU_verneed   0x6ffffffe    /* Version needs section.  */
         342                 : #define SHT_GNU_versym    0x6fffffff    /* Version symbol table.  */
         343                 : #define SHT_HISUNW        0x6fffffff    /* Sun-specific high bound.  */
         344                 : #define SHT_HIOS          0x6fffffff    /* End OS-specific type */
         345                 : #define SHT_LOPROC        0x70000000    /* Start of processor-specific */
         346                 : #define SHT_HIPROC        0x7fffffff    /* End of processor-specific */
         347                 : #define SHT_LOUSER        0x80000000    /* Start of application-specific */
         348                 : #define SHT_HIUSER        0x8fffffff    /* End of application-specific */
         349                 :
         350                 : /* Legal values for sh_flags (section flags).  */
         351                 :
         352                 : #define SHF_WRITE            (1 << 0)     /* Writable */
         353                 : #define SHF_ALLOC            (1 << 1)     /* Occupies memory during execution */
         354                 : #define SHF_EXECINSTR        (1 << 2)     /* Executable */
         355                 : #define SHF_MERGE            (1 << 4)     /* Might be merged */
         356                 : #define SHF_STRINGS          (1 << 5)     /* Contains nul-terminated strings */
         357                 : #define SHF_INFO_LINK        (1 << 6)     /* `sh_info' contains SHT index */
         358                 : #define SHF_LINK_ORDER       (1 << 7)     /* Preserve order after combining */
         359                 : #define SHF_OS_NONCONFORMING (1 << 8)     /* Non-standard OS specific handling
         360                 :                                            required */
         361                 : #define SHF_GROUP            (1 << 9)     /* Section is member of a group.  */
         362                 : #define SHF_TLS              (1 << 10)    /* Section hold thread-local data.  */
         363                 : #define SHF_MASKOS           0x0ff00000 /* OS-specific.  */
         364                 : #define SHF_MASKPROC         0xf0000000 /* Processor-specific */
         365                 : #define SHF_ORDERED          (1 << 30)    /* Special ordering requirement
         366                 :                                            (Solaris).  */
         367                 : #define SHF_EXCLUDE          (1 << 31)    /* Section is excluded unless
         368                 :                                            referenced or allocated (Solaris).*/
         369                 :
         370                 : /* Section group handling.  */
         371                 : #define GRP_COMDAT      0x1             /* Mark group as COMDAT.  */
         372                 :
         373                 : /* Symbol table entry.  */
         374                 :
         375                 : typedef struct
         376                 : {
         377                 :   Elf32_Word    st_name;                /* Symbol name (string tbl index) */
         378                 :   Elf32_Addr    st_value;               /* Symbol value */
         379                 :   Elf32_Word    st_size;                /* Symbol size */
         380                 :   unsigned char st_info;                /* Symbol type and binding */
         381                 :   unsigned char st_other;               /* Symbol visibility */
         382                 :   Elf32_Section st_shndx;               /* Section index */
         383          808233 : } Elf32_Sym;
         384                 :
         385                 : typedef struct
         386                 : {
         387                 :   Elf64_Word    st_name;                /* Symbol name (string tbl index) */
         388                 :   unsigned char st_info;                /* Symbol type and binding */
         389                 :   unsigned char st_other;               /* Symbol visibility */
         390                 :   Elf64_Section st_shndx;               /* Section index */
         391                 :   Elf64_Addr    st_value;               /* Symbol value */
         392                 :   Elf64_Xword   st_size;                /* Symbol size */
         393                 : } Elf64_Sym;
         394                 :
         395                 : /* The syminfo section if available contains additional information about
         396                 :    every dynamic symbol.  */
         397                 :
         398                 : typedef struct
         399                 : {
         400                 :   Elf32_Half si_boundto;                /* Direct bindings, symbol bound to */
         401                 :   Elf32_Half si_flags;                  /* Per symbol flags */
         402                 : } Elf32_Syminfo;
         403                 :
         404                 : typedef struct
         405                 : {
         406                 :   Elf64_Half si_boundto;                /* Direct bindings, symbol bound to */
         407                 :   Elf64_Half si_flags;                  /* Per symbol flags */
         408                 : } Elf64_Syminfo;
         409                 :
         410                 : /* Possible values for si_boundto.  */
         411                 : #define SYMINFO_BT_SELF         0xffff  /* Symbol bound to self */
         412                 : #define SYMINFO_BT_PARENT       0xfffe  /* Symbol bound to parent */
         413                 : #define SYMINFO_BT_LOWRESERVE   0xff00  /* Beginning of reserved entries */
         414                 :
         415                 : /* Possible bitmasks for si_flags.  */
         416                 : #define SYMINFO_FLG_DIRECT      0x0001  /* Direct bound symbol */
         417                 : #define SYMINFO_FLG_PASSTHRU    0x0002  /* Pass-thru symbol for translator */
         418                 : #define SYMINFO_FLG_COPY        0x0004  /* Symbol is a copy-reloc */
         419                 : #define SYMINFO_FLG_LAZYLOAD    0x0008  /* Symbol bound to object to be lazy
         420                 :                                            loaded */
         421                 : /* Syminfo version values.  */
         422                 : #define SYMINFO_NONE            0
         423                 : #define SYMINFO_CURRENT         1
         424                 : #define SYMINFO_NUM             2
         425                 :
         426                 :
         427                 : /* How to extract and insert information held in the st_info field.  */
         428                 :
         429                 : #define ELF32_ST_BIND(val)              (((unsigned char) (val)) >> 4)
         430                 : #define ELF32_ST_TYPE(val)              ((val) & 0xf)
         431                 : #define ELF32_ST_INFO(bind, type)       (((bind) << 4) + ((type) & 0xf))
         432                 :
         433                 : /* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field.  */
         434                 : #define ELF64_ST_BIND(val)              ELF32_ST_BIND (val)
         435                 : #define ELF64_ST_TYPE(val)              ELF32_ST_TYPE (val)
         436                 : #define ELF64_ST_INFO(bind, type)       ELF32_ST_INFO ((bind), (type))
         437                 :
         438                 : /* Legal values for ST_BIND subfield of st_info (symbol binding).  */
         439                 :
         440                 : #define STB_LOCAL       0               /* Local symbol */
         441                 : #define STB_GLOBAL      1               /* Global symbol */
         442                 : #define STB_WEAK        2               /* Weak symbol */
         443                 : #define STB_NUM         3               /* Number of defined types.  */
         444                 : #define STB_LOOS        10              /* Start of OS-specific */
         445                 : #define STB_HIOS        12              /* End of OS-specific */
         446                 : #define STB_LOPROC      13              /* Start of processor-specific */
         447                 : #define STB_HIPROC      15              /* End of processor-specific */
         448                 :
         449                 : /* Legal values for ST_TYPE subfield of st_info (symbol type).  */
         450                 :
         451                 : #define STT_NOTYPE      0               /* Symbol type is unspecified */
         452                 : #define STT_OBJECT      1               /* Symbol is a data object */
         453                 : #define STT_FUNC        2               /* Symbol is a code object */
         454                 : #define STT_SECTION     3               /* Symbol associated with a section */
         455                 : #define STT_FILE        4               /* Symbol's name is file name */
         456                 : #define STT_COMMON      5               /* Symbol is a common data object */
         457                 : #define STT_TLS         6               /* Symbol is thread-local data object*/
         458                 : #define STT_NUM         7               /* Number of defined types.  */
         459                 : #define STT_LOOS        10              /* Start of OS-specific */
         460                 : #define STT_HIOS        12              /* End of OS-specific */
         461                 : #define STT_LOPROC      13              /* Start of processor-specific */
         462                 : #define STT_HIPROC      15              /* End of processor-specific */
         463                 :
         464                 :
         465                 : /* Symbol table indices are found in the hash buckets and chain table
         466                 :    of a symbol hash table section.  This special index value indicates
         467                 :    the end of a chain, meaning no further symbols are found in that bucket.  */
         468                 :
         469                 : #define STN_UNDEF       0               /* End of a chain.  */
         470                 :
         471                 :
         472                 : /* How to extract and insert information held in the st_other field.  */
         473                 :
         474                 : #define ELF32_ST_VISIBILITY(o)  ((o) & 0x03)
         475                 :
         476                 : /* For ELF64 the definitions are the same.  */
         477                 : #define ELF64_ST_VISIBILITY(o)  ELF32_ST_VISIBILITY (o)
         478                 :
         479                 : /* Symbol visibility specification encoded in the st_other field.  */
         480                 : #define STV_DEFAULT     0               /* Default symbol visibility rules */
         481                 : #define STV_INTERNAL    1               /* Processor specific hidden class */
         482                 : #define STV_HIDDEN      2               /* Sym unavailable in other modules */
         483                 : #define STV_PROTECTED   3               /* Not preemptible, not exported */
         484                 :
         485                 :
         486                 : /* Relocation table entry without addend (in section of type SHT_REL).  */
         487                 :
         488                 : typedef struct
         489                 : {
         490                 :   Elf32_Addr    r_offset;               /* Address */
         491                 :   Elf32_Word    r_info;                 /* Relocation type and symbol index */
         492          337154 : } Elf32_Rel;
         493                 :
         494                 : /* I have seen two different definitions of the Elf64_Rel and
         495                 :    Elf64_Rela structures, so we'll leave them out until Novell (or
         496                 :    whoever) gets their act together.  */
         497                 : /* The following, at least, is used on Sparc v9, MIPS, and Alpha.  */
         498                 :
         499                 : typedef struct
         500                 : {
         501                 :   Elf64_Addr    r_offset;               /* Address */
         502                 :   Elf64_Xword   r_info;                 /* Relocation type and symbol index */
         503                 : } Elf64_Rel;
         504                 :
         505                 : /* Relocation table entry with addend (in section of type SHT_RELA).  */
         506                 :
         507                 : typedef struct
         508                 : {
         509                 :   Elf32_Addr    r_offset;               /* Address */
         510                 :   Elf32_Word    r_info;                 /* Relocation type and symbol index */
         511                 :   Elf32_Sword   r_addend;               /* Addend */
         512               0 : } Elf32_Rela;
         513                 :
         514                 : typedef struct
         515                 : {
         516                 :   Elf64_Addr    r_offset;               /* Address */
         517                 :   Elf64_Xword   r_info;                 /* Relocation type and symbol index */
         518                 :   Elf64_Sxword  r_addend;               /* Addend */
         519                 : } Elf64_Rela;
         520                 :
         521                 : /* How to extract and insert information held in the r_info field.  */
         522                 :
         523                 : #define ELF32_R_SYM(val)                ((val) >> 8)
         524                 : #define ELF32_R_TYPE(val)               ((val) & 0xff)
         525                 : #define ELF32_R_INFO(sym, type)         (((sym) << 8) + ((type) & 0xff))
         526                 :
         527                 : #define ELF64_R_SYM(i)                  ((i) >> 32)
         528                 : #define ELF64_R_TYPE(i)                 ((i) & 0xffffffff)
         529                 : #define ELF64_R_INFO(sym,type)          ((((Elf64_Xword) (sym)) << 32) + (type))
         530                 :
         531                 : /* Program segment header.  */
         532                 :
         533                 : typedef struct
         534                 : {
         535                 :   Elf32_Word    p_type;                 /* Segment type */
         536                 :   Elf32_Off     p_offset;               /* Segment file offset */
         537                 :   Elf32_Addr    p_vaddr;                /* Segment virtual address */
         538                 :   Elf32_Addr    p_paddr;                /* Segment physical address */
         539                 :   Elf32_Word    p_filesz;               /* Segment size in file */
         540                 :   Elf32_Word    p_memsz;                /* Segment size in memory */
         541                 :   Elf32_Word    p_flags;                /* Segment flags */
         542                 :   Elf32_Word    p_align;                /* Segment alignment */
         543             119 : } Elf32_Phdr;
         544                 :
         545                 : typedef struct
         546                 : {
         547                 :   Elf64_Word    p_type;                 /* Segment type */
         548                 :   Elf64_Word    p_flags;                /* Segment flags */
         549                 :   Elf64_Off     p_offset;               /* Segment file offset */
         550                 :   Elf64_Addr    p_vaddr;                /* Segment virtual address */
         551                 :   Elf64_Addr    p_paddr;                /* Segment physical address */
         552                 :   Elf64_Xword   p_filesz;               /* Segment size in file */
         553                 :   Elf64_Xword   p_memsz;                /* Segment size in memory */
         554                 :   Elf64_Xword   p_align;                /* Segment alignment */
         555                 : } Elf64_Phdr;
         556                 :
         557                 : /* Legal values for p_type (segment type).  */
         558                 :
         559                 : #define PT_NULL         0               /* Program header table entry unused */
         560                 : #define PT_LOAD         1               /* Loadable program segment */
         561                 : #define PT_DYNAMIC      2               /* Dynamic linking information */
         562                 : #define PT_INTERP       3               /* Program interpreter */
         563                 : #define PT_NOTE         4               /* Auxiliary information */
         564                 : #define PT_SHLIB        5               /* Reserved */
         565                 : #define PT_PHDR         6               /* Entry for header table itself */
         566                 : #define PT_TLS          7               /* Thread-local storage segment */
         567                 : #define PT_NUM          8               /* Number of defined types */
         568                 : #define PT_LOOS         0x60000000      /* Start of OS-specific */
         569                 : #define PT_GNU_EH_FRAME 0x6474e550      /* GCC .eh_frame_hdr segment */
         570                 : #define PT_GNU_STACK    0x6474e551      /* Indicates stack executability */
         571                 : #define PT_GNU_RELRO    0x6474e552      /* Read-only after relocation */
         572                 : #define PT_LOSUNW       0x6ffffffa
         573                 : #define PT_SUNWBSS      0x6ffffffa      /* Sun Specific segment */
         574                 : #define PT_SUNWSTACK    0x6ffffffb      /* Stack segment */
         575                 : #define PT_HISUNW       0x6fffffff
         576                 : #define PT_HIOS         0x6fffffff      /* End of OS-specific */
         577                 : #define PT_LOPROC       0x70000000      /* Start of processor-specific */
         578                 : #define PT_HIPROC       0x7fffffff      /* End of processor-specific */
         579                 :
         580                 : /* Legal values for p_flags (segment flags).  */
         581                 :
         582                 : #define PF_X            (1 << 0)  /* Segment is executable */
         583                 : #define PF_W            (1 << 1)  /* Segment is writable */
         584                 : #define PF_R            (1 << 2)  /* Segment is readable */
         585                 : #define PF_MASKOS       0x0ff00000      /* OS-specific */
         586                 : #define PF_MASKPROC     0xf0000000      /* Processor-specific */
         587                 :
         588                 : /* Legal values for note segment descriptor types for core files. */
         589                 :
         590                 : #define NT_PRSTATUS     1               /* Contains copy of prstatus struct */
         591                 : #define NT_FPREGSET     2               /* Contains copy of fpregset struct */
         592                 : #define NT_PRPSINFO     3               /* Contains copy of prpsinfo struct */
         593                 : #define NT_PRXREG       4               /* Contains copy of prxregset struct */
         594                 : #define NT_TASKSTRUCT   4               /* Contains copy of task structure */
         595                 : #define NT_PLATFORM     5               /* String from sysinfo(SI_PLATFORM) */
         596                 : #define NT_AUXV         6               /* Contains copy of auxv array */
         597                 : #define NT_GWINDOWS     7               /* Contains copy of gwindows struct */
         598                 : #define NT_ASRS         8               /* Contains copy of asrset struct */
         599                 : #define NT_PSTATUS      10              /* Contains copy of pstatus struct */
         600                 : #define NT_PSINFO       13              /* Contains copy of psinfo struct */
         601                 : #define NT_PRCRED       14              /* Contains copy of prcred struct */
         602                 : #define NT_UTSNAME      15              /* Contains copy of utsname struct */
         603                 : #define NT_LWPSTATUS    16              /* Contains copy of lwpstatus struct */
         604                 : #define NT_LWPSINFO     17              /* Contains copy of lwpinfo struct */
         605                 : #define NT_PRFPXREG     20              /* Contains copy of fprxregset struct*/
         606                 :
         607                 : /* Legal values for the note segment descriptor types for object files.  */
         608                 :
         609                 : #define NT_VERSION      1               /* Contains a version string.  */
         610                 :
         611                 :
         612                 : /* Dynamic section entry.  */
         613                 :
         614                 : typedef struct
         615                 : {
         616                 :   Elf32_Sword   d_tag;                  /* Dynamic entry type */
         617                 :   union
         618                 :     {
         619                 :       Elf32_Word d_val;                 /* Integer value */
         620                 :       Elf32_Addr d_ptr;                 /* Address value */
         621                 :     } d_un;
         622             895 : } Elf32_Dyn;
         623                 :
         624                 : typedef struct
         625                 : {
         626                 :   Elf64_Sxword  d_tag;                  /* Dynamic entry type */
         627                 :   union
         628                 :     {
         629                 :       Elf64_Xword d_val;                /* Integer value */
         630                 :       Elf64_Addr d_ptr;                 /* Address value */
         631                 :     } d_un;
         632                 : } Elf64_Dyn;
         633                 :
         634                 : /* Legal values for d_tag (dynamic entry type).  */
         635                 :
         636                 : #define DT_NULL         0               /* Marks end of dynamic section */
         637                 : #define DT_NEEDED       1               /* Name of needed library */
         638                 : #define DT_PLTRELSZ     2               /* Size in bytes of PLT relocs */
         639                 : #define DT_PLTGOT       3               /* Processor defined value */
         640                 : #define DT_HASH         4               /* Address of symbol hash table */
         641                 : #define DT_STRTAB       5               /* Address of string table */
         642                 : #define DT_SYMTAB       6               /* Address of symbol table */
         643                 : #define DT_RELA         7               /* Address of Rela relocs */
         644                 : #define DT_RELASZ       8               /* Total size of Rela relocs */
         645                 : #define DT_RELAENT      9               /* Size of one Rela reloc */
         646                 : #define DT_STRSZ        10              /* Size of string table */
         647                 : #define DT_SYMENT       11              /* Size of one symbol table entry */
         648                 : #define DT_INIT         12              /* Address of init function */
         649                 : #define DT_FINI         13              /* Address of termination function */
         650                 : #define DT_SONAME       14              /* Name of shared object */
         651                 : #define DT_RPATH        15              /* Library search path (deprecated) */
         652                 : #define DT_SYMBOLIC     16              /* Start symbol search here */
         653                 : #define DT_REL          17              /* Address of Rel relocs */
         654                 : #define DT_RELSZ        18              /* Total size of Rel relocs */
         655                 : #define DT_RELENT       19              /* Size of one Rel reloc */
         656                 : #define DT_PLTREL       20              /* Type of reloc in PLT */
         657                 : #define DT_DEBUG        21              /* For debugging; unspecified */
         658                 : #define DT_TEXTREL      22              /* Reloc might modify .text */
         659                 : #define DT_JMPREL       23              /* Address of PLT relocs */
         660                 : #define DT_BIND_NOW     24              /* Process relocations of object */
         661                 : #define DT_INIT_ARRAY   25              /* Array with addresses of init fct */
         662                 : #define DT_FINI_ARRAY   26              /* Array with addresses of fini fct */
         663                 : #define DT_INIT_ARRAYSZ 27              /* Size in bytes of DT_INIT_ARRAY */
         664                 : #define DT_FINI_ARRAYSZ 28              /* Size in bytes of DT_FINI_ARRAY */
         665                 : #define DT_RUNPATH      29              /* Library search path */
         666                 : #define DT_FLAGS        30              /* Flags for the object being loaded */
         667                 : #define DT_ENCODING     32              /* Start of encoded range */
         668                 : #define DT_PREINIT_ARRAY 32             /* Array with addresses of preinit fct*/
         669                 : #define DT_PREINIT_ARRAYSZ 33           /* size in bytes of DT_PREINIT_ARRAY */
         670                 : #define DT_NUM          34              /* Number used */
         671                 : #define DT_LOOS         0x6000000d      /* Start of OS-specific */
         672                 : #define DT_HIOS         0x6ffff000      /* End of OS-specific */
         673                 : #define DT_LOPROC       0x70000000      /* Start of processor-specific */
         674                 : #define DT_HIPROC       0x7fffffff      /* End of processor-specific */
         675                 : #define DT_PROCNUM      DT_MIPS_NUM     /* Most used by any processor */
         676                 :
         677                 : /* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
         678                 :    Dyn.d_un.d_val field of the Elf*_Dyn structure.  This follows Sun's
         679                 :    approach.  */
         680                 : #define DT_VALRNGLO     0x6ffffd00
         681                 : #define DT_GNU_PRELINKED 0x6ffffdf5     /* Prelinking timestamp */
         682                 : #define DT_GNU_CONFLICTSZ 0x6ffffdf6    /* Size of conflict section */
         683                 : #define DT_GNU_LIBLISTSZ 0x6ffffdf7     /* Size of library list */
         684                 : #define DT_CHECKSUM     0x6ffffdf8
         685                 : #define DT_PLTPADSZ     0x6ffffdf9
         686                 : #define DT_MOVEENT      0x6ffffdfa
         687                 : #define DT_MOVESZ       0x6ffffdfb
         688                 : #define DT_FEATURE_1    0x6ffffdfc      /* Feature selection (DTF_*).  */
         689                 : #define DT_POSFLAG_1    0x6ffffdfd      /* Flags for DT_* entries, effecting
         690                 :                                            the following DT_* entry.  */
         691                 : #define DT_SYMINSZ      0x6ffffdfe      /* Size of syminfo table (in bytes) */
         692                 : #define DT_SYMINENT     0x6ffffdff      /* Entry size of syminfo */
         693                 : #define DT_VALRNGHI     0x6ffffdff
         694                 : #define DT_VALTAGIDX(tag)       (DT_VALRNGHI - (tag))   /* Reverse order! */
         695                 : #define DT_VALNUM 12
         696                 :
         697                 : /* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
         698                 :    Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
         699                 :
         700                 :    If any adjustment is made to the ELF object after it has been
         701                 :    built these entries will need to be adjusted.  */
         702                 : #define DT_ADDRRNGLO    0x6ffffe00
         703                 : #define DT_GNU_HASH     0x6ffffef5      /* GNU-style hash table.  */
         704                 : #define DT_TLSDESC_PLT  0x6ffffef6
         705                 : #define DT_TLSDESC_GOT  0x6ffffef7
         706                 : #define DT_GNU_CONFLICT 0x6ffffef8      /* Start of conflict section */
         707                 : #define DT_GNU_LIBLIST  0x6ffffef9      /* Library list */
         708                 : #define DT_CONFIG       0x6ffffefa      /* Configuration information.  */
         709                 : #define DT_DEPAUDIT     0x6ffffefb      /* Dependency auditing.  */
         710                 : #define DT_AUDIT        0x6ffffefc      /* Object auditing.  */
         711                 : #define DT_PLTPAD       0x6ffffefd      /* PLT padding.  */
         712                 : #define DT_MOVETAB      0x6ffffefe      /* Move table.  */
         713                 : #define DT_SYMINFO      0x6ffffeff      /* Syminfo table.  */
         714                 : #define DT_ADDRRNGHI    0x6ffffeff
         715                 : #define DT_ADDRTAGIDX(tag)      (DT_ADDRRNGHI - (tag))  /* Reverse order! */
         716                 : #define DT_ADDRNUM 11
         717                 :
         718                 : /* The versioning entry types.  The next are defined as part of the
         719                 :    GNU extension.  */
         720                 : #define DT_VERSYM       0x6ffffff0
         721                 :
         722                 : #define DT_RELACOUNT    0x6ffffff9
         723                 : #define DT_RELCOUNT     0x6ffffffa
         724                 :
         725                 : /* These were chosen by Sun.  */
         726                 : #define DT_FLAGS_1      0x6ffffffb      /* State flags, see DF_1_* below.  */
         727                 : #define DT_VERDEF       0x6ffffffc      /* Address of version definition
         728                 :                                            table */
         729                 : #define DT_VERDEFNUM    0x6ffffffd      /* Number of version definitions */
         730                 : #define DT_VERNEED      0x6ffffffe      /* Address of table with needed
         731                 :                                            versions */
         732                 : #define DT_VERNEEDNUM   0x6fffffff      /* Number of needed versions */
         733                 : #define DT_VERSIONTAGIDX(tag)   (DT_VERNEEDNUM - (tag)) /* Reverse order! */
         734                 : #define DT_VERSIONTAGNUM 16
         735                 :
         736                 : /* Sun added these machine-independent extensions in the "processor-specific"
         737                 :    range.  Be compatible.  */
         738                 : #define DT_AUXILIARY    0x7ffffffd      /* Shared object to load before self */
         739                 : #define DT_FILTER       0x7fffffff      /* Shared object to get values from */
         740                 : #define DT_EXTRATAGIDX(tag)     ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
         741                 : #define DT_EXTRANUM     3
         742                 :
         743                 : /* Values of `d_un.d_val' in the DT_FLAGS entry.  */
         744                 : #define DF_ORIGIN       0x00000001      /* Object may use DF_ORIGIN */
         745                 : #define DF_SYMBOLIC     0x00000002      /* Symbol resolutions starts here */
         746                 : #define DF_TEXTREL      0x00000004      /* Object contains text relocations */
         747                 : #define DF_BIND_NOW     0x00000008      /* No lazy binding for this object */
         748                 : #define DF_STATIC_TLS   0x00000010      /* Module uses the static TLS model */
         749                 :
         750                 : /* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
         751                 :    entry in the dynamic section.  */
         752                 : #define DF_1_NOW        0x00000001      /* Set RTLD_NOW for this object.  */
         753                 : #define DF_1_GLOBAL     0x00000002      /* Set RTLD_GLOBAL for this object.  */
         754                 : #define DF_1_GROUP      0x00000004      /* Set RTLD_GROUP for this object.  */
         755                 : #define DF_1_NODELETE   0x00000008      /* Set RTLD_NODELETE for this object.*/
         756                 : #define DF_1_LOADFLTR   0x00000010      /* Trigger filtee loading at runtime.*/
         757                 : #define DF_1_INITFIRST  0x00000020      /* Set RTLD_INITFIRST for this object*/
         758                 : #define DF_1_NOOPEN     0x00000040      /* Set RTLD_NOOPEN for this object.  */
         759                 : #define DF_1_ORIGIN     0x00000080      /* $ORIGIN must be handled.  */
         760                 : #define DF_1_DIRECT     0x00000100      /* Direct binding enabled.  */
         761                 : #define DF_1_TRANS      0x00000200
         762                 : #define DF_1_INTERPOSE  0x00000400      /* Object is used to interpose.  */
         763                 : #define DF_1_NODEFLIB   0x00000800      /* Ignore default lib search path.  */
         764                 : #define DF_1_NODUMP     0x00001000      /* Object can't be dldump'ed.  */
         765                 : #define DF_1_CONFALT    0x00002000      /* Configuration alternative created.*/
         766                 : #define DF_1_ENDFILTEE  0x00004000      /* Filtee terminates filters search. */
         767                 : #define DF_1_DISPRELDNE 0x00008000      /* Disp reloc applied at build time. */
         768                 : #define DF_1_DISPRELPND 0x00010000      /* Disp reloc applied at run-time.  */
         769                 :
         770                 : /* Flags for the feature selection in DT_FEATURE_1.  */
         771                 : #define DTF_1_PARINIT   0x00000001
         772                 : #define DTF_1_CONFEXP   0x00000002
         773                 :
         774                 : /* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry.  */
         775                 : #define DF_P1_LAZYLOAD  0x00000001      /* Lazyload following object.  */
         776                 : #define DF_P1_GROUPPERM 0x00000002      /* Symbols from next object are not
         777                 :                                            generally available.  */
         778                 :
         779                 : /* Version definition sections.  */
         780                 :
         781                 : typedef struct
         782                 : {
         783                 :   Elf32_Half    vd_version;             /* Version revision */
         784                 :   Elf32_Half    vd_flags;               /* Version information */
         785                 :   Elf32_Half    vd_ndx;                 /* Version Index */
         786                 :   Elf32_Half    vd_cnt;                 /* Number of associated aux entries */
         787                 :   Elf32_Word    vd_hash;                /* Version name hash value */
         788                 :   Elf32_Word    vd_aux;                 /* Offset in bytes to verdaux array */
         789                 :   Elf32_Word    vd_next;                /* Offset in bytes to next verdef
         790                 :                                            entry */
         791                 : } Elf32_Verdef;
         792                 :
         793                 : typedef struct
         794                 : {
         795                 :   Elf64_Half    vd_version;             /* Version revision */
         796                 :   Elf64_Half    vd_flags;               /* Version information */
         797                 :   Elf64_Half    vd_ndx;                 /* Version Index */
         798                 :   Elf64_Half    vd_cnt;                 /* Number of associated aux entries */
         799                 :   Elf64_Word    vd_hash;                /* Version name hash value */
         800                 :   Elf64_Word    vd_aux;                 /* Offset in bytes to verdaux array */
         801                 :   Elf64_Word    vd_next;                /* Offset in bytes to next verdef
         802                 :                                            entry */
         803                 : } Elf64_Verdef;
         804                 :
         805                 :
         806                 : /* Legal values for vd_version (version revision).  */
         807                 : #define VER_DEF_NONE    0               /* No version */
         808                 : #define VER_DEF_CURRENT 1               /* Current version */
         809                 : #define VER_DEF_NUM     2               /* Given version number */
         810                 :
         811                 : /* Legal values for vd_flags (version information flags).  */
         812                 : #define VER_FLG_BASE    0x1             /* Version definition of file itself */
         813                 : #define VER_FLG_WEAK    0x2             /* Weak version identifier */
         814                 :
         815                 : /* Versym symbol index values.  */
         816                 : #define VER_NDX_LOCAL           0       /* Symbol is local.  */
         817                 : #define VER_NDX_GLOBAL          1       /* Symbol is global.  */
         818                 : #define VER_NDX_LORESERVE       0xff00  /* Beginning of reserved entries.  */
         819                 : #define VER_NDX_ELIMINATE       0xff01  /* Symbol is to be eliminated.  */
         820                 :
         821                 : /* Auxialiary version information.  */
         822                 :
         823                 : typedef struct
         824                 : {
         825                 :   Elf32_Word    vda_name;               /* Version or dependency names */
         826                 :   Elf32_Word    vda_next;               /* Offset in bytes to next verdaux
         827                 :                                            entry */
         828                 : } Elf32_Verdaux;
         829                 :
         830                 : typedef struct
         831                 : {
         832                 :   Elf64_Word    vda_name;               /* Version or dependency names */
         833                 :   Elf64_Word    vda_next;               /* Offset in bytes to next verdaux
         834                 :                                            entry */
         835                 : } Elf64_Verdaux;
         836                 :
         837                 :
         838                 : /* Version dependency section.  */
         839                 :
         840                 : typedef struct
         841                 : {
         842                 :   Elf32_Half    vn_version;             /* Version of structure */
         843                 :   Elf32_Half    vn_cnt;                 /* Number of associated aux entries */
         844                 :   Elf32_Word    vn_file;                /* Offset of filename for this
         845                 :                                            dependency */
         846                 :   Elf32_Word    vn_aux;                 /* Offset in bytes to vernaux array */
         847                 :   Elf32_Word    vn_next;                /* Offset in bytes to next verneed
         848                 :                                            entry */
         849                 : } Elf32_Verneed;
         850                 :
         851                 : typedef struct
         852                 : {
         853                 :   Elf64_Half    vn_version;             /* Version of structure */
         854                 :   Elf64_Half    vn_cnt;                 /* Number of associated aux entries */
         855                 :   Elf64_Word    vn_file;                /* Offset of filename for this
         856                 :                                            dependency */
         857                 :   Elf64_Word    vn_aux;                 /* Offset in bytes to vernaux array */
         858                 :   Elf64_Word    vn_next;                /* Offset in bytes to next verneed
         859                 :                                            entry */
         860                 : } Elf64_Verneed;
         861                 :
         862                 :
         863                 : /* Legal values for vn_version (version revision).  */
         864                 : #define VER_NEED_NONE    0              /* No version */
         865                 : #define VER_NEED_CURRENT 1              /* Current version */
         866                 : #define VER_NEED_NUM     2              /* Given version number */
         867                 :
         868                 : /* Auxiliary needed version information.  */
         869                 :
         870                 : typedef struct
         871                 : {
         872                 :   Elf32_Word    vna_hash;               /* Hash value of dependency name */
         873                 :   Elf32_Half    vna_flags;              /* Dependency specific information */
         874                 :   Elf32_Half    vna_other;              /* Unused */
         875                 :   Elf32_Word    vna_name;               /* Dependency name string offset */
         876                 :   Elf32_Word    vna_next;               /* Offset in bytes to next vernaux
         877                 :                                            entry */
         878                 : } Elf32_Vernaux;
         879                 :
         880                 : typedef struct
         881                 : {
         882                 :   Elf64_Word    vna_hash;               /* Hash value of dependency name */
         883                 :   Elf64_Half    vna_flags;              /* Dependency specific information */
         884                 :   Elf64_Half    vna_other;              /* Unused */
         885                 :   Elf64_Word    vna_name;               /* Dependency name string offset */
         886                 :   Elf64_Word    vna_next;               /* Offset in bytes to next vernaux
         887                 :                                            entry */
         888                 : } Elf64_Vernaux;
         889                 :
         890                 :
         891                 : /* Legal values for vna_flags.  */
         892                 : #define VER_FLG_WEAK    0x2             /* Weak version identifier */
         893                 :
         894                 :
         895                 : /* Auxiliary vector.  */
         896                 :
         897                 : /* This vector is normally only used by the program interpreter.  The
         898                 :    usual definition in an ABI supplement uses the name auxv_t.  The
         899                 :    vector is not usually defined in a standard <elf.h> file, but it
         900                 :    can't hurt.  We rename it to avoid conflicts.  The sizes of these
         901                 :    types are an arrangement between the exec server and the program
         902                 :    interpreter, so we don't fully specify them here.  */
         903                 :
         904                 : typedef struct
         905                 : {
         906                 :   uint32_t a_type;              /* Entry type */
         907                 :   union
         908                 :     {
         909                 :       uint32_t a_val;           /* Integer value */
         910                 :       /* We use to have pointer elements added here.  We cannot do that,
         911                 :          though, since it does not work when using 32-bit definitions
         912                 :          on 64-bit platforms and vice versa.  */
         913                 :     } a_un;
         914                 : } Elf32_auxv_t;
         915                 :
         916                 : typedef struct
         917                 : {
         918                 :   uint64_t a_type;              /* Entry type */
         919                 :   union
         920                 :     {
         921                 :       uint64_t a_val;           /* Integer value */
         922                 :       /* We use to have pointer elements added here.  We cannot do that,
         923                 :          though, since it does not work when using 32-bit definitions
         924                 :          on 64-bit platforms and vice versa.  */
         925                 :     } a_un;
         926                 : } Elf64_auxv_t;
         927                 :
         928                 : /* Legal values for a_type (entry type).  */
         929                 :
         930                 : #define AT_NULL         0               /* End of vector */
         931                 : #define AT_IGNORE       1               /* Entry should be ignored */
         932                 : #define AT_EXECFD       2               /* File descriptor of program */
         933                 : #define AT_PHDR         3               /* Program headers for program */
         934                 : #define AT_PHENT        4               /* Size of program header entry */
         935                 : #define AT_PHNUM        5               /* Number of program headers */
         936                 : #define AT_PAGESZ       6               /* System page size */
         937                 : #define AT_BASE         7               /* Base address of interpreter */
         938                 : #define AT_FLAGS        8               /* Flags */
         939                 : #define AT_ENTRY        9               /* Entry point of program */
         940                 : #define AT_NOTELF       10              /* Program is not ELF */
         941                 : #define AT_UID          11              /* Real uid */
         942                 : #define AT_EUID         12              /* Effective uid */
         943                 : #define AT_GID          13              /* Real gid */
         944                 : #define AT_EGID         14              /* Effective gid */
         945                 : #define AT_CLKTCK       17              /* Frequency of times() */
         946                 :
         947                 : /* Some more special a_type values describing the hardware.  */
         948                 : #define AT_PLATFORM     15              /* String identifying platform.  */
         949                 : #define AT_HWCAP        16              /* Machine dependent hints about
         950                 :                                            processor capabilities.  */
         951                 :
         952                 : /* This entry gives some information about the FPU initialization
         953                 :    performed by the kernel.  */
         954                 : #define AT_FPUCW        18              /* Used FPU control word.  */
         955                 :
         956                 : /* Cache block sizes.  */
         957                 : #define AT_DCACHEBSIZE  19              /* Data cache block size.  */
         958                 : #define AT_ICACHEBSIZE  20              /* Instruction cache block size.  */
         959                 : #define AT_UCACHEBSIZE  21              /* Unified cache block size.  */
         960                 :
         961                 : /* A special ignored value for PPC, used by the kernel to control the
         962                 :    interpretation of the AUXV. Must be > 16.  */
         963                 : #define AT_IGNOREPPC    22              /* Entry should be ignored.  */
         964                 :
         965                 : #define AT_SECURE       23              /* Boolean, was exec setuid-like?  */
         966                 :
         967                 : /* Pointer to the global system page used for system calls and other
         968                 :    nice things.  */
         969                 : #define AT_SYSINFO      32
         970                 : #define AT_SYSINFO_EHDR 33
         971                 :
         972                 : /* Shapes of the caches.  Bits 0-3 contains associativity; bits 4-7 contains
         973                 :    log2 of line size; mask those to get cache size.  */
         974                 : #define AT_L1I_CACHESHAPE       34
         975                 : #define AT_L1D_CACHESHAPE       35
         976                 : #define AT_L2_CACHESHAPE        36
         977                 : #define AT_L3_CACHESHAPE        37
         978                 :
         979                 : /* Note section contents.  Each entry in the note section begins with
         980                 :    a header of a fixed form.  */
         981                 :
         982                 : typedef struct
         983                 : {
         984                 :   Elf32_Word n_namesz;                  /* Length of the note's name.  */
         985                 :   Elf32_Word n_descsz;                  /* Length of the note's descriptor.  */
         986                 :   Elf32_Word n_type;                    /* Type of the note.  */
         987                 : } Elf32_Nhdr;
         988                 :
         989                 : typedef struct
         990                 : {
         991                 :   Elf64_Word n_namesz;                  /* Length of the note's name.  */
         992                 :   Elf64_Word n_descsz;                  /* Length of the note's descriptor.  */
         993                 :   Elf64_Word n_type;                    /* Type of the note.  */
         994                 : } Elf64_Nhdr;
         995                 :
         996                 : /* Known names of notes.  */
         997                 :
         998                 : /* Solaris entries in the note section have this name.  */
         999                 : #define ELF_NOTE_SOLARIS        "SUNW Solaris"
        1000                 :
        1001                 : /* Note entries for GNU systems have this name.  */
        1002                 : #define ELF_NOTE_GNU            "GNU"
        1003                 :
        1004                 :
        1005                 : /* Defined types of notes for Solaris.  */
        1006                 :
        1007                 : /* Value of descriptor (one word) is desired pagesize for the binary.  */
        1008                 : #define ELF_NOTE_PAGESIZE_HINT  1
        1009                 :
        1010                 :
        1011                 : /* Defined note types for GNU systems.  */
        1012                 :
        1013                 : /* ABI information.  The descriptor consists of words:
        1014                 :    word 0: OS descriptor
        1015                 :    word 1: major version of the ABI
        1016                 :    word 2: minor version of the ABI
        1017                 :    word 3: subminor version of the ABI
        1018                 : */
        1019                 : #define ELF_NOTE_ABI            1
        1020                 :
        1021                 : /* Known OSes.  These value can appear in word 0 of an ELF_NOTE_ABI
        1022                 :    note section entry.  */
        1023                 : #define ELF_NOTE_OS_LINUX       0
        1024                 : #define ELF_NOTE_OS_GNU         1
        1025                 : #define ELF_NOTE_OS_SOLARIS2    2
        1026                 : #define ELF_NOTE_OS_FREEBSD     3
        1027                 :
        1028                 :
        1029                 : /* Move records.  */
        1030                 : typedef struct
        1031                 : {
        1032                 :   Elf32_Xword m_value;          /* Symbol value.  */
        1033                 :   Elf32_Word m_info;            /* Size and index.  */
        1034                 :   Elf32_Word m_poffset;         /* Symbol offset.  */
        1035                 :   Elf32_Half m_repeat;          /* Repeat count.  */
        1036                 :   Elf32_Half m_stride;          /* Stride info.  */
        1037                 : } Elf32_Move;
        1038                 :
        1039                 : typedef struct
        1040                 : {
        1041                 :   Elf64_Xword m_value;          /* Symbol value.  */
        1042                 :   Elf64_Xword m_info;           /* Size and index.  */
        1043                 :   Elf64_Xword m_poffset;        /* Symbol offset.  */
        1044                 :   Elf64_Half m_repeat;          /* Repeat count.  */
        1045                 :   Elf64_Half m_stride;          /* Stride info.  */
        1046                 : } Elf64_Move;
        1047                 :
        1048                 : /* Macro to construct move records.  */
        1049                 : #define ELF32_M_SYM(info)       ((info) >> 8)
        1050                 : #define ELF32_M_SIZE(info)      ((unsigned char) (info))
        1051                 : #define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size))
        1052                 :
        1053                 : #define ELF64_M_SYM(info)       ELF32_M_SYM (info)
        1054                 : #define ELF64_M_SIZE(info)      ELF32_M_SIZE (info)
        1055                 : #define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size)
        1056                 :
        1057                 :
        1058                 : /* Motorola 68k specific definitions.  */
        1059                 :
        1060                 : /* Values for Elf32_Ehdr.e_flags.  */
        1061                 : #define EF_CPU32        0x00810000
        1062                 :
        1063                 : /* m68k relocs.  */
        1064                 :
        1065                 : #define R_68K_NONE      0               /* No reloc */
        1066                 : #define R_68K_32        1               /* Direct 32 bit  */
        1067                 : #define R_68K_16        2               /* Direct 16 bit  */
        1068                 : #define R_68K_8         3               /* Direct 8 bit  */
        1069                 : #define R_68K_PC32      4               /* PC relative 32 bit */
        1070                 : #define R_68K_PC16      5               /* PC relative 16 bit */
        1071                 : #define R_68K_PC8       6               /* PC relative 8 bit */
        1072                 : #define R_68K_GOT32     7               /* 32 bit PC relative GOT entry */
        1073                 : #define R_68K_GOT16     8               /* 16 bit PC relative GOT entry */
        1074                 : #define R_68K_GOT8      9               /* 8 bit PC relative GOT entry */
        1075                 : #define R_68K_GOT32O    10              /* 32 bit GOT offset */
        1076                 : #define R_68K_GOT16O    11              /* 16 bit GOT offset */
        1077                 : #define R_68K_GOT8O     12              /* 8 bit GOT offset */
        1078                 : #define R_68K_PLT32     13              /* 32 bit PC relative PLT address */
        1079                 : #define R_68K_PLT16     14              /* 16 bit PC relative PLT address */
        1080                 : #define R_68K_PLT8      15              /* 8 bit PC relative PLT address */
        1081                 : #define R_68K_PLT32O    16              /* 32 bit PLT offset */
        1082                 : #define R_68K_PLT16O    17              /* 16 bit PLT offset */
        1083                 : #define R_68K_PLT8O     18              /* 8 bit PLT offset */
        1084                 : #define R_68K_COPY      19              /* Copy symbol at runtime */
        1085                 : #define R_68K_GLOB_DAT  20              /* Create GOT entry */
        1086                 : #define R_68K_JMP_SLOT  21              /* Create PLT entry */
        1087                 : #define R_68K_RELATIVE  22              /* Adjust by program base */
        1088                 : /* Keep this the last entry.  */
        1089                 : #define R_68K_NUM       23
        1090                 :
        1091                 : /* Intel 80386 specific definitions.  */
        1092                 :
        1093                 : /* i386 relocs.  */
        1094                 :
        1095                 : #define R_386_NONE         0            /* No reloc */
        1096                 : #define R_386_32           1            /* Direct 32 bit  */
        1097                 : #define R_386_PC32         2            /* PC relative 32 bit */
        1098                 : #define R_386_GOT32        3            /* 32 bit GOT entry */
        1099                 : #define R_386_PLT32        4            /* 32 bit PLT address */
        1100                 : #define R_386_COPY         5            /* Copy symbol at runtime */
        1101                 : #define R_386_GLOB_DAT     6            /* Create GOT entry */
        1102                 : #define R_386_JMP_SLOT     7            /* Create PLT entry */
        1103                 : #define R_386_RELATIVE     8            /* Adjust by program base */
        1104                 : #define R_386_GOTOFF       9            /* 32 bit offset to GOT */
        1105                 : #define R_386_GOTPC        10           /* 32 bit PC relative offset to GOT */
        1106                 : #define R_386_32PLT        11
        1107                 : #define R_386_TLS_TPOFF    14           /* Offset in static TLS block */
        1108                 : #define R_386_TLS_IE       15           /* Address of GOT entry for static TLS
        1109                 :                                            block offset */
        1110                 : #define R_386_TLS_GOTIE    16           /* GOT entry for static TLS block
        1111                 :                                            offset */
        1112                 : #define R_386_TLS_LE       17           /* Offset relative to static TLS
        1113                 :                                            block */
        1114                 : #define R_386_TLS_GD       18           /* Direct 32 bit for GNU version of
        1115                 :                                            general dynamic thread local data */
        1116                 : #define R_386_TLS_LDM      19           /* Direct 32 bit for GNU version of
        1117                 :                                            local dynamic thread local data
        1118                 :                                            in LE code */
        1119                 : #define R_386_16           20
        1120                 : #define R_386_PC16         21
        1121                 : #define R_386_8            22
        1122                 : #define R_386_PC8          23
        1123                 : #define R_386_TLS_GD_32    24           /* Direct 32 bit for general dynamic
        1124                 :                                            thread local data */
        1125                 : #define R_386_TLS_GD_PUSH  25           /* Tag for pushl in GD TLS code */
        1126                 : #define R_386_TLS_GD_CALL  26           /* Relocation for call to
        1127                 :                                            __tls_get_addr() */
        1128                 : #define R_386_TLS_GD_POP   27           /* Tag for popl in GD TLS code */
        1129                 : #define R_386_TLS_LDM_32   28           /* Direct 32 bit for local dynamic
        1130                 :                                            thread local data in LE code */
        1131                 : #define R_386_TLS_LDM_PUSH 29           /* Tag for pushl in LDM TLS code */
        1132                 : #define R_386_TLS_LDM_CALL 30           /* Relocation for call to
        1133                 :                                            __tls_get_addr() in LDM code */
        1134                 : #define R_386_TLS_LDM_POP  31           /* Tag for popl in LDM TLS code */
        1135                 : #define R_386_TLS_LDO_32   32           /* Offset relative to TLS block */
        1136                 : #define R_386_TLS_IE_32    33           /* GOT entry for negated static TLS
        1137                 :                                            block offset */
        1138                 : #define R_386_TLS_LE_32    34           /* Negated offset relative to static
        1139                 :                                            TLS block */
        1140                 : #define R_386_TLS_DTPMOD32 35           /* ID of module containing symbol */
        1141                 : #define R_386_TLS_DTPOFF32 36           /* Offset in TLS block */
        1142                 : #define R_386_TLS_TPOFF32  37           /* Negated offset in static TLS block */
        1143                 : /* Keep this the last entry.  */
        1144                 : #define R_386_NUM          38
        1145                 :
        1146                 : /* SUN SPARC specific definitions.  */
        1147                 :
        1148                 : /* Legal values for ST_TYPE subfield of st_info (symbol type).  */
        1149                 :
        1150                 : #define STT_SPARC_REGISTER      13      /* Global register reserved to app. */
        1151                 :
        1152                 : /* Values for Elf64_Ehdr.e_flags.  */
        1153                 :
        1154                 : #define EF_SPARCV9_MM           3
        1155                 : #define EF_SPARCV9_TSO          0
        1156                 : #define EF_SPARCV9_PSO          1
        1157                 : #define EF_SPARCV9_RMO          2
        1158                 : #define EF_SPARC_LEDATA         0x800000 /* little endian data */
        1159                 : #define EF_SPARC_EXT_MASK       0xFFFF00
        1160                 : #define EF_SPARC_32PLUS         0x000100 /* generic V8+ features */
        1161                 : #define EF_SPARC_SUN_US1        0x000200 /* Sun UltraSPARC1 extensions */
        1162                 : #define EF_SPARC_HAL_R1         0x000400 /* HAL R1 extensions */
        1163                 : #define EF_SPARC_SUN_US3        0x000800 /* Sun UltraSPARCIII extensions */
        1164                 :
        1165                 : /* SPARC relocs.  */
        1166                 :
        1167                 : #define R_SPARC_NONE            0       /* No reloc */
        1168                 : #define R_SPARC_8               1       /* Direct 8 bit */
        1169                 : #define R_SPARC_16              2       /* Direct 16 bit */
        1170                 : #define R_SPARC_32              3       /* Direct 32 bit */
        1171                 : #define R_SPARC_DISP8           4       /* PC relative 8 bit */
        1172                 : #define R_SPARC_DISP16          5       /* PC relative 16 bit */
        1173                 : #define R_SPARC_DISP32          6       /* PC relative 32 bit */
        1174                 : #define R_SPARC_WDISP30         7       /* PC relative 30 bit shifted */
        1175                 : #define R_SPARC_WDISP22         8       /* PC relative 22 bit shifted */
        1176                 : #define R_SPARC_HI22            9       /* High 22 bit */
        1177                 : #define R_SPARC_22              10      /* Direct 22 bit */
        1178                 : #define R_SPARC_13              11      /* Direct 13 bit */
        1179                 : #define R_SPARC_LO10            12      /* Truncated 10 bit */
        1180                 : #define R_SPARC_GOT10           13      /* Truncated 10 bit GOT entry */
        1181                 : #define R_SPARC_GOT13           14      /* 13 bit GOT entry */
        1182                 : #define R_SPARC_GOT22           15      /* 22 bit GOT entry shifted */
        1183                 : #define R_SPARC_PC10            16      /* PC relative 10 bit truncated */
        1184                 : #define R_SPARC_PC22            17      /* PC relative 22 bit shifted */
        1185                 : #define R_SPARC_WPLT30          18      /* 30 bit PC relative PLT address */
        1186                 : #define R_SPARC_COPY            19      /* Copy symbol at runtime */
        1187                 : #define R_SPARC_GLOB_DAT        20      /* Create GOT entry */
        1188                 : #define R_SPARC_JMP_SLOT        21      /* Create PLT entry */
        1189                 : #define R_SPARC_RELATIVE        22      /* Adjust by program base */
        1190                 : #define R_SPARC_UA32            23      /* Direct 32 bit unaligned */
        1191                 :
        1192                 : /* Additional Sparc64 relocs.  */
        1193                 :
        1194                 : #define R_SPARC_PLT32           24      /* Direct 32 bit ref to PLT entry */
        1195                 : #define R_SPARC_HIPLT22         25      /* High 22 bit PLT entry */
        1196                 : #define R_SPARC_LOPLT10         26      /* Truncated 10 bit PLT entry */
        1197                 : #define R_SPARC_PCPLT32         27      /* PC rel 32 bit ref to PLT entry */
        1198                 : #define R_SPARC_PCPLT22         28      /* PC rel high 22 bit PLT entry */
        1199                 : #define R_SPARC_PCPLT10         29      /* PC rel trunc 10 bit PLT entry */
        1200                 : #define R_SPARC_10              30      /* Direct 10 bit */
        1201                 : #define R_SPARC_11              31      /* Direct 11 bit */
        1202                 : #define R_SPARC_64              32      /* Direct 64 bit */
        1203                 : #define R_SPARC_OLO10           33      /* 10bit with secondary 13bit addend */
        1204                 : #define R_SPARC_HH22            34      /* Top 22 bits of direct 64 bit */
        1205                 : #define R_SPARC_HM10            35      /* High middle 10 bits of ... */
        1206                 : #define R_SPARC_LM22            36      /* Low middle 22 bits of ... */
        1207                 : #define R_SPARC_PC_HH22         37      /* Top 22 bits of pc rel 64 bit */
        1208                 : #define R_SPARC_PC_HM10         38      /* High middle 10 bit of ... */
        1209                 : #define R_SPARC_PC_LM22         39      /* Low miggle 22 bits of ... */
        1210                 : #define R_SPARC_WDISP16         40      /* PC relative 16 bit shifted */
        1211                 : #define R_SPARC_WDISP19         41      /* PC relative 19 bit shifted */
        1212                 : #define R_SPARC_7               43      /* Direct 7 bit */
        1213                 : #define R_SPARC_5               44      /* Direct 5 bit */
        1214                 : #define R_SPARC_6               45      /* Direct 6 bit */
        1215                 : #define R_SPARC_DISP64          46      /* PC relative 64 bit */
        1216                 : #define R_SPARC_PLT64           47      /* Direct 64 bit ref to PLT entry */
        1217                 : #define R_SPARC_HIX22           48      /* High 22 bit complemented */
        1218                 : #define R_SPARC_LOX10           49      /* Truncated 11 bit complemented */
        1219                 : #define R_SPARC_H44             50      /* Direct high 12 of 44 bit */
        1220                 : #define R_SPARC_M44             51      /* Direct mid 22 of 44 bit */
        1221                 : #define R_SPARC_L44             52      /* Direct low 10 of 44 bit */
        1222                 : #define R_SPARC_REGISTER        53      /* Global register usage */
        1223                 : #define R_SPARC_UA64            54      /* Direct 64 bit unaligned */
        1224                 : #define R_SPARC_UA16            55      /* Direct 16 bit unaligned */
        1225                 : #define R_SPARC_TLS_GD_HI22     56
        1226                 : #define R_SPARC_TLS_GD_LO10     57
        1227                 : #define R_SPARC_TLS_GD_ADD      58
        1228                 : #define R_SPARC_TLS_GD_CALL     59
        1229                 : #define R_SPARC_TLS_LDM_HI22    60
        1230                 : #define R_SPARC_TLS_LDM_LO10    61
        1231                 : #define R_SPARC_TLS_LDM_ADD     62
        1232                 : #define R_SPARC_TLS_LDM_CALL    63
        1233                 : #define R_SPARC_TLS_LDO_HIX22   64
        1234                 : #define R_SPARC_TLS_LDO_LOX10   65
        1235                 : #define R_SPARC_TLS_LDO_ADD     66
        1236                 : #define R_SPARC_TLS_IE_HI22     67
        1237                 : #define R_SPARC_TLS_IE_LO10     68
        1238                 : #define R_SPARC_TLS_IE_LD       69
        1239                 : #define R_SPARC_TLS_IE_LDX      70
        1240                 : #define R_SPARC_TLS_IE_ADD      71
        1241                 : #define R_SPARC_TLS_LE_HIX22    72
        1242                 : #define R_SPARC_TLS_LE_LOX10    73
        1243                 : #define R_SPARC_TLS_DTPMOD32    74
        1244                 : #define R_SPARC_TLS_DTPMOD64    75
        1245                 : #define R_SPARC_TLS_DTPOFF32    76
        1246                 : #define R_SPARC_TLS_DTPOFF64    77
        1247                 : #define R_SPARC_TLS_TPOFF32     78
        1248                 : #define R_SPARC_TLS_TPOFF64     79
        1249                 : /* Keep this the last entry.  */
        1250                 : #define R_SPARC_NUM             80
        1251                 :
        1252                 : /* For Sparc64, legal values for d_tag of Elf64_Dyn.  */
        1253                 :
        1254                 : #define DT_SPARC_REGISTER 0x70000001
        1255                 : #define DT_SPARC_NUM    2
        1256                 :
        1257                 : /* Bits present in AT_HWCAP on SPARC.  */
        1258                 :
        1259                 : #define HWCAP_SPARC_FLUSH       1       /* The CPU supports flush insn.  */
        1260                 : #define HWCAP_SPARC_STBAR       2
        1261                 : #define HWCAP_SPARC_SWAP        4
        1262                 : #define HWCAP_SPARC_MULDIV      8
        1263                 : #define HWCAP_SPARC_V9          16      /* The CPU is v9, so v8plus is ok.  */
        1264                 : #define HWCAP_SPARC_ULTRA3      32
        1265                 : #define HWCAP_SPARC_BLKINIT     64      /* Sun4v with block-init/load-twin.  */
        1266                 :
        1267                 : /* MIPS R3000 specific definitions.  */
        1268                 :
        1269                 : /* Legal values for e_flags field of Elf32_Ehdr.  */
        1270                 :
        1271                 : #define EF_MIPS_NOREORDER   1           /* A .noreorder directive was used */
        1272                 : #define EF_MIPS_PIC         2           /* Contains PIC code */
        1273                 : #define EF_MIPS_CPIC        4           /* Uses PIC calling sequence */
        1274                 : #define EF_MIPS_XGOT        8
        1275                 : #define EF_MIPS_64BIT_WHIRL 16
        1276                 : #define EF_MIPS_ABI2        32
        1277                 : #define EF_MIPS_ABI_ON32    64
        1278                 : #define EF_MIPS_ARCH        0xf0000000  /* MIPS architecture level */
        1279                 :
        1280                 : /* Legal values for MIPS architecture level.  */
        1281                 :
        1282                 : #define EF_MIPS_ARCH_1      0x00000000  /* -mips1 code.  */
        1283                 : #define EF_MIPS_ARCH_2      0x10000000  /* -mips2 code.  */
        1284                 : #define EF_MIPS_ARCH_3      0x20000000  /* -mips3 code.  */
        1285                 : #define EF_MIPS_ARCH_4      0x30000000  /* -mips4 code.  */
        1286                 : #define EF_MIPS_ARCH_5      0x40000000  /* -mips5 code.  */
        1287                 : #define EF_MIPS_ARCH_32     0x60000000  /* MIPS32 code.  */
        1288                 : #define EF_MIPS_ARCH_64     0x70000000  /* MIPS64 code.  */
        1289                 :
        1290                 : /* The following are non-official names and should not be used.  */
        1291                 :
        1292                 : #define E_MIPS_ARCH_1     0x00000000    /* -mips1 code.  */
        1293                 : #define E_MIPS_ARCH_2     0x10000000    /* -mips2 code.  */
        1294                 : #define E_MIPS_ARCH_3     0x20000000    /* -mips3 code.  */
        1295                 : #define E_MIPS_ARCH_4     0x30000000    /* -mips4 code.  */
        1296                 : #define E_MIPS_ARCH_5     0x40000000    /* -mips5 code.  */
        1297                 : #define E_MIPS_ARCH_32    0x60000000    /* MIPS32 code.  */
        1298                 : #define E_MIPS_ARCH_64    0x70000000    /* MIPS64 code.  */
        1299                 :
        1300                 : /* Special section indices.  */
        1301                 :
        1302                 : #define SHN_MIPS_ACOMMON    0xff00      /* Allocated common symbols */
        1303                 : #define SHN_MIPS_TEXT       0xff01      /* Allocated test symbols.  */
        1304                 : #define SHN_MIPS_DATA       0xff02      /* Allocated data symbols.  */
        1305                 : #define SHN_MIPS_SCOMMON    0xff03      /* Small common symbols */
        1306                 : #define SHN_MIPS_SUNDEFINED 0xff04      /* Small undefined symbols */
        1307                 :
        1308                 : /* Legal values for sh_type field of Elf32_Shdr.  */
        1309                 :
        1310                 : #define SHT_MIPS_LIBLIST       0x70000000 /* Shared objects used in link */
        1311                 : #define SHT_MIPS_MSYM          0x70000001
        1312                 : #define SHT_MIPS_CONFLICT      0x70000002 /* Conflicting symbols */
        1313                 : #define SHT_MIPS_GPTAB         0x70000003 /* Global data area sizes */
        1314                 : #define SHT_MIPS_UCODE         0x70000004 /* Reserved for SGI/MIPS compilers */
        1315                 : #define SHT_MIPS_DEBUG         0x70000005 /* MIPS ECOFF debugging information*/
        1316                 : #define SHT_MIPS_REGINFO       0x70000006 /* Register usage information */
        1317                 : #define SHT_MIPS_PACKAGE       0x70000007
        1318                 : #define SHT_MIPS_PACKSYM       0x70000008
        1319                 : #define SHT_MIPS_RELD          0x70000009
        1320                 : #define SHT_MIPS_IFACE         0x7000000b
        1321                 : #define SHT_MIPS_CONTENT       0x7000000c
        1322                 : #define SHT_MIPS_OPTIONS       0x7000000d /* Miscellaneous options.  */
        1323                 : #define SHT_MIPS_SHDR          0x70000010
        1324                 : #define SHT_MIPS_FDESC         0x70000011
        1325                 : #define SHT_MIPS_EXTSYM        0x70000012
        1326                 : #define SHT_MIPS_DENSE         0x70000013
        1327                 : #define SHT_MIPS_PDESC         0x70000014
        1328                 : #define SHT_MIPS_LOCSYM        0x70000015
        1329                 : #define SHT_MIPS_AUXSYM        0x70000016
        1330                 : #define SHT_MIPS_OPTSYM        0x70000017
        1331                 : #define SHT_MIPS_LOCSTR        0x70000018
        1332                 : #define SHT_MIPS_LINE          0x70000019
        1333                 : #define SHT_MIPS_RFDESC        0x7000001a
        1334                 : #define SHT_MIPS_DELTASYM      0x7000001b
        1335                 : #define SHT_MIPS_DELTAINST     0x7000001c
        1336                 : #define SHT_MIPS_DELTACLASS    0x7000001d
        1337                 : #define SHT_MIPS_DWARF         0x7000001e /* DWARF debugging information.  */
        1338                 : #define SHT_MIPS_DELTADECL     0x7000001f
        1339                 : #define SHT_MIPS_SYMBOL_LIB    0x70000020
        1340                 : #define SHT_MIPS_EVENTS        0x70000021 /* Event section.  */
        1341                 : #define SHT_MIPS_TRANSLATE     0x70000022
        1342                 : #define SHT_MIPS_PIXIE         0x70000023
        1343                 : #define SHT_MIPS_XLATE         0x70000024
        1344                 : #define SHT_MIPS_XLATE_DEBUG   0x70000025
        1345                 : #define SHT_MIPS_WHIRL         0x70000026
        1346                 : #define SHT_MIPS_EH_REGION     0x70000027
        1347                 : #define SHT_MIPS_XLATE_OLD     0x70000028
        1348                 : #define SHT_MIPS_PDR_EXCEPTION 0x70000029
        1349                 :
        1350                 : /* Legal values for sh_flags field of Elf32_Shdr.  */
        1351                 :
        1352                 : #define SHF_MIPS_GPREL   0x10000000     /* Must be part of global data area */
        1353                 : #define SHF_MIPS_MERGE   0x20000000
        1354                 : #define SHF_MIPS_ADDR    0x40000000
        1355                 : #define SHF_MIPS_STRINGS 0x80000000
        1356                 : #define SHF_MIPS_NOSTRIP 0x08000000
        1357                 : #define SHF_MIPS_LOCAL   0x04000000
        1358                 : #define SHF_MIPS_NAMES   0x02000000
        1359                 : #define SHF_MIPS_NODUPE  0x01000000
        1360                 :
        1361                 :
        1362                 : /* Symbol tables.  */
        1363                 :
        1364                 : /* MIPS specific values for `st_other'.  */
        1365                 : #define STO_MIPS_DEFAULT                0x0
        1366                 : #define STO_MIPS_INTERNAL               0x1
        1367                 : #define STO_MIPS_HIDDEN                 0x2
        1368                 : #define STO_MIPS_PROTECTED              0x3
        1369                 : #define STO_MIPS_SC_ALIGN_UNUSED        0xff
        1370                 :
        1371                 : /* MIPS specific values for `st_info'.  */
        1372                 : #define STB_MIPS_SPLIT_COMMON           13
        1373                 :
        1374                 : /* Entries found in sections of type SHT_MIPS_GPTAB.  */
        1375                 :
        1376                 : typedef union
        1377                 : {
        1378                 :   struct
        1379                 :     {
        1380                 :       Elf32_Word gt_current_g_value;    /* -G value used for compilation */
        1381                 :       Elf32_Word gt_unused;             /* Not used */
        1382                 :     } gt_header;                        /* First entry in section */
        1383                 :   struct
        1384                 :     {
        1385                 :       Elf32_Word gt_g_value;            /* If this value were used for -G */
        1386                 :       Elf32_Word gt_bytes;              /* This many bytes would be used */
        1387                 :     } gt_entry;                         /* Subsequent entries in section */
        1388                 : } Elf32_gptab;
        1389                 :
        1390                 : /* Entry found in sections of type SHT_MIPS_REGINFO.  */
        1391                 :
        1392                 : typedef struct
        1393                 : {
        1394                 :   Elf32_Word    ri_gprmask;             /* General registers used */
        1395                 :   Elf32_Word    ri_cprmask[4];          /* Coprocessor registers used */
        1396                 :   Elf32_Sword   ri_gp_value;            /* $gp register value */
        1397                 : } Elf32_RegInfo;
        1398                 :
        1399                 : /* Entries found in sections of type SHT_MIPS_OPTIONS.  */
        1400                 :
        1401                 : typedef struct
        1402                 : {
        1403                 :   unsigned char kind;           /* Determines interpretation of the
        1404                 :                                    variable part of descriptor.  */
        1405                 :   unsigned char size;           /* Size of descriptor, including header.  */
        1406                 :   Elf32_Section section;        /* Section header index of section affected,
        1407                 :                                    0 for global options.  */
        1408                 :   Elf32_Word info;              /* Kind-specific information.  */
        1409                 : } Elf_Options;
        1410                 :
        1411                 : /* Values for `kind' field in Elf_Options.  */
        1412                 :
        1413                 : #define ODK_NULL        0       /* Undefined.  */
        1414                 : #define ODK_REGINFO     1       /* Register usage information.  */
        1415                 : #define ODK_EXCEPTIONS  2       /* Exception processing options.  */
        1416                 : #define ODK_PAD         3       /* Section padding options.  */
        1417                 : #define ODK_HWPATCH     4       /* Hardware workarounds performed */
        1418                 : #define ODK_FILL        5       /* record the fill value used by the linker. */
        1419                 : #define ODK_TAGS        6       /* reserve space for desktop tools to write. */
        1420                 : #define ODK_HWAND       7       /* HW workarounds.  'AND' bits when merging. */
        1421                 : #define ODK_HWOR        8       /* HW workarounds.  'OR' bits when merging.  */
        1422                 :
        1423                 : /* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries.  */
        1424                 :
        1425                 : #define OEX_FPU_MIN     0x1f    /* FPE's which MUST be enabled.  */
        1426                 : #define OEX_FPU_MAX     0x1f00  /* FPE's which MAY be enabled.  */
        1427                 : #define OEX_PAGE0       0x10000 /* page zero must be mapped.  */
        1428                 : #define OEX_SMM         0x20000 /* Force sequential memory mode?  */
        1429                 : #define OEX_FPDBUG      0x40000 /* Force floating point debug mode?  */
        1430                 : #define OEX_PRECISEFP   OEX_FPDBUG
        1431                 : #define OEX_DISMISS     0x80000 /* Dismiss invalid address faults?  */
        1432                 :
        1433                 : #define OEX_FPU_INVAL   0x10
        1434                 : #define OEX_FPU_DIV0    0x08
        1435                 : #define OEX_FPU_OFLO    0x04
        1436                 : #define OEX_FPU_UFLO    0x02
        1437                 : #define OEX_FPU_INEX    0x01
        1438                 :
        1439                 : /* Masks for `info' in Elf_Options for an ODK_HWPATCH entry.  */
        1440                 :
        1441                 : #define OHW_R4KEOP      0x1     /* R4000 end-of-page patch.  */
        1442                 : #define OHW_R8KPFETCH   0x2     /* may need R8000 prefetch patch.  */
        1443                 : #define OHW_R5KEOP      0x4     /* R5000 end-of-page patch.  */
        1444                 : #define OHW_R5KCVTL     0x8     /* R5000 cvt.[ds].l bug.  clean=1.  */
        1445                 :
        1446                 : #define OPAD_PREFIX     0x1
        1447                 : #define OPAD_POSTFIX    0x2
        1448                 : #define OPAD_SYMBOL     0x4
        1449                 :
        1450                 : /* Entry found in `.options' section.  */
        1451                 :
        1452                 : typedef struct
        1453                 : {
        1454                 :   Elf32_Word hwp_flags1;        /* Extra flags.  */
        1455                 :   Elf32_Word hwp_flags2;        /* Extra flags.  */
        1456                 : } Elf_Options_Hw;
        1457                 :
        1458                 : /* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries.  */
        1459                 :
        1460                 : #define OHWA0_R4KEOP_CHECKED    0x00000001
        1461                 : #define OHWA1_R4KEOP_CLEAN      0x00000002
        1462                 :
        1463                 : /* MIPS relocs.  */
        1464                 :
        1465                 : #define R_MIPS_NONE             0       /* No reloc */
        1466                 : #define R_MIPS_16               1       /* Direct 16 bit */
        1467                 : #define R_MIPS_32               2       /* Direct 32 bit */
        1468                 : #define R_MIPS_REL32            3       /* PC relative 32 bit */
        1469                 : #define R_MIPS_26               4       /* Direct 26 bit shifted */
        1470                 : #define R_MIPS_HI16             5       /* High 16 bit */
        1471                 : #define R_MIPS_LO16             6       /* Low 16 bit */
        1472                 : #define R_MIPS_GPREL16          7       /* GP relative 16 bit */
        1473                 : #define R_MIPS_LITERAL          8       /* 16 bit literal entry */
        1474                 : #define R_MIPS_GOT16            9       /* 16 bit GOT entry */
        1475                 : #define R_MIPS_PC16             10      /* PC relative 16 bit */
        1476                 : #define R_MIPS_CALL16           11      /* 16 bit GOT entry for function */
        1477                 : #define R_MIPS_GPREL32          12      /* GP relative 32 bit */
        1478                 :
        1479                 : #define R_MIPS_SHIFT5           16
        1480                 : #define R_MIPS_SHIFT6           17
        1481                 : #define R_MIPS_64               18
        1482                 : #define R_MIPS_GOT_DISP         19
        1483                 : #define R_MIPS_GOT_PAGE         20
        1484                 : #define R_MIPS_GOT_OFST         21
        1485                 : #define R_MIPS_GOT_HI16         22
        1486                 : #define R_MIPS_GOT_LO16         23
        1487                 : #define R_MIPS_SUB              24
        1488                 : #define R_MIPS_INSERT_A         25
        1489                 : #define R_MIPS_INSERT_B         26
        1490                 : #define R_MIPS_DELETE           27
        1491                 : #define R_MIPS_HIGHER           28
        1492                 : #define R_MIPS_HIGHEST          29
        1493                 : #define R_MIPS_CALL_HI16        30
        1494                 : #define R_MIPS_CALL_LO16        31
        1495                 : #define R_MIPS_SCN_DISP         32
        1496                 : #define R_MIPS_REL16            33
        1497                 : #define R_MIPS_ADD_IMMEDIATE    34
        1498                 : #define R_MIPS_PJUMP            35
        1499                 : #define R_MIPS_RELGOT           36
        1500                 : #define R_MIPS_JALR             37
        1501                 : #define R_MIPS_TLS_DTPMOD32     38      /* Module number 32 bit */
        1502                 : #define R_MIPS_TLS_DTPREL32     39      /* Module-relative offset 32 bit */
        1503                 : #define R_MIPS_TLS_DTPMOD64     40      /* Module number 64 bit */
        1504                 : #define R_MIPS_TLS_DTPREL64     41      /* Module-relative offset 64 bit */
        1505                 : #define R_MIPS_TLS_GD           42      /* 16 bit GOT offset for GD */
        1506                 : #define R_MIPS_TLS_LDM          43      /* 16 bit GOT offset for LDM */
        1507                 : #define R_MIPS_TLS_DTPREL_HI16  44      /* Module-relative offset, high 16 bits */
        1508                 : #define R_MIPS_TLS_DTPREL_LO16  45      /* Module-relative offset, low 16 bits */
        1509                 : #define R_MIPS_TLS_GOTTPREL     46      /* 16 bit GOT offset for IE */
        1510                 : #define R_MIPS_TLS_TPREL32      47      /* TP-relative offset, 32 bit */
        1511                 : #define R_MIPS_TLS_TPREL64      48      /* TP-relative offset, 64 bit */
        1512                 : #define R_MIPS_TLS_TPREL_HI16   49      /* TP-relative offset, high 16 bits */
        1513                 : #define R_MIPS_TLS_TPREL_LO16   50      /* TP-relative offset, low 16 bits */
        1514                 : /* Keep this the last entry.  */
        1515                 : #define R_MIPS_NUM              51
        1516                 :
        1517                 : /* Legal values for p_type field of Elf32_Phdr.  */
        1518                 :
        1519                 : #define PT_MIPS_REGINFO 0x70000000      /* Register usage information */
        1520                 : #define PT_MIPS_RTPROC  0x70000001      /* Runtime procedure table. */
        1521                 : #define PT_MIPS_OPTIONS 0x70000002
        1522                 :
        1523                 : /* Special program header types.  */
        1524                 :
        1525                 : #define PF_MIPS_LOCAL   0x10000000
        1526                 :
        1527                 : /* Legal values for d_tag field of Elf32_Dyn.  */
        1528                 :
        1529                 : #define DT_MIPS_RLD_VERSION  0x70000001 /* Runtime linker interface version */
        1530                 : #define DT_MIPS_TIME_STAMP   0x70000002 /* Timestamp */
        1531                 : #define DT_MIPS_ICHECKSUM    0x70000003 /* Checksum */
        1532                 : #define DT_MIPS_IVERSION     0x70000004 /* Version string (string tbl index) */
        1533                 : #define DT_MIPS_FLAGS        0x70000005 /* Flags */
        1534                 : #define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */
        1535                 : #define DT_MIPS_MSYM         0x70000007
        1536                 : #define DT_MIPS_CONFLICT     0x70000008 /* Address of CONFLICT section */
        1537                 : #define DT_MIPS_LIBLIST      0x70000009 /* Address of LIBLIST section */
        1538                 : #define DT_MIPS_LOCAL_GOTNO  0x7000000a /* Number of local GOT entries */
        1539                 : #define DT_MIPS_CONFLICTNO   0x7000000b /* Number of CONFLICT entries */
        1540                 : #define DT_MIPS_LIBLISTNO    0x70000010 /* Number of LIBLIST entries */
        1541                 : #define DT_MIPS_SYMTABNO     0x70000011 /* Number of DYNSYM entries */
        1542                 : #define DT_MIPS_UNREFEXTNO   0x70000012 /* First external DYNSYM */
        1543                 : #define DT_MIPS_GOTSYM       0x70000013 /* First GOT entry in DYNSYM */
        1544                 : #define DT_MIPS_HIPAGENO     0x70000014 /* Number of GOT page table entries */
        1545                 : #define DT_MIPS_RLD_MAP      0x70000016 /* Address of run time loader map.  */
        1546                 : #define DT_MIPS_DELTA_CLASS  0x70000017 /* Delta C++ class definition.  */
        1547                 : #define DT_MIPS_DELTA_CLASS_NO    0x70000018 /* Number of entries in
        1548                 :                                                 DT_MIPS_DELTA_CLASS.  */
        1549                 : #define DT_MIPS_DELTA_INSTANCE    0x70000019 /* Delta C++ class instances.  */
        1550                 : #define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
        1551                 :                                                 DT_MIPS_DELTA_INSTANCE.  */
        1552                 : #define DT_MIPS_DELTA_RELOC  0x7000001b /* Delta relocations.  */
        1553                 : #define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
        1554                 :                                              DT_MIPS_DELTA_RELOC.  */
        1555                 : #define DT_MIPS_DELTA_SYM    0x7000001d /* Delta symbols that Delta
        1556                 :                                            relocations refer to.  */
        1557                 : #define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
        1558                 :                                            DT_MIPS_DELTA_SYM.  */
        1559                 : #define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
        1560                 :                                              class declaration.  */
        1561                 : #define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
        1562                 :                                                 DT_MIPS_DELTA_CLASSSYM.  */
        1563                 : #define DT_MIPS_CXX_FLAGS    0x70000022 /* Flags indicating for C++ flavor.  */
        1564                 : #define DT_MIPS_PIXIE_INIT   0x70000023
        1565                 : #define DT_MIPS_SYMBOL_LIB   0x70000024
        1566                 : #define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
        1567                 : #define DT_MIPS_LOCAL_GOTIDX 0x70000026
        1568                 : #define DT_MIPS_HIDDEN_GOTIDX 0x70000027
        1569                 : #define DT_MIPS_PROTECTED_GOTIDX 0x70000028
        1570                 : #define DT_MIPS_OPTIONS      0x70000029 /* Address of .options.  */
        1571                 : #define DT_MIPS_INTERFACE    0x7000002a /* Address of .interface.  */
        1572                 : #define DT_MIPS_DYNSTR_ALIGN 0x7000002b
        1573                 : #define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
        1574                 : #define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
        1575                 :                                                     function stored in GOT.  */
        1576                 : #define DT_MIPS_PERF_SUFFIX  0x7000002e /* Default suffix of dso to be added
        1577                 :                                            by rld on dlopen() calls.  */
        1578                 : #define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
        1579                 : #define DT_MIPS_GP_VALUE     0x70000030 /* GP value for aux GOTs.  */
        1580                 : #define DT_MIPS_AUX_DYNAMIC  0x70000031 /* Address of aux .dynamic.  */
        1581                 : #define DT_MIPS_NUM          0x32
        1582                 :
        1583                 : /* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry.  */
        1584                 :
        1585                 : #define RHF_NONE                   0            /* No flags */
        1586                 : #define RHF_QUICKSTART             (1 << 0)       /* Use quickstart */
        1587                 : #define RHF_NOTPOT                 (1 << 1)       /* Hash size not power of 2 */
        1588                 : #define RHF_NO_LIBRARY_REPLACEMENT (1 << 2)       /* Ignore LD_LIBRARY_PATH */
        1589                 : #define RHF_NO_MOVE                (1 << 3)
        1590                 : #define RHF_SGI_ONLY               (1 << 4)
        1591                 : #define RHF_GUARANTEE_INIT         (1 << 5)
        1592                 : #define RHF_DELTA_C_PLUS_PLUS      (1 << 6)
        1593                 : #define RHF_GUARANTEE_START_INIT   (1 << 7)
        1594                 : #define RHF_PIXIE                  (1 << 8)
        1595                 : #define RHF_DEFAULT_DELAY_LOAD     (1 << 9)
        1596                 : #define RHF_REQUICKSTART           (1 << 10)
        1597                 : #define RHF_REQUICKSTARTED         (1 << 11)
        1598                 : #define RHF_CORD                   (1 << 12)
        1599                 : #define RHF_NO_UNRES_UNDEF         (1 << 13)
        1600                 : #define RHF_RLD_ORDER_SAFE         (1 << 14)
        1601                 :
        1602                 : /* Entries found in sections of type SHT_MIPS_LIBLIST.  */
        1603                 :
        1604                 : typedef struct
        1605                 : {
        1606                 :   Elf32_Word l_name;            /* Name (string table index) */
        1607                 :   Elf32_Word l_time_stamp;      /* Timestamp */
        1608                 :   Elf32_Word l_checksum;        /* Checksum */
        1609                 :   Elf32_Word l_version;         /* Interface version */
        1610                 :   Elf32_Word l_flags;           /* Flags */
        1611                 : } Elf32_Lib;
        1612                 :
        1613                 : typedef struct
        1614                 : {
        1615                 :   Elf64_Word l_name;            /* Name (string table index) */
        1616                 :   Elf64_Word l_time_stamp;      /* Timestamp */
        1617                 :   Elf64_Word l_checksum;        /* Checksum */
        1618                 :   Elf64_Word l_version;         /* Interface version */
        1619                 :   Elf64_Word l_flags;           /* Flags */
        1620                 : } Elf64_Lib;
        1621                 :
        1622                 :
        1623                 : /* Legal values for l_flags.  */
        1624                 :
        1625                 : #define LL_NONE           0
        1626                 : #define LL_EXACT_MATCH    (1 << 0)        /* Require exact match */
        1627                 : #define LL_IGNORE_INT_VER (1 << 1)        /* Ignore interface version */
        1628                 : #define LL_REQUIRE_MINOR  (1 << 2)
        1629                 : #define LL_EXPORTS        (1 << 3)
        1630                 : #define LL_DELAY_LOAD     (1 << 4)
        1631                 : #define LL_DELTA          (1 << 5)
        1632                 :
        1633                 : /* Entries found in sections of type SHT_MIPS_CONFLICT.  */
        1634                 :
        1635                 : typedef Elf32_Addr Elf32_Conflict;
        1636                 :
        1637                 :
        1638                 : /* HPPA specific definitions.  */
        1639                 :
        1640                 : /* Legal values for e_flags field of Elf32_Ehdr.  */
        1641                 :
        1642                 : #define EF_PARISC_TRAPNIL       0x00010000 /* Trap nil pointer dereference.  */
        1643                 : #define EF_PARISC_EXT           0x00020000 /* Program uses arch. extensions. */
        1644                 : #define EF_PARISC_LSB           0x00040000 /* Program expects little endian. */
        1645                 : #define EF_PARISC_WIDE          0x00080000 /* Program expects wide mode.  */
        1646                 : #define EF_PARISC_NO_KABP       0x00100000 /* No kernel assisted branch
        1647                 :                                               prediction.  */
        1648                 : #define EF_PARISC_LAZYSWAP      0x00400000 /* Allow lazy swapping.  */
        1649                 : #define EF_PARISC_ARCH          0x0000ffff /* Architecture version.  */
        1650                 :
        1651                 : /* Defined values for `e_flags & EF_PARISC_ARCH' are:  */
        1652                 :
        1653                 : #define EFA_PARISC_1_0              0x020b /* PA-RISC 1.0 big-endian.  */
        1654                 : #define EFA_PARISC_1_1              0x0210 /* PA-RISC 1.1 big-endian.  */
        1655                 : #define EFA_PARISC_2_0              0x0214 /* PA-RISC 2.0 big-endian.  */
        1656                 :
        1657                 : /* Additional section indeces.  */
        1658                 :
        1659                 : #define SHN_PARISC_ANSI_COMMON  0xff00     /* Section for tenatively declared
        1660                 :                                               symbols in ANSI C.  */
        1661                 : #define SHN_PARISC_HUGE_COMMON  0xff01     /* Common blocks in huge model.  */
        1662                 :
        1663                 : /* Legal values for sh_type field of Elf32_Shdr.  */
        1664                 :
        1665                 : #define SHT_PARISC_EXT          0x70000000 /* Contains product specific ext. */
        1666                 : #define SHT_PARISC_UNWIND       0x70000001 /* Unwind information.  */
        1667                 : #define SHT_PARISC_DOC          0x70000002 /* Debug info for optimized code. */
        1668                 :
        1669                 : /* Legal values for sh_flags field of Elf32_Shdr.  */
        1670                 :
        1671                 : #define SHF_PARISC_SHORT        0x20000000 /* Section with short addressing. */
        1672                 : #define SHF_PARISC_HUGE         0x40000000 /* Section far from gp.  */
        1673                 : #define SHF_PARISC_SBP          0x80000000 /* Static branch prediction code. */
        1674                 :
        1675                 : /* Legal values for ST_TYPE subfield of st_info (symbol type).  */
        1676                 :
        1677                 : #define STT_PARISC_MILLICODE    13      /* Millicode function entry point.  */
        1678                 :
        1679                 : #define STT_HP_OPAQUE           (STT_LOOS + 0x1)
        1680                 : #define STT_HP_STUB             (STT_LOOS + 0x2)
        1681                 :
        1682                 : /* HPPA relocs.  */
        1683                 :
        1684                 : #define R_PARISC_NONE           0       /* No reloc.  */
        1685                 : #define R_PARISC_DIR32          1       /* Direct 32-bit reference.  */
        1686                 : #define R_PARISC_DIR21L         2       /* Left 21 bits of eff. address.  */
        1687                 : #define R_PARISC_DIR17R         3       /* Right 17 bits of eff. address.  */
        1688                 : #define R_PARISC_DIR17F         4       /* 17 bits of eff. address.  */
        1689                 : #define R_PARISC_DIR14R         6       /* Right 14 bits of eff. address.  */
        1690                 : #define R_PARISC_PCREL32        9       /* 32-bit rel. address.  */
        1691                 : #define R_PARISC_PCREL21L       10      /* Left 21 bits of rel. address.  */
        1692                 : #define R_PARISC_PCREL17R       11      /* Right 17 bits of rel. address.  */
        1693                 : #define R_PARISC_PCREL17F       12      /* 17 bits of rel. address.  */
        1694                 : #define R_PARISC_PCREL14R       14      /* Right 14 bits of rel. address.  */
        1695                 : #define R_PARISC_DPREL21L       18      /* Left 21 bits of rel. address.  */
        1696                 : #define R_PARISC_DPREL14R       22      /* Right 14 bits of rel. address.  */
        1697                 : #define R_PARISC_GPREL21L       26      /* GP-relative, left 21 bits.  */
        1698                 : #define R_PARISC_GPREL14R       30      /* GP-relative, right 14 bits.  */
        1699                 : #define R_PARISC_LTOFF21L       34      /* LT-relative, left 21 bits.  */
        1700                 : #define R_PARISC_LTOFF14R       38      /* LT-relative, right 14 bits.  */
        1701                 : #define R_PARISC_SECREL32       41      /* 32 bits section rel. address.  */
        1702                 : #define R_PARISC_SEGBASE        48      /* No relocation, set segment base.  */
        1703                 : #define R_PARISC_SEGREL32       49      /* 32 bits segment rel. address.  */
        1704                 : #define R_PARISC_PLTOFF21L      50      /* PLT rel. address, left 21 bits.  */
        1705                 : #define R_PARISC_PLTOFF14R      54      /* PLT rel. address, right 14 bits.  */
        1706                 : #define R_PARISC_LTOFF_FPTR32   57      /* 32 bits LT-rel. function pointer. */
        1707                 : #define R_PARISC_LTOFF_FPTR21L  58      /* LT-rel. fct ptr, left 21 bits. */
        1708                 : #define R_PARISC_LTOFF_FPTR14R  62      /* LT-rel. fct ptr, right 14 bits. */
        1709                 : #define R_PARISC_FPTR64         64      /* 64 bits function address.  */
        1710                 : #define R_PARISC_PLABEL32       65      /* 32 bits function address.  */
        1711                 : #define R_PARISC_PCREL64        72      /* 64 bits PC-rel. address.  */
        1712                 : #define R_PARISC_PCREL22F       74      /* 22 bits PC-rel. address.  */
        1713                 : #define R_PARISC_PCREL14WR      75      /* PC-rel. address, right 14 bits.  */
        1714                 : #define R_PARISC_PCREL14DR      76      /* PC rel. address, right 14 bits.  */
        1715                 : #define R_PARISC_PCREL16F       77      /* 16 bits PC-rel. address.  */
        1716                 : #define R_PARISC_PCREL16WF      78      /* 16 bits PC-rel. address.  */
        1717                 : #define R_PARISC_PCREL16DF      79      /* 16 bits PC-rel. address.  */
        1718                 : #define R_PARISC_DIR64          80      /* 64 bits of eff. address.  */
        1719                 : #define R_PARISC_DIR14WR        83      /* 14 bits of eff. address.  */
        1720                 : #define R_PARISC_DIR14DR        84      /* 14 bits of eff. address.  */
        1721                 : #define R_PARISC_DIR16F         85      /* 16 bits of eff. address.  */
        1722                 : #define R_PARISC_DIR16WF        86      /* 16 bits of eff. address.  */
        1723                 : #define R_PARISC_DIR16DF        87      /* 16 bits of eff. address.  */
        1724                 : #define R_PARISC_GPREL64        88      /* 64 bits of GP-rel. address.  */
        1725                 : #define R_PARISC_GPREL14WR      91      /* GP-rel. address, right 14 bits.  */
        1726                 : #define R_PARISC_GPREL14DR      92      /* GP-rel. address, right 14 bits.  */
        1727                 : #define R_PARISC_GPREL16F       93      /* 16 bits GP-rel. address.  */
        1728                 : #define R_PARISC_GPREL16WF      94      /* 16 bits GP-rel. address.  */
        1729                 : #define R_PARISC_GPREL16DF      95      /* 16 bits GP-rel. address.  */
        1730                 : #define R_PARISC_LTOFF64        96      /* 64 bits LT-rel. address.  */
        1731                 : #define R_PARISC_LTOFF14WR      99      /* LT-rel. address, right 14 bits.  */
        1732                 : #define R_PARISC_LTOFF14DR      100     /* LT-rel. address, right 14 bits.  */
        1733                 : #define R_PARISC_LTOFF16F       101     /* 16 bits LT-rel. address.  */
        1734                 : #define R_PARISC_LTOFF16WF      102     /* 16 bits LT-rel. address.  */
        1735                 : #define R_PARISC_LTOFF16DF      103     /* 16 bits LT-rel. address.  */
        1736                 : #define R_PARISC_SECREL64       104     /* 64 bits section rel. address.  */
        1737                 : #define R_PARISC_SEGREL64       112     /* 64 bits segment rel. address.  */
        1738                 : #define R_PARISC_PLTOFF14WR     115     /* PLT-rel. address, right 14 bits.  */
        1739                 : #define R_PARISC_PLTOFF14DR     116     /* PLT-rel. address, right 14 bits.  */
        1740                 : #define R_PARISC_PLTOFF16F      117     /* 16 bits LT-rel. address.  */
        1741                 : #define R_PARISC_PLTOFF16WF     118     /* 16 bits PLT-rel. address.  */
        1742                 : #define R_PARISC_PLTOFF16DF     119     /* 16 bits PLT-rel. address.  */
        1743                 : #define R_PARISC_LTOFF_FPTR64   120     /* 64 bits LT-rel. function ptr.  */
        1744                 : #define R_PARISC_LTOFF_FPTR14WR 123     /* LT-rel. fct. ptr., right 14 bits. */
        1745                 : #define R_PARISC_LTOFF_FPTR14DR 124     /* LT-rel. fct. ptr., right 14 bits. */
        1746                 : #define R_PARISC_LTOFF_FPTR16F  125     /* 16 bits LT-rel. function ptr.  */
        1747                 : #define R_PARISC_LTOFF_FPTR16WF 126     /* 16 bits LT-rel. function ptr.  */
        1748                 : #define R_PARISC_LTOFF_FPTR16DF 127     /* 16 bits LT-rel. function ptr.  */
        1749                 : #define R_PARISC_LORESERVE      128
        1750                 : #define R_PARISC_COPY           128     /* Copy relocation.  */
        1751                 : #define R_PARISC_IPLT           129     /* Dynamic reloc, imported PLT */
        1752                 : #define R_PARISC_EPLT           130     /* Dynamic reloc, exported PLT */
        1753                 : #define R_PARISC_TPREL32        153     /* 32 bits TP-rel. address.  */
        1754                 : #define R_PARISC_TPREL21L       154     /* TP-rel. address, left 21 bits.  */
        1755                 : #define R_PARISC_TPREL14R       158     /* TP-rel. address, right 14 bits.  */
        1756                 : #define R_PARISC_LTOFF_TP21L    162     /* LT-TP-rel. address, left 21 bits. */
        1757                 : #define R_PARISC_LTOFF_TP14R    166     /* LT-TP-rel. address, right 14 bits.*/
        1758                 : #define R_PARISC_LTOFF_TP14F    167     /* 14 bits LT-TP-rel. address.  */
        1759                 : #define R_PARISC_TPREL64        216     /* 64 bits TP-rel. address.  */
        1760                 : #define R_PARISC_TPREL14WR      219     /* TP-rel. address, right 14 bits.  */
        1761                 : #define R_PARISC_TPREL14DR      220     /* TP-rel. address, right 14 bits.  */
        1762                 : #define R_PARISC_TPREL16F       221     /* 16 bits TP-rel. address.  */
        1763                 : #define R_PARISC_TPREL16WF      222     /* 16 bits TP-rel. address.  */
        1764                 : #define R_PARISC_TPREL16DF      223     /* 16 bits TP-rel. address.  */
        1765                 : #define R_PARISC_LTOFF_TP64     224     /* 64 bits LT-TP-rel. address.  */
        1766                 : #define R_PARISC_LTOFF_TP14WR   227     /* LT-TP-rel. address, right 14 bits.*/
        1767                 : #define R_PARISC_LTOFF_TP14DR   228     /* LT-TP-rel. address, right 14 bits.*/
        1768                 : #define R_PARISC_LTOFF_TP16F    229     /* 16 bits LT-TP-rel. address.  */
        1769                 : #define R_PARISC_LTOFF_TP16WF   230     /* 16 bits LT-TP-rel. address.  */
        1770                 : #define R_PARISC_LTOFF_TP16DF   231     /* 16 bits LT-TP-rel. address.  */
        1771                 : #define R_PARISC_HIRESERVE      255
        1772                 :
        1773                 : /* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr.  */
        1774                 :
        1775                 : #define PT_HP_TLS               (PT_LOOS + 0x0)
        1776                 : #define PT_HP_CORE_NONE         (PT_LOOS + 0x1)
        1777                 : #define PT_HP_CORE_VERSION      (PT_LOOS + 0x2)
        1778                 : #define PT_HP_CORE_KERNEL       (PT_LOOS + 0x3)
        1779                 : #define PT_HP_CORE_COMM         (PT_LOOS + 0x4)
        1780                 : #define PT_HP_CORE_PROC         (PT_LOOS + 0x5)
        1781                 : #define PT_HP_CORE_LOADABLE     (PT_LOOS + 0x6)
        1782                 : #define PT_HP_CORE_STACK        (PT_LOOS + 0x7)
        1783                 : #define PT_HP_CORE_SHM          (PT_LOOS + 0x8)
        1784                 : #define PT_HP_CORE_MMF          (PT_LOOS + 0x9)
        1785                 : #define PT_HP_PARALLEL          (PT_LOOS + 0x10)
        1786                 : #define PT_HP_FASTBIND          (PT_LOOS + 0x11)
        1787                 : #define PT_HP_OPT_ANNOT         (PT_LOOS + 0x12)
        1788                 : #define PT_HP_HSL_ANNOT         (PT_LOOS + 0x13)
        1789                 : #define PT_HP_STACK             (PT_LOOS + 0x14)
        1790                 :
        1791                 : #define PT_PARISC_ARCHEXT       0x70000000
        1792                 : #define PT_PARISC_UNWIND        0x70000001
        1793                 :
        1794                 : /* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr.  */
        1795                 :
        1796                 : #define PF_PARISC_SBP           0x08000000
        1797                 :
        1798                 : #define PF_HP_PAGE_SIZE         0x00100000
        1799                 : #define PF_HP_FAR_SHARED        0x00200000
        1800                 : #define PF_HP_NEAR_SHARED       0x00400000
        1801                 : #define PF_HP_CODE              0x01000000
        1802                 : #define PF_HP_MODIFY            0x02000000
        1803                 : #define PF_HP_LAZYSWAP          0x04000000
        1804                 : #define PF_HP_SBP               0x08000000
        1805                 :
        1806                 :
        1807                 : /* Alpha specific definitions.  */
        1808                 :
        1809                 : /* Legal values for e_flags field of Elf64_Ehdr.  */
        1810                 :
        1811                 : #define EF_ALPHA_32BIT          1       /* All addresses must be < 2GB.  */
        1812                 : #define EF_ALPHA_CANRELAX       2       /* Relocations for relaxing exist.  */
        1813                 :
        1814                 : /* Legal values for sh_type field of Elf64_Shdr.  */
        1815                 :
        1816                 : /* These two are primerily concerned with ECOFF debugging info.  */
        1817                 : #define SHT_ALPHA_DEBUG         0x70000001
        1818                 : #define SHT_ALPHA_REGINFO       0x70000002
        1819                 :
        1820                 : /* Legal values for sh_flags field of Elf64_Shdr.  */
        1821                 :
        1822                 : #define SHF_ALPHA_GPREL         0x10000000
        1823                 :
        1824                 : /* Legal values for st_other field of Elf64_Sym.  */
        1825                 : #define STO_ALPHA_NOPV          0x80    /* No PV required.  */
        1826                 : #define STO_ALPHA_STD_GPLOAD    0x88    /* PV only used for initial ldgp.  */
        1827                 :
        1828                 : /* Alpha relocs.  */
        1829                 :
        1830                 : #define R_ALPHA_NONE            0       /* No reloc */
        1831                 : #define R_ALPHA_REFLONG         1       /* Direct 32 bit */
        1832                 : #define R_ALPHA_REFQUAD         2       /* Direct 64 bit */
        1833                 : #define R_ALPHA_GPREL32         3       /* GP relative 32 bit */
        1834                 : #define R_ALPHA_LITERAL         4       /* GP relative 16 bit w/optimization */
        1835                 : #define R_ALPHA_LITUSE          5       /* Optimization hint for LITERAL */
        1836                 : #define R_ALPHA_GPDISP          6       /* Add displacement to GP */
        1837                 : #define R_ALPHA_BRADDR          7       /* PC+4 relative 23 bit shifted */
        1838                 : #define R_ALPHA_HINT            8       /* PC+4 relative 16 bit shifted */
        1839                 : #define R_ALPHA_SREL16          9       /* PC relative 16 bit */
        1840                 : #define R_ALPHA_SREL32          10      /* PC relative 32 bit */
        1841                 : #define R_ALPHA_SREL64          11      /* PC relative 64 bit */
        1842                 : #define R_ALPHA_GPRELHIGH       17      /* GP relative 32 bit, high 16 bits */
        1843                 : #define R_ALPHA_GPRELLOW        18      /* GP relative 32 bit, low 16 bits */
        1844                 : #define R_ALPHA_GPREL16         19      /* GP relative 16 bit */
        1845                 : #define R_ALPHA_COPY            24      /* Copy symbol at runtime */
        1846                 : #define R_ALPHA_GLOB_DAT        25      /* Create GOT entry */
        1847                 : #define R_ALPHA_JMP_SLOT        26      /* Create PLT entry */
        1848                 : #define R_ALPHA_RELATIVE        27      /* Adjust by program base */
        1849                 : #define R_ALPHA_TLS_GD_HI       28
        1850                 : #define R_ALPHA_TLSGD           29
        1851                 : #define R_ALPHA_TLS_LDM         30
        1852                 : #define R_ALPHA_DTPMOD64        31
        1853                 : #define R_ALPHA_GOTDTPREL       32
        1854                 : #define R_ALPHA_DTPREL64        33
        1855                 : #define R_ALPHA_DTPRELHI        34
        1856                 : #define R_ALPHA_DTPRELLO        35
        1857                 : #define R_ALPHA_DTPREL16        36
        1858                 : #define R_ALPHA_GOTTPREL        37
        1859                 : #define R_ALPHA_TPREL64         38
        1860                 : #define R_ALPHA_TPRELHI         39
        1861                 : #define R_ALPHA_TPRELLO         40
        1862                 : #define R_ALPHA_TPREL16         41
        1863                 : /* Keep this the last entry.  */
        1864                 : #define R_ALPHA_NUM             46
        1865                 :
        1866                 : /* Magic values of the LITUSE relocation addend.  */
        1867                 : #define LITUSE_ALPHA_ADDR       0
        1868                 : #define LITUSE_ALPHA_BASE       1
        1869                 : #define LITUSE_ALPHA_BYTOFF     2
        1870                 : #define LITUSE_ALPHA_JSR        3
        1871                 : #define LITUSE_ALPHA_TLS_GD     4
        1872                 : #define LITUSE_ALPHA_TLS_LDM    5
        1873                 :
        1874                 : /* Legal values for d_tag of Elf64_Dyn.  */
        1875                 : #define DT_ALPHA_PLTRO          (DT_LOPROC + 0)
        1876                 : #define DT_ALPHA_NUM            1
        1877                 :
        1878                 : /* PowerPC specific declarations */
        1879                 :
        1880                 : /* Values for Elf32/64_Ehdr.e_flags.  */
        1881                 : #define EF_PPC_EMB              0x80000000      /* PowerPC embedded flag */
        1882                 :
        1883                 : /* Cygnus local bits below */
        1884                 : #define EF_PPC_RELOCATABLE      0x00010000      /* PowerPC -mrelocatable flag*/
        1885                 : #define EF_PPC_RELOCATABLE_LIB  0x00008000      /* PowerPC -mrelocatable-lib
        1886                 :                                                    flag */
        1887                 :
        1888                 : /* PowerPC relocations defined by the ABIs */
        1889                 : #define R_PPC_NONE              0
        1890                 : #define R_PPC_ADDR32            1       /* 32bit absolute address */
        1891                 : #define R_PPC_ADDR24            2       /* 26bit address, 2 bits ignored.  */
        1892                 : #define R_PPC_ADDR16            3       /* 16bit absolute address */
        1893                 : #define R_PPC_ADDR16_LO         4       /* lower 16bit of absolute address */
        1894                 : #define R_PPC_ADDR16_HI         5       /* high 16bit of absolute address */
        1895                 : #define R_PPC_ADDR16_HA         6       /* adjusted high 16bit */
        1896                 : #define R_PPC_ADDR14            7       /* 16bit address, 2 bits ignored */
        1897                 : #define R_PPC_ADDR14_BRTAKEN    8
        1898                 : #define R_PPC_ADDR14_BRNTAKEN   9
        1899                 : #define R_PPC_REL24             10      /* PC relative 26 bit */
        1900                 : #define R_PPC_REL14             11      /* PC relative 16 bit */
        1901                 : #define R_PPC_REL14_BRTAKEN     12
        1902                 : #define R_PPC_REL14_BRNTAKEN    13
        1903                 : #define R_PPC_GOT16             14
        1904                 : #define R_PPC_GOT16_LO          15
        1905                 : #define R_PPC_GOT16_HI          16
        1906                 : #define R_PPC_GOT16_HA          17
        1907                 : #define R_PPC_PLTREL24          18
        1908                 : #define R_PPC_COPY              19
        1909                 : #define R_PPC_GLOB_DAT          20
        1910                 : #define R_PPC_JMP_SLOT          21
        1911                 : #define R_PPC_RELATIVE          22
        1912                 : #define R_PPC_LOCAL24PC         23
        1913                 : #define R_PPC_UADDR32           24
        1914                 : #define R_PPC_UADDR16           25
        1915                 : #define R_PPC_REL32             26
        1916                 : #define R_PPC_PLT32             27
        1917                 : #define R_PPC_PLTREL32          28
        1918                 : #define R_PPC_PLT16_LO          29
        1919                 : #define R_PPC_PLT16_HI          30
        1920                 : #define R_PPC_PLT16_HA          31
        1921                 : #define R_PPC_SDAREL16          32
        1922                 : #define R_PPC_SECTOFF           33
        1923                 : #define R_PPC_SECTOFF_LO        34
        1924                 : #define R_PPC_SECTOFF_HI        35
        1925                 : #define R_PPC_SECTOFF_HA        36
        1926                 :
        1927                 : /* PowerPC relocations defined for the TLS access ABI.  */
        1928                 : #define R_PPC_TLS               67 /* none      (sym+add)@tls */
        1929                 : #define R_PPC_DTPMOD32          68 /* word32    (sym+add)@dtpmod */
        1930                 : #define R_PPC_TPREL16           69 /* half16*   (sym+add)@tprel */
        1931                 : #define R_PPC_TPREL16_LO        70 /* half16    (sym+add)@tprel@l */
        1932                 : #define R_PPC_TPREL16_HI        71 /* half16    (sym+add)@tprel@h */
        1933                 : #define R_PPC_TPREL16_HA        72 /* half16    (sym+add)@tprel@ha */
        1934                 : #define R_PPC_TPREL32           73 /* word32    (sym+add)@tprel */
        1935                 : #define R_PPC_DTPREL16          74 /* half16*   (sym+add)@dtprel */
        1936                 : #define R_PPC_DTPREL16_LO       75 /* half16    (sym+add)@dtprel@l */
        1937                 : #define R_PPC_DTPREL16_HI       76 /* half16    (sym+add)@dtprel@h */
        1938                 : #define R_PPC_DTPREL16_HA       77 /* half16    (sym+add)@dtprel@ha */
        1939                 : #define R_PPC_DTPREL32          78 /* word32    (sym+add)@dtprel */
        1940                 : #define R_PPC_GOT_TLSGD16       79 /* half16*   (sym+add)@got@tlsgd */
        1941                 : #define R_PPC_GOT_TLSGD16_LO    80 /* half16    (sym+add)@got@tlsgd@l */
        1942                 : #define R_PPC_GOT_TLSGD16_HI    81 /* half16    (sym+add)@got@tlsgd@h */
        1943                 : #define R_PPC_GOT_TLSGD16_HA    82 /* half16    (sym+add)@got@tlsgd@ha */
        1944                 : #define R_PPC_GOT_TLSLD16       83 /* half16*   (sym+add)@got@tlsld */
        1945                 : #define R_PPC_GOT_TLSLD16_LO    84 /* half16    (sym+add)@got@tlsld@l */
        1946                 : #define R_PPC_GOT_TLSLD16_HI    85 /* half16    (sym+add)@got@tlsld@h */
        1947                 : #define R_PPC_GOT_TLSLD16_HA    86 /* half16    (sym+add)@got@tlsld@ha */
        1948                 : #define R_PPC_GOT_TPREL16       87 /* half16*   (sym+add)@got@tprel */
        1949                 : #define R_PPC_GOT_TPREL16_LO    88 /* half16    (sym+add)@got@tprel@l */
        1950                 : #define R_PPC_GOT_TPREL16_HI    89 /* half16    (sym+add)@got@tprel@h */
        1951                 : #define R_PPC_GOT_TPREL16_HA    90 /* half16    (sym+add)@got@tprel@ha */
        1952                 : #define R_PPC_GOT_DTPREL16      91 /* half16*   (sym+add)@got@dtprel */
        1953                 : #define R_PPC_GOT_DTPREL16_LO   92 /* half16*   (sym+add)@got@dtprel@l */
        1954                 : #define R_PPC_GOT_DTPREL16_HI   93 /* half16*   (sym+add)@got@dtprel@h */
        1955                 : #define R_PPC_GOT_DTPREL16_HA   94 /* half16*   (sym+add)@got@dtprel@ha */
        1956                 :
        1957                 : /* Keep this the last entry.  */
        1958                 : #define R_PPC_NUM               95
        1959                 :
        1960                 : /* The remaining relocs are from the Embedded ELF ABI, and are not
        1961                 :    in the SVR4 ELF ABI.  */
        1962                 : #define R_PPC_EMB_NADDR32       101
        1963                 : #define R_PPC_EMB_NADDR16       102
        1964                 : #define R_PPC_EMB_NADDR16_LO    103
        1965                 : #define R_PPC_EMB_NADDR16_HI    104
        1966                 : #define R_PPC_EMB_NADDR16_HA    105
        1967                 : #define R_PPC_EMB_SDAI16        106
        1968                 : #define R_PPC_EMB_SDA2I16       107
        1969                 : #define R_PPC_EMB_SDA2REL       108
        1970                 : #define R_PPC_EMB_SDA21         109     /* 16 bit offset in SDA */
        1971                 : #define R_PPC_EMB_MRKREF        110
        1972                 : #define R_PPC_EMB_RELSEC16      111
        1973                 : #define R_PPC_EMB_RELST_LO      112
        1974                 : #define R_PPC_EMB_RELST_HI      113
        1975                 : #define R_PPC_EMB_RELST_HA      114
        1976                 : #define R_PPC_EMB_BIT_FLD       115
        1977                 : #define R_PPC_EMB_RELSDA        116     /* 16 bit relative offset in SDA */
        1978                 :
        1979                 : /* Diab tool relocations.  */
        1980                 : #define R_PPC_DIAB_SDA21_LO     180     /* like EMB_SDA21, but lower 16 bit */
        1981                 : #define R_PPC_DIAB_SDA21_HI     181     /* like EMB_SDA21, but high 16 bit */
        1982                 : #define R_PPC_DIAB_SDA21_HA     182     /* like EMB_SDA21, adjusted high 16 */
        1983                 : #define R_PPC_DIAB_RELSDA_LO    183     /* like EMB_RELSDA, but lower 16 bit */
        1984                 : #define R_PPC_DIAB_RELSDA_HI    184     /* like EMB_RELSDA, but high 16 bit */
        1985                 : #define R_PPC_DIAB_RELSDA_HA    185     /* like EMB_RELSDA, adjusted high 16 */
        1986                 :
        1987                 : /* GNU relocs used in PIC code sequences.  */
        1988                 : #define R_PPC_REL16             249     /* word32   (sym-.) */
        1989                 : #define R_PPC_REL16_LO          250     /* half16   (sym-.)@l */
        1990                 : #define R_PPC_REL16_HI          251     /* half16   (sym-.)@h */
        1991                 : #define R_PPC_REL16_HA          252     /* half16   (sym-.)@ha */
        1992                 :
        1993                 : /* This is a phony reloc to handle any old fashioned TOC16 references
        1994                 :    that may still be in object files.  */
        1995                 : #define R_PPC_TOC16             255
        1996                 :
        1997                 : /* PowerPC specific values for the Dyn d_tag field.  */
        1998                 : #define DT_PPC_GOT              (DT_LOPROC + 0)
        1999                 : #define DT_PPC_NUM              1
        2000                 :
        2001                 : /* PowerPC64 relocations defined by the ABIs */
        2002                 : #define R_PPC64_NONE            R_PPC_NONE
        2003                 : #define R_PPC64_ADDR32          R_PPC_ADDR32 /* 32bit absolute address */
        2004                 : #define R_PPC64_ADDR24          R_PPC_ADDR24 /* 26bit address, word aligned */
        2005                 : #define R_PPC64_ADDR16          R_PPC_ADDR16 /* 16bit absolute address */
        2006                 : #define R_PPC64_ADDR16_LO       R_PPC_ADDR16_LO /* lower 16bits of address */
        2007                 : #define R_PPC64_ADDR16_HI       R_PPC_ADDR16_HI /* high 16bits of address. */
        2008                 : #define R_PPC64_ADDR16_HA       R_PPC_ADDR16_HA /* adjusted high 16bits.  */
        2009                 : #define R_PPC64_ADDR14          R_PPC_ADDR14 /* 16bit address, word aligned */
        2010                 : #define R_PPC64_ADDR14_BRTAKEN  R_PPC_ADDR14_BRTAKEN
        2011                 : #define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN
        2012                 : #define R_PPC64_REL24           R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
        2013                 : #define R_PPC64_REL14           R_PPC_REL14 /* PC relative 16 bit */
        2014                 : #define R_PPC64_REL14_BRTAKEN   R_PPC_REL14_BRTAKEN
        2015                 : #define R_PPC64_REL14_BRNTAKEN  R_PPC_REL14_BRNTAKEN
        2016                 : #define R_PPC64_GOT16           R_PPC_GOT16
        2017                 : #define R_PPC64_GOT16_LO        R_PPC_GOT16_LO
        2018                 : #define R_PPC64_GOT16_HI        R_PPC_GOT16_HI
        2019                 : #define R_PPC64_GOT16_HA        R_PPC_GOT16_HA
        2020                 :
        2021                 : #define R_PPC64_COPY            R_PPC_COPY
        2022                 : #define R_PPC64_GLOB_DAT        R_PPC_GLOB_DAT
        2023                 : #define R_PPC64_JMP_SLOT        R_PPC_JMP_SLOT
        2024                 : #define R_PPC64_RELATIVE        R_PPC_RELATIVE
        2025                 :
        2026                 : #define R_PPC64_UADDR32         R_PPC_UADDR32
        2027                 : #define R_PPC64_UADDR16         R_PPC_UADDR16
        2028                 : #define R_PPC64_REL32           R_PPC_REL32
        2029                 : #define R_PPC64_PLT32           R_PPC_PLT32
        2030                 : #define R_PPC64_PLTREL32        R_PPC_PLTREL32
        2031                 : #define R_PPC64_PLT16_LO        R_PPC_PLT16_LO
        2032                 : #define R_PPC64_PLT16_HI        R_PPC_PLT16_HI
        2033                 : #define R_PPC64_PLT16_HA        R_PPC_PLT16_HA
        2034                 :
        2035                 : #define R_PPC64_SECTOFF         R_PPC_SECTOFF
        2036                 : #define R_PPC64_SECTOFF_LO      R_PPC_SECTOFF_LO
        2037                 : #define R_PPC64_SECTOFF_HI      R_PPC_SECTOFF_HI
        2038                 : #define R_PPC64_SECTOFF_HA      R_PPC_SECTOFF_HA
        2039                 : #define R_PPC64_ADDR30          37 /* word30 (S + A - P) >> 2 */
        2040                 : #define R_PPC64_ADDR64          38 /* doubleword64 S + A */
        2041                 : #define R_PPC64_ADDR16_HIGHER   39 /* half16 #higher(S + A) */
        2042                 : #define R_PPC64_ADDR16_HIGHERA  40 /* half16 #highera(S + A) */
        2043                 : #define R_PPC64_ADDR16_HIGHEST  41 /* half16 #highest(S + A) */
        2044                 : #define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A) */
        2045                 : #define R_PPC64_UADDR64         43 /* doubleword64 S + A */
        2046                 : #define R_PPC64_REL64           44 /* doubleword64 S + A - P */
        2047                 : #define R_PPC64_PLT64           45 /* doubleword64 L + A */
        2048                 : #define R_PPC64_PLTREL64        46 /* doubleword64 L + A - P */
        2049                 : #define R_PPC64_TOC16           47 /* half16* S + A - .TOC */
        2050                 : #define R_PPC64_TOC16_LO        48 /* half16 #lo(S + A - .TOC.) */
        2051                 : #define R_PPC64_TOC16_HI        49 /* half16 #hi(S + A - .TOC.) */
        2052                 : #define R_PPC64_TOC16_HA        50 /* half16 #ha(S + A - .TOC.) */
        2053                 : #define R_PPC64_TOC             51 /* doubleword64 .TOC */
        2054                 : #define R_PPC64_PLTGOT16        52 /* half16* M + A */
        2055                 : #define R_PPC64_PLTGOT16_LO     53 /* half16 #lo(M + A) */
        2056                 : #define R_PPC64_PLTGOT16_HI     54 /* half16 #hi(M + A) */
        2057                 : #define R_PPC64_PLTGOT16_HA     55 /* half16 #ha(M + A) */
        2058                 :
        2059                 : #define R_PPC64_ADDR16_DS       56 /* half16ds* (S + A) >> 2 */
        2060                 : #define R_PPC64_ADDR16_LO_DS    57 /* half16ds  #lo(S + A) >> 2 */
        2061                 : #define R_PPC64_GOT16_DS        58 /* half16ds* (G + A) >> 2 */
        2062                 : #define R_PPC64_GOT16_LO_DS     59 /* half16ds  #lo(G + A) >> 2 */
        2063                 : #define R_PPC64_PLT16_LO_DS     60 /* half16ds  #lo(L + A) >> 2 */
        2064                 : #define R_PPC64_SECTOFF_DS      61 /* half16ds* (R + A) >> 2 */
        2065                 : #define R_PPC64_SECTOFF_LO_DS   62 /* half16ds  #lo(R + A) >> 2 */
        2066                 : #define R_PPC64_TOC16_DS        63 /* half16ds* (S + A - .TOC.) >> 2 */
        2067                 : #define R_PPC64_TOC16_LO_DS     64 /* half16ds  #lo(S + A - .TOC.) >> 2 */
        2068                 : #define R_PPC64_PLTGOT16_DS     65 /* half16ds* (M + A) >> 2 */
        2069                 : #define R_PPC64_PLTGOT16_LO_DS  66 /* half16ds  #lo(M + A) >> 2 */
        2070                 :
        2071                 : /* PowerPC64 relocations defined for the TLS access ABI.  */
        2072                 : #define R_PPC64_TLS             67 /* none      (sym+add)@tls */
        2073                 : #define R_PPC64_DTPMOD64        68 /* doubleword64 (sym+add)@dtpmod */
        2074                 : #define R_PPC64_TPREL16         69 /* half16*   (sym+add)@tprel */
        2075                 : #define R_PPC64_TPREL16_LO      70 /* half16    (sym+add)@tprel@l */
        2076                 : #define R_PPC64_TPREL16_HI      71 /* half16    (sym+add)@tprel@h */
        2077                 : #define R_PPC64_TPREL16_HA      72 /* half16    (sym+add)@tprel@ha */
        2078                 : #define R_PPC64_TPREL64         73 /* doubleword64 (sym+add)@tprel */
        2079                 : #define R_PPC64_DTPREL16        74 /* half16*   (sym+add)@dtprel */
        2080                 : #define R_PPC64_DTPREL16_LO     75 /* half16    (sym+add)@dtprel@l */
        2081                 : #define R_PPC64_DTPREL16_HI     76 /* half16    (sym+add)@dtprel@h */
        2082                 : #define R_PPC64_DTPREL16_HA     77 /* half16    (sym+add)@dtprel@ha */
        2083                 : #define R_PPC64_DTPREL64        78 /* doubleword64 (sym+add)@dtprel */
        2084                 : #define R_PPC64_GOT_TLSGD16     79 /* half16*   (sym+add)@got@tlsgd */
        2085                 : #define R_PPC64_GOT_TLSGD16_LO  80 /* half16    (sym+add)@got@tlsgd@l */
        2086                 : #define R_PPC64_GOT_TLSGD16_HI  81 /* half16    (sym+add)@got@tlsgd@h */
        2087                 : #define R_PPC64_GOT_TLSGD16_HA  82 /* half16    (sym+add)@got@tlsgd@ha */
        2088                 : #define R_PPC64_GOT_TLSLD16     83 /* half16*   (sym+add)@got@tlsld */
        2089                 : #define R_PPC64_GOT_TLSLD16_LO  84 /* half16    (sym+add)@got@tlsld@l */
        2090                 : #define R_PPC64_GOT_TLSLD16_HI  85 /* half16    (sym+add)@got@tlsld@h */
        2091                 : #define R_PPC64_GOT_TLSLD16_HA  86 /* half16    (sym+add)@got@tlsld@ha */
        2092                 : #define R_PPC64_GOT_TPREL16_DS  87 /* half16ds* (sym+add)@got@tprel */
        2093                 : #define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
        2094                 : #define R_PPC64_GOT_TPREL16_HI  89 /* half16    (sym+add)@got@tprel@h */
        2095                 : #define R_PPC64_GOT_TPREL16_HA  90 /* half16    (sym+add)@got@tprel@ha */
        2096                 : #define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel */
        2097                 : #define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
        2098                 : #define R_PPC64_GOT_DTPREL16_HI 93 /* half16    (sym+add)@got@dtprel@h */
        2099                 : #define R_PPC64_GOT_DTPREL16_HA 94 /* half16    (sym+add)@got@dtprel@ha */
        2100                 : #define R_PPC64_TPREL16_DS      95 /* half16ds* (sym+add)@tprel */
        2101                 : #define R_PPC64_TPREL16_LO_DS   96 /* half16ds  (sym+add)@tprel@l */
        2102                 : #define R_PPC64_TPREL16_HIGHER  97 /* half16    (sym+add)@tprel@higher */
        2103                 : #define R_PPC64_TPREL16_HIGHERA 98 /* half16    (sym+add)@tprel@highera */
        2104                 : #define R_PPC64_TPREL16_HIGHEST 99 /* half16    (sym+add)@tprel@highest */
        2105                 : #define R_PPC64_TPREL16_HIGHESTA 100 /* half16  (sym+add)@tprel@highesta */
        2106                 : #define R_PPC64_DTPREL16_DS     101 /* half16ds* (sym+add)@dtprel */
        2107                 : #define R_PPC64_DTPREL16_LO_DS  102 /* half16ds (sym+add)@dtprel@l */
        2108                 : #define R_PPC64_DTPREL16_HIGHER 103 /* half16   (sym+add)@dtprel@higher */
        2109                 : #define R_PPC64_DTPREL16_HIGHERA 104 /* half16  (sym+add)@dtprel@highera */
        2110                 : #define R_PPC64_DTPREL16_HIGHEST 105 /* half16  (sym+add)@dtprel@highest */
        2111                 : #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */
        2112                 :
        2113                 : /* Keep this the last entry.  */
        2114                 : #define R_PPC64_NUM             107
        2115                 :
        2116                 : /* PowerPC64 specific values for the Dyn d_tag field.  */
        2117                 : #define DT_PPC64_GLINK  (DT_LOPROC + 0)
        2118                 : #define DT_PPC64_OPD    (DT_LOPROC + 1)
        2119                 : #define DT_PPC64_OPDSZ  (DT_LOPROC + 2)
        2120                 : #define DT_PPC64_NUM    3
        2121                 :
        2122                 :
        2123                 : /* ARM specific declarations */
        2124                 :
        2125                 : /* Processor specific flags for the ELF header e_flags field.  */
        2126                 : #define EF_ARM_RELEXEC     0x01
        2127                 : #define EF_ARM_HASENTRY    0x02
        2128                 : #define EF_ARM_INTERWORK   0x04
        2129                 : #define EF_ARM_APCS_26     0x08
        2130                 : #define EF_ARM_APCS_FLOAT  0x10
        2131                 : #define EF_ARM_PIC         0x20
        2132                 : #define EF_ARM_ALIGN8      0x40         /* 8-bit structure alignment is in use */
        2133                 : #define EF_ARM_NEW_ABI     0x80
        2134                 : #define EF_ARM_OLD_ABI     0x100
        2135                 :
        2136                 : /* Other constants defined in the ARM ELF spec. version B-01.  */
        2137                 : /* NB. These conflict with values defined above.  */
        2138                 : #define EF_ARM_SYMSARESORTED    0x04
        2139                 : #define EF_ARM_DYNSYMSUSESEGIDX 0x08
        2140                 : #define EF_ARM_MAPSYMSFIRST     0x10
        2141                 : #define EF_ARM_EABIMASK         0XFF000000
        2142                 :
        2143                 : #define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK)
        2144                 : #define EF_ARM_EABI_UNKNOWN  0x00000000
        2145                 : #define EF_ARM_EABI_VER1     0x01000000
        2146                 : #define EF_ARM_EABI_VER2     0x02000000
        2147                 :
        2148                 : /* Additional symbol types for Thumb */
        2149                 : #define STT_ARM_TFUNC      0xd
        2150                 :
        2151                 : /* ARM-specific values for sh_flags */
        2152                 : #define SHF_ARM_ENTRYSECT  0x10000000   /* Section contains an entry point */
        2153                 : #define SHF_ARM_COMDEF     0x80000000   /* Section may be multiply defined
        2154                 :                                            in the input to a link step */
        2155                 :
        2156                 : /* ARM-specific program header flags */
        2157                 : #define PF_ARM_SB          0x10000000   /* Segment contains the location
        2158                 :                                            addressed by the static base */
        2159                 :
        2160                 : /* Processor specific values for the Phdr p_type field.  */
        2161                 : #define PT_ARM_EXIDX    0x70000001      /* .ARM.exidx segment */
        2162                 :
        2163                 : /* ARM relocs.  */
        2164                 :
        2165                 : #define R_ARM_NONE              0       /* No reloc */
        2166                 : #define R_ARM_PC24              1       /* PC relative 26 bit branch */
        2167                 : #define R_ARM_ABS32             2       /* Direct 32 bit  */
        2168                 : #define R_ARM_REL32             3       /* PC relative 32 bit */
        2169                 : #define R_ARM_PC13              4
        2170                 : #define R_ARM_ABS16             5       /* Direct 16 bit */
        2171                 : #define R_ARM_ABS12             6       /* Direct 12 bit */
        2172                 : #define R_ARM_THM_ABS5          7
        2173                 : #define R_ARM_ABS8              8       /* Direct 8 bit */
        2174                 : #define R_ARM_SBREL32           9
        2175                 : #define R_ARM_THM_PC22          10
        2176                 : #define R_ARM_THM_PC8           11
        2177                 : #define R_ARM_AMP_VCALL9        12
        2178                 : #define R_ARM_SWI24             13
        2179                 : #define R_ARM_THM_SWI8          14
        2180                 : #define R_ARM_XPC25             15
        2181                 : #define R_ARM_THM_XPC22         16
        2182                 : #define R_ARM_TLS_DTPMOD32      17      /* ID of module containing symbol */
        2183                 : #define R_ARM_TLS_DTPOFF32      18      /* Offset in TLS block */
        2184                 : #define R_ARM_TLS_TPOFF32       19      /* Offset in static TLS block */
        2185                 : #define R_ARM_COPY              20      /* Copy symbol at runtime */
        2186                 : #define R_ARM_GLOB_DAT          21      /* Create GOT entry */
        2187                 : #define R_ARM_JUMP_SLOT         22      /* Create PLT entry */
        2188                 : #define R_ARM_RELATIVE          23      /* Adjust by program base */
        2189                 : #define R_ARM_GOTOFF            24      /* 32 bit offset to GOT */
        2190                 : #define R_ARM_GOTPC             25      /* 32 bit PC relative offset to GOT */
        2191                 : #define R_ARM_GOT32             26      /* 32 bit GOT entry */
        2192                 : #define R_ARM_PLT32             27      /* 32 bit PLT address */
        2193                 : #define R_ARM_ALU_PCREL_7_0     32
        2194                 : #define R_ARM_ALU_PCREL_15_8    33
        2195                 : #define R_ARM_ALU_PCREL_23_15   34
        2196                 : #define R_ARM_LDR_SBREL_11_0    35
        2197                 : #define R_ARM_ALU_SBREL_19_12   36
        2198                 : #define R_ARM_ALU_SBREL_27_20   37
        2199                 : #define R_ARM_GNU_VTENTRY       100
        2200                 : #define R_ARM_GNU_VTINHERIT     101
        2201                 : #define R_ARM_THM_PC11          102     /* thumb unconditional branch */
        2202                 : #define R_ARM_THM_PC9           103     /* thumb conditional branch */
        2203                 : #define R_ARM_TLS_GD32          104     /* PC-rel 32 bit for global dynamic
        2204                 :                                            thread local data */
        2205                 : #define R_ARM_TLS_LDM32         105     /* PC-rel 32 bit for local dynamic
        2206                 :                                            thread local data */
        2207                 : #define R_ARM_TLS_LDO32         106     /* 32 bit offset relative to TLS
        2208                 :                                            block */
        2209                 : #define R_ARM_TLS_IE32          107     /* PC-rel 32 bit for GOT entry of
        2210                 :                                            static TLS block offset */
        2211                 : #define R_ARM_TLS_LE32          108     /* 32 bit offset relative to static
        2212                 :                                            TLS block */
        2213                 : #define R_ARM_RXPC25            249
        2214                 : #define R_ARM_RSBREL32          250
        2215                 : #define R_ARM_THM_RPC22         251
        2216                 : #define R_ARM_RREL32            252
        2217                 : #define R_ARM_RABS22            253
        2218                 : #define R_ARM_RPC24             254
        2219                 : #define R_ARM_RBASE             255
        2220                 : /* Keep this the last entry.  */
        2221                 : #define R_ARM_NUM               256
        2222                 :
        2223                 : /* IA-64 specific declarations.  */
        2224                 :
        2225                 : /* Processor specific flags for the Ehdr e_flags field.  */
        2226                 : #define EF_IA_64_MASKOS         0x0000000f      /* os-specific flags */
        2227                 : #define EF_IA_64_ABI64          0x00000010      /* 64-bit ABI */
        2228                 : #define EF_IA_64_ARCH           0xff000000      /* arch. version mask */
        2229                 :
        2230                 : /* Processor specific values for the Phdr p_type field.  */
        2231                 : #define PT_IA_64_ARCHEXT        (PT_LOPROC + 0) /* arch extension bits */
        2232                 : #define PT_IA_64_UNWIND         (PT_LOPROC + 1) /* ia64 unwind bits */
        2233                 : #define PT_IA_64_HP_OPT_ANOT    (PT_LOOS + 0x12)
        2234                 : #define PT_IA_64_HP_HSL_ANOT    (PT_LOOS + 0x13)
        2235                 : #define PT_IA_64_HP_STACK       (PT_LOOS + 0x14)
        2236                 :
        2237                 : /* Processor specific flags for the Phdr p_flags field.  */
        2238                 : #define PF_IA_64_NORECOV        0x80000000      /* spec insns w/o recovery */
        2239                 :
        2240                 : /* Processor specific values for the Shdr sh_type field.  */
        2241                 : #define SHT_IA_64_EXT           (SHT_LOPROC + 0) /* extension bits */
        2242                 : #define SHT_IA_64_UNWIND        (SHT_LOPROC + 1) /* unwind bits */
        2243                 :
        2244                 : /* Processor specific flags for the Shdr sh_flags field.  */
        2245                 : #define SHF_IA_64_SHORT         0x10000000      /* section near gp */
        2246                 : #define SHF_IA_64_NORECOV       0x20000000      /* spec insns w/o recovery */
        2247                 :
        2248                 : /* Processor specific values for the Dyn d_tag field.  */
        2249                 : #define DT_IA_64_PLT_RESERVE    (DT_LOPROC + 0)
        2250                 : #define DT_IA_64_NUM            1
        2251                 :
        2252                 : /* IA-64 relocations.  */
        2253                 : #define R_IA64_NONE             0x00    /* none */
        2254                 : #define R_IA64_IMM14            0x21    /* symbol + addend, add imm14 */
        2255                 : #define R_IA64_IMM22            0x22    /* symbol + addend, add imm22 */
        2256                 : #define R_IA64_IMM64            0x23    /* symbol + addend, mov imm64 */
        2257                 : #define R_IA64_DIR32MSB         0x24    /* symbol + addend, data4 MSB */
        2258                 : #define R_IA64_DIR32LSB         0x25    /* symbol + addend, data4 LSB */
        2259                 : #define R_IA64_DIR64MSB         0x26    /* symbol + addend, data8 MSB */
        2260                 : #define R_IA64_DIR64LSB         0x27    /* symbol + addend, data8 LSB */
        2261                 : #define R_IA64_GPREL22          0x2a    /* @gprel(sym + add), add imm22 */
        2262                 : #define R_IA64_GPREL64I         0x2b    /* @gprel(sym + add), mov imm64 */
        2263                 : #define R_IA64_GPREL32MSB       0x2c    /* @gprel(sym + add), data4 MSB */
        2264                 : #define R_IA64_GPREL32LSB       0x2d    /* @gprel(sym + add), data4 LSB */
        2265                 : #define R_IA64_GPREL64MSB       0x2e    /* @gprel(sym + add), data8 MSB */
        2266                 : #define R_IA64_GPREL64LSB       0x2f    /* @gprel(sym + add), data8 LSB */
        2267                 : #define R_IA64_LTOFF22          0x32    /* @ltoff(sym + add), add imm22 */
        2268                 : #define R_IA64_LTOFF64I         0x33    /* @ltoff(sym + add), mov imm64 */
        2269                 : #define R_IA64_PLTOFF22         0x3a    /* @pltoff(sym + add), add imm22 */
        2270                 : #define R_IA64_PLTOFF64I        0x3b    /* @pltoff(sym + add), mov imm64 */
        2271                 : #define R_IA64_PLTOFF64MSB      0x3e    /* @pltoff(sym + add), data8 MSB */
        2272                 : #define R_IA64_PLTOFF64LSB      0x3f    /* @pltoff(sym + add), data8 LSB */
        2273                 : #define R_IA64_FPTR64I          0x43    /* @fptr(sym + add), mov imm64 */
        2274                 : #define R_IA64_FPTR32MSB        0x44    /* @fptr(sym + add), data4 MSB */
        2275                 : #define R_IA64_FPTR32LSB        0x45    /* @fptr(sym + add), data4 LSB */
        2276                 : #define R_IA64_FPTR64MSB        0x46    /* @fptr(sym + add), data8 MSB */
        2277                 : #define R_IA64_FPTR64LSB        0x47    /* @fptr(sym + add), data8 LSB */
        2278                 : #define R_IA64_PCREL60B         0x48    /* @pcrel(sym + add), brl */
        2279                 : #define R_IA64_PCREL21B         0x49    /* @pcrel(sym + add), ptb, call */
        2280                 : #define R_IA64_PCREL21M         0x4a    /* @pcrel(sym + add), chk.s */
        2281                 : #define R_IA64_PCREL21F         0x4b    /* @pcrel(sym + add), fchkf */
        2282                 : #define R_IA64_PCREL32MSB       0x4c    /* @pcrel(sym + add), data4 MSB */
        2283                 : #define R_IA64_PCREL32LSB       0x4d    /* @pcrel(sym + add), data4 LSB */
        2284                 : #define R_IA64_PCREL64MSB       0x4e    /* @pcrel(sym + add), data8 MSB */
        2285                 : #define R_IA64_PCREL64LSB       0x4f    /* @pcrel(sym + add), data8 LSB */
        2286                 : #define R_IA64_LTOFF_FPTR22     0x52    /* @ltoff(@fptr(s+a)), imm22 */
        2287                 : #define R_IA64_LTOFF_FPTR64I    0x53    /* @ltoff(@fptr(s+a)), imm64 */
        2288                 : #define R_IA64_LTOFF_FPTR32MSB  0x54    /* @ltoff(@fptr(s+a)), data4 MSB */
        2289                 : #define R_IA64_LTOFF_FPTR32LSB  0x55    /* @ltoff(@fptr(s+a)), data4 LSB */
        2290                 : #define R_IA64_LTOFF_FPTR64MSB  0x56    /* @ltoff(@fptr(s+a)), data8 MSB */
        2291                 : #define R_IA64_LTOFF_FPTR64LSB  0x57    /* @ltoff(@fptr(s+a)), data8 LSB */
        2292                 : #define R_IA64_SEGREL32MSB      0x5c    /* @segrel(sym + add), data4 MSB */
        2293                 : #define R_IA64_SEGREL32LSB      0x5d    /* @segrel(sym + add), data4 LSB */
        2294                 : #define R_IA64_SEGREL64MSB      0x5e    /* @segrel(sym + add), data8 MSB */
        2295                 : #define R_IA64_SEGREL64LSB      0x5f    /* @segrel(sym + add), data8 LSB */
        2296                 : #define R_IA64_SECREL32MSB      0x64    /* @secrel(sym + add), data4 MSB */
        2297                 : #define R_IA64_SECREL32LSB      0x65    /* @secrel(sym + add), data4 LSB */
        2298                 : #define R_IA64_SECREL64MSB      0x66    /* @secrel(sym + add), data8 MSB */
        2299                 : #define R_IA64_SECREL64LSB      0x67    /* @secrel(sym + add), data8 LSB */
        2300                 : #define R_IA64_REL32MSB         0x6c    /* data 4 + REL */
        2301                 : #define R_IA64_REL32LSB         0x6d    /* data 4 + REL */
        2302                 : #define R_IA64_REL64MSB         0x6e    /* data 8 + REL */
        2303                 : #define R_IA64_REL64LSB         0x6f    /* data 8 + REL */
        2304                 : #define R_IA64_LTV32MSB         0x74    /* symbol + addend, data4 MSB */
        2305                 : #define R_IA64_LTV32LSB         0x75    /* symbol + addend, data4 LSB */
        2306                 : #define R_IA64_LTV64MSB         0x76    /* symbol + addend, data8 MSB */
        2307                 : #define R_IA64_LTV64LSB         0x77    /* symbol + addend, data8 LSB */
        2308                 : #define R_IA64_PCREL21BI        0x79    /* @pcrel(sym + add), 21bit inst */
        2309                 : #define R_IA64_PCREL22          0x7a    /* @pcrel(sym + add), 22bit inst */
        2310                 : #define R_IA64_PCREL64I         0x7b    /* @pcrel(sym + add), 64bit inst */
        2311                 : #define R_IA64_IPLTMSB          0x80    /* dynamic reloc, imported PLT, MSB */
        2312                 : #define R_IA64_IPLTLSB          0x81    /* dynamic reloc, imported PLT, LSB */
        2313                 : #define R_IA64_COPY             0x84    /* copy relocation */
        2314                 : #define R_IA64_SUB              0x85    /* Addend and symbol difference */
        2315                 : #define R_IA64_LTOFF22X         0x86    /* LTOFF22, relaxable.  */
        2316                 : #define R_IA64_LDXMOV           0x87    /* Use of LTOFF22X.  */
        2317                 : #define R_IA64_TPREL14          0x91    /* @tprel(sym + add), imm14 */
        2318                 : #define R_IA64_TPREL22          0x92    /* @tprel(sym + add), imm22 */
        2319                 : #define R_IA64_TPREL64I         0x93    /* @tprel(sym + add), imm64 */
        2320                 : #define R_IA64_TPREL64MSB       0x96    /* @tprel(sym + add), data8 MSB */
        2321                 : #define R_IA64_TPREL64LSB       0x97    /* @tprel(sym + add), data8 LSB */
        2322                 : #define R_IA64_LTOFF_TPREL22    0x9a    /* @ltoff(@tprel(s+a)), imm2 */
        2323                 : #define R_IA64_DTPMOD64MSB      0xa6    /* @dtpmod(sym + add), data8 MSB */
        2324                 : #define R_IA64_DTPMOD64LSB      0xa7    /* @dtpmod(sym + add), data8 LSB */
        2325                 : #define R_IA64_LTOFF_DTPMOD22   0xaa    /* @ltoff(@dtpmod(sym + add)), imm22 */
        2326                 : #define R_IA64_DTPREL14         0xb1    /* @dtprel(sym + add), imm14 */
        2327                 : #define R_IA64_DTPREL22         0xb2    /* @dtprel(sym + add), imm22 */
        2328                 : #define R_IA64_DTPREL64I        0xb3    /* @dtprel(sym + add), imm64 */
        2329                 : #define R_IA64_DTPREL32MSB      0xb4    /* @dtprel(sym + add), data4 MSB */
        2330                 : #define R_IA64_DTPREL32LSB      0xb5    /* @dtprel(sym + add), data4 LSB */
        2331                 : #define R_IA64_DTPREL64MSB      0xb6    /* @dtprel(sym + add), data8 MSB */
        2332                 : #define R_IA64_DTPREL64LSB      0xb7    /* @dtprel(sym + add), data8 LSB */
        2333                 : #define R_IA64_LTOFF_DTPREL22   0xba    /* @ltoff(@dtprel(s+a)), imm22 */
        2334                 :
        2335                 : /* SH specific declarations */
        2336                 :
        2337                 : /* SH relocs.  */
        2338                 : #define R_SH_NONE               0
        2339                 : #define R_SH_DIR32              1
        2340                 : #define R_SH_REL32              2
        2341                 : #define R_SH_DIR8WPN            3
        2342                 : #define R_SH_IND12W             4
        2343                 : #define R_SH_DIR8WPL            5
        2344                 : #define R_SH_DIR8WPZ            6
        2345                 : #define R_SH_DIR8BP             7
        2346                 : #define R_SH_DIR8W              8
        2347                 : #define R_SH_DIR8L              9
        2348                 : #define R_SH_SWITCH16           25
        2349                 : #define R_SH_SWITCH32           26
        2350                 : #define R_SH_USES               27
        2351                 : #define R_SH_COUNT              28
        2352                 : #define R_SH_ALIGN              29
        2353                 : #define R_SH_CODE               30
        2354                 : #define R_SH_DATA               31
        2355                 : #define R_SH_LABEL              32
        2356                 : #define R_SH_SWITCH8            33
        2357                 : #define R_SH_GNU_VTINHERIT      34
        2358                 : #define R_SH_GNU_VTENTRY        35
        2359                 : #define R_SH_TLS_GD_32          144
        2360                 : #define R_SH_TLS_LD_32          145
        2361                 : #define R_SH_TLS_LDO_32         146
        2362                 : #define R_SH_TLS_IE_32          147
        2363                 : #define R_SH_TLS_LE_32          148
        2364                 : #define R_SH_TLS_DTPMOD32       149
        2365                 : #define R_SH_TLS_DTPOFF32       150
        2366                 : #define R_SH_TLS_TPOFF32        151
        2367                 : #define R_SH_GOT32              160
        2368                 : #define R_SH_PLT32              161
        2369                 : #define R_SH_COPY               162
        2370                 : #define R_SH_GLOB_DAT           163
        2371                 : #define R_SH_JMP_SLOT           164
        2372                 : #define R_SH_RELATIVE           165
        2373                 : #define R_SH_GOTOFF             166
        2374                 : #define R_SH_GOTPC              167
        2375                 : /* Keep this the last entry.  */
        2376                 : #define R_SH_NUM                256
        2377                 :
        2378                 : /* Additional s390 relocs */
        2379                 :
        2380                 : #define R_390_NONE              0       /* No reloc.  */
        2381                 : #define R_390_8                 1       /* Direct 8 bit.  */
        2382                 : #define R_390_12                2       /* Direct 12 bit.  */
        2383                 : #define R_390_16                3       /* Direct 16 bit.  */
        2384                 : #define R_390_32                4       /* Direct 32 bit.  */
        2385                 : #define R_390_PC32              5       /* PC relative 32 bit.  */
        2386                 : #define R_390_GOT12             6       /* 12 bit GOT offset.  */
        2387                 : #define R_390_GOT32             7       /* 32 bit GOT offset.  */
        2388                 : #define R_390_PLT32             8       /* 32 bit PC relative PLT address.  */
        2389                 : #define R_390_COPY              9       /* Copy symbol at runtime.  */
        2390                 : #define R_390_GLOB_DAT          10      /* Create GOT entry.  */
        2391                 : #define R_390_JMP_SLOT          11      /* Create PLT entry.  */
        2392                 : #define R_390_RELATIVE          12      /* Adjust by program base.  */
        2393                 : #define R_390_GOTOFF32          13      /* 32 bit offset to GOT.         */
        2394                 : #define R_390_GOTPC             14      /* 32 bit PC relative offset to GOT.  */
        2395                 : #define R_390_GOT16             15      /* 16 bit GOT offset.  */
        2396                 : #define R_390_PC16              16      /* PC relative 16 bit.  */
        2397                 : #define R_390_PC16DBL           17      /* PC relative 16 bit shifted by 1.  */
        2398                 : #define R_390_PLT16DBL          18      /* 16 bit PC rel. PLT shifted by 1.  */
        2399                 : #define R_390_PC32DBL           19      /* PC relative 32 bit shifted by 1.  */
        2400                 : #define R_390_PLT32DBL          20      /* 32 bit PC rel. PLT shifted by 1.  */
        2401                 : #define R_390_GOTPCDBL          21      /* 32 bit PC rel. GOT shifted by 1.  */
        2402                 : #define R_390_64                22      /* Direct 64 bit.  */
        2403                 : #define R_390_PC64              23      /* PC relative 64 bit.  */
        2404                 : #define R_390_GOT64             24      /* 64 bit GOT offset.  */
        2405                 : #define R_390_PLT64             25      /* 64 bit PC relative PLT address.  */
        2406                 : #define R_390_GOTENT            26      /* 32 bit PC rel. to GOT entry >> 1. */
        2407                 : #define R_390_GOTOFF16          27      /* 16 bit offset to GOT. */
        2408                 : #define R_390_GOTOFF64          28      /* 64 bit offset to GOT. */
        2409                 : #define R_390_GOTPLT12          29      /* 12 bit offset to jump slot.  */
        2410                 : #define R_390_GOTPLT16          30      /* 16 bit offset to jump slot.  */
        2411                 : #define R_390_GOTPLT32          31      /* 32 bit offset to jump slot.  */
        2412                 : #define R_390_GOTPLT64          32      /* 64 bit offset to jump slot.  */
        2413                 : #define R_390_GOTPLTENT         33      /* 32 bit rel. offset to jump slot.  */
        2414                 : #define R_390_PLTOFF16          34      /* 16 bit offset from GOT to PLT. */
        2415                 : #define R_390_PLTOFF32          35      /* 32 bit offset from GOT to PLT. */
        2416                 : #define R_390_PLTOFF64          36      /* 16 bit offset from GOT to PLT. */
        2417                 : #define R_390_TLS_LOAD          37      /* Tag for load insn in TLS code.  */
        2418                 : #define R_390_TLS_GDCALL        38      /* Tag for function call in general
        2419                 :                                            dynamic TLS code. */
        2420                 : #define R_390_TLS_LDCALL        39      /* Tag for function call in local
        2421                 :                                            dynamic TLS code. */
        2422                 : #define R_390_TLS_GD32          40      /* Direct 32 bit for general dynamic
        2423                 :                                            thread local data.  */
        2424                 : #define R_390_TLS_GD64          41      /* Direct 64 bit for general dynamic
        2425                 :                                           thread local data.  */
        2426                 : #define R_390_TLS_GOTIE12       42      /* 12 bit GOT offset for static TLS
        2427                 :                                            block offset.  */
        2428                 : #define R_390_TLS_GOTIE32       43      /* 32 bit GOT offset for static TLS
        2429                 :                                            block offset.  */
        2430                 : #define R_390_TLS_GOTIE64       44      /* 64 bit GOT offset for static TLS
        2431                 :                                            block offset. */
        2432                 : #define R_390_TLS_LDM32         45      /* Direct 32 bit for local dynamic
        2433                 :                                            thread local data in LE code.  */
        2434                 : #define R_390_TLS_LDM64         46      /* Direct 64 bit for local dynamic
        2435                 :                                            thread local data in LE code.  */
        2436                 : #define R_390_TLS_IE32          47      /* 32 bit address of GOT entry for
        2437                 :                                            negated static TLS block offset.  */
        2438                 : #define R_390_TLS_IE64          48      /* 64 bit address of GOT entry for
        2439                 :                                            negated static TLS block offset.  */
        2440                 : #define R_390_TLS_IEENT         49      /* 32 bit rel. offset to GOT entry for
        2441                 :                                            negated static TLS block offset.  */
        2442                 : #define R_390_TLS_LE32          50      /* 32 bit negated offset relative to
        2443                 :                                            static TLS block.  */
        2444                 : #define R_390_TLS_LE64          51      /* 64 bit negated offset relative to
        2445                 :                                            static TLS block.  */
        2446                 : #define R_390_TLS_LDO32         52      /* 32 bit offset relative to TLS
        2447                 :                                            block.  */
        2448                 : #define R_390_TLS_LDO64         53      /* 64 bit offset relative to TLS
        2449                 :                                            block.  */
        2450                 : #define R_390_TLS_DTPMOD        54      /* ID of module containing symbol.  */
        2451                 : #define R_390_TLS_DTPOFF        55      /* Offset in TLS block.  */
        2452                 : #define R_390_TLS_TPOFF         56      /* Negated offset in static TLS
        2453                 :                                            block.  */
        2454                 : #define R_390_20                57      /* Direct 20 bit.  */
        2455                 : #define R_390_GOT20             58      /* 20 bit GOT offset.  */
        2456                 : #define R_390_GOTPLT20          59      /* 20 bit offset to jump slot.  */
        2457                 : #define R_390_TLS_GOTIE20       60      /* 20 bit GOT offset for static TLS
        2458                 :                                            block offset.  */
        2459                 : /* Keep this the last entry.  */
        2460                 : #define R_390_NUM               61
        2461                 :
        2462                 :
        2463                 : /* CRIS relocations.  */
        2464                 : #define R_CRIS_NONE             0
        2465                 : #define R_CRIS_8                1
        2466                 : #define R_CRIS_16               2
        2467                 : #define R_CRIS_32               3
        2468                 : #define R_CRIS_8_PCREL          4
        2469                 : #define R_CRIS_16_PCREL         5
        2470                 : #define R_CRIS_32_PCREL         6
        2471                 : #define R_CRIS_GNU_VTINHERIT    7
        2472                 : #define R_CRIS_GNU_VTENTRY      8
        2473                 : #define R_CRIS_COPY             9
        2474                 : #define R_CRIS_GLOB_DAT         10
        2475                 : #define R_CRIS_JUMP_SLOT        11
        2476                 : #define R_CRIS_RELATIVE         12
        2477                 : #define R_CRIS_16_GOT           13
        2478                 : #define R_CRIS_32_GOT           14
        2479                 : #define R_CRIS_16_GOTPLT        15
        2480                 : #define R_CRIS_32_GOTPLT        16
        2481                 : #define R_CRIS_32_GOTREL        17
        2482                 : #define R_CRIS_32_PLT_GOTREL    18
        2483                 : #define R_CRIS_32_PLT_PCREL     19
        2484                 :
        2485                 : #define R_CRIS_NUM              20
        2486                 :
        2487                 :
        2488                 : /* AMD x86-64 relocations.  */
        2489                 : #define R_X86_64_NONE           0       /* No reloc */
        2490                 : #define R_X86_64_64             1       /* Direct 64 bit  */
        2491                 : #define R_X86_64_PC32           2       /* PC relative 32 bit signed */
        2492                 : #define R_X86_64_GOT32          3       /* 32 bit GOT entry */
        2493                 : #define R_X86_64_PLT32          4       /* 32 bit PLT address */
        2494                 : #define R_X86_64_COPY           5       /* Copy symbol at runtime */
        2495                 : #define R_X86_64_GLOB_DAT       6       /* Create GOT entry */
        2496                 : #define R_X86_64_JUMP_SLOT      7       /* Create PLT entry */
        2497                 : #define R_X86_64_RELATIVE       8       /* Adjust by program base */
        2498                 : #define R_X86_64_GOTPCREL       9       /* 32 bit signed PC relative
        2499                 :                                            offset to GOT */
        2500                 : #define R_X86_64_32             10      /* Direct 32 bit zero extended */
        2501                 : #define R_X86_64_32S            11      /* Direct 32 bit sign extended */
        2502                 : #define R_X86_64_16             12      /* Direct 16 bit zero extended */
        2503                 : #define R_X86_64_PC16           13      /* 16 bit sign extended pc relative */
        2504                 : #define R_X86_64_8              14      /* Direct 8 bit sign extended  */
        2505                 : #define R_X86_64_PC8            15      /* 8 bit sign extended pc relative */
        2506                 : #define R_X86_64_DTPMOD64       16      /* ID of module containing symbol */
        2507                 : #define R_X86_64_DTPOFF64       17      /* Offset in module's TLS block */
        2508                 : #define R_X86_64_TPOFF64        18      /* Offset in initial TLS block */
        2509                 : #define R_X86_64_TLSGD          19      /* 32 bit signed PC relative offset
        2510                 :                                            to two GOT entries for GD symbol */
        2511                 : #define R_X86_64_TLSLD          20      /* 32 bit signed PC relative offset
        2512                 :                                            to two GOT entries for LD symbol */
        2513                 : #define R_X86_64_DTPOFF32       21      /* Offset in TLS block */
        2514                 : #define R_X86_64_GOTTPOFF       22      /* 32 bit signed PC relative offset
        2515                 :                                            to GOT entry for IE symbol */
        2516                 : #define R_X86_64_TPOFF32        23      /* Offset in initial TLS block */
        2517                 :
        2518                 : #define R_X86_64_NUM            24
        2519                 :
        2520                 :
        2521                 : /* AM33 relocations.  */
        2522                 : #define R_MN10300_NONE          0       /* No reloc.  */
        2523                 : #define R_MN10300_32            1       /* Direct 32 bit.  */
        2524                 : #define R_MN10300_16            2       /* Direct 16 bit.  */
        2525                 : #define R_MN10300_8             3       /* Direct 8 bit.  */
        2526                 : #define R_MN10300_PCREL32       4       /* PC-relative 32-bit.  */
        2527                 : #define R_MN10300_PCREL16       5       /* PC-relative 16-bit signed.  */
        2528                 : #define R_MN10300_PCREL8        6       /* PC-relative 8-bit signed.  */
        2529                 : #define R_MN10300_GNU_VTINHERIT 7       /* Ancient C++ vtable garbage... */
        2530                 : #define R_MN10300_GNU_VTENTRY   8       /* ... collection annotation.  */
        2531                 : #define R_MN10300_24            9       /* Direct 24 bit.  */
        2532                 : #define R_MN10300_GOTPC32       10      /* 32-bit PCrel offset to GOT.  */
        2533                 : #define R_MN10300_GOTPC16       11      /* 16-bit PCrel offset to GOT.  */
        2534                 : #define R_MN10300_GOTOFF32      12      /* 32-bit offset from GOT.  */
        2535                 : #define R_MN10300_GOTOFF24      13      /* 24-bit offset from GOT.  */
        2536                 : #define R_MN10300_GOTOFF16      14      /* 16-bit offset from GOT.  */
        2537                 : #define R_MN10300_PLT32         15      /* 32-bit PCrel to PLT entry.  */
        2538                 : #define R_MN10300_PLT16         16      /* 16-bit PCrel to PLT entry.  */
        2539                 : #define R_MN10300_GOT32         17      /* 32-bit offset to GOT entry.  */
        2540                 : #define R_MN10300_GOT24         18      /* 24-bit offset to GOT entry.  */
        2541                 : #define R_MN10300_GOT16         19      /* 16-bit offset to GOT entry.  */
        2542                 : #define R_MN10300_COPY          20      /* Copy symbol at runtime.  */
        2543                 : #define R_MN10300_GLOB_DAT      21      /* Create GOT entry.  */
        2544                 : #define R_MN10300_JMP_SLOT      22      /* Create PLT entry.  */
        2545                 : #define R_MN10300_RELATIVE      23      /* Adjust by program base.  */
        2546                 :
        2547                 : #define R_MN10300_NUM           24
        2548                 :
        2549                 :
        2550                 : /* M32R relocs.  */
        2551                 : #define R_M32R_NONE             0       /* No reloc. */
        2552                 : #define R_M32R_16               1       /* Direct 16 bit. */
        2553                 : #define R_M32R_32               2       /* Direct 32 bit. */
        2554                 : #define R_M32R_24               3       /* Direct 24 bit. */
        2555                 : #define R_M32R_10_PCREL         4       /* PC relative 10 bit shifted. */
        2556                 : #define R_M32R_18_PCREL         5       /* PC relative 18 bit shifted. */
        2557                 : #define R_M32R_26_PCREL         6       /* PC relative 26 bit shifted. */
        2558                 : #define R_M32R_HI16_ULO         7       /* High 16 bit with unsigned low. */
        2559                 : #define R_M32R_HI16_SLO         8       /* High 16 bit with signed low. */
        2560                 : #define R_M32R_LO16             9       /* Low 16 bit. */
        2561                 : #define R_M32R_SDA16            10      /* 16 bit offset in SDA. */
        2562                 : #define R_M32R_GNU_VTINHERIT    11
        2563                 : #define R_M32R_GNU_VTENTRY      12
        2564                 : /* M32R relocs use SHT_RELA.  */
        2565                 : #define R_M32R_16_RELA          33      /* Direct 16 bit. */
        2566                 : #define R_M32R_32_RELA          34      /* Direct 32 bit. */
        2567                 : #define R_M32R_24_RELA          35      /* Direct 24 bit. */
        2568                 : #define R_M32R_10_PCREL_RELA    36      /* PC relative 10 bit shifted. */
        2569                 : #define R_M32R_18_PCREL_RELA    37      /* PC relative 18 bit shifted. */
        2570                 : #define R_M32R_26_PCREL_RELA    38      /* PC relative 26 bit shifted. */
        2571                 : #define R_M32R_HI16_ULO_RELA    39      /* High 16 bit with unsigned low */
        2572                 : #define R_M32R_HI16_SLO_RELA    40      /* High 16 bit with signed low */
        2573                 : #define R_M32R_LO16_RELA        41      /* Low 16 bit */
        2574                 : #define R_M32R_SDA16_RELA       42      /* 16 bit offset in SDA */
        2575                 : #define R_M32R_RELA_GNU_VTINHERIT       43
        2576                 : #define R_M32R_RELA_GNU_VTENTRY 44
        2577                 : #define R_M32R_REL32            45      /* PC relative 32 bit.  */
        2578                 :
        2579                 : #define R_M32R_GOT24            48      /* 24 bit GOT entry */
        2580                 : #define R_M32R_26_PLTREL        49      /* 26 bit PC relative to PLT shifted */
        2581                 : #define R_M32R_COPY             50      /* Copy symbol at runtime */
        2582                 : #define R_M32R_GLOB_DAT         51      /* Create GOT entry */
        2583                 : #define R_M32R_JMP_SLOT         52      /* Create PLT entry */
        2584                 : #define R_M32R_RELATIVE         53      /* Adjust by program base */
        2585                 : #define R_M32R_GOTOFF           54      /* 24 bit offset to GOT */
        2586                 : #define R_M32R_GOTPC24          55      /* 24 bit PC relative offset to GOT */
        2587                 : #define R_M32R_GOT16_HI_ULO     56      /* High 16 bit GOT entry with unsigned
        2588                 :                                            low */
        2589                 : #define R_M32R_GOT16_HI_SLO     57      /* High 16 bit GOT entry with signed
        2590                 :                                            low */
        2591                 : #define R_M32R_GOT16_LO         58      /* Low 16 bit GOT entry */
        2592                 : #define R_M32R_GOTPC_HI_ULO     59      /* High 16 bit PC relative offset to
        2593                 :                                            GOT with unsigned low */
        2594                 : #define R_M32R_GOTPC_HI_SLO     60      /* High 16 bit PC relative offset to
        2595                 :                                            GOT with signed low */
        2596                 : #define R_M32R_GOTPC_LO         61      /* Low 16 bit PC relative offset to
        2597                 :                                            GOT */
        2598                 : #define R_M32R_GOTOFF_HI_ULO    62      /* High 16 bit offset to GOT
        2599                 :                                            with unsigned low */
        2600                 : #define R_M32R_GOTOFF_HI_SLO    63      /* High 16 bit offset to GOT
        2601                 :                                            with signed low */
        2602                 : #define R_M32R_GOTOFF_LO        64      /* Low 16 bit offset to GOT */
        2603                 : #define R_M32R_NUM              256     /* Keep this the last entry. */
        2604                 :
        2605                 :
        2606                 : __END_DECLS
        2607                 :
        2608                 : #endif  /* elf.h */

Generated by: LCOV version 1.7