Ignore:
Timestamp:
Jan 21, 2018, 12:10:09 AM (6 years ago)
Author:
coas-nagasima
Message:

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

Location:
EcnlProtoTool/trunk/tcc-0.9.27
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/tcc-0.9.27/elf.h

    r321 r331  
    11/* This file defines standard ELF types, structures, and macros.
    2    Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
     2   Copyright (C) 1995-2012 Free Software Foundation, Inc.
    33   This file is part of the GNU C Library.
    4    Contributed by Ian Lance Taylor <ian@cygnus.com>.
    54
    65   The GNU C Library is free software; you can redistribute it and/or
    7    modify it under the terms of the GNU Library General Public License as
    8    published by the Free Software Foundation; either version 2 of the
    9    License, or (at your option) any later version.
     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.
    109
    1110   The GNU C Library is distributed in the hope that it will be useful,
    1211   but WITHOUT ANY WARRANTY; without even the implied warranty of
    1312   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    14    Library General Public License for more details.
    15 
    16    You should have received a copy of the GNU Library General Public
    17    License along with the GNU C Library; see the file COPYING.LIB.  If not,
    18    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    19    Boston, MA 02111-1307, USA.  */
     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, see
     17   <http://www.gnu.org/licenses/>.  */
    2018
    2119#ifndef _ELF_H
    22 #define _ELF_H 1
     20#define _ELF_H 1
    2321
    2422#ifndef _WIN32
     
    3129typedef int int32_t;
    3230typedef long long int int64_t;
    33 #endif
    34 
    3531typedef unsigned char           uint8_t;
    3632typedef unsigned short int      uint16_t;
     
    3834typedef unsigned long long int  uint64_t;
    3935#endif
     36#endif
    4037
    4138/* Standard ELF types.  */
     
    4744/* Types for signed and unsigned 32-bit quantities.  */
    4845typedef uint32_t Elf32_Word;
    49 typedef int32_t  Elf32_Sword;
     46typedef int32_t  Elf32_Sword;
    5047typedef uint32_t Elf64_Word;
    51 typedef int32_t  Elf64_Sword;
     48typedef int32_t  Elf64_Sword;
    5249
    5350/* Types for signed and unsigned 64-bit quantities.  */
    5451typedef uint64_t Elf32_Xword;
    55 typedef int64_t  Elf32_Sxword;
     52typedef int64_t  Elf32_Sxword;
    5653typedef uint64_t Elf64_Xword;
    57 typedef int64_t  Elf64_Sxword;
     54typedef int64_t  Elf64_Sxword;
    5855
    5956/* Type of addresses.  */
     
    6966typedef uint16_t Elf64_Section;
    7067
    71 /* Type of symbol indices.  */
    72 typedef uint32_t Elf32_Symndx;
    73 typedef uint64_t Elf64_Symndx;
     68/* Type for version symbol information.  */
     69typedef Elf32_Half Elf32_Versym;
     70typedef Elf64_Half Elf64_Versym;
    7471
    7572
     
    8077typedef struct
    8178{
    82   unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
    83   Elf32_Half    e_type;                 /* Object file type */
    84   Elf32_Half    e_machine;              /* Architecture */
    85   Elf32_Word    e_version;              /* Object file version */
    86   Elf32_Addr    e_entry;                /* Entry point virtual address */
    87   Elf32_Off     e_phoff;                /* Program header table file offset */
    88   Elf32_Off     e_shoff;                /* Section header table file offset */
    89   Elf32_Word    e_flags;                /* Processor-specific flags */
    90   Elf32_Half    e_ehsize;               /* ELF header size in bytes */
    91   Elf32_Half    e_phentsize;            /* Program header table entry size */
    92   Elf32_Half    e_phnum;                /* Program header table entry count */
    93   Elf32_Half    e_shentsize;            /* Section header table entry size */
    94   Elf32_Half    e_shnum;                /* Section header table entry count */
    95   Elf32_Half    e_shstrndx;             /* Section header string table index */
    96 } Elf32_Ehdr;
    97 
    98 typedef struct
    99 {
    100   unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
    101   Elf64_Half    e_type;                 /* Object file type */
    102   Elf64_Half    e_machine;              /* Architecture */
    103   Elf64_Word    e_version;              /* Object file version */
    104   Elf64_Addr    e_entry;                /* Entry point virtual address */
    105   Elf64_Off     e_phoff;                /* Program header table file offset */
    106   Elf64_Off     e_shoff;                /* Section header table file offset */
    107   Elf64_Word    e_flags;                /* Processor-specific flags */
    108   Elf64_Half    e_ehsize;               /* ELF header size in bytes */
    109   Elf64_Half    e_phentsize;            /* Program header table entry size */
    110   Elf64_Half    e_phnum;                /* Program header table entry count */
    111   Elf64_Half    e_shentsize;            /* Section header table entry size */
    112   Elf64_Half    e_shnum;                /* Section header table entry count */
    113   Elf64_Half    e_shstrndx;             /* Section header string table index */
    114 } Elf64_Ehdr;
     79  unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
     80  Elf32_Half    e_type;                 /* Object file type */
     81  Elf32_Half    e_machine;              /* Architecture */
     82  Elf32_Word    e_version;              /* Object file version */
     83  Elf32_Addr    e_entry;                /* Entry point virtual address */
     84  Elf32_Off     e_phoff;                /* Program header table file offset */
     85  Elf32_Off     e_shoff;                /* Section header table file offset */
     86  Elf32_Word    e_flags;                /* Processor-specific flags */
     87  Elf32_Half    e_ehsize;               /* ELF header size in bytes */
     88  Elf32_Half    e_phentsize;            /* Program header table entry size */
     89  Elf32_Half    e_phnum;                /* Program header table entry count */
     90  Elf32_Half    e_shentsize;            /* Section header table entry size */
     91  Elf32_Half    e_shnum;                /* Section header table entry count */
     92  Elf32_Half    e_shstrndx;             /* Section header string table index */
     93} __attribute__((packed)) Elf32_Ehdr;
     94
     95typedef struct
     96{
     97  unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
     98  Elf64_Half    e_type;                 /* Object file type */
     99  Elf64_Half    e_machine;              /* Architecture */
     100  Elf64_Word    e_version;              /* Object file version */
     101  Elf64_Addr    e_entry;                /* Entry point virtual address */
     102  Elf64_Off     e_phoff;                /* Program header table file offset */
     103  Elf64_Off     e_shoff;                /* Section header table file offset */
     104  Elf64_Word    e_flags;                /* Processor-specific flags */
     105  Elf64_Half    e_ehsize;               /* ELF header size in bytes */
     106  Elf64_Half    e_phentsize;            /* Program header table entry size */
     107  Elf64_Half    e_phnum;                /* Program header table entry count */
     108  Elf64_Half    e_shentsize;            /* Section header table entry size */
     109  Elf64_Half    e_shnum;                /* Section header table entry count */
     110  Elf64_Half    e_shstrndx;             /* Section header string table index */
     111} __attribute__((packed)) Elf64_Ehdr;
    115112
    116113/* Fields in the e_ident array.  The EI_* macros are indices into the
     
    118115   may have.  */
    119116
    120 #define EI_MAG0         0               /* File identification byte 0 index */
    121 #define ELFMAG0         0x7f            /* Magic number byte 0 */
    122 
    123 #define EI_MAG1         1               /* File identification byte 1 index */
    124 #define ELFMAG1         'E'             /* Magic number byte 1 */
    125 
    126 #define EI_MAG2         2               /* File identification byte 2 index */
    127 #define ELFMAG2         'L'             /* Magic number byte 2 */
    128 
    129 #define EI_MAG3         3               /* File identification byte 3 index */
    130 #define ELFMAG3         'F'             /* Magic number byte 3 */
     117#define EI_MAG0         0               /* File identification byte 0 index */
     118#define ELFMAG0         0x7f            /* Magic number byte 0 */
     119
     120#define EI_MAG1         1               /* File identification byte 1 index */
     121#define ELFMAG1         'E'             /* Magic number byte 1 */
     122
     123#define EI_MAG2         2               /* File identification byte 2 index */
     124#define ELFMAG2         'L'             /* Magic number byte 2 */
     125
     126#define EI_MAG3         3               /* File identification byte 3 index */
     127#define ELFMAG3         'F'             /* Magic number byte 3 */
    131128
    132129/* Conglomeration of the identification bytes, for easy testing as a word.  */
    133 #define ELFMAG          "\177ELF"
    134 #define SELFMAG         4
    135 
    136 #define EI_CLASS        4               /* File class byte index */
    137 #define ELFCLASSNONE    0               /* Invalid class */
    138 #define ELFCLASS32      1               /* 32-bit objects */
    139 #define ELFCLASS64      2               /* 64-bit objects */
    140 #define ELFCLASSNUM     3
    141 
    142 #define EI_DATA         5               /* Data encoding byte index */
    143 #define ELFDATANONE     0               /* Invalid data encoding */
    144 #define ELFDATA2LSB     1               /* 2's complement, little endian */
    145 #define ELFDATA2MSB     2               /* 2's complement, big endian */
    146 #define ELFDATANUM      3
    147 
    148 #define EI_VERSION      6               /* File version byte index */
    149                                         /* Value must be EV_CURRENT */
    150 
    151 #define EI_OSABI        7               /* OS ABI identification */
    152 #define ELFOSABI_SYSV           0       /* UNIX System V ABI */
    153 #define ELFOSABI_HPUX           1       /* HP-UX */
    154 #define ELFOSABI_FREEBSD        9       /* Free BSD */
    155 #define ELFOSABI_ARM            97      /* ARM */
    156 #define ELFOSABI_STANDALONE     255     /* Standalone (embedded) application */
    157 
    158 #define EI_ABIVERSION   8               /* ABI version */
    159 
    160 #define EI_PAD          9               /* Byte index of padding bytes */
     130#define ELFMAG          "\177ELF"
     131#define SELFMAG         4
     132
     133#define EI_CLASS        4               /* File class byte index */
     134#define ELFCLASSNONE    0               /* Invalid class */
     135#define ELFCLASS32      1               /* 32-bit objects */
     136#define ELFCLASS64      2               /* 64-bit objects */
     137#define ELFCLASSNUM     3
     138
     139#define EI_DATA         5               /* Data encoding byte index */
     140#define ELFDATANONE     0               /* Invalid data encoding */
     141#define ELFDATA2LSB     1               /* 2's complement, little endian */
     142#define ELFDATA2MSB     2               /* 2's complement, big endian */
     143#define ELFDATANUM      3
     144
     145#define EI_VERSION      6               /* File version byte index */
     146                                        /* Value must be EV_CURRENT */
     147
     148#define EI_OSABI        7               /* OS ABI identification */
     149#define ELFOSABI_NONE           0       /* UNIX System V ABI */
     150#define ELFOSABI_SYSV           0       /* Alias.  */
     151#define ELFOSABI_HPUX           1       /* HP-UX */
     152#define ELFOSABI_NETBSD         2       /* NetBSD.  */
     153#define ELFOSABI_GNU            3       /* Object uses GNU ELF extensions.  */
     154#define ELFOSABI_LINUX          ELFOSABI_GNU /* Compatibility alias.  */
     155#define ELFOSABI_SOLARIS        6       /* Sun Solaris.  */
     156#define ELFOSABI_AIX            7       /* IBM AIX.  */
     157#define ELFOSABI_IRIX           8       /* SGI Irix.  */
     158#define ELFOSABI_FREEBSD        9       /* FreeBSD.  */
     159#define ELFOSABI_TRU64          10      /* Compaq TRU64 UNIX.  */
     160#define ELFOSABI_MODESTO        11      /* Novell Modesto.  */
     161#define ELFOSABI_OPENBSD        12      /* OpenBSD.  */
     162#define ELFOSABI_ARM_AEABI      64      /* ARM EABI */
     163#define ELFOSABI_ARM            97      /* ARM */
     164#define ELFOSABI_STANDALONE     255     /* Standalone (embedded) application */
     165
     166#define EI_ABIVERSION   8               /* ABI version */
     167
     168#define EI_PAD          9               /* Byte index of padding bytes */
    161169
    162170/* Legal values for e_type (object file type).  */
    163171
    164 #define ET_NONE         0               /* No file type */
    165 #define ET_REL          1               /* Relocatable file */
    166 #define ET_EXEC         2               /* Executable file */
    167 #define ET_DYN          3               /* Shared object file */
    168 #define ET_CORE         4               /* Core file */
    169 #define ET_NUM          5               /* Number of defined types */
    170 #define ET_LOPROC       0xff00          /* Processor-specific */
    171 #define ET_HIPROC       0xffff          /* Processor-specific */
     172#define ET_NONE         0               /* No file type */
     173#define ET_REL          1               /* Relocatable file */
     174#define ET_EXEC         2               /* Executable file */
     175#define ET_DYN          3               /* Shared object file */
     176#define ET_CORE         4               /* Core file */
     177#define ET_NUM          5               /* Number of defined types */
     178#define ET_LOOS         0xfe00          /* OS-specific range start */
     179#define ET_HIOS         0xfeff          /* OS-specific range end */
     180#define ET_LOPROC       0xff00          /* Processor-specific range start */
     181#define ET_HIPROC       0xffff          /* Processor-specific range end */
    172182
    173183/* Legal values for e_machine (architecture).  */
    174184
    175 #define EM_NONE          0              /* No machine */
    176 #define EM_M32           1              /* AT&T WE 32100 */
    177 #define EM_SPARC         2              /* SUN SPARC */
    178 #define EM_386           3              /* Intel 80386 */
    179 #define EM_68K           4              /* Motorola m68k family */
    180 #define EM_88K           5              /* Motorola m88k family */
    181 #define EM_486           6              /* Intel 80486 */
    182 #define EM_860           7              /* Intel 80860 */
    183 #define EM_MIPS          8              /* MIPS R3000 big-endian */
    184 #define EM_S370          9              /* Amdahl */
    185 #define EM_MIPS_RS4_BE  10              /* MIPS R4000 big-endian */
    186 #define EM_RS6000       11              /* RS6000 */
    187 
    188 #define EM_PARISC       15              /* HPPA */
    189 #define EM_nCUBE        16              /* nCUBE */
    190 #define EM_VPP500       17              /* Fujitsu VPP500 */
    191 #define EM_SPARC32PLUS  18              /* Sun's "v8plus" */
    192 #define EM_960          19              /* Intel 80960 */
    193 #define EM_PPC          20              /* PowerPC */
    194 
    195 #define EM_V800         36              /* NEC V800 series */
    196 #define EM_FR20         37              /* Fujitsu FR20 */
    197 #define EM_RH32         38              /* TRW RH32 */
    198 #define EM_RCE          39              /* Motorola RCE */
    199 #define EM_ARM          40              /* ARM */
    200 #define EM_FAKE_ALPHA   41              /* Digital Alpha */
    201 #define EM_SH           42              /* Hitachi SH */
    202 #define EM_SPARCV9      43              /* SPARC v9 64-bit */
    203 #define EM_TRICORE      44              /* Siemens Tricore */
    204 #define EM_ARC          45              /* Argonaut RISC Core */
    205 #define EM_H8_300       46              /* Hitachi H8/300 */
    206 #define EM_H8_300H      47              /* Hitachi H8/300H */
    207 #define EM_H8S          48              /* Hitachi H8S */
    208 #define EM_H8_500       49              /* Hitachi H8/500 */
    209 #define EM_IA_64        50              /* Intel Merced */
    210 #define EM_MIPS_X       51              /* Stanford MIPS-X */
    211 #define EM_COLDFIRE     52              /* Motorola Coldfire */
    212 #define EM_68HC12       53              /* Motorola M68HC12 */
    213 #define EM_MMA          54              /* Fujitsu MMA Multimedia Accelerator*/
    214 #define EM_PCP          55              /* Siemens PCP */
    215 #define EM_NCPU         56              /* Sony nCPU embeeded RISC */
    216 #define EM_NDR1         57              /* Denso NDR1 microprocessor */
    217 #define EM_STARCORE     58              /* Motorola Start*Core processor */
    218 #define EM_ME16         59              /* Toyota ME16 processor */
    219 #define EM_ST100        60              /* STMicroelectronic ST100 processor */
    220 #define EM_TINYJ        61              /* Advanced Logic Corp. Tinyj emb.fam*/
    221 #define EM_X86_64       62              /* AMD x86-64 architecture */
    222 #define EM_PDSP         63              /* Sony DSP Processor */
    223 #define EM_FX66         66              /* Siemens FX66 microcontroller */
    224 #define EM_ST9PLUS      67              /* STMicroelectronics ST9+ 8/16 mc */
    225 #define EM_ST7          68              /* STmicroelectronics ST7 8 bit mc */
    226 #define EM_68HC16       69              /* Motorola MC68HC16 microcontroller */
    227 #define EM_68HC11       70              /* Motorola MC68HC11 microcontroller */
    228 #define EM_68HC08       71              /* Motorola MC68HC08 microcontroller */
    229 #define EM_68HC05       72              /* Motorola MC68HC05 microcontroller */
    230 #define EM_SVX          73              /* Silicon Graphics SVx */
    231 #define EM_ST19         74              /* STMicroelectronics ST19 8 bit mc */
    232 #define EM_VAX          75              /* Digital VAX */
    233 #define EM_CRIS         76              /* Axis Communications 32-bit embedded processor */
    234 #define EM_JAVELIN      77              /* Infineon Technologies 32-bit embedded processor */
    235 #define EM_FIREPATH     78              /* Element 14 64-bit DSP Processor */
    236 #define EM_ZSP          79              /* LSI Logic 16-bit DSP Processor */
    237 #define EM_MMIX         80              /* Donald Knuth's educational 64-bit processor */
    238 #define EM_HUANY        81              /* Harvard University machine-independent object files */
    239 #define EM_PRISM        82              /* SiTera Prism */
    240 #define EM_AVR          83              /* Atmel AVR 8-bit microcontroller */
    241 #define EM_FR30         84              /* Fujitsu FR30 */
    242 #define EM_D10V         85              /* Mitsubishi D10V */
    243 #define EM_D30V         86              /* Mitsubishi D30V */
    244 #define EM_V850         87              /* NEC v850 */
    245 #define EM_M32R         88              /* Mitsubishi M32R */
    246 #define EM_MN10300      89              /* Matsushita MN10300 */
    247 #define EM_MN10200      90              /* Matsushita MN10200 */
    248 #define EM_PJ           91              /* picoJava */
    249 #define EM_OPENRISC     92              /* OpenRISC 32-bit embedded processor */
    250 #define EM_ARC_A5       93              /* ARC Cores Tangent-A5 */
    251 #define EM_XTENSA       94              /* Tensilica Xtensa Architecture */
    252 #define EM_NUM          95
     185#define EM_NONE          0              /* No machine */
     186#define EM_M32           1              /* AT&T WE 32100 */
     187#define EM_SPARC         2              /* SUN SPARC */
     188#define EM_386           3              /* Intel 80386 */
     189#define EM_68K           4              /* Motorola m68k family */
     190#define EM_88K           5              /* Motorola m88k family */
     191#define EM_860           7              /* Intel 80860 */
     192#define EM_MIPS          8              /* MIPS R3000 big-endian */
     193#define EM_S370          9              /* IBM System/370 */
     194#define EM_MIPS_RS3_LE  10              /* MIPS R3000 little-endian */
     195
     196#define EM_PARISC       15              /* HPPA */
     197#define EM_VPP500       17              /* Fujitsu VPP500 */
     198#define EM_SPARC32PLUS  18              /* Sun's "v8plus" */
     199#define EM_960          19              /* Intel 80960 */
     200#define EM_PPC          20              /* PowerPC */
     201#define EM_PPC64        21              /* PowerPC 64-bit */
     202#define EM_S390         22              /* IBM S390 */
     203
     204#define EM_V800         36              /* NEC V800 series */
     205#define EM_FR20         37              /* Fujitsu FR20 */
     206#define EM_RH32         38              /* TRW RH-32 */
     207#define EM_RCE          39              /* Motorola RCE */
     208#define EM_ARM          40              /* ARM */
     209#define EM_FAKE_ALPHA   41              /* Digital Alpha */
     210#define EM_SH           42              /* Hitachi SH */
     211#define EM_SPARCV9      43              /* SPARC v9 64-bit */
     212#define EM_TRICORE      44              /* Siemens Tricore */
     213#define EM_ARC          45              /* Argonaut RISC Core */
     214#define EM_H8_300       46              /* Hitachi H8/300 */
     215#define EM_H8_300H      47              /* Hitachi H8/300H */
     216#define EM_H8S          48              /* Hitachi H8S */
     217#define EM_H8_500       49              /* Hitachi H8/500 */
     218#define EM_IA_64        50              /* Intel Merced */
     219#define EM_MIPS_X       51              /* Stanford MIPS-X */
     220#define EM_COLDFIRE     52              /* Motorola Coldfire */
     221#define EM_68HC12       53              /* Motorola M68HC12 */
     222#define EM_MMA          54              /* Fujitsu MMA Multimedia Accelerator*/
     223#define EM_PCP          55              /* Siemens PCP */
     224#define EM_NCPU         56              /* Sony nCPU embedded RISC */
     225#define EM_NDR1         57              /* Denso NDR1 microprocessor */
     226#define EM_STARCORE     58              /* Motorola Start*Core processor */
     227#define EM_ME16         59              /* Toyota ME16 processor */
     228#define EM_ST100        60              /* STMicroelectronic ST100 processor */
     229#define EM_TINYJ        61              /* Advanced Logic Corp. Tinyj emb.fam*/
     230#define EM_X86_64       62              /* AMD x86-64 architecture */
     231#define EM_PDSP         63              /* Sony DSP Processor */
     232
     233#define EM_FX66         66              /* Siemens FX66 microcontroller */
     234#define EM_ST9PLUS      67              /* STMicroelectronics ST9+ 8/16 mc */
     235#define EM_ST7          68              /* STMicroelectronics ST7 8 bit mc */
     236#define EM_68HC16       69              /* Motorola MC68HC16 microcontroller */
     237#define EM_68HC11       70              /* Motorola MC68HC11 microcontroller */
     238#define EM_68HC08       71              /* Motorola MC68HC08 microcontroller */
     239#define EM_68HC05       72              /* Motorola MC68HC05 microcontroller */
     240#define EM_SVX          73              /* Silicon Graphics SVx */
     241#define EM_ST19         74              /* STMicroelectronics ST19 8 bit mc */
     242#define EM_VAX          75              /* Digital VAX */
     243#define EM_CRIS         76              /* Axis Communications 32-bit embedded processor */
     244#define EM_JAVELIN      77              /* Infineon Technologies 32-bit embedded processor */
     245#define EM_FIREPATH     78              /* Element 14 64-bit DSP Processor */
     246#define EM_ZSP          79              /* LSI Logic 16-bit DSP Processor */
     247#define EM_MMIX         80              /* Donald Knuth's educational 64-bit processor */
     248#define EM_HUANY        81              /* Harvard University machine-independent object files */
     249#define EM_PRISM        82              /* SiTera Prism */
     250#define EM_AVR          83              /* Atmel AVR 8-bit microcontroller */
     251#define EM_FR30         84              /* Fujitsu FR30 */
     252#define EM_D10V         85              /* Mitsubishi D10V */
     253#define EM_D30V         86              /* Mitsubishi D30V */
     254#define EM_V850         87              /* NEC v850 */
     255#define EM_M32R         88              /* Mitsubishi M32R */
     256#define EM_MN10300      89              /* Matsushita MN10300 */
     257#define EM_MN10200      90              /* Matsushita MN10200 */
     258#define EM_PJ           91              /* picoJava */
     259#define EM_OPENRISC     92              /* OpenRISC 32-bit embedded processor */
     260#define EM_ARC_A5       93              /* ARC Cores Tangent-A5 */
     261#define EM_XTENSA       94              /* Tensilica Xtensa Architecture */
     262#define EM_AARCH64      183             /* ARM AARCH64 */
     263#define EM_TILEPRO      188             /* Tilera TILEPro */
     264#define EM_TILEGX       191             /* Tilera TILE-Gx */
     265#define EM_NUM          192
    253266
    254267/* If it is necessary to assign new unofficial EM_* values, please
     
    256269   chances of collision with official or non-GNU unofficial values.  */
    257270
    258 #define EM_ALPHA        0x9026
    259 #define EM_C60          0x9c60
     271#define EM_ALPHA        0x9026
     272#define EM_C60          0x9c60
    260273
    261274/* Legal values for e_version (version).  */
    262275
    263 #define EV_NONE         0               /* Invalid ELF version */
    264 #define EV_CURRENT      1               /* Current version */
    265 #define EV_NUM          2
     276#define EV_NONE         0               /* Invalid ELF version */
     277#define EV_CURRENT      1               /* Current version */
     278#define EV_NUM          2
    266279
    267280/* Section header.  */
     
    269282typedef struct
    270283{
    271   Elf32_Word    sh_name;                /* Section name (string tbl index) */
    272   Elf32_Word    sh_type;                /* Section type */
    273   Elf32_Word    sh_flags;               /* Section flags */
    274   Elf32_Addr    sh_addr;                /* Section virtual addr at execution */
    275   Elf32_Off     sh_offset;              /* Section file offset */
    276   Elf32_Word    sh_size;                /* Section size in bytes */
    277   Elf32_Word    sh_link;                /* Link to another section */
    278   Elf32_Word    sh_info;                /* Additional section information */
    279   Elf32_Word    sh_addralign;           /* Section alignment */
    280   Elf32_Word    sh_entsize;             /* Entry size if section holds table */
    281 } Elf32_Shdr;
    282 
    283 typedef struct
    284 {
    285   Elf64_Word    sh_name;                /* Section name (string tbl index) */
    286   Elf64_Word    sh_type;                /* Section type */
    287   Elf64_Xword   sh_flags;               /* Section flags */
    288   Elf64_Addr    sh_addr;                /* Section virtual addr at execution */
    289   Elf64_Off     sh_offset;              /* Section file offset */
    290   Elf64_Xword   sh_size;                /* Section size in bytes */
    291   Elf64_Word    sh_link;                /* Link to another section */
    292   Elf64_Word    sh_info;                /* Additional section information */
    293   Elf64_Xword   sh_addralign;           /* Section alignment */
    294   Elf64_Xword   sh_entsize;             /* Entry size if section holds table */
    295 } Elf64_Shdr;
     284  Elf32_Word    sh_name;                /* Section name (string tbl index) */
     285  Elf32_Word    sh_type;                /* Section type */
     286  Elf32_Word    sh_flags;               /* Section flags */
     287  Elf32_Addr    sh_addr;                /* Section virtual addr at execution */
     288  Elf32_Off     sh_offset;              /* Section file offset */
     289  Elf32_Word    sh_size;                /* Section size in bytes */
     290  Elf32_Word    sh_link;                /* Link to another section */
     291  Elf32_Word    sh_info;                /* Additional section information */
     292  Elf32_Word    sh_addralign;           /* Section alignment */
     293  Elf32_Word    sh_entsize;             /* Entry size if section holds table */
     294} __attribute__((packed)) Elf32_Shdr;
     295
     296typedef struct
     297{
     298  Elf64_Word    sh_name;                /* Section name (string tbl index) */
     299  Elf64_Word    sh_type;                /* Section type */
     300  Elf64_Xword   sh_flags;               /* Section flags */
     301  Elf64_Addr    sh_addr;                /* Section virtual addr at execution */
     302  Elf64_Off     sh_offset;              /* Section file offset */
     303  Elf64_Xword   sh_size;                /* Section size in bytes */
     304  Elf64_Word    sh_link;                /* Link to another section */
     305  Elf64_Word    sh_info;                /* Additional section information */
     306  Elf64_Xword   sh_addralign;           /* Section alignment */
     307  Elf64_Xword   sh_entsize;             /* Entry size if section holds table */
     308} __attribute__((packed)) Elf64_Shdr;
    296309
    297310/* Special section indices.  */
    298311
    299 #define SHN_UNDEF       0               /* Undefined section */
    300 #define SHN_LORESERVE   0xff00          /* Start of reserved indices */
    301 #define SHN_LOPROC      0xff00          /* Start of processor-specific */
    302 #define SHN_HIPROC      0xff1f          /* End of processor-specific */
    303 #define SHN_ABS         0xfff1          /* Associated symbol is absolute */
    304 #define SHN_COMMON      0xfff2          /* Associated symbol is common */
    305 #define SHN_HIRESERVE   0xffff          /* End of reserved indices */
     312#define SHN_UNDEF       0               /* Undefined section */
     313#define SHN_LORESERVE   0xff00          /* Start of reserved indices */
     314#define SHN_LOPROC      0xff00          /* Start of processor-specific */
     315#define SHN_BEFORE      0xff00          /* Order section before all others
     316                                           (Solaris).  */
     317#define SHN_AFTER       0xff01          /* Order section after all others
     318                                           (Solaris).  */
     319#define SHN_HIPROC      0xff1f          /* End of processor-specific */
     320#define SHN_LOOS        0xff20          /* Start of OS-specific */
     321#define SHN_HIOS        0xff3f          /* End of OS-specific */
     322#define SHN_ABS         0xfff1          /* Associated symbol is absolute */
     323#define SHN_COMMON      0xfff2          /* Associated symbol is common */
     324#define SHN_XINDEX      0xffff          /* Index is in extra table.  */
     325#define SHN_HIRESERVE   0xffff          /* End of reserved indices */
    306326
    307327/* Legal values for sh_type (section type).  */
    308328
    309 #define SHT_NULL         0              /* Section header table entry unused */
    310 #define SHT_PROGBITS     1              /* Program data */
    311 #define SHT_SYMTAB       2              /* Symbol table */
    312 #define SHT_STRTAB       3              /* String table */
    313 #define SHT_RELA         4              /* Relocation entries with addends */
    314 #define SHT_HASH         5              /* Symbol hash table */
    315 #define SHT_DYNAMIC      6              /* Dynamic linking information */
    316 #define SHT_NOTE         7              /* Notes */
    317 #define SHT_NOBITS       8              /* Program space with no data (bss) */
    318 #define SHT_REL          9              /* Relocation entries, no addends */
    319 #define SHT_SHLIB        10             /* Reserved */
    320 #define SHT_DYNSYM       11             /* Dynamic linker symbol table */
    321 #define SHT_INIT_ARRAY   14             /* Array of constructors */
    322 #define SHT_FINI_ARRAY   15             /* Array of destructors */
    323 #define SHT_PREINIT_ARRAY 16            /* Array of pre-constructors */
    324 #define SHT_GROUP        17             /* Section group */
    325 #define SHT_SYMTAB_SHNDX 18             /* Extended section indices */
    326 #define SHT_NUM          19             /* Number of defined types.  */
    327 #define SHT_LOOS         0x60000000     /* Start OS-specific */
    328 #define SHT_LOSUNW       0x6ffffffb     /* Sun-specific low bound.  */
    329 #define SHT_SUNW_COMDAT  0x6ffffffb
    330 #define SHT_SUNW_syminfo 0x6ffffffc
    331 #define SHT_GNU_verdef   0x6ffffffd     /* Version definition section.  */
    332 #define SHT_GNU_verneed  0x6ffffffe     /* Version needs section.  */
    333 #define SHT_GNU_versym   0x6fffffff     /* Version symbol table.  */
    334 #define SHT_HISUNW       0x6fffffff     /* Sun-specific high bound.  */
    335 #define SHT_HIOS         0x6fffffff     /* End OS-specific type */
    336 #define SHT_LOPROC       0x70000000     /* Start of processor-specific */
    337 #define SHT_ARM_EXIDX    0x70000001     /* Exception Index table */
    338 #define SHT_ARM_PREEMPTMAP 0x70000002   /* dynamic linking pre-emption map */
    339 #define SHT_ARM_ATTRIBUTES 0x70000003   /* Object file compatibility attrs */
    340 #define SHT_HIPROC       0x7fffffff     /* End of processor-specific */
    341 #define SHT_LOUSER       0x80000000     /* Start of application-specific */
    342 #define SHT_HIUSER       0x8fffffff     /* End of application-specific */
     329#define SHT_NULL          0             /* Section header table entry unused */
     330#define SHT_PROGBITS      1             /* Program data */
     331#define SHT_SYMTAB        2             /* Symbol table */
     332#define SHT_STRTAB        3             /* String table */
     333#define SHT_RELA          4             /* Relocation entries with addends */
     334#define SHT_HASH          5             /* Symbol hash table */
     335#define SHT_DYNAMIC       6             /* Dynamic linking information */
     336#define SHT_NOTE          7             /* Notes */
     337#define SHT_NOBITS        8             /* Program space with no data (bss) */
     338#define SHT_REL           9             /* Relocation entries, no addends */
     339#define SHT_SHLIB         10            /* Reserved */
     340#define SHT_DYNSYM        11            /* Dynamic linker symbol table */
     341#define SHT_INIT_ARRAY    14            /* Array of constructors */
     342#define SHT_FINI_ARRAY    15            /* Array of destructors */
     343#define SHT_PREINIT_ARRAY 16            /* Array of pre-constructors */
     344#define SHT_GROUP         17            /* Section group */
     345#define SHT_SYMTAB_SHNDX  18            /* Extended section indices */
     346#define SHT_NUM           19            /* Number of defined types.  */
     347#define SHT_LOOS          0x60000000    /* Start OS-specific.  */
     348#define SHT_GNU_ATTRIBUTES 0x6ffffff5   /* Object attributes.  */
     349#define SHT_GNU_HASH      0x6ffffff6    /* GNU-style hash table.  */
     350#define SHT_GNU_LIBLIST   0x6ffffff7    /* Prelink library list */
     351#define SHT_CHECKSUM      0x6ffffff8    /* Checksum for DSO content.  */
     352#define SHT_LOSUNW        0x6ffffffa    /* Sun-specific low bound.  */
     353#define SHT_SUNW_move     0x6ffffffa
     354#define SHT_SUNW_COMDAT   0x6ffffffb
     355#define SHT_SUNW_syminfo  0x6ffffffc
     356#define SHT_GNU_verdef    0x6ffffffd    /* Version definition section.  */
     357#define SHT_GNU_verneed   0x6ffffffe    /* Version needs section.  */
     358#define SHT_GNU_versym    0x6fffffff    /* Version symbol table.  */
     359#define SHT_HISUNW        0x6fffffff    /* Sun-specific high bound.  */
     360#define SHT_HIOS          0x6fffffff    /* End OS-specific type */
     361#define SHT_LOPROC        0x70000000    /* Start of processor-specific */
     362#define SHT_HIPROC        0x7fffffff    /* End of processor-specific */
     363#define SHT_LOUSER        0x80000000    /* Start of application-specific */
     364#define SHT_HIUSER        0x8fffffff    /* End of application-specific */
    343365
    344366/* Legal values for sh_flags (section flags).  */
    345367
    346 #define SHF_WRITE       (1 << 0)        /* Writable */
    347 #define SHF_ALLOC       (1 << 1)        /* Occupies memory during execution */
    348 #define SHF_EXECINSTR   (1 << 2)        /* Executable */
    349 #define SHF_MASKPROC    0xf0000000      /* Processor-specific */
    350 
    351 #define SHF_MERGE       0x10
    352 #define SHF_STRINGS     0x20
    353 #define SHF_INFO_LINK   0x40
    354 #define SHF_LINK_ORDER  0x80
    355 #define SHF_OS_NONCONFORMING 0x100
    356 #define SHF_GROUP       0x200
    357 #define SHF_TLS         0x400
    358 #define SHF_MASKOS      0x0ff00000
    359 #define SHF_ORDERED     0x40000000
    360 #define SHF_EXCLUDE     0x80000000
     368#define SHF_WRITE            (1 << 0)   /* Writable */
     369#define SHF_ALLOC            (1 << 1)   /* Occupies memory during execution */
     370#define SHF_EXECINSTR        (1 << 2)   /* Executable */
     371#define SHF_MERGE            (1 << 4)   /* Might be merged */
     372#define SHF_STRINGS          (1 << 5)   /* Contains nul-terminated strings */
     373#define SHF_INFO_LINK        (1 << 6)   /* `sh_info' contains SHT index */
     374#define SHF_LINK_ORDER       (1 << 7)   /* Preserve order after combining */
     375#define SHF_OS_NONCONFORMING (1 << 8)   /* Non-standard OS specific handling
     376                                           required */
     377#define SHF_GROUP            (1 << 9)   /* Section is member of a group.  */
     378#define SHF_TLS              (1 << 10)  /* Section hold thread-local data.  */
     379#define SHF_COMPRESSED       (1 << 11)  /* Section with compressed data. */
     380#define SHF_MASKOS           0x0ff00000 /* OS-specific.  */
     381#define SHF_MASKPROC         0xf0000000 /* Processor-specific */
     382#define SHF_ORDERED          (1 << 30)  /* Special ordering requirement
     383                                           (Solaris).  */
     384#define SHF_EXCLUDE          (1 << 31)  /* Section is excluded unless
     385                                           referenced or allocated (Solaris).*/
     386
     387/* Section group handling.  */
     388#define GRP_COMDAT      0x1             /* Mark group as COMDAT.  */
    361389
    362390/* Symbol table entry.  */
     
    364392typedef struct
    365393{
    366   Elf32_Word    st_name;                /* Symbol name (string tbl index) */
    367   Elf32_Addr    st_value;               /* Symbol value */
    368   Elf32_Word    st_size;                /* Symbol size */
    369   unsigned char st_info;                /* Symbol type and binding */
    370   unsigned char st_other;               /* No defined meaning, 0 */
    371   Elf32_Section st_shndx;               /* Section index */
    372 } Elf32_Sym;
    373 
    374 typedef struct
    375 {
    376   Elf64_Word    st_name;                /* Symbol name (string tbl index) */
    377   unsigned char st_info;                /* Symbol type and binding */
    378   unsigned char st_other;               /* No defined meaning, 0 */
    379   Elf64_Section st_shndx;               /* Section index */
    380   Elf64_Addr    st_value;               /* Symbol value */
    381   Elf64_Xword   st_size;                /* Symbol size */
    382 } Elf64_Sym;
     394  Elf32_Word    st_name;                /* Symbol name (string tbl index) */
     395  Elf32_Addr    st_value;               /* Symbol value */
     396  Elf32_Word    st_size;                /* Symbol size */
     397  unsigned char st_info;                /* Symbol type and binding */
     398  unsigned char st_other;               /* Symbol visibility */
     399  Elf32_Section st_shndx;               /* Section index */
     400} __attribute__((packed)) Elf32_Sym;
     401
     402typedef struct
     403{
     404  Elf64_Word    st_name;                /* Symbol name (string tbl index) */
     405  unsigned char st_info;                /* Symbol type and binding */
     406  unsigned char st_other;               /* Symbol visibility */
     407  Elf64_Section st_shndx;               /* Section index */
     408  Elf64_Addr    st_value;               /* Symbol value */
     409  Elf64_Xword   st_size;                /* Symbol size */
     410} __attribute__((packed)) Elf64_Sym;
    383411
    384412/* The syminfo section if available contains additional information about
     
    387415typedef struct
    388416{
    389   Elf32_Half si_boundto;                /* Direct bindings, symbol bound to */
    390   Elf32_Half si_flags;                  /* Per symbol flags */
    391 } Elf32_Syminfo;
    392 
    393 typedef struct
    394 {
    395   Elf64_Half si_boundto;                /* Direct bindings, symbol bound to */
    396   Elf64_Half si_flags;                  /* Per symbol flags */
    397 } Elf64_Syminfo;
     417  Elf32_Half si_boundto;                /* Direct bindings, symbol bound to */
     418  Elf32_Half si_flags;                  /* Per symbol flags */
     419} __attribute__((packed)) Elf32_Syminfo;
     420
     421typedef struct
     422{
     423  Elf64_Half si_boundto;                /* Direct bindings, symbol bound to */
     424  Elf64_Half si_flags;                  /* Per symbol flags */
     425} __attribute__((packed)) Elf64_Syminfo;
    398426
    399427/* Possible values for si_boundto.  */
    400 #define SYMINFO_BT_SELF         0xffff  /* Symbol bound to self */
    401 #define SYMINFO_BT_PARENT       0xfffe  /* Symbol bound to parent */
    402 #define SYMINFO_BT_LOWRESERVE   0xff00  /* Beginning of reserved entries */
     428#define SYMINFO_BT_SELF         0xffff  /* Symbol bound to self */
     429#define SYMINFO_BT_PARENT       0xfffe  /* Symbol bound to parent */
     430#define SYMINFO_BT_LOWRESERVE   0xff00  /* Beginning of reserved entries */
    403431
    404432/* Possible bitmasks for si_flags.  */
    405 #define SYMINFO_FLG_DIRECT      0x0001  /* Direct bound symbol */
    406 #define SYMINFO_FLG_PASSTHRU    0x0002  /* Pass-thru symbol for translator */
    407 #define SYMINFO_FLG_COPY        0x0004  /* Symbol is a copy-reloc */
    408 #define SYMINFO_FLG_LAZYLOAD    0x0008  /* Symbol bound to object to be lazy
    409                                            loaded */
     433#define SYMINFO_FLG_DIRECT      0x0001  /* Direct bound symbol */
     434#define SYMINFO_FLG_PASSTHRU    0x0002  /* Pass-thru symbol for translator */
     435#define SYMINFO_FLG_COPY        0x0004  /* Symbol is a copy-reloc */
     436#define SYMINFO_FLG_LAZYLOAD    0x0008  /* Symbol bound to object to be lazy
     437                                           loaded */
    410438/* Syminfo version values.  */
    411 #define SYMINFO_NONE            0
    412 #define SYMINFO_CURRENT         1
    413 #define SYMINFO_NUM             2
    414 
    415 
    416 /* Special section index.  */
    417 
    418 #define SHN_UNDEF       0               /* No section, undefined symbol.  */
     439#define SYMINFO_NONE            0
     440#define SYMINFO_CURRENT         1
     441#define SYMINFO_NUM             2
     442
    419443
    420444/* How to extract and insert information held in the st_info field.  */
    421445
    422 #define ELF32_ST_BIND(val)              (((unsigned char) (val)) >> 4)
    423 #define ELF32_ST_TYPE(val)              ((val) & 0xf)
    424 #define ELF32_ST_INFO(bind, type)       (((bind) << 4) + ((type) & 0xf))
     446#define ELF32_ST_BIND(val)              (((unsigned char) (val)) >> 4)
     447#define ELF32_ST_TYPE(val)              ((val) & 0xf)
     448#define ELF32_ST_INFO(bind, type)       (((bind) << 4) + ((type) & 0xf))
    425449
    426450/* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field.  */
    427 #define ELF64_ST_BIND(val)              ELF32_ST_BIND (val)
    428 #define ELF64_ST_TYPE(val)              ELF32_ST_TYPE (val)
    429 #define ELF64_ST_INFO(bind, type)       ELF32_ST_INFO ((bind), (type))
     451#define ELF64_ST_BIND(val)              ELF32_ST_BIND (val)
     452#define ELF64_ST_TYPE(val)              ELF32_ST_TYPE (val)
     453#define ELF64_ST_INFO(bind, type)       ELF32_ST_INFO ((bind), (type))
    430454
    431455/* Legal values for ST_BIND subfield of st_info (symbol binding).  */
    432456
    433 #define STB_LOCAL       0               /* Local symbol */
    434 #define STB_GLOBAL      1               /* Global symbol */
    435 #define STB_WEAK        2               /* Weak symbol */
    436 #define STB_NUM         3               /* Number of defined types.  */
    437 #define STB_LOOS        10              /* Start of OS-specific */
    438 #define STB_HIOS        12              /* End of OS-specific */
    439 #define STB_LOPROC      13              /* Start of processor-specific */
    440 #define STB_HIPROC      15              /* End of processor-specific */
     457#define STB_LOCAL       0               /* Local symbol */
     458#define STB_GLOBAL      1               /* Global symbol */
     459#define STB_WEAK        2               /* Weak symbol */
     460#define STB_NUM         3               /* Number of defined types.  */
     461#define STB_LOOS        10              /* Start of OS-specific */
     462#define STB_GNU_UNIQUE  10              /* Unique symbol.  */
     463#define STB_HIOS        12              /* End of OS-specific */
     464#define STB_LOPROC      13              /* Start of processor-specific */
     465#define STB_HIPROC      15              /* End of processor-specific */
    441466
    442467/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
    443468
    444 #define STT_NOTYPE      0               /* Symbol type is unspecified */
    445 #define STT_OBJECT      1               /* Symbol is a data object */
    446 #define STT_FUNC        2               /* Symbol is a code object */
    447 #define STT_SECTION     3               /* Symbol associated with a section */
    448 #define STT_FILE        4               /* Symbol's name is file name */
    449 #define STT_NUM         5               /* Number of defined types.  */
    450 #define STT_GNU_IFUNC   10              /* Symbol is a indirect code object */
    451 #define STT_LOOS        11              /* Start of OS-specific */
    452 #define STT_HIOS        12              /* End of OS-specific */
    453 #define STT_LOPROC      13              /* Start of processor-specific */
    454 #define STT_HIPROC      15              /* End of processor-specific */
     469#define STT_NOTYPE      0               /* Symbol type is unspecified */
     470#define STT_OBJECT      1               /* Symbol is a data object */
     471#define STT_FUNC        2               /* Symbol is a code object */
     472#define STT_SECTION     3               /* Symbol associated with a section */
     473#define STT_FILE        4               /* Symbol's name is file name */
     474#define STT_COMMON      5               /* Symbol is a common data object */
     475#define STT_TLS         6               /* Symbol is thread-local data object*/
     476#define STT_NUM         7               /* Number of defined types.  */
     477#define STT_LOOS        10              /* Start of OS-specific */
     478#define STT_GNU_IFUNC   10              /* Symbol is indirect code object */
     479#define STT_HIOS        12              /* End of OS-specific */
     480#define STT_LOPROC      13              /* Start of processor-specific */
     481#define STT_HIPROC      15              /* End of processor-specific */
    455482
    456483
     
    459486   the end of a chain, meaning no further symbols are found in that bucket.  */
    460487
    461 #define STN_UNDEF       0               /* End of a chain.  */
     488#define STN_UNDEF       0               /* End of a chain.  */
    462489
    463490
    464491/* How to extract and insert information held in the st_other field.  */
    465492
    466 #define ELF32_ST_VISIBILITY(o)  ((o) & 0x03)
     493#define ELF32_ST_VISIBILITY(o)  ((o) & 0x03)
    467494
    468495/* For ELF64 the definitions are the same.  */
    469 #define ELF64_ST_VISIBILITY(o)  ELF32_ST_VISIBILITY (o)
     496#define ELF64_ST_VISIBILITY(o)  ELF32_ST_VISIBILITY (o)
    470497
    471498/* Symbol visibility specification encoded in the st_other field.  */
    472 #define STV_DEFAULT     0               /* Default symbol visibility rules */
    473 #define STV_INTERNAL    1               /* Processor specific hidden class */
    474 #define STV_HIDDEN      2               /* Sym unavailable in other modules */
    475 #define STV_PROTECTED   3               /* Not preemptible, not exported */
     499#define STV_DEFAULT     0               /* Default symbol visibility rules */
     500#define STV_INTERNAL    1               /* Processor specific hidden class */
     501#define STV_HIDDEN      2               /* Sym unavailable in other modules */
     502#define STV_PROTECTED   3               /* Not preemptible, not exported */
    476503
    477504
     
    480507typedef struct
    481508{
    482   Elf32_Addr    r_offset;               /* Address */
    483   Elf32_Word    r_info;                 /* Relocation type and symbol index */
    484 } Elf32_Rel;
     509  Elf32_Addr    r_offset;               /* Address */
     510  Elf32_Word    r_info;                 /* Relocation type and symbol index */
     511} __attribute__((packed)) Elf32_Rel;
    485512
    486513/* I have seen two different definitions of the Elf64_Rel and
     
    491518typedef struct
    492519{
    493   Elf64_Addr    r_offset;               /* Address */
    494   Elf64_Xword   r_info;                 /* Relocation type and symbol index */
    495 } Elf64_Rel;
     520  Elf64_Addr    r_offset;               /* Address */
     521  Elf64_Xword   r_info;                 /* Relocation type and symbol index */
     522} __attribute__((packed)) Elf64_Rel;
    496523
    497524/* Relocation table entry with addend (in section of type SHT_RELA).  */
     
    499526typedef struct
    500527{
    501   Elf32_Addr    r_offset;               /* Address */
    502   Elf32_Word    r_info;                 /* Relocation type and symbol index */
    503   Elf32_Sword   r_addend;               /* Addend */
    504 } Elf32_Rela;
    505 
    506 typedef struct
    507 {
    508   Elf64_Addr    r_offset;               /* Address */
    509   Elf64_Xword   r_info;                 /* Relocation type and symbol index */
    510   Elf64_Sxword  r_addend;               /* Addend */
    511 } Elf64_Rela;
     528  Elf32_Addr    r_offset;               /* Address */
     529  Elf32_Word    r_info;                 /* Relocation type and symbol index */
     530  Elf32_Sword   r_addend;               /* Addend */
     531} __attribute__((packed)) Elf32_Rela;
     532
     533typedef struct
     534{
     535  Elf64_Addr    r_offset;               /* Address */
     536  Elf64_Xword   r_info;                 /* Relocation type and symbol index */
     537  Elf64_Sxword  r_addend;               /* Addend */
     538} __attribute__((packed)) Elf64_Rela;
    512539
    513540/* How to extract and insert information held in the r_info field.  */
    514541
    515 #define ELF32_R_SYM(val)                ((val) >> 8)
    516 #define ELF32_R_TYPE(val)               ((val) & 0xff)
    517 #define ELF32_R_INFO(sym, type)         (((sym) << 8) + ((type) & 0xff))
    518 
    519 #define ELF64_R_SYM(i)                  ((i) >> 32)
    520 #define ELF64_R_TYPE(i)                 ((i) & 0xffffffff)
    521 #define ELF64_R_INFO(sym,type)          ((((Elf64_Xword)(sym)) << 32) + (type))
     542#define ELF32_R_SYM(val)                ((val) >> 8)
     543#define ELF32_R_TYPE(val)               ((val) & 0xff)
     544#define ELF32_R_INFO(sym, type)         (((sym) << 8) + ((type) & 0xff))
     545
     546#define ELF64_R_SYM(i)                  ((i) >> 32)
     547#define ELF64_R_TYPE(i)                 ((i) & 0xffffffff)
     548#define ELF64_R_INFO(sym,type)          ((((Elf64_Xword) (sym)) << 32) + (type))
    522549
    523550/* Program segment header.  */
     
    525552typedef struct
    526553{
    527   Elf32_Word    p_type;                 /* Segment type */
    528   Elf32_Off     p_offset;               /* Segment file offset */
    529   Elf32_Addr    p_vaddr;                /* Segment virtual address */
    530   Elf32_Addr    p_paddr;                /* Segment physical address */
    531   Elf32_Word    p_filesz;               /* Segment size in file */
    532   Elf32_Word    p_memsz;                /* Segment size in memory */
    533   Elf32_Word    p_flags;                /* Segment flags */
    534   Elf32_Word    p_align;                /* Segment alignment */
    535 } Elf32_Phdr;
    536 
    537 typedef struct
    538 {
    539   Elf64_Word    p_type;                 /* Segment type */
    540   Elf64_Word    p_flags;                /* Segment flags */
    541   Elf64_Off     p_offset;               /* Segment file offset */
    542   Elf64_Addr    p_vaddr;                /* Segment virtual address */
    543   Elf64_Addr    p_paddr;                /* Segment physical address */
    544   Elf64_Xword   p_filesz;               /* Segment size in file */
    545   Elf64_Xword   p_memsz;                /* Segment size in memory */
    546   Elf64_Xword   p_align;                /* Segment alignment */
    547 } Elf64_Phdr;
     554  Elf32_Word    p_type;                 /* Segment type */
     555  Elf32_Off     p_offset;               /* Segment file offset */
     556  Elf32_Addr    p_vaddr;                /* Segment virtual address */
     557  Elf32_Addr    p_paddr;                /* Segment physical address */
     558  Elf32_Word    p_filesz;               /* Segment size in file */
     559  Elf32_Word    p_memsz;                /* Segment size in memory */
     560  Elf32_Word    p_flags;                /* Segment flags */
     561  Elf32_Word    p_align;                /* Segment alignment */
     562} __attribute__((packed)) Elf32_Phdr;
     563
     564typedef struct
     565{
     566  Elf64_Word    p_type;                 /* Segment type */
     567  Elf64_Word    p_flags;                /* Segment flags */
     568  Elf64_Off     p_offset;               /* Segment file offset */
     569  Elf64_Addr    p_vaddr;                /* Segment virtual address */
     570  Elf64_Addr    p_paddr;                /* Segment physical address */
     571  Elf64_Xword   p_filesz;               /* Segment size in file */
     572  Elf64_Xword   p_memsz;                /* Segment size in memory */
     573  Elf64_Xword   p_align;                /* Segment alignment */
     574} __attribute__((packed)) Elf64_Phdr;
     575
     576/* Special value for e_phnum.  This indicates that the real number of
     577   program headers is too large to fit into e_phnum.  Instead the real
     578   value is in the field sh_info of section 0.  */
     579
     580#define PN_XNUM         0xffff
    548581
    549582/* Legal values for p_type (segment type).  */
    550583
    551 #define PT_NULL         0               /* Program header table entry unused */
    552 #define PT_LOAD         1               /* Loadable program segment */
    553 #define PT_DYNAMIC      2               /* Dynamic linking information */
    554 #define PT_INTERP       3               /* Program interpreter */
    555 #define PT_NOTE         4               /* Auxiliary information */
    556 #define PT_SHLIB        5               /* Reserved */
    557 #define PT_PHDR         6               /* Entry for header table itself */
    558 #define PT_NUM          7               /* Number of defined types.  */
    559 #define PT_LOOS         0x60000000      /* Start of OS-specific */
    560 #define PT_HIOS         0x6fffffff      /* End of OS-specific */
    561 #define PT_LOPROC       0x70000000      /* Start of processor-specific */
    562 #define PT_HIPROC       0x7fffffff      /* End of processor-specific */
     584#define PT_NULL         0               /* Program header table entry unused */
     585#define PT_LOAD         1               /* Loadable program segment */
     586#define PT_DYNAMIC      2               /* Dynamic linking information */
     587#define PT_INTERP       3               /* Program interpreter */
     588#define PT_NOTE         4               /* Auxiliary information */
     589#define PT_SHLIB        5               /* Reserved */
     590#define PT_PHDR         6               /* Entry for header table itself */
     591#define PT_TLS          7               /* Thread-local storage segment */
     592#define PT_NUM          8               /* Number of defined types */
     593#define PT_LOOS         0x60000000      /* Start of OS-specific */
     594#define PT_GNU_EH_FRAME 0x6474e550      /* GCC .eh_frame_hdr segment */
     595#define PT_GNU_STACK    0x6474e551      /* Indicates stack executability */
     596#define PT_GNU_RELRO    0x6474e552      /* Read-only after relocation */
     597#define PT_LOSUNW       0x6ffffffa
     598#define PT_SUNWBSS      0x6ffffffa      /* Sun Specific segment */
     599#define PT_SUNWSTACK    0x6ffffffb      /* Stack segment */
     600#define PT_HISUNW       0x6fffffff
     601#define PT_HIOS         0x6fffffff      /* End of OS-specific */
     602#define PT_LOPROC       0x70000000      /* Start of processor-specific */
     603#define PT_HIPROC       0x7fffffff      /* End of processor-specific */
    563604
    564605/* Legal values for p_flags (segment flags).  */
    565606
    566 #define PF_X            (1 << 0)        /* Segment is executable */
    567 #define PF_W            (1 << 1)        /* Segment is writable */
    568 #define PF_R            (1 << 2)        /* Segment is readable */
    569 #define PF_MASKPROC     0xf0000000      /* Processor-specific */
     607#define PF_X            (1 << 0)        /* Segment is executable */
     608#define PF_W            (1 << 1)        /* Segment is writable */
     609#define PF_R            (1 << 2)        /* Segment is readable */
     610#define PF_MASKOS       0x0ff00000      /* OS-specific */
     611#define PF_MASKPROC     0xf0000000      /* Processor-specific */
    570612
    571613/* Legal values for note segment descriptor types for core files. */
    572614
    573 #define NT_PRSTATUS     1               /* Contains copy of prstatus struct */
    574 #define NT_FPREGSET     2               /* Contains copy of fpregset struct */
    575 #define NT_PRPSINFO     3               /* Contains copy of prpsinfo struct */
    576 #define NT_PRXREG       4               /* Contains copy of prxregset struct */
    577 #define NT_PLATFORM     5               /* String from sysinfo(SI_PLATFORM) */
    578 #define NT_AUXV         6               /* Contains copy of auxv array */
    579 #define NT_GWINDOWS     7               /* Contains copy of gwindows struct */
    580 #define NT_PSTATUS      10              /* Contains copy of pstatus struct */
    581 #define NT_PSINFO       13              /* Contains copy of psinfo struct */
    582 #define NT_PRCRED       14              /* Contains copy of prcred struct */
    583 #define NT_UTSNAME      15              /* Contains copy of utsname struct */
    584 #define NT_LWPSTATUS    16              /* Contains copy of lwpstatus struct */
    585 #define NT_LWPSINFO     17              /* Contains copy of lwpinfo struct */
    586 
    587 /* Legal values for the  note segment descriptor types for object files.  */
    588 
    589 #define NT_VERSION      1               /* Contains a version string.  */
     615#define NT_PRSTATUS     1               /* Contains copy of prstatus struct */
     616#define NT_FPREGSET     2               /* Contains copy of fpregset struct */
     617#define NT_PRPSINFO     3               /* Contains copy of prpsinfo struct */
     618#define NT_PRXREG       4               /* Contains copy of prxregset struct */
     619#define NT_TASKSTRUCT   4               /* Contains copy of task structure */
     620#define NT_PLATFORM     5               /* String from sysinfo(SI_PLATFORM) */
     621#define NT_AUXV         6               /* Contains copy of auxv array */
     622#define NT_GWINDOWS     7               /* Contains copy of gwindows struct */
     623#define NT_ASRS         8               /* Contains copy of asrset struct */
     624#define NT_PSTATUS      10              /* Contains copy of pstatus struct */
     625#define NT_PSINFO       13              /* Contains copy of psinfo struct */
     626#define NT_PRCRED       14              /* Contains copy of prcred struct */
     627#define NT_UTSNAME      15              /* Contains copy of utsname struct */
     628#define NT_LWPSTATUS    16              /* Contains copy of lwpstatus struct */
     629#define NT_LWPSINFO     17              /* Contains copy of lwpinfo struct */
     630#define NT_PRFPXREG     20              /* Contains copy of fprxregset struct */
     631#define NT_PRXFPREG     0x46e62b7f      /* Contains copy of user_fxsr_struct */
     632#define NT_PPC_VMX      0x100           /* PowerPC Altivec/VMX registers */
     633#define NT_PPC_SPE      0x101           /* PowerPC SPE/EVR registers */
     634#define NT_PPC_VSX      0x102           /* PowerPC VSX registers */
     635#define NT_386_TLS      0x200           /* i386 TLS slots (struct user_desc) */
     636#define NT_386_IOPERM   0x201           /* x86 io permission bitmap (1=deny) */
     637#define NT_X86_XSTATE   0x202           /* x86 extended state using xsave */
     638#define NT_S390_HIGH_GPRS       0x300   /* s390 upper register halves */
     639#define NT_S390_TIMER   0x301           /* s390 timer register */
     640#define NT_S390_TODCMP  0x302           /* s390 TOD clock comparator register */
     641#define NT_S390_TODPREG 0x303           /* s390 TOD programmable register */
     642#define NT_S390_CTRS    0x304           /* s390 control registers */
     643#define NT_S390_PREFIX  0x305           /* s390 prefix register */
     644#define NT_S390_LAST_BREAK      0x306   /* s390 breaking event address */
     645#define NT_S390_SYSTEM_CALL     0x307   /* s390 system call restart data */
     646#define NT_ARM_VFP      0x400           /* ARM VFP/NEON registers */
     647#define NT_ARM_TLS      0x401           /* ARM TLS register */
     648#define NT_ARM_HW_BREAK 0x402           /* ARM hardware breakpoint registers */
     649#define NT_ARM_HW_WATCH 0x403           /* ARM hardware watchpoint registers */
     650
     651/* Legal values for the note segment descriptor types for object files.  */
     652
     653#define NT_VERSION      1               /* Contains a version string.  */
    590654
    591655
     
    594658typedef struct
    595659{
    596   Elf32_Sword   d_tag;                  /* Dynamic entry type */
     660  Elf32_Sword   d_tag;                  /* Dynamic entry type */
    597661  union
    598662    {
    599       Elf32_Word d_val;                 /* Integer value */
    600       Elf32_Addr d_ptr;                 /* Address value */
     663      Elf32_Word d_val;                 /* Integer value */
     664      Elf32_Addr d_ptr;                 /* Address value */
    601665    } d_un;
    602 } Elf32_Dyn;
    603 
    604 typedef struct
    605 {
    606   Elf64_Sxword  d_tag;                  /* Dynamic entry type */
     666} __attribute__((packed)) Elf32_Dyn;
     667
     668typedef struct
     669{
     670  Elf64_Sxword  d_tag;                  /* Dynamic entry type */
    607671  union
    608672    {
    609       Elf64_Xword d_val;                /* Integer value */
    610       Elf64_Addr d_ptr;                 /* Address value */
     673      Elf64_Xword d_val;                /* Integer value */
     674      Elf64_Addr d_ptr;                 /* Address value */
    611675    } d_un;
    612 } Elf64_Dyn;
     676} __attribute__((packed)) Elf64_Dyn;
    613677
    614678/* Legal values for d_tag (dynamic entry type).  */
    615679
    616 #define DT_NULL         0               /* Marks end of dynamic section */
    617 #define DT_NEEDED       1               /* Name of needed library */
    618 #define DT_PLTRELSZ     2               /* Size in bytes of PLT relocs */
    619 #define DT_PLTGOT       3               /* Processor defined value */
    620 #define DT_HASH         4               /* Address of symbol hash table */
    621 #define DT_STRTAB       5               /* Address of string table */
    622 #define DT_SYMTAB       6               /* Address of symbol table */
    623 #define DT_RELA         7               /* Address of Rela relocs */
    624 #define DT_RELASZ       8               /* Total size of Rela relocs */
    625 #define DT_RELAENT      9               /* Size of one Rela reloc */
    626 #define DT_STRSZ        10              /* Size of string table */
    627 #define DT_SYMENT       11              /* Size of one symbol table entry */
    628 #define DT_INIT         12              /* Address of init function */
    629 #define DT_FINI         13              /* Address of termination function */
    630 #define DT_SONAME       14              /* Name of shared object */
    631 #define DT_RPATH        15              /* Library search path */
    632 #define DT_SYMBOLIC     16              /* Start symbol search here */
    633 #define DT_REL          17              /* Address of Rel relocs */
    634 #define DT_RELSZ        18              /* Total size of Rel relocs */
    635 #define DT_RELENT       19              /* Size of one Rel reloc */
    636 #define DT_PLTREL       20              /* Type of reloc in PLT */
    637 #define DT_DEBUG        21              /* For debugging; unspecified */
    638 #define DT_TEXTREL      22              /* Reloc might modify .text */
    639 #define DT_JMPREL       23              /* Address of PLT relocs */
    640 #define DT_BIND_NOW     24              /* Process relocations of object */
    641 #define DT_INIT_ARRAY   25              /* Array with addresses of init fct */
    642 #define DT_FINI_ARRAY   26              /* Array with addresses of fini fct */
    643 #define DT_INIT_ARRAYSZ 27              /* Size in bytes of DT_INIT_ARRAY */
    644 #define DT_FINI_ARRAYSZ 28              /* Size in bytes of DT_FINI_ARRAY */
    645 #define DT_NUM          29              /* Number used */
    646 #define DT_LOOS         0x60000000      /* Start of OS-specific */
    647 #define DT_HIOS         0x6fffffff      /* End of OS-specific */
    648 #define DT_LOPROC       0x70000000      /* Start of processor-specific */
    649 #define DT_HIPROC       0x7fffffff      /* End of processor-specific */
    650 #define DT_PROCNUM      DT_MIPS_NUM     /* Most used by any processor */
     680#define DT_NULL         0               /* Marks end of dynamic section */
     681#define DT_NEEDED       1               /* Name of needed library */
     682#define DT_PLTRELSZ     2               /* Size in bytes of PLT relocs */
     683#define DT_PLTGOT       3               /* Processor defined value */
     684#define DT_HASH         4               /* Address of symbol hash table */
     685#define DT_STRTAB       5               /* Address of string table */
     686#define DT_SYMTAB       6               /* Address of symbol table */
     687#define DT_RELA         7               /* Address of Rela relocs */
     688#define DT_RELASZ       8               /* Total size of Rela relocs */
     689#define DT_RELAENT      9               /* Size of one Rela reloc */
     690#define DT_STRSZ        10              /* Size of string table */
     691#define DT_SYMENT       11              /* Size of one symbol table entry */
     692#define DT_INIT         12              /* Address of init function */
     693#define DT_FINI         13              /* Address of termination function */
     694#define DT_SONAME       14              /* Name of shared object */
     695#define DT_RPATH        15              /* Library search path (deprecated) */
     696#define DT_SYMBOLIC     16              /* Start symbol search here */
     697#define DT_REL          17              /* Address of Rel relocs */
     698#define DT_RELSZ        18              /* Total size of Rel relocs */
     699#define DT_RELENT       19              /* Size of one Rel reloc */
     700#define DT_PLTREL       20              /* Type of reloc in PLT */
     701#define DT_DEBUG        21              /* For debugging; unspecified */
     702#define DT_TEXTREL      22              /* Reloc might modify .text */
     703#define DT_JMPREL       23              /* Address of PLT relocs */
     704#define DT_BIND_NOW     24              /* Process relocations of object */
     705#define DT_INIT_ARRAY   25              /* Array with addresses of init fct */
     706#define DT_FINI_ARRAY   26              /* Array with addresses of fini fct */
     707#define DT_INIT_ARRAYSZ 27              /* Size in bytes of DT_INIT_ARRAY */
     708#define DT_FINI_ARRAYSZ 28              /* Size in bytes of DT_FINI_ARRAY */
     709#define DT_RUNPATH      29              /* Library search path */
     710#define DT_FLAGS        30              /* Flags for the object being loaded */
     711#define DT_ENCODING     32              /* Start of encoded range */
     712#define DT_PREINIT_ARRAY 32             /* Array with addresses of preinit fct*/
     713#define DT_PREINIT_ARRAYSZ 33           /* size in bytes of DT_PREINIT_ARRAY */
     714#define DT_NUM          34              /* Number used */
     715#define DT_LOOS         0x6000000d      /* Start of OS-specific */
     716#define DT_HIOS         0x6ffff000      /* End of OS-specific */
     717#define DT_LOPROC       0x70000000      /* Start of processor-specific */
     718#define DT_HIPROC       0x7fffffff      /* End of processor-specific */
     719#define DT_PROCNUM      DT_MIPS_NUM     /* Most used by any processor */
    651720
    652721/* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
    653722   Dyn.d_un.d_val field of the Elf*_Dyn structure.  This follows Sun's
    654723   approach.  */
    655 #define DT_VALRNGLO     0x6ffffd00
    656 #define DT_POSFLAG_1    0x6ffffdfd      /* Flags for DT_* entries, effecting
    657                                            the following DT_* entry.  */
    658 #define DT_SYMINSZ      0x6ffffdfe      /* Size of syminfo table (in bytes) */
    659 #define DT_SYMINENT     0x6ffffdff      /* Entry size of syminfo */
    660 #define DT_VALRNGHI     0x6ffffdff
     724#define DT_VALRNGLO     0x6ffffd00
     725#define DT_GNU_PRELINKED 0x6ffffdf5     /* Prelinking timestamp */
     726#define DT_GNU_CONFLICTSZ 0x6ffffdf6    /* Size of conflict section */
     727#define DT_GNU_LIBLISTSZ 0x6ffffdf7     /* Size of library list */
     728#define DT_CHECKSUM     0x6ffffdf8
     729#define DT_PLTPADSZ     0x6ffffdf9
     730#define DT_MOVEENT      0x6ffffdfa
     731#define DT_MOVESZ       0x6ffffdfb
     732#define DT_FEATURE_1    0x6ffffdfc      /* Feature selection (DTF_*).  */
     733#define DT_POSFLAG_1    0x6ffffdfd      /* Flags for DT_* entries, effecting
     734                                           the following DT_* entry.  */
     735#define DT_SYMINSZ      0x6ffffdfe      /* Size of syminfo table (in bytes) */
     736#define DT_SYMINENT     0x6ffffdff      /* Entry size of syminfo */
     737#define DT_VALRNGHI     0x6ffffdff
     738#define DT_VALTAGIDX(tag)       (DT_VALRNGHI - (tag))   /* Reverse order! */
     739#define DT_VALNUM 12
    661740
    662741/* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
     
    665744   If any adjustment is made to the ELF object after it has been
    666745   built these entries will need to be adjusted.  */
    667 #define DT_ADDRRNGLO    0x6ffffe00
    668 #define DT_SYMINFO      0x6ffffeff      /* syminfo table */
    669 #define DT_ADDRRNGHI    0x6ffffeff
     746#define DT_ADDRRNGLO    0x6ffffe00
     747#define DT_GNU_HASH     0x6ffffef5      /* GNU-style hash table.  */
     748#define DT_TLSDESC_PLT  0x6ffffef6
     749#define DT_TLSDESC_GOT  0x6ffffef7
     750#define DT_GNU_CONFLICT 0x6ffffef8      /* Start of conflict section */
     751#define DT_GNU_LIBLIST  0x6ffffef9      /* Library list */
     752#define DT_CONFIG       0x6ffffefa      /* Configuration information.  */
     753#define DT_DEPAUDIT     0x6ffffefb      /* Dependency auditing.  */
     754#define DT_AUDIT        0x6ffffefc      /* Object auditing.  */
     755#define DT_PLTPAD       0x6ffffefd      /* PLT padding.  */
     756#define DT_MOVETAB      0x6ffffefe      /* Move table.  */
     757#define DT_SYMINFO      0x6ffffeff      /* Syminfo table.  */
     758#define DT_ADDRRNGHI    0x6ffffeff
     759#define DT_ADDRTAGIDX(tag)      (DT_ADDRRNGHI - (tag))  /* Reverse order! */
     760#define DT_ADDRNUM 11
    670761
    671762/* The versioning entry types.  The next are defined as part of the
    672763   GNU extension.  */
    673 #define DT_VERSYM       0x6ffffff0
     764#define DT_VERSYM       0x6ffffff0
     765
     766#define DT_RELACOUNT    0x6ffffff9
     767#define DT_RELCOUNT     0x6ffffffa
    674768
    675769/* These were chosen by Sun.  */
    676 #define DT_FLAGS_1      0x6ffffffb      /* State flags, see DF_1_* below.  */
    677 #define DT_VERDEF       0x6ffffffc      /* Address of version definition
    678                                            table */
    679 #define DT_VERDEFNUM    0x6ffffffd      /* Number of version definitions */
    680 #define DT_VERNEED      0x6ffffffe      /* Address of table with needed
    681                                            versions */
    682 #define DT_VERNEEDNUM   0x6fffffff      /* Number of needed versions */
    683 #define DT_VERSIONTAGIDX(tag)   (DT_VERNEEDNUM - (tag)) /* Reverse order! */
     770#define DT_FLAGS_1      0x6ffffffb      /* State flags, see DF_1_* below.  */
     771#define DT_VERDEF       0x6ffffffc      /* Address of version definition
     772                                           table */
     773#define DT_VERDEFNUM    0x6ffffffd      /* Number of version definitions */
     774#define DT_VERNEED      0x6ffffffe      /* Address of table with needed
     775                                           versions */
     776#define DT_VERNEEDNUM   0x6fffffff      /* Number of needed versions */
     777#define DT_VERSIONTAGIDX(tag)   (DT_VERNEEDNUM - (tag)) /* Reverse order! */
    684778#define DT_VERSIONTAGNUM 16
    685779
     
    688782#define DT_AUXILIARY    0x7ffffffd      /* Shared object to load before self */
    689783#define DT_FILTER       0x7fffffff      /* Shared object to get values from */
    690 #define DT_EXTRATAGIDX(tag)     ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
    691 #define DT_EXTRANUM     3
     784#define DT_EXTRATAGIDX(tag)     ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
     785#define DT_EXTRANUM     3
     786
     787/* Values of `d_un.d_val' in the DT_FLAGS entry.  */
     788#define DF_ORIGIN       0x00000001      /* Object may use DF_ORIGIN */
     789#define DF_SYMBOLIC     0x00000002      /* Symbol resolutions starts here */
     790#define DF_TEXTREL      0x00000004      /* Object contains text relocations */
     791#define DF_BIND_NOW     0x00000008      /* No lazy binding for this object */
     792#define DF_STATIC_TLS   0x00000010      /* Module uses the static TLS model */
    692793
    693794/* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
    694795   entry in the dynamic section.  */
    695 #define DF_1_NOW        0x00000001      /* Set RTLD_NOW for this object.  */
    696 #define DF_1_GLOBAL     0x00000002      /* Set RTLD_GLOBAL for this object.  */
    697 #define DF_1_GROUP      0x00000004      /* Set RTLD_GROUP for this object.  */
    698 #define DF_1_NODELETE   0x00000008      /* Set RTLD_NODELETE for this object.*/
    699 #define DF_1_LOADFLTR   0x00000010      /* Trigger filtee loading at runtime.*/
    700 #define DF_1_INITFIRST  0x00000020      /* Set RTLD_INITFIRST for this object*/
    701 #define DF_1_NOOPEN     0x00000040      /* Set RTLD_NOOPEN for this object.  */
     796#define DF_1_NOW        0x00000001      /* Set RTLD_NOW for this object.  */
     797#define DF_1_GLOBAL     0x00000002      /* Set RTLD_GLOBAL for this object.  */
     798#define DF_1_GROUP      0x00000004      /* Set RTLD_GROUP for this object.  */
     799#define DF_1_NODELETE   0x00000008      /* Set RTLD_NODELETE for this object.*/
     800#define DF_1_LOADFLTR   0x00000010      /* Trigger filtee loading at runtime.*/
     801#define DF_1_INITFIRST  0x00000020      /* Set RTLD_INITFIRST for this object*/
     802#define DF_1_NOOPEN     0x00000040      /* Set RTLD_NOOPEN for this object.  */
     803#define DF_1_ORIGIN     0x00000080      /* $ORIGIN must be handled.  */
     804#define DF_1_DIRECT     0x00000100      /* Direct binding enabled.  */
     805#define DF_1_TRANS      0x00000200
     806#define DF_1_INTERPOSE  0x00000400      /* Object is used to interpose.  */
     807#define DF_1_NODEFLIB   0x00000800      /* Ignore default lib search path.  */
     808#define DF_1_NODUMP     0x00001000      /* Object can't be dldump'ed.  */
     809#define DF_1_CONFALT    0x00002000      /* Configuration alternative created.*/
     810#define DF_1_ENDFILTEE  0x00004000      /* Filtee terminates filters search. */
     811#define DF_1_DISPRELDNE 0x00008000      /* Disp reloc applied at build time. */
     812#define DF_1_DISPRELPND 0x00010000      /* Disp reloc applied at run-time.  */
     813#define DF_1_NODIRECT   0x00020000      /* Object has no-direct binding. */
     814#define DF_1_IGNMULDEF  0x00040000
     815#define DF_1_NOKSYMS    0x00080000
     816#define DF_1_NOHDR      0x00100000
     817#define DF_1_EDITED     0x00200000      /* Object is modified after built.  */
     818#define DF_1_NORELOC    0x00400000
     819#define DF_1_SYMINTPOSE 0x00800000      /* Object has individual interposers.  */
     820#define DF_1_GLOBAUDIT  0x01000000      /* Global auditing required.  */
     821#define DF_1_SINGLETON  0x02000000      /* Singleton symbols are used.  */
     822
     823/* Flags for the feature selection in DT_FEATURE_1.  */
     824#define DTF_1_PARINIT   0x00000001
     825#define DTF_1_CONFEXP   0x00000002
     826
     827/* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry.  */
     828#define DF_P1_LAZYLOAD  0x00000001      /* Lazyload following object.  */
     829#define DF_P1_GROUPPERM 0x00000002      /* Symbols from next object are not
     830                                           generally available.  */
    702831
    703832/* Version definition sections.  */
     
    705834typedef struct
    706835{
    707   Elf32_Half    vd_version;             /* Version revision */
    708   Elf32_Half    vd_flags;               /* Version information */
    709   Elf32_Half    vd_ndx;                 /* Version Index */
    710   Elf32_Half    vd_cnt;                 /* Number of associated aux entries */
    711   Elf32_Word    vd_hash;                /* Version name hash value */
    712   Elf32_Word    vd_aux;                 /* Offset in bytes to verdaux array */
    713   Elf32_Word    vd_next;                /* Offset in bytes to next verdef
    714                                            entry */
    715 } Elf32_Verdef;
    716 
    717 typedef struct
    718 {
    719   Elf64_Half    vd_version;             /* Version revision */
    720   Elf64_Half    vd_flags;               /* Version information */
    721   Elf64_Half    vd_ndx;                 /* Version Index */
    722   Elf64_Half    vd_cnt;                 /* Number of associated aux entries */
    723   Elf64_Word    vd_hash;                /* Version name hash value */
    724   Elf64_Word    vd_aux;                 /* Offset in bytes to verdaux array */
    725   Elf64_Word    vd_next;                /* Offset in bytes to next verdef
    726                                            entry */
    727 } Elf64_Verdef;
     836  Elf32_Half    vd_version;             /* Version revision */
     837  Elf32_Half    vd_flags;               /* Version information */
     838  Elf32_Half    vd_ndx;                 /* Version Index */
     839  Elf32_Half    vd_cnt;                 /* Number of associated aux entries */
     840  Elf32_Word    vd_hash;                /* Version name hash value */
     841  Elf32_Word    vd_aux;                 /* Offset in bytes to verdaux array */
     842  Elf32_Word    vd_next;                /* Offset in bytes to next verdef
     843                                           entry */
     844} __attribute__((packed)) Elf32_Verdef;
     845
     846typedef struct
     847{
     848  Elf64_Half    vd_version;             /* Version revision */
     849  Elf64_Half    vd_flags;               /* Version information */
     850  Elf64_Half    vd_ndx;                 /* Version Index */
     851  Elf64_Half    vd_cnt;                 /* Number of associated aux entries */
     852  Elf64_Word    vd_hash;                /* Version name hash value */
     853  Elf64_Word    vd_aux;                 /* Offset in bytes to verdaux array */
     854  Elf64_Word    vd_next;                /* Offset in bytes to next verdef
     855                                           entry */
     856} __attribute__((packed)) Elf64_Verdef;
    728857
    729858
    730859/* Legal values for vd_version (version revision).  */
    731 #define VER_DEF_NONE    0               /* No version */
    732 #define VER_DEF_CURRENT 1               /* Current version */
    733 #define VER_DEF_NUM     2               /* Given version number */
     860#define VER_DEF_NONE    0               /* No version */
     861#define VER_DEF_CURRENT 1               /* Current version */
     862#define VER_DEF_NUM     2               /* Given version number */
    734863
    735864/* Legal values for vd_flags (version information flags).  */
    736 #define VER_FLG_BASE    0x1             /* Version definition of file itself */
    737 #define VER_FLG_WEAK    0x2             /* Weak version identifier */
    738 
    739 /* Auxialiary version information.  */
    740 
    741 typedef struct
    742 {
    743   Elf32_Word    vda_name;               /* Version or dependency names */
    744   Elf32_Word    vda_next;               /* Offset in bytes to next verdaux
    745                                            entry */
    746 } Elf32_Verdaux;
    747 
    748 typedef struct
    749 {
    750   Elf64_Word    vda_name;               /* Version or dependency names */
    751   Elf64_Word    vda_next;               /* Offset in bytes to next verdaux
    752                                            entry */
    753 } Elf64_Verdaux;
     865#define VER_FLG_BASE    0x1             /* Version definition of file itself */
     866#define VER_FLG_WEAK    0x2             /* Weak version identifier */
     867
     868/* Versym symbol index values.  */
     869#define VER_NDX_LOCAL           0       /* Symbol is local.  */
     870#define VER_NDX_GLOBAL          1       /* Symbol is global.  */
     871#define VER_NDX_LORESERVE       0xff00  /* Beginning of reserved entries.  */
     872#define VER_NDX_ELIMINATE       0xff01  /* Symbol is to be eliminated.  */
     873
     874/* Auxiliary version information.  */
     875
     876typedef struct
     877{
     878  Elf32_Word    vda_name;               /* Version or dependency names */
     879  Elf32_Word    vda_next;               /* Offset in bytes to next verdaux
     880                                           entry */
     881} __attribute__((packed)) Elf32_Verdaux;
     882
     883typedef struct
     884{
     885  Elf64_Word    vda_name;               /* Version or dependency names */
     886  Elf64_Word    vda_next;               /* Offset in bytes to next verdaux
     887                                           entry */
     888} __attribute__((packed)) Elf64_Verdaux;
    754889
    755890
     
    758893typedef struct
    759894{
    760   Elf32_Half    vn_version;             /* Version of structure */
    761   Elf32_Half    vn_cnt;                 /* Number of associated aux entries */
    762   Elf32_Word    vn_file;                /* Offset of filename for this
    763                                            dependency */
    764   Elf32_Word    vn_aux;                 /* Offset in bytes to vernaux array */
    765   Elf32_Word    vn_next;                /* Offset in bytes to next verneed
    766                                            entry */
    767 } Elf32_Verneed;
    768 
    769 typedef struct
    770 {
    771   Elf64_Half    vn_version;             /* Version of structure */
    772   Elf64_Half    vn_cnt;                 /* Number of associated aux entries */
    773   Elf64_Word    vn_file;                /* Offset of filename for this
    774                                            dependency */
    775   Elf64_Word    vn_aux;                 /* Offset in bytes to vernaux array */
    776   Elf64_Word    vn_next;                /* Offset in bytes to next verneed
    777                                            entry */
    778 } Elf64_Verneed;
     895  Elf32_Half    vn_version;             /* Version of structure */
     896  Elf32_Half    vn_cnt;                 /* Number of associated aux entries */
     897  Elf32_Word    vn_file;                /* Offset of filename for this
     898                                           dependency */
     899  Elf32_Word    vn_aux;                 /* Offset in bytes to vernaux array */
     900  Elf32_Word    vn_next;                /* Offset in bytes to next verneed
     901                                           entry */
     902} __attribute__((packed)) Elf32_Verneed;
     903
     904typedef struct
     905{
     906  Elf64_Half    vn_version;             /* Version of structure */
     907  Elf64_Half    vn_cnt;                 /* Number of associated aux entries */
     908  Elf64_Word    vn_file;                /* Offset of filename for this
     909                                           dependency */
     910  Elf64_Word    vn_aux;                 /* Offset in bytes to vernaux array */
     911  Elf64_Word    vn_next;                /* Offset in bytes to next verneed
     912                                           entry */
     913} __attribute__((packed)) Elf64_Verneed;
    779914
    780915
    781916/* Legal values for vn_version (version revision).  */
    782 #define VER_NEED_NONE    0              /* No version */
    783 #define VER_NEED_CURRENT 1              /* Current version */
    784 #define VER_NEED_NUM     2              /* Given version number */
     917#define VER_NEED_NONE    0              /* No version */
     918#define VER_NEED_CURRENT 1              /* Current version */
     919#define VER_NEED_NUM     2              /* Given version number */
    785920
    786921/* Auxiliary needed version information.  */
     
    788923typedef struct
    789924{
    790   Elf32_Word    vna_hash;               /* Hash value of dependency name */
    791   Elf32_Half    vna_flags;              /* Dependency specific information */
    792   Elf32_Half    vna_other;              /* Unused */
    793   Elf32_Word    vna_name;               /* Dependency name string offset */
    794   Elf32_Word    vna_next;               /* Offset in bytes to next vernaux
    795                                            entry */
    796 } Elf32_Vernaux;
    797 
    798 typedef struct
    799 {
    800   Elf64_Word    vna_hash;               /* Hash value of dependency name */
    801   Elf64_Half    vna_flags;              /* Dependency specific information */
    802   Elf64_Half    vna_other;              /* Unused */
    803   Elf64_Word    vna_name;               /* Dependency name string offset */
    804   Elf64_Word    vna_next;               /* Offset in bytes to next vernaux
    805                                            entry */
    806 } Elf64_Vernaux;
     925  Elf32_Word    vna_hash;               /* Hash value of dependency name */
     926  Elf32_Half    vna_flags;              /* Dependency specific information */
     927  Elf32_Half    vna_other;              /* Unused */
     928  Elf32_Word    vna_name;               /* Dependency name string offset */
     929  Elf32_Word    vna_next;               /* Offset in bytes to next vernaux
     930                                           entry */
     931} __attribute__((packed)) Elf32_Vernaux;
     932
     933typedef struct
     934{
     935  Elf64_Word    vna_hash;               /* Hash value of dependency name */
     936  Elf64_Half    vna_flags;              /* Dependency specific information */
     937  Elf64_Half    vna_other;              /* Unused */
     938  Elf64_Word    vna_name;               /* Dependency name string offset */
     939  Elf64_Word    vna_next;               /* Offset in bytes to next vernaux
     940                                           entry */
     941} __attribute__((packed)) Elf64_Vernaux;
    807942
    808943
    809944/* Legal values for vna_flags.  */
    810 #define VER_FLG_WEAK    0x2             /* Weak version identifier */
     945#define VER_FLG_WEAK    0x2             /* Weak version identifier */
    811946
    812947
     
    822957typedef struct
    823958{
    824   int a_type;                   /* Entry type */
     959  uint32_t a_type;              /* Entry type */
    825960  union
    826961    {
    827       long int a_val;           /* Integer value */
    828       void *a_ptr;              /* Pointer value */
    829       void (*a_fcn) (void);     /* Function pointer value */
     962      uint32_t a_val;           /* Integer value */
     963      /* We use to have pointer elements added here.  We cannot do that,
     964         though, since it does not work when using 32-bit definitions
     965         on 64-bit platforms and vice versa.  */
    830966    } a_un;
    831 } Elf32_auxv_t;
    832 
    833 typedef struct
    834 {
    835   long int a_type;              /* Entry type */
     967} __attribute__((packed)) Elf32_auxv_t;
     968
     969typedef struct
     970{
     971  uint64_t a_type;              /* Entry type */
    836972  union
    837973    {
    838       long int a_val;           /* Integer value */
    839       void *a_ptr;              /* Pointer value */
    840       void (*a_fcn) (void);     /* Function pointer value */
     974      uint64_t a_val;           /* Integer value */
     975      /* We use to have pointer elements added here.  We cannot do that,
     976         though, since it does not work when using 32-bit definitions
     977         on 64-bit platforms and vice versa.  */
    841978    } a_un;
    842 } Elf64_auxv_t;
     979} __attribute__((packed)) Elf64_auxv_t;
    843980
    844981/* Legal values for a_type (entry type).  */
    845982
    846 #define AT_NULL         0               /* End of vector */
    847 #define AT_IGNORE       1               /* Entry should be ignored */
    848 #define AT_EXECFD       2               /* File descriptor of program */
    849 #define AT_PHDR         3               /* Program headers for program */
    850 #define AT_PHENT        4               /* Size of program header entry */
    851 #define AT_PHNUM        5               /* Number of program headers */
    852 #define AT_PAGESZ       6               /* System page size */
    853 #define AT_BASE         7               /* Base address of interpreter */
    854 #define AT_FLAGS        8               /* Flags */
    855 #define AT_ENTRY        9               /* Entry point of program */
    856 #define AT_NOTELF       10              /* Program is not ELF */
    857 #define AT_UID          11              /* Real uid */
    858 #define AT_EUID         12              /* Effective uid */
    859 #define AT_GID          13              /* Real gid */
    860 #define AT_EGID         14              /* Effective gid */
     983#define AT_NULL         0               /* End of vector */
     984#define AT_IGNORE       1               /* Entry should be ignored */
     985#define AT_EXECFD       2               /* File descriptor of program */
     986#define AT_PHDR         3               /* Program headers for program */
     987#define AT_PHENT        4               /* Size of program header entry */
     988#define AT_PHNUM        5               /* Number of program headers */
     989#define AT_PAGESZ       6               /* System page size */
     990#define AT_BASE         7               /* Base address of interpreter */
     991#define AT_FLAGS        8               /* Flags */
     992#define AT_ENTRY        9               /* Entry point of program */
     993#define AT_NOTELF       10              /* Program is not ELF */
     994#define AT_UID          11              /* Real uid */
     995#define AT_EUID         12              /* Effective uid */
     996#define AT_GID          13              /* Real gid */
     997#define AT_EGID         14              /* Effective gid */
     998#define AT_CLKTCK       17              /* Frequency of times() */
    861999
    8621000/* Some more special a_type values describing the hardware.  */
    863 #define AT_PLATFORM     15              /* String identifying platform.  */
    864 #define AT_HWCAP        16              /* Machine dependent hints about
    865                                            processor capabilities.  */
     1001#define AT_PLATFORM     15              /* String identifying platform.  */
     1002#define AT_HWCAP        16              /* Machine dependent hints about
     1003                                           processor capabilities.  */
    8661004
    8671005/* This entry gives some information about the FPU initialization
    8681006   performed by the kernel.  */
    869 #define AT_FPUCW        17              /* Used FPU control word.  */
    870 
     1007#define AT_FPUCW        18              /* Used FPU control word.  */
     1008
     1009/* Cache block sizes.  */
     1010#define AT_DCACHEBSIZE  19              /* Data cache block size.  */
     1011#define AT_ICACHEBSIZE  20              /* Instruction cache block size.  */
     1012#define AT_UCACHEBSIZE  21              /* Unified cache block size.  */
     1013
     1014/* A special ignored value for PPC, used by the kernel to control the
     1015   interpretation of the AUXV. Must be > 16.  */
     1016#define AT_IGNOREPPC    22              /* Entry should be ignored.  */
     1017
     1018#define AT_SECURE       23              /* Boolean, was exec setuid-like?  */
     1019
     1020#define AT_BASE_PLATFORM 24             /* String identifying real platforms.*/
     1021
     1022#define AT_RANDOM       25              /* Address of 16 random bytes.  */
     1023
     1024#define AT_EXECFN       31              /* Filename of executable.  */
     1025
     1026/* Pointer to the global system page used for system calls and other
     1027   nice things.  */
     1028#define AT_SYSINFO      32
     1029#define AT_SYSINFO_EHDR 33
     1030
     1031/* Shapes of the caches.  Bits 0-3 contains associativity; bits 4-7 contains
     1032   log2 of line size; mask those to get cache size.  */
     1033#define AT_L1I_CACHESHAPE       34
     1034#define AT_L1D_CACHESHAPE       35
     1035#define AT_L2_CACHESHAPE        36
     1036#define AT_L3_CACHESHAPE        37
    8711037
    8721038/* Note section contents.  Each entry in the note section begins with
     
    8751041typedef struct
    8761042{
    877   Elf32_Word n_namesz;                  /* Length of the note's name.  */
    878   Elf32_Word n_descsz;                  /* Length of the note's descriptor.  */
    879   Elf32_Word n_type;                    /* Type of the note.  */
    880 } Elf32_Nhdr;
    881 
    882 typedef struct
    883 {
    884   Elf64_Word n_namesz;                  /* Length of the note's name.  */
    885   Elf64_Word n_descsz;                  /* Length of the note's descriptor.  */
    886   Elf64_Word n_type;                    /* Type of the note.  */
    887 } Elf64_Nhdr;
     1043  Elf32_Word n_namesz;                  /* Length of the note's name.  */
     1044  Elf32_Word n_descsz;                  /* Length of the note's descriptor.  */
     1045  Elf32_Word n_type;                    /* Type of the note.  */
     1046} __attribute__((packed)) Elf32_Nhdr;
     1047
     1048typedef struct
     1049{
     1050  Elf64_Word n_namesz;                  /* Length of the note's name.  */
     1051  Elf64_Word n_descsz;                  /* Length of the note's descriptor.  */
     1052  Elf64_Word n_type;                    /* Type of the note.  */
     1053} __attribute__((packed)) Elf64_Nhdr;
    8881054
    8891055/* Known names of notes.  */
    8901056
    8911057/* Solaris entries in the note section have this name.  */
    892 #define ELF_NOTE_SOLARIS        "SUNW Solaris"
     1058#define ELF_NOTE_SOLARIS        "SUNW Solaris"
    8931059
    8941060/* Note entries for GNU systems have this name.  */
    895 #define ELF_NOTE_GNU            "GNU"
     1061#define ELF_NOTE_GNU            "GNU"
    8961062
    8971063
     
    8991065
    9001066/* Value of descriptor (one word) is desired pagesize for the binary.  */
    901 #define ELF_NOTE_PAGESIZE_HINT  1
     1067#define ELF_NOTE_PAGESIZE_HINT  1
    9021068
    9031069
     
    9101076   word 3: subminor version of the ABI
    9111077*/
    912 #define ELF_NOTE_ABI            1
    913 
    914 /* Known OSes.  These value can appear in word 0 of an ELF_NOTE_ABI
    915    note section entry.  */
    916 #define ELF_NOTE_OS_LINUX       0
    917 #define ELF_NOTE_OS_GNU         1
    918 #define ELF_NOTE_OS_SOLARIS2    2
     1078#define NT_GNU_ABI_TAG  1
     1079#define ELF_NOTE_ABI    NT_GNU_ABI_TAG /* Old name.  */
     1080
     1081/* Known OSes.  These values can appear in word 0 of an
     1082   NT_GNU_ABI_TAG note section entry.  */
     1083#define ELF_NOTE_OS_LINUX       0
     1084#define ELF_NOTE_OS_GNU         1
     1085#define ELF_NOTE_OS_SOLARIS2    2
     1086#define ELF_NOTE_OS_FREEBSD     3
     1087
     1088/* Synthetic hwcap information.  The descriptor begins with two words:
     1089   word 0: number of entries
     1090   word 1: bitmask of enabled entries
     1091   Then follow variable-length entries, one byte followed by a
     1092   '\0'-terminated hwcap name string.  The byte gives the bit
     1093   number to test if enabled, (1U << bit) & bitmask.  */
     1094#define NT_GNU_HWCAP    2
     1095
     1096/* Build ID bits as generated by ld --build-id.
     1097   The descriptor consists of any nonzero number of bytes.  */
     1098#define NT_GNU_BUILD_ID 3
     1099
     1100/* Version note generated by GNU gold containing a version string.  */
     1101#define NT_GNU_GOLD_VERSION     4
     1102
     1103
     1104/* Move records.  */
     1105typedef struct
     1106{
     1107  Elf32_Xword m_value;          /* Symbol value.  */
     1108  Elf32_Word m_info;            /* Size and index.  */
     1109  Elf32_Word m_poffset;         /* Symbol offset.  */
     1110  Elf32_Half m_repeat;          /* Repeat count.  */
     1111  Elf32_Half m_stride;          /* Stride info.  */
     1112} __attribute__((packed)) Elf32_Move;
     1113
     1114typedef struct
     1115{
     1116  Elf64_Xword m_value;          /* Symbol value.  */
     1117  Elf64_Xword m_info;           /* Size and index.  */
     1118  Elf64_Xword m_poffset;        /* Symbol offset.  */
     1119  Elf64_Half m_repeat;          /* Repeat count.  */
     1120  Elf64_Half m_stride;          /* Stride info.  */
     1121} __attribute__((packed)) Elf64_Move;
     1122
     1123/* Macro to construct move records.  */
     1124#define ELF32_M_SYM(info)       ((info) >> 8)
     1125#define ELF32_M_SIZE(info)      ((unsigned char) (info))
     1126#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size))
     1127
     1128#define ELF64_M_SYM(info)       ELF32_M_SYM (info)
     1129#define ELF64_M_SIZE(info)      ELF32_M_SIZE (info)
     1130#define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size)
    9191131
    9201132
    9211133/* Motorola 68k specific definitions.  */
    9221134
     1135/* Values for Elf32_Ehdr.e_flags.  */
     1136#define EF_CPU32        0x00810000
     1137
    9231138/* m68k relocs.  */
    9241139
    925 #define R_68K_NONE      0               /* No reloc */
    926 #define R_68K_32        1               /* Direct 32 bit  */
    927 #define R_68K_16        2               /* Direct 16 bit  */
    928 #define R_68K_8         3               /* Direct 8 bit  */
    929 #define R_68K_PC32      4               /* PC relative 32 bit */
    930 #define R_68K_PC16      5               /* PC relative 16 bit */
    931 #define R_68K_PC8       6               /* PC relative 8 bit */
    932 #define R_68K_GOT32     7               /* 32 bit PC relative GOT entry */
    933 #define R_68K_GOT16     8               /* 16 bit PC relative GOT entry */
    934 #define R_68K_GOT8      9               /* 8 bit PC relative GOT entry */
    935 #define R_68K_GOT32O    10              /* 32 bit GOT offset */
    936 #define R_68K_GOT16O    11              /* 16 bit GOT offset */
    937 #define R_68K_GOT8O     12              /* 8 bit GOT offset */
    938 #define R_68K_PLT32     13              /* 32 bit PC relative PLT address */
    939 #define R_68K_PLT16     14              /* 16 bit PC relative PLT address */
    940 #define R_68K_PLT8      15              /* 8 bit PC relative PLT address */
    941 #define R_68K_PLT32O    16              /* 32 bit PLT offset */
    942 #define R_68K_PLT16O    17              /* 16 bit PLT offset */
    943 #define R_68K_PLT8O     18              /* 8 bit PLT offset */
    944 #define R_68K_COPY      19              /* Copy symbol at runtime */
    945 #define R_68K_GLOB_DAT  20              /* Create GOT entry */
    946 #define R_68K_JMP_SLOT  21              /* Create PLT entry */
    947 #define R_68K_RELATIVE  22              /* Adjust by program base */
     1140#define R_68K_NONE      0               /* No reloc */
     1141#define R_68K_32        1               /* Direct 32 bit  */
     1142#define R_68K_16        2               /* Direct 16 bit  */
     1143#define R_68K_8         3               /* Direct 8 bit  */
     1144#define R_68K_PC32      4               /* PC relative 32 bit */
     1145#define R_68K_PC16      5               /* PC relative 16 bit */
     1146#define R_68K_PC8       6               /* PC relative 8 bit */
     1147#define R_68K_GOT32     7               /* 32 bit PC relative GOT entry */
     1148#define R_68K_GOT16     8               /* 16 bit PC relative GOT entry */
     1149#define R_68K_GOT8      9               /* 8 bit PC relative GOT entry */
     1150#define R_68K_GOT32O    10              /* 32 bit GOT offset */
     1151#define R_68K_GOT16O    11              /* 16 bit GOT offset */
     1152#define R_68K_GOT8O     12              /* 8 bit GOT offset */
     1153#define R_68K_PLT32     13              /* 32 bit PC relative PLT address */
     1154#define R_68K_PLT16     14              /* 16 bit PC relative PLT address */
     1155#define R_68K_PLT8      15              /* 8 bit PC relative PLT address */
     1156#define R_68K_PLT32O    16              /* 32 bit PLT offset */
     1157#define R_68K_PLT16O    17              /* 16 bit PLT offset */
     1158#define R_68K_PLT8O     18              /* 8 bit PLT offset */
     1159#define R_68K_COPY      19              /* Copy symbol at runtime */
     1160#define R_68K_GLOB_DAT  20              /* Create GOT entry */
     1161#define R_68K_JMP_SLOT  21              /* Create PLT entry */
     1162#define R_68K_RELATIVE  22              /* Adjust by program base */
     1163#define R_68K_TLS_GD32      25          /* 32 bit GOT offset for GD */
     1164#define R_68K_TLS_GD16      26          /* 16 bit GOT offset for GD */
     1165#define R_68K_TLS_GD8       27          /* 8 bit GOT offset for GD */
     1166#define R_68K_TLS_LDM32     28          /* 32 bit GOT offset for LDM */
     1167#define R_68K_TLS_LDM16     29          /* 16 bit GOT offset for LDM */
     1168#define R_68K_TLS_LDM8      30          /* 8 bit GOT offset for LDM */
     1169#define R_68K_TLS_LDO32     31          /* 32 bit module-relative offset */
     1170#define R_68K_TLS_LDO16     32          /* 16 bit module-relative offset */
     1171#define R_68K_TLS_LDO8      33          /* 8 bit module-relative offset */
     1172#define R_68K_TLS_IE32      34          /* 32 bit GOT offset for IE */
     1173#define R_68K_TLS_IE16      35          /* 16 bit GOT offset for IE */
     1174#define R_68K_TLS_IE8       36          /* 8 bit GOT offset for IE */
     1175#define R_68K_TLS_LE32      37          /* 32 bit offset relative to
     1176                                           static TLS block */
     1177#define R_68K_TLS_LE16      38          /* 16 bit offset relative to
     1178                                           static TLS block */
     1179#define R_68K_TLS_LE8       39          /* 8 bit offset relative to
     1180                                           static TLS block */
     1181#define R_68K_TLS_DTPMOD32  40          /* 32 bit module number */
     1182#define R_68K_TLS_DTPREL32  41          /* 32 bit module-relative offset */
     1183#define R_68K_TLS_TPREL32   42          /* 32 bit TP-relative offset */
    9481184/* Keep this the last entry.  */
    949 #define R_68K_NUM       23
     1185#define R_68K_NUM       43
    9501186
    9511187/* Intel 80386 specific definitions.  */
     
    9531189/* i386 relocs.  */
    9541190
    955 #define R_386_NONE      0               /* No reloc */
    956 #define R_386_32        1               /* Direct 32 bit  */
    957 #define R_386_PC32      2               /* PC relative 32 bit */
    958 #define R_386_GOT32     3               /* 32 bit GOT entry */
    959 #define R_386_PLT32     4               /* 32 bit PLT address */
    960 #define R_386_COPY      5               /* Copy symbol at runtime */
    961 #define R_386_GLOB_DAT  6               /* Create GOT entry */
    962 #define R_386_JMP_SLOT  7               /* Create PLT entry */
    963 #define R_386_RELATIVE  8               /* Adjust by program base */
    964 #define R_386_GOTOFF    9               /* 32 bit offset to GOT */
    965 #define R_386_GOTPC     10              /* 32 bit PC relative offset to GOT */
     1191#define R_386_NONE         0            /* No reloc */
     1192#define R_386_32           1            /* Direct 32 bit  */
     1193#define R_386_PC32         2            /* PC relative 32 bit */
     1194#define R_386_GOT32        3            /* 32 bit GOT entry */
     1195#define R_386_PLT32        4            /* 32 bit PLT address */
     1196#define R_386_COPY         5            /* Copy symbol at runtime */
     1197#define R_386_GLOB_DAT     6            /* Create GOT entry */
     1198#define R_386_JMP_SLOT     7            /* Create PLT entry */
     1199#define R_386_RELATIVE     8            /* Adjust by program base */
     1200#define R_386_GOTOFF       9            /* 32 bit offset to GOT */
     1201#define R_386_GOTPC        10           /* 32 bit PC relative offset to GOT */
     1202#define R_386_32PLT        11
     1203#define R_386_TLS_TPOFF    14           /* Offset in static TLS block */
     1204#define R_386_TLS_IE       15           /* Address of GOT entry for static TLS
     1205                                           block offset */
     1206#define R_386_TLS_GOTIE    16           /* GOT entry for static TLS block
     1207                                           offset */
     1208#define R_386_TLS_LE       17           /* Offset relative to static TLS
     1209                                           block */
     1210#define R_386_TLS_GD       18           /* Direct 32 bit for GNU version of
     1211                                           general dynamic thread local data */
     1212#define R_386_TLS_LDM      19           /* Direct 32 bit for GNU version of
     1213                                           local dynamic thread local data
     1214                                           in LE code */
     1215#define R_386_16           20
     1216#define R_386_PC16         21
     1217#define R_386_8            22
     1218#define R_386_PC8          23
     1219#define R_386_TLS_GD_32    24           /* Direct 32 bit for general dynamic
     1220                                           thread local data */
     1221#define R_386_TLS_GD_PUSH  25           /* Tag for pushl in GD TLS code */
     1222#define R_386_TLS_GD_CALL  26           /* Relocation for call to
     1223                                           __tls_get_addr() */
     1224#define R_386_TLS_GD_POP   27           /* Tag for popl in GD TLS code */
     1225#define R_386_TLS_LDM_32   28           /* Direct 32 bit for local dynamic
     1226                                           thread local data in LE code */
     1227#define R_386_TLS_LDM_PUSH 29           /* Tag for pushl in LDM TLS code */
     1228#define R_386_TLS_LDM_CALL 30           /* Relocation for call to
     1229                                           __tls_get_addr() in LDM code */
     1230#define R_386_TLS_LDM_POP  31           /* Tag for popl in LDM TLS code */
     1231#define R_386_TLS_LDO_32   32           /* Offset relative to TLS block */
     1232#define R_386_TLS_IE_32    33           /* GOT entry for negated static TLS
     1233                                           block offset */
     1234#define R_386_TLS_LE_32    34           /* Negated offset relative to static
     1235                                           TLS block */
     1236#define R_386_TLS_DTPMOD32 35           /* ID of module containing symbol */
     1237#define R_386_TLS_DTPOFF32 36           /* Offset in TLS block */
     1238#define R_386_TLS_TPOFF32  37           /* Negated offset in static TLS block */
     1239/* 38? */
     1240#define R_386_TLS_GOTDESC  39           /* GOT offset for TLS descriptor.  */
     1241#define R_386_TLS_DESC_CALL 40          /* Marker of call through TLS
     1242                                           descriptor for
     1243                                           relaxation.  */
     1244#define R_386_TLS_DESC     41           /* TLS descriptor containing
     1245                                           pointer to code and to
     1246                                           argument, returning the TLS
     1247                                           offset for the symbol.  */
     1248#define R_386_IRELATIVE    42           /* Adjust indirectly by program base */
     1249#define R_386_GOT32X       43           /* 32 bit GOT entry, relaxable */
    9661250/* Keep this the last entry.  */
    967 #define R_386_NUM       11
    968 
    969 /* TCC-specific 16-bit relocs. */
    970 #define R_386_16        12              /* Direct 16 bit  */
    971 #define R_386_PC16      13              /* PC relative 16 bit */
     1251#define R_386_NUM          44
    9721252
    9731253/* SUN SPARC specific definitions.  */
    9741254
     1255/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
     1256
     1257#define STT_SPARC_REGISTER      13      /* Global register reserved to app. */
     1258
    9751259/* Values for Elf64_Ehdr.e_flags.  */
    9761260
    977 #define EF_SPARCV9_MM           3
    978 #define EF_SPARCV9_TSO          0
    979 #define EF_SPARCV9_PSO          1
    980 #define EF_SPARCV9_RMO          2
    981 #define EF_SPARC_EXT_MASK       0xFFFF00
    982 #define EF_SPARC_SUN_US1        0x000200
    983 #define EF_SPARC_HAL_R1         0x000400
     1261#define EF_SPARCV9_MM           3
     1262#define EF_SPARCV9_TSO          0
     1263#define EF_SPARCV9_PSO          1
     1264#define EF_SPARCV9_RMO          2
     1265#define EF_SPARC_LEDATA         0x800000 /* little endian data */
     1266#define EF_SPARC_EXT_MASK       0xFFFF00
     1267#define EF_SPARC_32PLUS         0x000100 /* generic V8+ features */
     1268#define EF_SPARC_SUN_US1        0x000200 /* Sun UltraSPARC1 extensions */
     1269#define EF_SPARC_HAL_R1         0x000400 /* HAL R1 extensions */
     1270#define EF_SPARC_SUN_US3        0x000800 /* Sun UltraSPARCIII extensions */
    9841271
    9851272/* SPARC relocs.  */
    9861273
    987 #define R_SPARC_NONE    0               /* No reloc */
    988 #define R_SPARC_8       1               /* Direct 8 bit */
    989 #define R_SPARC_16      2               /* Direct 16 bit */
    990 #define R_SPARC_32      3               /* Direct 32 bit */
    991 #define R_SPARC_DISP8   4               /* PC relative 8 bit */
    992 #define R_SPARC_DISP16  5               /* PC relative 16 bit */
    993 #define R_SPARC_DISP32  6               /* PC relative 32 bit */
    994 #define R_SPARC_WDISP30 7               /* PC relative 30 bit shifted */
    995 #define R_SPARC_WDISP22 8               /* PC relative 22 bit shifted */
    996 #define R_SPARC_HI22    9               /* High 22 bit */
    997 #define R_SPARC_22      10              /* Direct 22 bit */
    998 #define R_SPARC_13      11              /* Direct 13 bit */
    999 #define R_SPARC_LO10    12              /* Truncated 10 bit */
    1000 #define R_SPARC_GOT10   13              /* Truncated 10 bit GOT entry */
    1001 #define R_SPARC_GOT13   14              /* 13 bit GOT entry */
    1002 #define R_SPARC_GOT22   15              /* 22 bit GOT entry shifted */
    1003 #define R_SPARC_PC10    16              /* PC relative 10 bit truncated */
    1004 #define R_SPARC_PC22    17              /* PC relative 22 bit shifted */
    1005 #define R_SPARC_WPLT30  18              /* 30 bit PC relative PLT address */
    1006 #define R_SPARC_COPY    19              /* Copy symbol at runtime */
    1007 #define R_SPARC_GLOB_DAT 20             /* Create GOT entry */
    1008 #define R_SPARC_JMP_SLOT 21             /* Create PLT entry */
    1009 #define R_SPARC_RELATIVE 22             /* Adjust by program base */
    1010 #define R_SPARC_UA32    23              /* Direct 32 bit unaligned */
     1274#define R_SPARC_NONE            0       /* No reloc */
     1275#define R_SPARC_8               1       /* Direct 8 bit */
     1276#define R_SPARC_16              2       /* Direct 16 bit */
     1277#define R_SPARC_32              3       /* Direct 32 bit */
     1278#define R_SPARC_DISP8           4       /* PC relative 8 bit */
     1279#define R_SPARC_DISP16          5       /* PC relative 16 bit */
     1280#define R_SPARC_DISP32          6       /* PC relative 32 bit */
     1281#define R_SPARC_WDISP30         7       /* PC relative 30 bit shifted */
     1282#define R_SPARC_WDISP22         8       /* PC relative 22 bit shifted */
     1283#define R_SPARC_HI22            9       /* High 22 bit */
     1284#define R_SPARC_22              10      /* Direct 22 bit */
     1285#define R_SPARC_13              11      /* Direct 13 bit */
     1286#define R_SPARC_LO10            12      /* Truncated 10 bit */
     1287#define R_SPARC_GOT10           13      /* Truncated 10 bit GOT entry */
     1288#define R_SPARC_GOT13           14      /* 13 bit GOT entry */
     1289#define R_SPARC_GOT22           15      /* 22 bit GOT entry shifted */
     1290#define R_SPARC_PC10            16      /* PC relative 10 bit truncated */
     1291#define R_SPARC_PC22            17      /* PC relative 22 bit shifted */
     1292#define R_SPARC_WPLT30          18      /* 30 bit PC relative PLT address */
     1293#define R_SPARC_COPY            19      /* Copy symbol at runtime */
     1294#define R_SPARC_GLOB_DAT        20      /* Create GOT entry */
     1295#define R_SPARC_JMP_SLOT        21      /* Create PLT entry */
     1296#define R_SPARC_RELATIVE        22      /* Adjust by program base */
     1297#define R_SPARC_UA32            23      /* Direct 32 bit unaligned */
    10111298
    10121299/* Additional Sparc64 relocs.  */
    10131300
    1014 #define R_SPARC_PLT32   24              /* Direct 32 bit ref to PLT entry */
    1015 #define R_SPARC_HIPLT22 25              /* High 22 bit PLT entry */
    1016 #define R_SPARC_LOPLT10 26              /* Truncated 10 bit PLT entry */
    1017 #define R_SPARC_PCPLT32 27              /* PC rel 32 bit ref to PLT entry */
    1018 #define R_SPARC_PCPLT22 28              /* PC rel high 22 bit PLT entry */
    1019 #define R_SPARC_PCPLT10 29              /* PC rel trunc 10 bit PLT entry */
    1020 #define R_SPARC_10      30              /* Direct 10 bit */
    1021 #define R_SPARC_11      31              /* Direct 11 bit */
    1022 #define R_SPARC_64      32              /* Direct 64 bit */
    1023 #define R_SPARC_OLO10   33              /* ?? */
    1024 #define R_SPARC_HH22    34              /* Top 22 bits of direct 64 bit */
    1025 #define R_SPARC_HM10    35              /* High middle 10 bits of ... */
    1026 #define R_SPARC_LM22    36              /* Low middle 22 bits of ... */
    1027 #define R_SPARC_PC_HH22 37              /* Top 22 bits of pc rel 64 bit */
    1028 #define R_SPARC_PC_HM10 38              /* High middle 10 bit of ... */
    1029 #define R_SPARC_PC_LM22 39              /* Low miggle 22 bits of ... */
    1030 #define R_SPARC_WDISP16 40              /* PC relative 16 bit shifted */
    1031 #define R_SPARC_WDISP19 41              /* PC relative 19 bit shifted */
    1032 #define R_SPARC_7       43              /* Direct 7 bit */
    1033 #define R_SPARC_5       44              /* Direct 5 bit */
    1034 #define R_SPARC_6       45              /* Direct 6 bit */
    1035 #define R_SPARC_DISP64  46              /* PC relative 64 bit */
    1036 #define R_SPARC_PLT64   47              /* Direct 64 bit ref to PLT entry */
    1037 #define R_SPARC_HIX22   48              /* High 22 bit complemented */
    1038 #define R_SPARC_LOX10   49              /* Truncated 11 bit complemented */
    1039 #define R_SPARC_H44     50              /* Direct high 12 of 44 bit */
    1040 #define R_SPARC_M44     51              /* Direct mid 22 of 44 bit */
    1041 #define R_SPARC_L44     52              /* Direct low 10 of 44 bit */
    1042 #define R_SPARC_REGISTER 53             /* Global register usage */
    1043 #define R_SPARC_UA64    54              /* Direct 64 bit unaligned */
    1044 #define R_SPARC_UA16    55              /* Direct 16 bit unaligned */
     1301#define R_SPARC_PLT32           24      /* Direct 32 bit ref to PLT entry */
     1302#define R_SPARC_HIPLT22         25      /* High 22 bit PLT entry */
     1303#define R_SPARC_LOPLT10         26      /* Truncated 10 bit PLT entry */
     1304#define R_SPARC_PCPLT32         27      /* PC rel 32 bit ref to PLT entry */
     1305#define R_SPARC_PCPLT22         28      /* PC rel high 22 bit PLT entry */
     1306#define R_SPARC_PCPLT10         29      /* PC rel trunc 10 bit PLT entry */
     1307#define R_SPARC_10              30      /* Direct 10 bit */
     1308#define R_SPARC_11              31      /* Direct 11 bit */
     1309#define R_SPARC_64              32      /* Direct 64 bit */
     1310#define R_SPARC_OLO10           33      /* 10bit with secondary 13bit addend */
     1311#define R_SPARC_HH22            34      /* Top 22 bits of direct 64 bit */
     1312#define R_SPARC_HM10            35      /* High middle 10 bits of ... */
     1313#define R_SPARC_LM22            36      /* Low middle 22 bits of ... */
     1314#define R_SPARC_PC_HH22         37      /* Top 22 bits of pc rel 64 bit */
     1315#define R_SPARC_PC_HM10         38      /* High middle 10 bit of ... */
     1316#define R_SPARC_PC_LM22         39      /* Low middle 22 bits of ... */
     1317#define R_SPARC_WDISP16         40      /* PC relative 16 bit shifted */
     1318#define R_SPARC_WDISP19         41      /* PC relative 19 bit shifted */
     1319#define R_SPARC_GLOB_JMP        42      /* was part of v9 ABI but was removed */
     1320#define R_SPARC_7               43      /* Direct 7 bit */
     1321#define R_SPARC_5               44      /* Direct 5 bit */
     1322#define R_SPARC_6               45      /* Direct 6 bit */
     1323#define R_SPARC_DISP64          46      /* PC relative 64 bit */
     1324#define R_SPARC_PLT64           47      /* Direct 64 bit ref to PLT entry */
     1325#define R_SPARC_HIX22           48      /* High 22 bit complemented */
     1326#define R_SPARC_LOX10           49      /* Truncated 11 bit complemented */
     1327#define R_SPARC_H44             50      /* Direct high 12 of 44 bit */
     1328#define R_SPARC_M44             51      /* Direct mid 22 of 44 bit */
     1329#define R_SPARC_L44             52      /* Direct low 10 of 44 bit */
     1330#define R_SPARC_REGISTER        53      /* Global register usage */
     1331#define R_SPARC_UA64            54      /* Direct 64 bit unaligned */
     1332#define R_SPARC_UA16            55      /* Direct 16 bit unaligned */
     1333#define R_SPARC_TLS_GD_HI22     56
     1334#define R_SPARC_TLS_GD_LO10     57
     1335#define R_SPARC_TLS_GD_ADD      58
     1336#define R_SPARC_TLS_GD_CALL     59
     1337#define R_SPARC_TLS_LDM_HI22    60
     1338#define R_SPARC_TLS_LDM_LO10    61
     1339#define R_SPARC_TLS_LDM_ADD     62
     1340#define R_SPARC_TLS_LDM_CALL    63
     1341#define R_SPARC_TLS_LDO_HIX22   64
     1342#define R_SPARC_TLS_LDO_LOX10   65
     1343#define R_SPARC_TLS_LDO_ADD     66
     1344#define R_SPARC_TLS_IE_HI22     67
     1345#define R_SPARC_TLS_IE_LO10     68
     1346#define R_SPARC_TLS_IE_LD       69
     1347#define R_SPARC_TLS_IE_LDX      70
     1348#define R_SPARC_TLS_IE_ADD      71
     1349#define R_SPARC_TLS_LE_HIX22    72
     1350#define R_SPARC_TLS_LE_LOX10    73
     1351#define R_SPARC_TLS_DTPMOD32    74
     1352#define R_SPARC_TLS_DTPMOD64    75
     1353#define R_SPARC_TLS_DTPOFF32    76
     1354#define R_SPARC_TLS_DTPOFF64    77
     1355#define R_SPARC_TLS_TPOFF32     78
     1356#define R_SPARC_TLS_TPOFF64     79
     1357#define R_SPARC_GOTDATA_HIX22   80
     1358#define R_SPARC_GOTDATA_LOX10   81
     1359#define R_SPARC_GOTDATA_OP_HIX22        82
     1360#define R_SPARC_GOTDATA_OP_LOX10        83
     1361#define R_SPARC_GOTDATA_OP      84
     1362#define R_SPARC_H34             85
     1363#define R_SPARC_SIZE32          86
     1364#define R_SPARC_SIZE64          87
     1365#define R_SPARC_WDISP10         88
     1366#define R_SPARC_JMP_IREL        248
     1367#define R_SPARC_IRELATIVE       249
     1368#define R_SPARC_GNU_VTINHERIT   250
     1369#define R_SPARC_GNU_VTENTRY     251
     1370#define R_SPARC_REV32           252
    10451371/* Keep this the last entry.  */
    1046 #define R_SPARC_NUM     56
     1372#define R_SPARC_NUM             253
     1373
     1374/* For Sparc64, legal values for d_tag of Elf64_Dyn.  */
     1375
     1376#define DT_SPARC_REGISTER 0x70000001
     1377#define DT_SPARC_NUM    2
     1378
     1379/* MIPS R3000 specific definitions.  */
     1380
     1381/* Legal values for e_flags field of Elf32_Ehdr.  */
     1382
     1383#define EF_MIPS_NOREORDER   1           /* A .noreorder directive was used */
     1384#define EF_MIPS_PIC         2           /* Contains PIC code */
     1385#define EF_MIPS_CPIC        4           /* Uses PIC calling sequence */
     1386#define EF_MIPS_XGOT        8
     1387#define EF_MIPS_64BIT_WHIRL 16
     1388#define EF_MIPS_ABI2        32
     1389#define EF_MIPS_ABI_ON32    64
     1390#define EF_MIPS_ARCH        0xf0000000  /* MIPS architecture level */
     1391
     1392/* Legal values for MIPS architecture level.  */
     1393
     1394#define EF_MIPS_ARCH_1      0x00000000  /* -mips1 code.  */
     1395#define EF_MIPS_ARCH_2      0x10000000  /* -mips2 code.  */
     1396#define EF_MIPS_ARCH_3      0x20000000  /* -mips3 code.  */
     1397#define EF_MIPS_ARCH_4      0x30000000  /* -mips4 code.  */
     1398#define EF_MIPS_ARCH_5      0x40000000  /* -mips5 code.  */
     1399#define EF_MIPS_ARCH_32     0x60000000  /* MIPS32 code.  */
     1400#define EF_MIPS_ARCH_64     0x70000000  /* MIPS64 code.  */
     1401
     1402/* The following are non-official names and should not be used.  */
     1403
     1404#define E_MIPS_ARCH_1     0x00000000    /* -mips1 code.  */
     1405#define E_MIPS_ARCH_2     0x10000000    /* -mips2 code.  */
     1406#define E_MIPS_ARCH_3     0x20000000    /* -mips3 code.  */
     1407#define E_MIPS_ARCH_4     0x30000000    /* -mips4 code.  */
     1408#define E_MIPS_ARCH_5     0x40000000    /* -mips5 code.  */
     1409#define E_MIPS_ARCH_32    0x60000000    /* MIPS32 code.  */
     1410#define E_MIPS_ARCH_64    0x70000000    /* MIPS64 code.  */
     1411
     1412/* Special section indices.  */
     1413
     1414#define SHN_MIPS_ACOMMON    0xff00      /* Allocated common symbols */
     1415#define SHN_MIPS_TEXT       0xff01      /* Allocated test symbols.  */
     1416#define SHN_MIPS_DATA       0xff02      /* Allocated data symbols.  */
     1417#define SHN_MIPS_SCOMMON    0xff03      /* Small common symbols */
     1418#define SHN_MIPS_SUNDEFINED 0xff04      /* Small undefined symbols */
     1419
     1420/* Legal values for sh_type field of Elf32_Shdr.  */
     1421
     1422#define SHT_MIPS_LIBLIST       0x70000000 /* Shared objects used in link */
     1423#define SHT_MIPS_MSYM          0x70000001
     1424#define SHT_MIPS_CONFLICT      0x70000002 /* Conflicting symbols */
     1425#define SHT_MIPS_GPTAB         0x70000003 /* Global data area sizes */
     1426#define SHT_MIPS_UCODE         0x70000004 /* Reserved for SGI/MIPS compilers */
     1427#define SHT_MIPS_DEBUG         0x70000005 /* MIPS ECOFF debugging information*/
     1428#define SHT_MIPS_REGINFO       0x70000006 /* Register usage information */
     1429#define SHT_MIPS_PACKAGE       0x70000007
     1430#define SHT_MIPS_PACKSYM       0x70000008
     1431#define SHT_MIPS_RELD          0x70000009
     1432#define SHT_MIPS_IFACE         0x7000000b
     1433#define SHT_MIPS_CONTENT       0x7000000c
     1434#define SHT_MIPS_OPTIONS       0x7000000d /* Miscellaneous options.  */
     1435#define SHT_MIPS_SHDR          0x70000010
     1436#define SHT_MIPS_FDESC         0x70000011
     1437#define SHT_MIPS_EXTSYM        0x70000012
     1438#define SHT_MIPS_DENSE         0x70000013
     1439#define SHT_MIPS_PDESC         0x70000014
     1440#define SHT_MIPS_LOCSYM        0x70000015
     1441#define SHT_MIPS_AUXSYM        0x70000016
     1442#define SHT_MIPS_OPTSYM        0x70000017
     1443#define SHT_MIPS_LOCSTR        0x70000018
     1444#define SHT_MIPS_LINE          0x70000019
     1445#define SHT_MIPS_RFDESC        0x7000001a
     1446#define SHT_MIPS_DELTASYM      0x7000001b
     1447#define SHT_MIPS_DELTAINST     0x7000001c
     1448#define SHT_MIPS_DELTACLASS    0x7000001d
     1449#define SHT_MIPS_DWARF         0x7000001e /* DWARF debugging information.  */
     1450#define SHT_MIPS_DELTADECL     0x7000001f
     1451#define SHT_MIPS_SYMBOL_LIB    0x70000020
     1452#define SHT_MIPS_EVENTS        0x70000021 /* Event section.  */
     1453#define SHT_MIPS_TRANSLATE     0x70000022
     1454#define SHT_MIPS_PIXIE         0x70000023
     1455#define SHT_MIPS_XLATE         0x70000024
     1456#define SHT_MIPS_XLATE_DEBUG   0x70000025
     1457#define SHT_MIPS_WHIRL         0x70000026
     1458#define SHT_MIPS_EH_REGION     0x70000027
     1459#define SHT_MIPS_XLATE_OLD     0x70000028
     1460#define SHT_MIPS_PDR_EXCEPTION 0x70000029
     1461
     1462/* Legal values for sh_flags field of Elf32_Shdr.  */
     1463
     1464#define SHF_MIPS_GPREL   0x10000000     /* Must be part of global data area */
     1465#define SHF_MIPS_MERGE   0x20000000
     1466#define SHF_MIPS_ADDR    0x40000000
     1467#define SHF_MIPS_STRINGS 0x80000000
     1468#define SHF_MIPS_NOSTRIP 0x08000000
     1469#define SHF_MIPS_LOCAL   0x04000000
     1470#define SHF_MIPS_NAMES   0x02000000
     1471#define SHF_MIPS_NODUPE  0x01000000
     1472
     1473
     1474/* Symbol tables.  */
     1475
     1476/* MIPS specific values for `st_other'.  */
     1477#define STO_MIPS_DEFAULT                0x0
     1478#define STO_MIPS_INTERNAL               0x1
     1479#define STO_MIPS_HIDDEN                 0x2
     1480#define STO_MIPS_PROTECTED              0x3
     1481#define STO_MIPS_PLT                    0x8
     1482#define STO_MIPS_SC_ALIGN_UNUSED        0xff
     1483
     1484/* MIPS specific values for `st_info'.  */
     1485#define STB_MIPS_SPLIT_COMMON           13
     1486
     1487/* Entries found in sections of type SHT_MIPS_GPTAB.  */
     1488
     1489typedef union
     1490{
     1491  struct
     1492    {
     1493      Elf32_Word gt_current_g_value;    /* -G value used for compilation */
     1494      Elf32_Word gt_unused;             /* Not used */
     1495    } gt_header;                        /* First entry in section */
     1496  struct
     1497    {
     1498      Elf32_Word gt_g_value;            /* If this value were used for -G */
     1499      Elf32_Word gt_bytes;              /* This many bytes would be used */
     1500    } gt_entry;                         /* Subsequent entries in section */
     1501} __attribute__((packed)) Elf32_gptab;
     1502
     1503/* Entry found in sections of type SHT_MIPS_REGINFO.  */
     1504
     1505typedef struct
     1506{
     1507  Elf32_Word    ri_gprmask;             /* General registers used */
     1508  Elf32_Word    ri_cprmask[4];          /* Coprocessor registers used */
     1509  Elf32_Sword   ri_gp_value;            /* $gp register value */
     1510} __attribute__((packed)) Elf32_RegInfo;
     1511
     1512/* Entries found in sections of type SHT_MIPS_OPTIONS.  */
     1513
     1514typedef struct
     1515{
     1516  unsigned char kind;           /* Determines interpretation of the
     1517                                   variable part of descriptor.  */
     1518  unsigned char size;           /* Size of descriptor, including header.  */
     1519  Elf32_Section section;        /* Section header index of section affected,
     1520                                   0 for global options.  */
     1521  Elf32_Word info;              /* Kind-specific information.  */
     1522} __attribute__((packed)) Elf_Options;
     1523
     1524/* Values for `kind' field in Elf_Options.  */
     1525
     1526#define ODK_NULL        0       /* Undefined.  */
     1527#define ODK_REGINFO     1       /* Register usage information.  */
     1528#define ODK_EXCEPTIONS  2       /* Exception processing options.  */
     1529#define ODK_PAD         3       /* Section padding options.  */
     1530#define ODK_HWPATCH     4       /* Hardware workarounds performed */
     1531#define ODK_FILL        5       /* record the fill value used by the linker. */
     1532#define ODK_TAGS        6       /* reserve space for desktop tools to write. */
     1533#define ODK_HWAND       7       /* HW workarounds.  'AND' bits when merging. */
     1534#define ODK_HWOR        8       /* HW workarounds.  'OR' bits when merging.  */
     1535
     1536/* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries.  */
     1537
     1538#define OEX_FPU_MIN     0x1f    /* FPE's which MUST be enabled.  */
     1539#define OEX_FPU_MAX     0x1f00  /* FPE's which MAY be enabled.  */
     1540#define OEX_PAGE0       0x10000 /* page zero must be mapped.  */
     1541#define OEX_SMM         0x20000 /* Force sequential memory mode?  */
     1542#define OEX_FPDBUG      0x40000 /* Force floating point debug mode?  */
     1543#define OEX_PRECISEFP   OEX_FPDBUG
     1544#define OEX_DISMISS     0x80000 /* Dismiss invalid address faults?  */
     1545
     1546#define OEX_FPU_INVAL   0x10
     1547#define OEX_FPU_DIV0    0x08
     1548#define OEX_FPU_OFLO    0x04
     1549#define OEX_FPU_UFLO    0x02
     1550#define OEX_FPU_INEX    0x01
     1551
     1552/* Masks for `info' in Elf_Options for an ODK_HWPATCH entry.  */
     1553
     1554#define OHW_R4KEOP      0x1     /* R4000 end-of-page patch.  */
     1555#define OHW_R8KPFETCH   0x2     /* may need R8000 prefetch patch.  */
     1556#define OHW_R5KEOP      0x4     /* R5000 end-of-page patch.  */
     1557#define OHW_R5KCVTL     0x8     /* R5000 cvt.[ds].l bug.  clean=1.  */
     1558
     1559#define OPAD_PREFIX     0x1
     1560#define OPAD_POSTFIX    0x2
     1561#define OPAD_SYMBOL     0x4
     1562
     1563/* Entry found in `.options' section.  */
     1564
     1565typedef struct
     1566{
     1567  Elf32_Word hwp_flags1;        /* Extra flags.  */
     1568  Elf32_Word hwp_flags2;        /* Extra flags.  */
     1569} __attribute__((packed)) Elf_Options_Hw;
     1570
     1571/* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries.  */
     1572
     1573#define OHWA0_R4KEOP_CHECKED    0x00000001
     1574#define OHWA1_R4KEOP_CLEAN      0x00000002
     1575
     1576/* MIPS relocs.  */
     1577
     1578#define R_MIPS_NONE             0       /* No reloc */
     1579#define R_MIPS_16               1       /* Direct 16 bit */
     1580#define R_MIPS_32               2       /* Direct 32 bit */
     1581#define R_MIPS_REL32            3       /* PC relative 32 bit */
     1582#define R_MIPS_26               4       /* Direct 26 bit shifted */
     1583#define R_MIPS_HI16             5       /* High 16 bit */
     1584#define R_MIPS_LO16             6       /* Low 16 bit */
     1585#define R_MIPS_GPREL16          7       /* GP relative 16 bit */
     1586#define R_MIPS_LITERAL          8       /* 16 bit literal entry */
     1587#define R_MIPS_GOT16            9       /* 16 bit GOT entry */
     1588#define R_MIPS_PC16             10      /* PC relative 16 bit */
     1589#define R_MIPS_CALL16           11      /* 16 bit GOT entry for function */
     1590#define R_MIPS_GPREL32          12      /* GP relative 32 bit */
     1591
     1592#define R_MIPS_SHIFT5           16
     1593#define R_MIPS_SHIFT6           17
     1594#define R_MIPS_64               18
     1595#define R_MIPS_GOT_DISP         19
     1596#define R_MIPS_GOT_PAGE         20
     1597#define R_MIPS_GOT_OFST         21
     1598#define R_MIPS_GOT_HI16         22
     1599#define R_MIPS_GOT_LO16         23
     1600#define R_MIPS_SUB              24
     1601#define R_MIPS_INSERT_A         25
     1602#define R_MIPS_INSERT_B         26
     1603#define R_MIPS_DELETE           27
     1604#define R_MIPS_HIGHER           28
     1605#define R_MIPS_HIGHEST          29
     1606#define R_MIPS_CALL_HI16        30
     1607#define R_MIPS_CALL_LO16        31
     1608#define R_MIPS_SCN_DISP         32
     1609#define R_MIPS_REL16            33
     1610#define R_MIPS_ADD_IMMEDIATE    34
     1611#define R_MIPS_PJUMP            35
     1612#define R_MIPS_RELGOT           36
     1613#define R_MIPS_JALR             37
     1614#define R_MIPS_TLS_DTPMOD32     38      /* Module number 32 bit */
     1615#define R_MIPS_TLS_DTPREL32     39      /* Module-relative offset 32 bit */
     1616#define R_MIPS_TLS_DTPMOD64     40      /* Module number 64 bit */
     1617#define R_MIPS_TLS_DTPREL64     41      /* Module-relative offset 64 bit */
     1618#define R_MIPS_TLS_GD           42      /* 16 bit GOT offset for GD */
     1619#define R_MIPS_TLS_LDM          43      /* 16 bit GOT offset for LDM */
     1620#define R_MIPS_TLS_DTPREL_HI16  44      /* Module-relative offset, high 16 bits */
     1621#define R_MIPS_TLS_DTPREL_LO16  45      /* Module-relative offset, low 16 bits */
     1622#define R_MIPS_TLS_GOTTPREL     46      /* 16 bit GOT offset for IE */
     1623#define R_MIPS_TLS_TPREL32      47      /* TP-relative offset, 32 bit */
     1624#define R_MIPS_TLS_TPREL64      48      /* TP-relative offset, 64 bit */
     1625#define R_MIPS_TLS_TPREL_HI16   49      /* TP-relative offset, high 16 bits */
     1626#define R_MIPS_TLS_TPREL_LO16   50      /* TP-relative offset, low 16 bits */
     1627#define R_MIPS_GLOB_DAT         51
     1628#define R_MIPS_COPY             126
     1629#define R_MIPS_JUMP_SLOT        127
     1630/* Keep this the last entry.  */
     1631#define R_MIPS_NUM              128
     1632
     1633/* Legal values for p_type field of Elf32_Phdr.  */
     1634
     1635#define PT_MIPS_REGINFO 0x70000000      /* Register usage information */
     1636#define PT_MIPS_RTPROC  0x70000001      /* Runtime procedure table. */
     1637#define PT_MIPS_OPTIONS 0x70000002
     1638
     1639/* Special program header types.  */
     1640
     1641#define PF_MIPS_LOCAL   0x10000000
     1642
     1643/* Legal values for d_tag field of Elf32_Dyn.  */
     1644
     1645#define DT_MIPS_RLD_VERSION  0x70000001 /* Runtime linker interface version */
     1646#define DT_MIPS_TIME_STAMP   0x70000002 /* Timestamp */
     1647#define DT_MIPS_ICHECKSUM    0x70000003 /* Checksum */
     1648#define DT_MIPS_IVERSION     0x70000004 /* Version string (string tbl index) */
     1649#define DT_MIPS_FLAGS        0x70000005 /* Flags */
     1650#define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */
     1651#define DT_MIPS_MSYM         0x70000007
     1652#define DT_MIPS_CONFLICT     0x70000008 /* Address of CONFLICT section */
     1653#define DT_MIPS_LIBLIST      0x70000009 /* Address of LIBLIST section */
     1654#define DT_MIPS_LOCAL_GOTNO  0x7000000a /* Number of local GOT entries */
     1655#define DT_MIPS_CONFLICTNO   0x7000000b /* Number of CONFLICT entries */
     1656#define DT_MIPS_LIBLISTNO    0x70000010 /* Number of LIBLIST entries */
     1657#define DT_MIPS_SYMTABNO     0x70000011 /* Number of DYNSYM entries */
     1658#define DT_MIPS_UNREFEXTNO   0x70000012 /* First external DYNSYM */
     1659#define DT_MIPS_GOTSYM       0x70000013 /* First GOT entry in DYNSYM */
     1660#define DT_MIPS_HIPAGENO     0x70000014 /* Number of GOT page table entries */
     1661#define DT_MIPS_RLD_MAP      0x70000016 /* Address of run time loader map.  */
     1662#define DT_MIPS_DELTA_CLASS  0x70000017 /* Delta C++ class definition.  */
     1663#define DT_MIPS_DELTA_CLASS_NO    0x70000018 /* Number of entries in
     1664                                                DT_MIPS_DELTA_CLASS.  */
     1665#define DT_MIPS_DELTA_INSTANCE    0x70000019 /* Delta C++ class instances.  */
     1666#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
     1667                                                DT_MIPS_DELTA_INSTANCE.  */
     1668#define DT_MIPS_DELTA_RELOC  0x7000001b /* Delta relocations.  */
     1669#define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
     1670                                             DT_MIPS_DELTA_RELOC.  */
     1671#define DT_MIPS_DELTA_SYM    0x7000001d /* Delta symbols that Delta
     1672                                           relocations refer to.  */
     1673#define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
     1674                                           DT_MIPS_DELTA_SYM.  */
     1675#define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
     1676                                             class declaration.  */
     1677#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
     1678                                                DT_MIPS_DELTA_CLASSSYM.  */
     1679#define DT_MIPS_CXX_FLAGS    0x70000022 /* Flags indicating for C++ flavor.  */
     1680#define DT_MIPS_PIXIE_INIT   0x70000023
     1681#define DT_MIPS_SYMBOL_LIB   0x70000024
     1682#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
     1683#define DT_MIPS_LOCAL_GOTIDX 0x70000026
     1684#define DT_MIPS_HIDDEN_GOTIDX 0x70000027
     1685#define DT_MIPS_PROTECTED_GOTIDX 0x70000028
     1686#define DT_MIPS_OPTIONS      0x70000029 /* Address of .options.  */
     1687#define DT_MIPS_INTERFACE    0x7000002a /* Address of .interface.  */
     1688#define DT_MIPS_DYNSTR_ALIGN 0x7000002b
     1689#define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
     1690#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
     1691                                                    function stored in GOT.  */
     1692#define DT_MIPS_PERF_SUFFIX  0x7000002e /* Default suffix of dso to be added
     1693                                           by rld on dlopen() calls.  */
     1694#define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
     1695#define DT_MIPS_GP_VALUE     0x70000030 /* GP value for aux GOTs.  */
     1696#define DT_MIPS_AUX_DYNAMIC  0x70000031 /* Address of aux .dynamic.  */
     1697/* The address of .got.plt in an executable using the new non-PIC ABI.  */
     1698#define DT_MIPS_PLTGOT       0x70000032
     1699/* The base of the PLT in an executable using the new non-PIC ABI if that
     1700   PLT is writable.  For a non-writable PLT, this is omitted or has a zero
     1701   value.  */
     1702#define DT_MIPS_RWPLT        0x70000034
     1703#define DT_MIPS_NUM          0x35
     1704
     1705/* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry.  */
     1706
     1707#define RHF_NONE                   0            /* No flags */
     1708#define RHF_QUICKSTART             (1 << 0)     /* Use quickstart */
     1709#define RHF_NOTPOT                 (1 << 1)     /* Hash size not power of 2 */
     1710#define RHF_NO_LIBRARY_REPLACEMENT (1 << 2)     /* Ignore LD_LIBRARY_PATH */
     1711#define RHF_NO_MOVE                (1 << 3)
     1712#define RHF_SGI_ONLY               (1 << 4)
     1713#define RHF_GUARANTEE_INIT         (1 << 5)
     1714#define RHF_DELTA_C_PLUS_PLUS      (1 << 6)
     1715#define RHF_GUARANTEE_START_INIT   (1 << 7)
     1716#define RHF_PIXIE                  (1 << 8)
     1717#define RHF_DEFAULT_DELAY_LOAD     (1 << 9)
     1718#define RHF_REQUICKSTART           (1 << 10)
     1719#define RHF_REQUICKSTARTED         (1 << 11)
     1720#define RHF_CORD                   (1 << 12)
     1721#define RHF_NO_UNRES_UNDEF         (1 << 13)
     1722#define RHF_RLD_ORDER_SAFE         (1 << 14)
     1723
     1724/* Entries found in sections of type SHT_MIPS_LIBLIST.  */
     1725
     1726typedef struct
     1727{
     1728  Elf32_Word l_name;            /* Name (string table index) */
     1729  Elf32_Word l_time_stamp;      /* Timestamp */
     1730  Elf32_Word l_checksum;        /* Checksum */
     1731  Elf32_Word l_version;         /* Interface version */
     1732  Elf32_Word l_flags;           /* Flags */
     1733} __attribute__((packed)) Elf32_Lib;
     1734
     1735typedef struct
     1736{
     1737  Elf64_Word l_name;            /* Name (string table index) */
     1738  Elf64_Word l_time_stamp;      /* Timestamp */
     1739  Elf64_Word l_checksum;        /* Checksum */
     1740  Elf64_Word l_version;         /* Interface version */
     1741  Elf64_Word l_flags;           /* Flags */
     1742} __attribute__((packed)) Elf64_Lib;
     1743
     1744
     1745/* Legal values for l_flags.  */
     1746
     1747#define LL_NONE           0
     1748#define LL_EXACT_MATCH    (1 << 0)      /* Require exact match */
     1749#define LL_IGNORE_INT_VER (1 << 1)      /* Ignore interface version */
     1750#define LL_REQUIRE_MINOR  (1 << 2)
     1751#define LL_EXPORTS        (1 << 3)
     1752#define LL_DELAY_LOAD     (1 << 4)
     1753#define LL_DELTA          (1 << 5)
     1754
     1755/* Entries found in sections of type SHT_MIPS_CONFLICT.  */
     1756
     1757typedef Elf32_Addr Elf32_Conflict;
     1758
     1759
     1760/* HPPA specific definitions.  */
     1761
     1762/* Legal values for e_flags field of Elf32_Ehdr.  */
     1763
     1764#define EF_PARISC_TRAPNIL       0x00010000 /* Trap nil pointer dereference.  */
     1765#define EF_PARISC_EXT           0x00020000 /* Program uses arch. extensions. */
     1766#define EF_PARISC_LSB           0x00040000 /* Program expects little endian. */
     1767#define EF_PARISC_WIDE          0x00080000 /* Program expects wide mode.  */
     1768#define EF_PARISC_NO_KABP       0x00100000 /* No kernel assisted branch
     1769                                              prediction.  */
     1770#define EF_PARISC_LAZYSWAP      0x00400000 /* Allow lazy swapping.  */
     1771#define EF_PARISC_ARCH          0x0000ffff /* Architecture version.  */
     1772
     1773/* Defined values for `e_flags & EF_PARISC_ARCH' are:  */
     1774
     1775#define EFA_PARISC_1_0              0x020b /* PA-RISC 1.0 big-endian.  */
     1776#define EFA_PARISC_1_1              0x0210 /* PA-RISC 1.1 big-endian.  */
     1777#define EFA_PARISC_2_0              0x0214 /* PA-RISC 2.0 big-endian.  */
     1778
     1779/* Additional section indices.  */
     1780
     1781#define SHN_PARISC_ANSI_COMMON  0xff00     /* Section for tentatively declared
     1782                                              symbols in ANSI C.  */
     1783#define SHN_PARISC_HUGE_COMMON  0xff01     /* Common blocks in huge model.  */
     1784
     1785/* Legal values for sh_type field of Elf32_Shdr.  */
     1786
     1787#define SHT_PARISC_EXT          0x70000000 /* Contains product specific ext. */
     1788#define SHT_PARISC_UNWIND       0x70000001 /* Unwind information.  */
     1789#define SHT_PARISC_DOC          0x70000002 /* Debug info for optimized code. */
     1790
     1791/* Legal values for sh_flags field of Elf32_Shdr.  */
     1792
     1793#define SHF_PARISC_SHORT        0x20000000 /* Section with short addressing. */
     1794#define SHF_PARISC_HUGE         0x40000000 /* Section far from gp.  */
     1795#define SHF_PARISC_SBP          0x80000000 /* Static branch prediction code. */
     1796
     1797/* Legal values for ST_TYPE subfield of st_info (symbol type).  */
     1798
     1799#define STT_PARISC_MILLICODE    13      /* Millicode function entry point.  */
     1800
     1801#define STT_HP_OPAQUE           (STT_LOOS + 0x1)
     1802#define STT_HP_STUB             (STT_LOOS + 0x2)
     1803
     1804/* HPPA relocs.  */
     1805
     1806#define R_PARISC_NONE           0       /* No reloc.  */
     1807#define R_PARISC_DIR32          1       /* Direct 32-bit reference.  */
     1808#define R_PARISC_DIR21L         2       /* Left 21 bits of eff. address.  */
     1809#define R_PARISC_DIR17R         3       /* Right 17 bits of eff. address.  */
     1810#define R_PARISC_DIR17F         4       /* 17 bits of eff. address.  */
     1811#define R_PARISC_DIR14R         6       /* Right 14 bits of eff. address.  */
     1812#define R_PARISC_PCREL32        9       /* 32-bit rel. address.  */
     1813#define R_PARISC_PCREL21L       10      /* Left 21 bits of rel. address.  */
     1814#define R_PARISC_PCREL17R       11      /* Right 17 bits of rel. address.  */
     1815#define R_PARISC_PCREL17F       12      /* 17 bits of rel. address.  */
     1816#define R_PARISC_PCREL14R       14      /* Right 14 bits of rel. address.  */
     1817#define R_PARISC_DPREL21L       18      /* Left 21 bits of rel. address.  */
     1818#define R_PARISC_DPREL14R       22      /* Right 14 bits of rel. address.  */
     1819#define R_PARISC_GPREL21L       26      /* GP-relative, left 21 bits.  */
     1820#define R_PARISC_GPREL14R       30      /* GP-relative, right 14 bits.  */
     1821#define R_PARISC_LTOFF21L       34      /* LT-relative, left 21 bits.  */
     1822#define R_PARISC_LTOFF14R       38      /* LT-relative, right 14 bits.  */
     1823#define R_PARISC_SECREL32       41      /* 32 bits section rel. address.  */
     1824#define R_PARISC_SEGBASE        48      /* No relocation, set segment base.  */
     1825#define R_PARISC_SEGREL32       49      /* 32 bits segment rel. address.  */
     1826#define R_PARISC_PLTOFF21L      50      /* PLT rel. address, left 21 bits.  */
     1827#define R_PARISC_PLTOFF14R      54      /* PLT rel. address, right 14 bits.  */
     1828#define R_PARISC_LTOFF_FPTR32   57      /* 32 bits LT-rel. function pointer. */
     1829#define R_PARISC_LTOFF_FPTR21L  58      /* LT-rel. fct ptr, left 21 bits. */
     1830#define R_PARISC_LTOFF_FPTR14R  62      /* LT-rel. fct ptr, right 14 bits. */
     1831#define R_PARISC_FPTR64         64      /* 64 bits function address.  */
     1832#define R_PARISC_PLABEL32       65      /* 32 bits function address.  */
     1833#define R_PARISC_PLABEL21L      66      /* Left 21 bits of fdesc address.  */
     1834#define R_PARISC_PLABEL14R      70      /* Right 14 bits of fdesc address.  */
     1835#define R_PARISC_PCREL64        72      /* 64 bits PC-rel. address.  */
     1836#define R_PARISC_PCREL22F       74      /* 22 bits PC-rel. address.  */
     1837#define R_PARISC_PCREL14WR      75      /* PC-rel. address, right 14 bits.  */
     1838#define R_PARISC_PCREL14DR      76      /* PC rel. address, right 14 bits.  */
     1839#define R_PARISC_PCREL16F       77      /* 16 bits PC-rel. address.  */
     1840#define R_PARISC_PCREL16WF      78      /* 16 bits PC-rel. address.  */
     1841#define R_PARISC_PCREL16DF      79      /* 16 bits PC-rel. address.  */
     1842#define R_PARISC_DIR64          80      /* 64 bits of eff. address.  */
     1843#define R_PARISC_DIR14WR        83      /* 14 bits of eff. address.  */
     1844#define R_PARISC_DIR14DR        84      /* 14 bits of eff. address.  */
     1845#define R_PARISC_DIR16F         85      /* 16 bits of eff. address.  */
     1846#define R_PARISC_DIR16WF        86      /* 16 bits of eff. address.  */
     1847#define R_PARISC_DIR16DF        87      /* 16 bits of eff. address.  */
     1848#define R_PARISC_GPREL64        88      /* 64 bits of GP-rel. address.  */
     1849#define R_PARISC_GPREL14WR      91      /* GP-rel. address, right 14 bits.  */
     1850#define R_PARISC_GPREL14DR      92      /* GP-rel. address, right 14 bits.  */
     1851#define R_PARISC_GPREL16F       93      /* 16 bits GP-rel. address.  */
     1852#define R_PARISC_GPREL16WF      94      /* 16 bits GP-rel. address.  */
     1853#define R_PARISC_GPREL16DF      95      /* 16 bits GP-rel. address.  */
     1854#define R_PARISC_LTOFF64        96      /* 64 bits LT-rel. address.  */
     1855#define R_PARISC_LTOFF14WR      99      /* LT-rel. address, right 14 bits.  */
     1856#define R_PARISC_LTOFF14DR      100     /* LT-rel. address, right 14 bits.  */
     1857#define R_PARISC_LTOFF16F       101     /* 16 bits LT-rel. address.  */
     1858#define R_PARISC_LTOFF16WF      102     /* 16 bits LT-rel. address.  */
     1859#define R_PARISC_LTOFF16DF      103     /* 16 bits LT-rel. address.  */
     1860#define R_PARISC_SECREL64       104     /* 64 bits section rel. address.  */
     1861#define R_PARISC_SEGREL64       112     /* 64 bits segment rel. address.  */
     1862#define R_PARISC_PLTOFF14WR     115     /* PLT-rel. address, right 14 bits.  */
     1863#define R_PARISC_PLTOFF14DR     116     /* PLT-rel. address, right 14 bits.  */
     1864#define R_PARISC_PLTOFF16F      117     /* 16 bits LT-rel. address.  */
     1865#define R_PARISC_PLTOFF16WF     118     /* 16 bits PLT-rel. address.  */
     1866#define R_PARISC_PLTOFF16DF     119     /* 16 bits PLT-rel. address.  */
     1867#define R_PARISC_LTOFF_FPTR64   120     /* 64 bits LT-rel. function ptr.  */
     1868#define R_PARISC_LTOFF_FPTR14WR 123     /* LT-rel. fct. ptr., right 14 bits. */
     1869#define R_PARISC_LTOFF_FPTR14DR 124     /* LT-rel. fct. ptr., right 14 bits. */
     1870#define R_PARISC_LTOFF_FPTR16F  125     /* 16 bits LT-rel. function ptr.  */
     1871#define R_PARISC_LTOFF_FPTR16WF 126     /* 16 bits LT-rel. function ptr.  */
     1872#define R_PARISC_LTOFF_FPTR16DF 127     /* 16 bits LT-rel. function ptr.  */
     1873#define R_PARISC_LORESERVE      128
     1874#define R_PARISC_COPY           128     /* Copy relocation.  */
     1875#define R_PARISC_IPLT           129     /* Dynamic reloc, imported PLT */
     1876#define R_PARISC_EPLT           130     /* Dynamic reloc, exported PLT */
     1877#define R_PARISC_TPREL32        153     /* 32 bits TP-rel. address.  */
     1878#define R_PARISC_TPREL21L       154     /* TP-rel. address, left 21 bits.  */
     1879#define R_PARISC_TPREL14R       158     /* TP-rel. address, right 14 bits.  */
     1880#define R_PARISC_LTOFF_TP21L    162     /* LT-TP-rel. address, left 21 bits. */
     1881#define R_PARISC_LTOFF_TP14R    166     /* LT-TP-rel. address, right 14 bits.*/
     1882#define R_PARISC_LTOFF_TP14F    167     /* 14 bits LT-TP-rel. address.  */
     1883#define R_PARISC_TPREL64        216     /* 64 bits TP-rel. address.  */
     1884#define R_PARISC_TPREL14WR      219     /* TP-rel. address, right 14 bits.  */
     1885#define R_PARISC_TPREL14DR      220     /* TP-rel. address, right 14 bits.  */
     1886#define R_PARISC_TPREL16F       221     /* 16 bits TP-rel. address.  */
     1887#define R_PARISC_TPREL16WF      222     /* 16 bits TP-rel. address.  */
     1888#define R_PARISC_TPREL16DF      223     /* 16 bits TP-rel. address.  */
     1889#define R_PARISC_LTOFF_TP64     224     /* 64 bits LT-TP-rel. address.  */
     1890#define R_PARISC_LTOFF_TP14WR   227     /* LT-TP-rel. address, right 14 bits.*/
     1891#define R_PARISC_LTOFF_TP14DR   228     /* LT-TP-rel. address, right 14 bits.*/
     1892#define R_PARISC_LTOFF_TP16F    229     /* 16 bits LT-TP-rel. address.  */
     1893#define R_PARISC_LTOFF_TP16WF   230     /* 16 bits LT-TP-rel. address.  */
     1894#define R_PARISC_LTOFF_TP16DF   231     /* 16 bits LT-TP-rel. address.  */
     1895#define R_PARISC_GNU_VTENTRY    232
     1896#define R_PARISC_GNU_VTINHERIT  233
     1897#define R_PARISC_TLS_GD21L      234     /* GD 21-bit left.  */
     1898#define R_PARISC_TLS_GD14R      235     /* GD 14-bit right.  */
     1899#define R_PARISC_TLS_GDCALL     236     /* GD call to __t_g_a.  */
     1900#define R_PARISC_TLS_LDM21L     237     /* LD module 21-bit left.  */
     1901#define R_PARISC_TLS_LDM14R     238     /* LD module 14-bit right.  */
     1902#define R_PARISC_TLS_LDMCALL    239     /* LD module call to __t_g_a.  */
     1903#define R_PARISC_TLS_LDO21L     240     /* LD offset 21-bit left.  */
     1904#define R_PARISC_TLS_LDO14R     241     /* LD offset 14-bit right.  */
     1905#define R_PARISC_TLS_DTPMOD32   242     /* DTP module 32-bit.  */
     1906#define R_PARISC_TLS_DTPMOD64   243     /* DTP module 64-bit.  */
     1907#define R_PARISC_TLS_DTPOFF32   244     /* DTP offset 32-bit.  */
     1908#define R_PARISC_TLS_DTPOFF64   245     /* DTP offset 32-bit.  */
     1909#define R_PARISC_TLS_LE21L      R_PARISC_TPREL21L
     1910#define R_PARISC_TLS_LE14R      R_PARISC_TPREL14R
     1911#define R_PARISC_TLS_IE21L      R_PARISC_LTOFF_TP21L
     1912#define R_PARISC_TLS_IE14R      R_PARISC_LTOFF_TP14R
     1913#define R_PARISC_TLS_TPREL32    R_PARISC_TPREL32
     1914#define R_PARISC_TLS_TPREL64    R_PARISC_TPREL64
     1915#define R_PARISC_HIRESERVE      255
     1916
     1917/* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr.  */
     1918
     1919#define PT_HP_TLS               (PT_LOOS + 0x0)
     1920#define PT_HP_CORE_NONE         (PT_LOOS + 0x1)
     1921#define PT_HP_CORE_VERSION      (PT_LOOS + 0x2)
     1922#define PT_HP_CORE_KERNEL       (PT_LOOS + 0x3)
     1923#define PT_HP_CORE_COMM         (PT_LOOS + 0x4)
     1924#define PT_HP_CORE_PROC         (PT_LOOS + 0x5)
     1925#define PT_HP_CORE_LOADABLE     (PT_LOOS + 0x6)
     1926#define PT_HP_CORE_STACK        (PT_LOOS + 0x7)
     1927#define PT_HP_CORE_SHM          (PT_LOOS + 0x8)
     1928#define PT_HP_CORE_MMF          (PT_LOOS + 0x9)
     1929#define PT_HP_PARALLEL          (PT_LOOS + 0x10)
     1930#define PT_HP_FASTBIND          (PT_LOOS + 0x11)
     1931#define PT_HP_OPT_ANNOT         (PT_LOOS + 0x12)
     1932#define PT_HP_HSL_ANNOT         (PT_LOOS + 0x13)
     1933#define PT_HP_STACK             (PT_LOOS + 0x14)
     1934
     1935#define PT_PARISC_ARCHEXT       0x70000000
     1936#define PT_PARISC_UNWIND        0x70000001
     1937
     1938/* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr.  */
     1939
     1940#define PF_PARISC_SBP           0x08000000
     1941
     1942#define PF_HP_PAGE_SIZE         0x00100000
     1943#define PF_HP_FAR_SHARED        0x00200000
     1944#define PF_HP_NEAR_SHARED       0x00400000
     1945#define PF_HP_CODE              0x01000000
     1946#define PF_HP_MODIFY            0x02000000
     1947#define PF_HP_LAZYSWAP          0x04000000
     1948#define PF_HP_SBP               0x08000000
     1949
     1950
     1951/* Alpha specific definitions.  */
     1952
     1953/* Legal values for e_flags field of Elf64_Ehdr.  */
     1954
     1955#define EF_ALPHA_32BIT          1       /* All addresses must be < 2GB.  */
     1956#define EF_ALPHA_CANRELAX       2       /* Relocations for relaxing exist.  */
     1957
     1958/* Legal values for sh_type field of Elf64_Shdr.  */
     1959
     1960/* These two are primarily concerned with ECOFF debugging info.  */
     1961#define SHT_ALPHA_DEBUG         0x70000001
     1962#define SHT_ALPHA_REGINFO       0x70000002
     1963
     1964/* Legal values for sh_flags field of Elf64_Shdr.  */
     1965
     1966#define SHF_ALPHA_GPREL         0x10000000
     1967
     1968/* Legal values for st_other field of Elf64_Sym.  */
     1969#define STO_ALPHA_NOPV          0x80    /* No PV required.  */
     1970#define STO_ALPHA_STD_GPLOAD    0x88    /* PV only used for initial ldgp.  */
     1971
     1972/* Alpha relocs.  */
     1973
     1974#define R_ALPHA_NONE            0       /* No reloc */
     1975#define R_ALPHA_REFLONG         1       /* Direct 32 bit */
     1976#define R_ALPHA_REFQUAD         2       /* Direct 64 bit */
     1977#define R_ALPHA_GPREL32         3       /* GP relative 32 bit */
     1978#define R_ALPHA_LITERAL         4       /* GP relative 16 bit w/optimization */
     1979#define R_ALPHA_LITUSE          5       /* Optimization hint for LITERAL */
     1980#define R_ALPHA_GPDISP          6       /* Add displacement to GP */
     1981#define R_ALPHA_BRADDR          7       /* PC+4 relative 23 bit shifted */
     1982#define R_ALPHA_HINT            8       /* PC+4 relative 16 bit shifted */
     1983#define R_ALPHA_SREL16          9       /* PC relative 16 bit */
     1984#define R_ALPHA_SREL32          10      /* PC relative 32 bit */
     1985#define R_ALPHA_SREL64          11      /* PC relative 64 bit */
     1986#define R_ALPHA_GPRELHIGH       17      /* GP relative 32 bit, high 16 bits */
     1987#define R_ALPHA_GPRELLOW        18      /* GP relative 32 bit, low 16 bits */
     1988#define R_ALPHA_GPREL16         19      /* GP relative 16 bit */
     1989#define R_ALPHA_COPY            24      /* Copy symbol at runtime */
     1990#define R_ALPHA_GLOB_DAT        25      /* Create GOT entry */
     1991#define R_ALPHA_JMP_SLOT        26      /* Create PLT entry */
     1992#define R_ALPHA_RELATIVE        27      /* Adjust by program base */
     1993#define R_ALPHA_TLS_GD_HI       28
     1994#define R_ALPHA_TLSGD           29
     1995#define R_ALPHA_TLS_LDM         30
     1996#define R_ALPHA_DTPMOD64        31
     1997#define R_ALPHA_GOTDTPREL       32
     1998#define R_ALPHA_DTPREL64        33
     1999#define R_ALPHA_DTPRELHI        34
     2000#define R_ALPHA_DTPRELLO        35
     2001#define R_ALPHA_DTPREL16        36
     2002#define R_ALPHA_GOTTPREL        37
     2003#define R_ALPHA_TPREL64         38
     2004#define R_ALPHA_TPRELHI         39
     2005#define R_ALPHA_TPRELLO         40
     2006#define R_ALPHA_TPREL16         41
     2007/* Keep this the last entry.  */
     2008#define R_ALPHA_NUM             46
     2009
     2010/* Magic values of the LITUSE relocation addend.  */
     2011#define LITUSE_ALPHA_ADDR       0
     2012#define LITUSE_ALPHA_BASE       1
     2013#define LITUSE_ALPHA_BYTOFF     2
     2014#define LITUSE_ALPHA_JSR        3
     2015#define LITUSE_ALPHA_TLS_GD     4
     2016#define LITUSE_ALPHA_TLS_LDM    5
     2017
     2018/* Legal values for d_tag of Elf64_Dyn.  */
     2019#define DT_ALPHA_PLTRO          (DT_LOPROC + 0)
     2020#define DT_ALPHA_NUM            1
     2021
     2022/* PowerPC specific declarations */
     2023
     2024/* Values for Elf32/64_Ehdr.e_flags.  */
     2025#define EF_PPC_EMB              0x80000000      /* PowerPC embedded flag */
     2026
     2027/* Cygnus local bits below */
     2028#define EF_PPC_RELOCATABLE      0x00010000      /* PowerPC -mrelocatable flag*/
     2029#define EF_PPC_RELOCATABLE_LIB  0x00008000      /* PowerPC -mrelocatable-lib
     2030                                                   flag */
     2031
     2032/* PowerPC relocations defined by the ABIs */
     2033#define R_PPC_NONE              0
     2034#define R_PPC_ADDR32            1       /* 32bit absolute address */
     2035#define R_PPC_ADDR24            2       /* 26bit address, 2 bits ignored.  */
     2036#define R_PPC_ADDR16            3       /* 16bit absolute address */
     2037#define R_PPC_ADDR16_LO         4       /* lower 16bit of absolute address */
     2038#define R_PPC_ADDR16_HI         5       /* high 16bit of absolute address */
     2039#define R_PPC_ADDR16_HA         6       /* adjusted high 16bit */
     2040#define R_PPC_ADDR14            7       /* 16bit address, 2 bits ignored */
     2041#define R_PPC_ADDR14_BRTAKEN    8
     2042#define R_PPC_ADDR14_BRNTAKEN   9
     2043#define R_PPC_REL24             10      /* PC relative 26 bit */
     2044#define R_PPC_REL14             11      /* PC relative 16 bit */
     2045#define R_PPC_REL14_BRTAKEN     12
     2046#define R_PPC_REL14_BRNTAKEN    13
     2047#define R_PPC_GOT16             14
     2048#define R_PPC_GOT16_LO          15
     2049#define R_PPC_GOT16_HI          16
     2050#define R_PPC_GOT16_HA          17
     2051#define R_PPC_PLTREL24          18
     2052#define R_PPC_COPY              19
     2053#define R_PPC_GLOB_DAT          20
     2054#define R_PPC_JMP_SLOT          21
     2055#define R_PPC_RELATIVE          22
     2056#define R_PPC_LOCAL24PC         23
     2057#define R_PPC_UADDR32           24
     2058#define R_PPC_UADDR16           25
     2059#define R_PPC_REL32             26
     2060#define R_PPC_PLT32             27
     2061#define R_PPC_PLTREL32          28
     2062#define R_PPC_PLT16_LO          29
     2063#define R_PPC_PLT16_HI          30
     2064#define R_PPC_PLT16_HA          31
     2065#define R_PPC_SDAREL16          32
     2066#define R_PPC_SECTOFF           33
     2067#define R_PPC_SECTOFF_LO        34
     2068#define R_PPC_SECTOFF_HI        35
     2069#define R_PPC_SECTOFF_HA        36
     2070
     2071/* PowerPC relocations defined for the TLS access ABI.  */
     2072#define R_PPC_TLS               67 /* none      (sym+add)@tls */
     2073#define R_PPC_DTPMOD32          68 /* word32    (sym+add)@dtpmod */
     2074#define R_PPC_TPREL16           69 /* half16*   (sym+add)@tprel */
     2075#define R_PPC_TPREL16_LO        70 /* half16    (sym+add)@tprel@l */
     2076#define R_PPC_TPREL16_HI        71 /* half16    (sym+add)@tprel@h */
     2077#define R_PPC_TPREL16_HA        72 /* half16    (sym+add)@tprel@ha */
     2078#define R_PPC_TPREL32           73 /* word32    (sym+add)@tprel */
     2079#define R_PPC_DTPREL16          74 /* half16*   (sym+add)@dtprel */
     2080#define R_PPC_DTPREL16_LO       75 /* half16    (sym+add)@dtprel@l */
     2081#define R_PPC_DTPREL16_HI       76 /* half16    (sym+add)@dtprel@h */
     2082#define R_PPC_DTPREL16_HA       77 /* half16    (sym+add)@dtprel@ha */
     2083#define R_PPC_DTPREL32          78 /* word32    (sym+add)@dtprel */
     2084#define R_PPC_GOT_TLSGD16       79 /* half16*   (sym+add)@got@tlsgd */
     2085#define R_PPC_GOT_TLSGD16_LO    80 /* half16    (sym+add)@got@tlsgd@l */
     2086#define R_PPC_GOT_TLSGD16_HI    81 /* half16    (sym+add)@got@tlsgd@h */
     2087#define R_PPC_GOT_TLSGD16_HA    82 /* half16    (sym+add)@got@tlsgd@ha */
     2088#define R_PPC_GOT_TLSLD16       83 /* half16*   (sym+add)@got@tlsld */
     2089#define R_PPC_GOT_TLSLD16_LO    84 /* half16    (sym+add)@got@tlsld@l */
     2090#define R_PPC_GOT_TLSLD16_HI    85 /* half16    (sym+add)@got@tlsld@h */
     2091#define R_PPC_GOT_TLSLD16_HA    86 /* half16    (sym+add)@got@tlsld@ha */
     2092#define R_PPC_GOT_TPREL16       87 /* half16*   (sym+add)@got@tprel */
     2093#define R_PPC_GOT_TPREL16_LO    88 /* half16    (sym+add)@got@tprel@l */
     2094#define R_PPC_GOT_TPREL16_HI    89 /* half16    (sym+add)@got@tprel@h */
     2095#define R_PPC_GOT_TPREL16_HA    90 /* half16    (sym+add)@got@tprel@ha */
     2096#define R_PPC_GOT_DTPREL16      91 /* half16*   (sym+add)@got@dtprel */
     2097#define R_PPC_GOT_DTPREL16_LO   92 /* half16*   (sym+add)@got@dtprel@l */
     2098#define R_PPC_GOT_DTPREL16_HI   93 /* half16*   (sym+add)@got@dtprel@h */
     2099#define R_PPC_GOT_DTPREL16_HA   94 /* half16*   (sym+add)@got@dtprel@ha */
     2100
     2101/* The remaining relocs are from the Embedded ELF ABI, and are not
     2102   in the SVR4 ELF ABI.  */
     2103#define R_PPC_EMB_NADDR32       101
     2104#define R_PPC_EMB_NADDR16       102
     2105#define R_PPC_EMB_NADDR16_LO    103
     2106#define R_PPC_EMB_NADDR16_HI    104
     2107#define R_PPC_EMB_NADDR16_HA    105
     2108#define R_PPC_EMB_SDAI16        106
     2109#define R_PPC_EMB_SDA2I16       107
     2110#define R_PPC_EMB_SDA2REL       108
     2111#define R_PPC_EMB_SDA21         109     /* 16 bit offset in SDA */
     2112#define R_PPC_EMB_MRKREF        110
     2113#define R_PPC_EMB_RELSEC16      111
     2114#define R_PPC_EMB_RELST_LO      112
     2115#define R_PPC_EMB_RELST_HI      113
     2116#define R_PPC_EMB_RELST_HA      114
     2117#define R_PPC_EMB_BIT_FLD       115
     2118#define R_PPC_EMB_RELSDA        116     /* 16 bit relative offset in SDA */
     2119
     2120/* Diab tool relocations.  */
     2121#define R_PPC_DIAB_SDA21_LO     180     /* like EMB_SDA21, but lower 16 bit */
     2122#define R_PPC_DIAB_SDA21_HI     181     /* like EMB_SDA21, but high 16 bit */
     2123#define R_PPC_DIAB_SDA21_HA     182     /* like EMB_SDA21, adjusted high 16 */
     2124#define R_PPC_DIAB_RELSDA_LO    183     /* like EMB_RELSDA, but lower 16 bit */
     2125#define R_PPC_DIAB_RELSDA_HI    184     /* like EMB_RELSDA, but high 16 bit */
     2126#define R_PPC_DIAB_RELSDA_HA    185     /* like EMB_RELSDA, adjusted high 16 */
     2127
     2128/* GNU extension to support local ifunc.  */
     2129#define R_PPC_IRELATIVE         248
     2130
     2131/* GNU relocs used in PIC code sequences.  */
     2132#define R_PPC_REL16             249     /* half16   (sym+add-.) */
     2133#define R_PPC_REL16_LO          250     /* half16   (sym+add-.)@l */
     2134#define R_PPC_REL16_HI          251     /* half16   (sym+add-.)@h */
     2135#define R_PPC_REL16_HA          252     /* half16   (sym+add-.)@ha */
     2136
     2137/* This is a phony reloc to handle any old fashioned TOC16 references
     2138   that may still be in object files.  */
     2139#define R_PPC_TOC16             255
     2140
     2141/* PowerPC specific values for the Dyn d_tag field.  */
     2142#define DT_PPC_GOT              (DT_LOPROC + 0)
     2143#define DT_PPC_NUM              1
     2144
     2145/* PowerPC64 relocations defined by the ABIs */
     2146#define R_PPC64_NONE            R_PPC_NONE
     2147#define R_PPC64_ADDR32          R_PPC_ADDR32 /* 32bit absolute address */
     2148#define R_PPC64_ADDR24          R_PPC_ADDR24 /* 26bit address, word aligned */
     2149#define R_PPC64_ADDR16          R_PPC_ADDR16 /* 16bit absolute address */
     2150#define R_PPC64_ADDR16_LO       R_PPC_ADDR16_LO /* lower 16bits of address */
     2151#define R_PPC64_ADDR16_HI       R_PPC_ADDR16_HI /* high 16bits of address. */
     2152#define R_PPC64_ADDR16_HA       R_PPC_ADDR16_HA /* adjusted high 16bits.  */
     2153#define R_PPC64_ADDR14          R_PPC_ADDR14 /* 16bit address, word aligned */
     2154#define R_PPC64_ADDR14_BRTAKEN  R_PPC_ADDR14_BRTAKEN
     2155#define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN
     2156#define R_PPC64_REL24           R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
     2157#define R_PPC64_REL14           R_PPC_REL14 /* PC relative 16 bit */
     2158#define R_PPC64_REL14_BRTAKEN   R_PPC_REL14_BRTAKEN
     2159#define R_PPC64_REL14_BRNTAKEN  R_PPC_REL14_BRNTAKEN
     2160#define R_PPC64_GOT16           R_PPC_GOT16
     2161#define R_PPC64_GOT16_LO        R_PPC_GOT16_LO
     2162#define R_PPC64_GOT16_HI        R_PPC_GOT16_HI
     2163#define R_PPC64_GOT16_HA        R_PPC_GOT16_HA
     2164
     2165#define R_PPC64_COPY            R_PPC_COPY
     2166#define R_PPC64_GLOB_DAT        R_PPC_GLOB_DAT
     2167#define R_PPC64_JMP_SLOT        R_PPC_JMP_SLOT
     2168#define R_PPC64_RELATIVE        R_PPC_RELATIVE
     2169
     2170#define R_PPC64_UADDR32         R_PPC_UADDR32
     2171#define R_PPC64_UADDR16         R_PPC_UADDR16
     2172#define R_PPC64_REL32           R_PPC_REL32
     2173#define R_PPC64_PLT32           R_PPC_PLT32
     2174#define R_PPC64_PLTREL32        R_PPC_PLTREL32
     2175#define R_PPC64_PLT16_LO        R_PPC_PLT16_LO
     2176#define R_PPC64_PLT16_HI        R_PPC_PLT16_HI
     2177#define R_PPC64_PLT16_HA        R_PPC_PLT16_HA
     2178
     2179#define R_PPC64_SECTOFF         R_PPC_SECTOFF
     2180#define R_PPC64_SECTOFF_LO      R_PPC_SECTOFF_LO
     2181#define R_PPC64_SECTOFF_HI      R_PPC_SECTOFF_HI
     2182#define R_PPC64_SECTOFF_HA      R_PPC_SECTOFF_HA
     2183#define R_PPC64_ADDR30          37 /* word30 (S + A - P) >> 2 */
     2184#define R_PPC64_ADDR64          38 /* doubleword64 S + A */
     2185#define R_PPC64_ADDR16_HIGHER   39 /* half16 #higher(S + A) */
     2186#define R_PPC64_ADDR16_HIGHERA  40 /* half16 #highera(S + A) */
     2187#define R_PPC64_ADDR16_HIGHEST  41 /* half16 #highest(S + A) */
     2188#define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A) */
     2189#define R_PPC64_UADDR64         43 /* doubleword64 S + A */
     2190#define R_PPC64_REL64           44 /* doubleword64 S + A - P */
     2191#define R_PPC64_PLT64           45 /* doubleword64 L + A */
     2192#define R_PPC64_PLTREL64        46 /* doubleword64 L + A - P */
     2193#define R_PPC64_TOC16           47 /* half16* S + A - .TOC */
     2194#define R_PPC64_TOC16_LO        48 /* half16 #lo(S + A - .TOC.) */
     2195#define R_PPC64_TOC16_HI        49 /* half16 #hi(S + A - .TOC.) */
     2196#define R_PPC64_TOC16_HA        50 /* half16 #ha(S + A - .TOC.) */
     2197#define R_PPC64_TOC             51 /* doubleword64 .TOC */
     2198#define R_PPC64_PLTGOT16        52 /* half16* M + A */
     2199#define R_PPC64_PLTGOT16_LO     53 /* half16 #lo(M + A) */
     2200#define R_PPC64_PLTGOT16_HI     54 /* half16 #hi(M + A) */
     2201#define R_PPC64_PLTGOT16_HA     55 /* half16 #ha(M + A) */
     2202
     2203#define R_PPC64_ADDR16_DS       56 /* half16ds* (S + A) >> 2 */
     2204#define R_PPC64_ADDR16_LO_DS    57 /* half16ds  #lo(S + A) >> 2 */
     2205#define R_PPC64_GOT16_DS        58 /* half16ds* (G + A) >> 2 */
     2206#define R_PPC64_GOT16_LO_DS     59 /* half16ds  #lo(G + A) >> 2 */
     2207#define R_PPC64_PLT16_LO_DS     60 /* half16ds  #lo(L + A) >> 2 */
     2208#define R_PPC64_SECTOFF_DS      61 /* half16ds* (R + A) >> 2 */
     2209#define R_PPC64_SECTOFF_LO_DS   62 /* half16ds  #lo(R + A) >> 2 */
     2210#define R_PPC64_TOC16_DS        63 /* half16ds* (S + A - .TOC.) >> 2 */
     2211#define R_PPC64_TOC16_LO_DS     64 /* half16ds  #lo(S + A - .TOC.) >> 2 */
     2212#define R_PPC64_PLTGOT16_DS     65 /* half16ds* (M + A) >> 2 */
     2213#define R_PPC64_PLTGOT16_LO_DS  66 /* half16ds  #lo(M + A) >> 2 */
     2214
     2215/* PowerPC64 relocations defined for the TLS access ABI.  */
     2216#define R_PPC64_TLS             67 /* none      (sym+add)@tls */
     2217#define R_PPC64_DTPMOD64        68 /* doubleword64 (sym+add)@dtpmod */
     2218#define R_PPC64_TPREL16         69 /* half16*   (sym+add)@tprel */
     2219#define R_PPC64_TPREL16_LO      70 /* half16    (sym+add)@tprel@l */
     2220#define R_PPC64_TPREL16_HI      71 /* half16    (sym+add)@tprel@h */
     2221#define R_PPC64_TPREL16_HA      72 /* half16    (sym+add)@tprel@ha */
     2222#define R_PPC64_TPREL64         73 /* doubleword64 (sym+add)@tprel */
     2223#define R_PPC64_DTPREL16        74 /* half16*   (sym+add)@dtprel */
     2224#define R_PPC64_DTPREL16_LO     75 /* half16    (sym+add)@dtprel@l */
     2225#define R_PPC64_DTPREL16_HI     76 /* half16    (sym+add)@dtprel@h */
     2226#define R_PPC64_DTPREL16_HA     77 /* half16    (sym+add)@dtprel@ha */
     2227#define R_PPC64_DTPREL64        78 /* doubleword64 (sym+add)@dtprel */
     2228#define R_PPC64_GOT_TLSGD16     79 /* half16*   (sym+add)@got@tlsgd */
     2229#define R_PPC64_GOT_TLSGD16_LO  80 /* half16    (sym+add)@got@tlsgd@l */
     2230#define R_PPC64_GOT_TLSGD16_HI  81 /* half16    (sym+add)@got@tlsgd@h */
     2231#define R_PPC64_GOT_TLSGD16_HA  82 /* half16    (sym+add)@got@tlsgd@ha */
     2232#define R_PPC64_GOT_TLSLD16     83 /* half16*   (sym+add)@got@tlsld */
     2233#define R_PPC64_GOT_TLSLD16_LO  84 /* half16    (sym+add)@got@tlsld@l */
     2234#define R_PPC64_GOT_TLSLD16_HI  85 /* half16    (sym+add)@got@tlsld@h */
     2235#define R_PPC64_GOT_TLSLD16_HA  86 /* half16    (sym+add)@got@tlsld@ha */
     2236#define R_PPC64_GOT_TPREL16_DS  87 /* half16ds* (sym+add)@got@tprel */
     2237#define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
     2238#define R_PPC64_GOT_TPREL16_HI  89 /* half16    (sym+add)@got@tprel@h */
     2239#define R_PPC64_GOT_TPREL16_HA  90 /* half16    (sym+add)@got@tprel@ha */
     2240#define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel */
     2241#define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
     2242#define R_PPC64_GOT_DTPREL16_HI 93 /* half16    (sym+add)@got@dtprel@h */
     2243#define R_PPC64_GOT_DTPREL16_HA 94 /* half16    (sym+add)@got@dtprel@ha */
     2244#define R_PPC64_TPREL16_DS      95 /* half16ds* (sym+add)@tprel */
     2245#define R_PPC64_TPREL16_LO_DS   96 /* half16ds  (sym+add)@tprel@l */
     2246#define R_PPC64_TPREL16_HIGHER  97 /* half16    (sym+add)@tprel@higher */
     2247#define R_PPC64_TPREL16_HIGHERA 98 /* half16    (sym+add)@tprel@highera */
     2248#define R_PPC64_TPREL16_HIGHEST 99 /* half16    (sym+add)@tprel@highest */
     2249#define R_PPC64_TPREL16_HIGHESTA 100 /* half16  (sym+add)@tprel@highesta */
     2250#define R_PPC64_DTPREL16_DS     101 /* half16ds* (sym+add)@dtprel */
     2251#define R_PPC64_DTPREL16_LO_DS  102 /* half16ds (sym+add)@dtprel@l */
     2252#define R_PPC64_DTPREL16_HIGHER 103 /* half16   (sym+add)@dtprel@higher */
     2253#define R_PPC64_DTPREL16_HIGHERA 104 /* half16  (sym+add)@dtprel@highera */
     2254#define R_PPC64_DTPREL16_HIGHEST 105 /* half16  (sym+add)@dtprel@highest */
     2255#define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */
     2256
     2257/* GNU extension to support local ifunc.  */
     2258#define R_PPC64_JMP_IREL        247
     2259#define R_PPC64_IRELATIVE       248
     2260#define R_PPC64_REL16           249     /* half16   (sym+add-.) */
     2261#define R_PPC64_REL16_LO        250     /* half16   (sym+add-.)@l */
     2262#define R_PPC64_REL16_HI        251     /* half16   (sym+add-.)@h */
     2263#define R_PPC64_REL16_HA        252     /* half16   (sym+add-.)@ha */
     2264
     2265/* PowerPC64 specific values for the Dyn d_tag field.  */
     2266#define DT_PPC64_GLINK  (DT_LOPROC + 0)
     2267#define DT_PPC64_OPD    (DT_LOPROC + 1)
     2268#define DT_PPC64_OPDSZ  (DT_LOPROC + 2)
     2269#define DT_PPC64_NUM    3
     2270
     2271
     2272/* ARM specific declarations */
     2273
     2274/* Processor specific flags for the ELF header e_flags field.  */
     2275#define EF_ARM_RELEXEC          0x01
     2276#define EF_ARM_HASENTRY         0x02
     2277#define EF_ARM_INTERWORK        0x04
     2278#define EF_ARM_APCS_26          0x08
     2279#define EF_ARM_APCS_FLOAT       0x10
     2280#define EF_ARM_PIC              0x20
     2281#define EF_ARM_ALIGN8           0x40 /* 8-bit structure alignment is in use */
     2282#define EF_ARM_NEW_ABI          0x80
     2283#define EF_ARM_OLD_ABI          0x100
     2284#define EF_ARM_SOFT_FLOAT       0x200
     2285#define EF_ARM_VFP_FLOAT        0x400
     2286#define EF_ARM_MAVERICK_FLOAT   0x800
     2287
     2288#define EF_ARM_ABI_FLOAT_SOFT   0x200   /* NB conflicts with EF_ARM_SOFT_FLOAT */
     2289#define EF_ARM_ABI_FLOAT_HARD   0x400   /* NB conflicts with EF_ARM_VFP_FLOAT */
     2290
     2291
     2292/* Other constants defined in the ARM ELF spec. version B-01.  */
     2293/* NB. These conflict with values defined above.  */
     2294#define EF_ARM_SYMSARESORTED    0x04
     2295#define EF_ARM_DYNSYMSUSESEGIDX 0x08
     2296#define EF_ARM_MAPSYMSFIRST     0x10
     2297#define EF_ARM_EABIMASK         0XFF000000
     2298
     2299/* Constants defined in AAELF.  */
     2300#define EF_ARM_BE8          0x00800000
     2301#define EF_ARM_LE8          0x00400000
     2302
     2303#define EF_ARM_EABI_VERSION(flags)      ((flags) & EF_ARM_EABIMASK)
     2304#define EF_ARM_EABI_UNKNOWN     0x00000000
     2305#define EF_ARM_EABI_VER1        0x01000000
     2306#define EF_ARM_EABI_VER2        0x02000000
     2307#define EF_ARM_EABI_VER3        0x03000000
     2308#define EF_ARM_EABI_VER4        0x04000000
     2309#define EF_ARM_EABI_VER5        0x05000000
     2310
     2311/* Additional symbol types for Thumb.  */
     2312#define STT_ARM_TFUNC           STT_LOPROC /* A Thumb function.  */
     2313#define STT_ARM_16BIT           STT_HIPROC /* A Thumb label.  */
     2314
     2315/* ARM-specific values for sh_flags */
     2316#define SHF_ARM_ENTRYSECT       0x10000000 /* Section contains an entry point */
     2317#define SHF_ARM_COMDEF          0x80000000 /* Section may be multiply defined
     2318                                              in the input to a link step.  */
     2319
     2320/* ARM-specific program header flags */
     2321#define PF_ARM_SB               0x10000000 /* Segment contains the location
     2322                                              addressed by the static base. */
     2323#define PF_ARM_PI               0x20000000 /* Position-independent segment.  */
     2324#define PF_ARM_ABS              0x40000000 /* Absolute segment.  */
     2325
     2326/* Processor specific values for the Phdr p_type field.  */
     2327#define PT_ARM_EXIDX            (PT_LOPROC + 1) /* ARM unwind segment.  */
     2328
     2329/* Processor specific values for the Shdr sh_type field.  */
     2330#define SHT_ARM_EXIDX           (SHT_LOPROC + 1) /* ARM unwind section.  */
     2331#define SHT_ARM_PREEMPTMAP      (SHT_LOPROC + 2) /* Preemption details.  */
     2332#define SHT_ARM_ATTRIBUTES      (SHT_LOPROC + 3) /* ARM attributes section.  */
     2333
     2334
     2335/* AArch64 relocs.  */
     2336
     2337#define R_AARCH64_NONE            0     /* No relocation.  */
     2338#define R_AARCH64_ABS64         257     /* Direct 64 bit. */
     2339#define R_AARCH64_ABS32         258     /* Direct 32 bit.  */
     2340#define R_AARCH64_ABS16         259     /* Direct 16-bit.  */
     2341#define R_AARCH64_PREL64        260     /* PC-relative 64-bit.  */
     2342#define R_AARCH64_PREL32        261     /* PC-relative 32-bit.  */
     2343#define R_AARCH64_PREL16        262     /* PC-relative 16-bit.  */
     2344#define R_AARCH64_MOVW_UABS_G0  263     /* Dir. MOVZ imm. from bits 15:0.  */
     2345#define R_AARCH64_MOVW_UABS_G0_NC 264   /* Likewise for MOVK; no check.  */
     2346#define R_AARCH64_MOVW_UABS_G1  265     /* Dir. MOVZ imm. from bits 31:16.  */
     2347#define R_AARCH64_MOVW_UABS_G1_NC 266   /* Likewise for MOVK; no check.  */
     2348#define R_AARCH64_MOVW_UABS_G2  267     /* Dir. MOVZ imm. from bits 47:32.  */
     2349#define R_AARCH64_MOVW_UABS_G2_NC 268   /* Likewise for MOVK; no check.  */
     2350#define R_AARCH64_MOVW_UABS_G3  269     /* Dir. MOV{K,Z} imm. from 63:48.  */
     2351#define R_AARCH64_MOVW_SABS_G0  270     /* Dir. MOV{N,Z} imm. from 15:0.  */
     2352#define R_AARCH64_MOVW_SABS_G1  271     /* Dir. MOV{N,Z} imm. from 31:16.  */
     2353#define R_AARCH64_MOVW_SABS_G2  272     /* Dir. MOV{N,Z} imm. from 47:32.  */
     2354#define R_AARCH64_LD_PREL_LO19  273     /* PC-rel. LD imm. from bits 20:2.  */
     2355#define R_AARCH64_ADR_PREL_LO21 274     /* PC-rel. ADR imm. from bits 20:0.  */
     2356#define R_AARCH64_ADR_PREL_PG_HI21 275  /* Page-rel. ADRP imm. from 32:12.  */
     2357#define R_AARCH64_ADR_PREL_PG_HI21_NC 276       /* Likewise; no overflow check.  */
     2358#define R_AARCH64_ADD_ABS_LO12_NC 277   /* Dir. ADD imm. from bits 11:0.  */
     2359#define R_AARCH64_LDST8_ABS_LO12_NC 278 /* Likewise for LD/ST; no check. */
     2360#define R_AARCH64_TSTBR14       279     /* PC-rel. TBZ/TBNZ imm. from 15:2.  */
     2361#define R_AARCH64_CONDBR19      280     /* PC-rel. cond. br. imm. from 20:2. */
     2362#define R_AARCH64_JUMP26        282     /* PC-rel. B imm. from bits 27:2.  */
     2363#define R_AARCH64_CALL26        283     /* Likewise for CALL.  */
     2364#define R_AARCH64_LDST16_ABS_LO12_NC 284        /* Dir. ADD imm. from bits 11:1.  */
     2365#define R_AARCH64_LDST32_ABS_LO12_NC 285        /* Likewise for bits 11:2.  */
     2366#define R_AARCH64_LDST64_ABS_LO12_NC 286        /* Likewise for bits 11:3.  */
     2367#define R_AARCH64_MOVW_PREL_G0  287     /* PC-rel. MOV{N,Z} imm. from 15:0.  */
     2368#define R_AARCH64_MOVW_PREL_G0_NC 288   /* Likewise for MOVK; no check.  */
     2369#define R_AARCH64_MOVW_PREL_G1  289     /* PC-rel. MOV{N,Z} imm. from 31:16. */
     2370#define R_AARCH64_MOVW_PREL_G1_NC 290   /* Likewise for MOVK; no check.  */
     2371#define R_AARCH64_MOVW_PREL_G2  291     /* PC-rel. MOV{N,Z} imm. from 47:32. */
     2372#define R_AARCH64_MOVW_PREL_G2_NC 292   /* Likewise for MOVK; no check.  */
     2373#define R_AARCH64_MOVW_PREL_G3  293     /* PC-rel. MOV{N,Z} imm. from 63:48. */
     2374#define R_AARCH64_LDST128_ABS_LO12_NC 299       /* Dir. ADD imm. from bits 11:4.  */
     2375#define R_AARCH64_MOVW_GOTOFF_G0 300    /* GOT-rel. off. MOV{N,Z} imm. 15:0. */
     2376#define R_AARCH64_MOVW_GOTOFF_G0_NC 301 /* Likewise for MOVK; no check.  */
     2377#define R_AARCH64_MOVW_GOTOFF_G1 302    /* GOT-rel. o. MOV{N,Z} imm. 31:16.  */
     2378#define R_AARCH64_MOVW_GOTOFF_G1_NC 303 /* Likewise for MOVK; no check.  */
     2379#define R_AARCH64_MOVW_GOTOFF_G2 304    /* GOT-rel. o. MOV{N,Z} imm. 47:32.  */
     2380#define R_AARCH64_MOVW_GOTOFF_G2_NC 305 /* Likewise for MOVK; no check.  */
     2381#define R_AARCH64_MOVW_GOTOFF_G3 306    /* GOT-rel. o. MOV{N,Z} imm. 63:48.  */
     2382#define R_AARCH64_GOTREL64      307     /* GOT-relative 64-bit.  */
     2383#define R_AARCH64_GOTREL32      308     /* GOT-relative 32-bit.  */
     2384#define R_AARCH64_GOT_LD_PREL19 309     /* PC-rel. GOT off. load imm. 20:2.  */
     2385#define R_AARCH64_LD64_GOTOFF_LO15 310  /* GOT-rel. off. LD/ST imm. 14:3.  */
     2386#define R_AARCH64_ADR_GOT_PAGE  311     /* P-page-rel. GOT off. ADRP 32:12.  */
     2387#define R_AARCH64_LD64_GOT_LO12_NC 312  /* Dir. GOT off. LD/ST imm. 11:3.  */
     2388#define R_AARCH64_LD64_GOTPAGE_LO15 313 /* GOT-page-rel. GOT off. LD/ST 14:3 */
     2389#define R_AARCH64_TLSGD_ADR_PREL21 512  /* PC-relative ADR imm. 20:0.  */
     2390#define R_AARCH64_TLSGD_ADR_PAGE21 513  /* page-rel. ADRP imm. 32:12.  */
     2391#define R_AARCH64_TLSGD_ADD_LO12_NC 514 /* direct ADD imm. from 11:0.  */
     2392#define R_AARCH64_TLSGD_MOVW_G1 515     /* GOT-rel. MOV{N,Z} 31:16.  */
     2393#define R_AARCH64_TLSGD_MOVW_G0_NC 516  /* GOT-rel. MOVK imm. 15:0.  */
     2394#define R_AARCH64_TLSLD_ADR_PREL21 517  /* Like 512; local dynamic model.  */
     2395#define R_AARCH64_TLSLD_ADR_PAGE21 518  /* Like 513; local dynamic model.  */
     2396#define R_AARCH64_TLSLD_ADD_LO12_NC 519 /* Like 514; local dynamic model.  */
     2397#define R_AARCH64_TLSLD_MOVW_G1 520     /* Like 515; local dynamic model.  */
     2398#define R_AARCH64_TLSLD_MOVW_G0_NC 521  /* Like 516; local dynamic model.  */
     2399#define R_AARCH64_TLSLD_LD_PREL19 522   /* TLS PC-rel. load imm. 20:2.  */
     2400#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523      /* TLS DTP-rel. MOV{N,Z} 47:32.  */
     2401#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524      /* TLS DTP-rel. MOV{N,Z} 31:16.  */
     2402#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525   /* Likewise; MOVK; no check.  */
     2403#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526      /* TLS DTP-rel. MOV{N,Z} 15:0.  */
     2404#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527   /* Likewise; MOVK; no check.  */
     2405#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528     /* DTP-rel. ADD imm. from 23:12. */
     2406#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529     /* DTP-rel. ADD imm. from 11:0.  */
     2407#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530  /* Likewise; no ovfl. check.  */
     2408#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531   /* DTP-rel. LD/ST imm. 11:0.  */
     2409#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532        /* Likewise; no check.  */
     2410#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533  /* DTP-rel. LD/ST imm. 11:1.  */
     2411#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534       /* Likewise; no check.  */
     2412#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535  /* DTP-rel. LD/ST imm. 11:2.  */
     2413#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536       /* Likewise; no check.  */
     2414#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537  /* DTP-rel. LD/ST imm. 11:3.  */
     2415#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538       /* Likewise; no check.  */
     2416#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539    /* GOT-rel. MOV{N,Z} 31:16.  */
     2417#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 /* GOT-rel. MOVK 15:0.  */
     2418#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 /* Page-rel. ADRP 32:12.  */
     2419#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542       /* Direct LD off. 11:3.  */
     2420#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543  /* PC-rel. load imm. 20:2.  */
     2421#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544       /* TLS TP-rel. MOV{N,Z} 47:32.  */
     2422#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545       /* TLS TP-rel. MOV{N,Z} 31:16.  */
     2423#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546    /* Likewise; MOVK; no check.  */
     2424#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547       /* TLS TP-rel. MOV{N,Z} 15:0.  */
     2425#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548    /* Likewise; MOVK; no check.  */
     2426#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549      /* TP-rel. ADD imm. 23:12.  */
     2427#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550      /* TP-rel. ADD imm. 11:0.  */
     2428#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551   /* Likewise; no ovfl. check.  */
     2429#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552    /* TP-rel. LD/ST off. 11:0.  */
     2430#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 /* Likewise; no ovfl. check. */
     2431#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554   /* TP-rel. LD/ST off. 11:1.  */
     2432#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555        /* Likewise; no check.  */
     2433#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556   /* TP-rel. LD/ST off. 11:2.  */
     2434#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557        /* Likewise; no check.  */
     2435#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558   /* TP-rel. LD/ST off. 11:3.  */
     2436#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559        /* Likewise; no check.  */
     2437#define R_AARCH64_TLSDESC_LD_PREL19 560 /* PC-rel. load immediate 20:2.  */
     2438#define R_AARCH64_TLSDESC_ADR_PREL21 561        /* PC-rel. ADR immediate 20:0.  */
     2439#define R_AARCH64_TLSDESC_ADR_PAGE21 562        /* Page-rel. ADRP imm. 32:12.  */
     2440#define R_AARCH64_TLSDESC_LD64_LO12 563 /* Direct LD off. from 11:3.  */
     2441#define R_AARCH64_TLSDESC_ADD_LO12 564  /* Direct ADD imm. from 11:0.  */
     2442#define R_AARCH64_TLSDESC_OFF_G1 565    /* GOT-rel. MOV{N,Z} imm. 31:16.  */
     2443#define R_AARCH64_TLSDESC_OFF_G0_NC 566 /* GOT-rel. MOVK imm. 15:0; no ck.  */
     2444#define R_AARCH64_TLSDESC_LDR   567     /* Relax LDR.  */
     2445#define R_AARCH64_TLSDESC_ADD   568     /* Relax ADD.  */
     2446#define R_AARCH64_TLSDESC_CALL  569     /* Relax BLR.  */
     2447#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570  /* TP-rel. LD/ST off. 11:4.  */
     2448#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571       /* Likewise; no check.  */
     2449#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 /* DTP-rel. LD/ST imm. 11:4. */
     2450#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573      /* Likewise; no check.  */
     2451#define R_AARCH64_COPY         1024     /* Copy symbol at runtime.  */
     2452#define R_AARCH64_GLOB_DAT     1025     /* Create GOT entry.  */
     2453#define R_AARCH64_JUMP_SLOT    1026     /* Create PLT entry.  */
     2454#define R_AARCH64_RELATIVE     1027     /* Adjust by program base.  */
     2455#define R_AARCH64_TLS_DTPMOD64 1028     /* Module number, 64 bit.  */
     2456#define R_AARCH64_TLS_DTPREL64 1029     /* Module-relative offset, 64 bit.  */
     2457#define R_AARCH64_TLS_TPREL64  1030     /* TP-relative offset, 64 bit.  */
     2458#define R_AARCH64_TLSDESC      1031     /* TLS Descriptor.  */
     2459#define R_AARCH64_IRELATIVE    1032     /* STT_GNU_IFUNC relocation.  */
     2460/* Keep this the last entry.  */
     2461#define R_AARCH64_NUM          1033
     2462
     2463/* ARM relocs.  */
     2464
     2465#define R_ARM_NONE              0       /* No reloc */
     2466#define R_ARM_PC24              1       /* PC relative 26 bit branch */
     2467#define R_ARM_ABS32             2       /* Direct 32 bit  */
     2468#define R_ARM_REL32             3       /* PC relative 32 bit */
     2469#define R_ARM_PC13              4
     2470#define R_ARM_ABS16             5       /* Direct 16 bit */
     2471#define R_ARM_ABS12             6       /* Direct 12 bit */
     2472#define R_ARM_THM_ABS5          7
     2473#define R_ARM_ABS8              8       /* Direct 8 bit */
     2474#define R_ARM_SBREL32           9
     2475#define R_ARM_THM_PC22          10
     2476#define R_ARM_THM_PC8           11
     2477#define R_ARM_AMP_VCALL9        12
     2478#define R_ARM_SWI24             13      /* Obsolete static relocation.  */
     2479#define R_ARM_TLS_DESC          13      /* Dynamic relocation.  */
     2480#define R_ARM_THM_SWI8          14
     2481#define R_ARM_XPC25             15
     2482#define R_ARM_THM_XPC22         16
     2483#define R_ARM_TLS_DTPMOD32      17      /* ID of module containing symbol */
     2484#define R_ARM_TLS_DTPOFF32      18      /* Offset in TLS block */
     2485#define R_ARM_TLS_TPOFF32       19      /* Offset in static TLS block */
     2486#define R_ARM_COPY              20      /* Copy symbol at runtime */
     2487#define R_ARM_GLOB_DAT          21      /* Create GOT entry */
     2488#define R_ARM_JUMP_SLOT         22      /* Create PLT entry */
     2489#define R_ARM_RELATIVE          23      /* Adjust by program base */
     2490#define R_ARM_GOTOFF            24      /* 32 bit offset to GOT */
     2491#define R_ARM_GOTPC             25      /* 32 bit PC relative offset to GOT */
     2492#define R_ARM_GOT32             26      /* 32 bit GOT entry */
     2493#define R_ARM_PLT32             27      /* 32 bit PLT address */
     2494#define R_ARM_CALL              28
     2495#define R_ARM_JUMP24            29
     2496#define R_ARM_THM_JUMP24        30
     2497#define R_ARM_ALU_PCREL_7_0     32
     2498#define R_ARM_ALU_PCREL_15_8    33
     2499#define R_ARM_ALU_PCREL_23_15   34
     2500#define R_ARM_LDR_SBREL_11_0    35
     2501#define R_ARM_ALU_SBREL_19_12   36
     2502#define R_ARM_ALU_SBREL_27_20   37
     2503#define R_ARM_V4BX              40
     2504#define R_ARM_PREL31            42
     2505#define R_ARM_MOVW_ABS_NC       43
     2506#define R_ARM_MOVT_ABS           44
     2507#define R_ARM_THM_MOVW_ABS_NC   47
     2508#define R_ARM_THM_MOVT_ABS      48
     2509#define R_ARM_TLS_GOTDESC       90
     2510#define R_ARM_TLS_CALL          91
     2511#define R_ARM_TLS_DESCSEQ       92
     2512#define R_ARM_THM_TLS_CALL      93
     2513#define R_ARM_GNU_VTENTRY       100
     2514#define R_ARM_GNU_VTINHERIT     101
     2515#define R_ARM_THM_PC11          102     /* thumb unconditional branch */
     2516#define R_ARM_THM_PC9           103     /* thumb conditional branch */
     2517#define R_ARM_TLS_GD32          104     /* PC-rel 32 bit for global dynamic
     2518                                           thread local data */
     2519#define R_ARM_TLS_LDM32         105     /* PC-rel 32 bit for local dynamic
     2520                                           thread local data */
     2521#define R_ARM_TLS_LDO32         106     /* 32 bit offset relative to TLS
     2522                                           block */
     2523#define R_ARM_TLS_IE32          107     /* PC-rel 32 bit for GOT entry of
     2524                                           static TLS block offset */
     2525#define R_ARM_TLS_LE32          108     /* 32 bit offset relative to static
     2526                                           TLS block */
     2527#define R_ARM_THM_TLS_DESCSEQ   129
     2528#define R_ARM_IRELATIVE         160
     2529#define R_ARM_RXPC25            249
     2530#define R_ARM_RSBREL32          250
     2531#define R_ARM_THM_RPC22         251
     2532#define R_ARM_RREL32            252
     2533#define R_ARM_RABS22            253
     2534#define R_ARM_RPC24             254
     2535#define R_ARM_RBASE             255
     2536/* Keep this the last entry.  */
     2537#define R_ARM_NUM               256
     2538
     2539/* TMS320C67xx specific declarations */
     2540
     2541/* XXX: no ELF standard yet*/
     2542
     2543/* TMS320C67xx relocs. */
     2544#define R_C60_32       1
     2545#define R_C60_GOT32     3               /* 32 bit GOT entry */
     2546#define R_C60_PLT32     4               /* 32 bit PLT address */
     2547#define R_C60_COPY      5               /* Copy symbol at runtime */
     2548#define R_C60_GLOB_DAT  6               /* Create GOT entry */
     2549#define R_C60_JMP_SLOT  7               /* Create PLT entry */
     2550#define R_C60_RELATIVE  8               /* Adjust by program base */
     2551#define R_C60_GOTOFF    9               /* 32 bit offset to GOT */
     2552#define R_C60_GOTPC     10              /* 32 bit PC relative offset to GOT */
     2553
     2554#define R_C60LO16      0x54       /* low 16 bit MVKL embedded */
     2555#define R_C60HI16      0x55       /* high 16 bit MVKH embedded */
     2556/* Keep this the last entry.  */
     2557#define R_C60_NUM      0x56
     2558
     2559/* IA-64 specific declarations.  */
     2560
     2561/* Processor specific flags for the Ehdr e_flags field.  */
     2562#define EF_IA_64_MASKOS         0x0000000f      /* os-specific flags */
     2563#define EF_IA_64_ABI64          0x00000010      /* 64-bit ABI */
     2564#define EF_IA_64_ARCH           0xff000000      /* arch. version mask */
     2565
     2566/* Processor specific values for the Phdr p_type field.  */
     2567#define PT_IA_64_ARCHEXT        (PT_LOPROC + 0) /* arch extension bits */
     2568#define PT_IA_64_UNWIND         (PT_LOPROC + 1) /* ia64 unwind bits */
     2569#define PT_IA_64_HP_OPT_ANOT    (PT_LOOS + 0x12)
     2570#define PT_IA_64_HP_HSL_ANOT    (PT_LOOS + 0x13)
     2571#define PT_IA_64_HP_STACK       (PT_LOOS + 0x14)
     2572
     2573/* Processor specific flags for the Phdr p_flags field.  */
     2574#define PF_IA_64_NORECOV        0x80000000      /* spec insns w/o recovery */
     2575
     2576/* Processor specific values for the Shdr sh_type field.  */
     2577#define SHT_IA_64_EXT           (SHT_LOPROC + 0) /* extension bits */
     2578#define SHT_IA_64_UNWIND        (SHT_LOPROC + 1) /* unwind bits */
     2579
     2580/* Processor specific flags for the Shdr sh_flags field.  */
     2581#define SHF_IA_64_SHORT         0x10000000      /* section near gp */
     2582#define SHF_IA_64_NORECOV       0x20000000      /* spec insns w/o recovery */
     2583
     2584/* Processor specific values for the Dyn d_tag field.  */
     2585#define DT_IA_64_PLT_RESERVE    (DT_LOPROC + 0)
     2586#define DT_IA_64_NUM            1
     2587
     2588/* IA-64 relocations.  */
     2589#define R_IA64_NONE             0x00    /* none */
     2590#define R_IA64_IMM14            0x21    /* symbol + addend, add imm14 */
     2591#define R_IA64_IMM22            0x22    /* symbol + addend, add imm22 */
     2592#define R_IA64_IMM64            0x23    /* symbol + addend, mov imm64 */
     2593#define R_IA64_DIR32MSB         0x24    /* symbol + addend, data4 MSB */
     2594#define R_IA64_DIR32LSB         0x25    /* symbol + addend, data4 LSB */
     2595#define R_IA64_DIR64MSB         0x26    /* symbol + addend, data8 MSB */
     2596#define R_IA64_DIR64LSB         0x27    /* symbol + addend, data8 LSB */
     2597#define R_IA64_GPREL22          0x2a    /* @gprel(sym + add), add imm22 */
     2598#define R_IA64_GPREL64I         0x2b    /* @gprel(sym + add), mov imm64 */
     2599#define R_IA64_GPREL32MSB       0x2c    /* @gprel(sym + add), data4 MSB */
     2600#define R_IA64_GPREL32LSB       0x2d    /* @gprel(sym + add), data4 LSB */
     2601#define R_IA64_GPREL64MSB       0x2e    /* @gprel(sym + add), data8 MSB */
     2602#define R_IA64_GPREL64LSB       0x2f    /* @gprel(sym + add), data8 LSB */
     2603#define R_IA64_LTOFF22          0x32    /* @ltoff(sym + add), add imm22 */
     2604#define R_IA64_LTOFF64I         0x33    /* @ltoff(sym + add), mov imm64 */
     2605#define R_IA64_PLTOFF22         0x3a    /* @pltoff(sym + add), add imm22 */
     2606#define R_IA64_PLTOFF64I        0x3b    /* @pltoff(sym + add), mov imm64 */
     2607#define R_IA64_PLTOFF64MSB      0x3e    /* @pltoff(sym + add), data8 MSB */
     2608#define R_IA64_PLTOFF64LSB      0x3f    /* @pltoff(sym + add), data8 LSB */
     2609#define R_IA64_FPTR64I          0x43    /* @fptr(sym + add), mov imm64 */
     2610#define R_IA64_FPTR32MSB        0x44    /* @fptr(sym + add), data4 MSB */
     2611#define R_IA64_FPTR32LSB        0x45    /* @fptr(sym + add), data4 LSB */
     2612#define R_IA64_FPTR64MSB        0x46    /* @fptr(sym + add), data8 MSB */
     2613#define R_IA64_FPTR64LSB        0x47    /* @fptr(sym + add), data8 LSB */
     2614#define R_IA64_PCREL60B         0x48    /* @pcrel(sym + add), brl */
     2615#define R_IA64_PCREL21B         0x49    /* @pcrel(sym + add), ptb, call */
     2616#define R_IA64_PCREL21M         0x4a    /* @pcrel(sym + add), chk.s */
     2617#define R_IA64_PCREL21F         0x4b    /* @pcrel(sym + add), fchkf */
     2618#define R_IA64_PCREL32MSB       0x4c    /* @pcrel(sym + add), data4 MSB */
     2619#define R_IA64_PCREL32LSB       0x4d    /* @pcrel(sym + add), data4 LSB */
     2620#define R_IA64_PCREL64MSB       0x4e    /* @pcrel(sym + add), data8 MSB */
     2621#define R_IA64_PCREL64LSB       0x4f    /* @pcrel(sym + add), data8 LSB */
     2622#define R_IA64_LTOFF_FPTR22     0x52    /* @ltoff(@fptr(s+a)), imm22 */
     2623#define R_IA64_LTOFF_FPTR64I    0x53    /* @ltoff(@fptr(s+a)), imm64 */
     2624#define R_IA64_LTOFF_FPTR32MSB  0x54    /* @ltoff(@fptr(s+a)), data4 MSB */
     2625#define R_IA64_LTOFF_FPTR32LSB  0x55    /* @ltoff(@fptr(s+a)), data4 LSB */
     2626#define R_IA64_LTOFF_FPTR64MSB  0x56    /* @ltoff(@fptr(s+a)), data8 MSB */
     2627#define R_IA64_LTOFF_FPTR64LSB  0x57    /* @ltoff(@fptr(s+a)), data8 LSB */
     2628#define R_IA64_SEGREL32MSB      0x5c    /* @segrel(sym + add), data4 MSB */
     2629#define R_IA64_SEGREL32LSB      0x5d    /* @segrel(sym + add), data4 LSB */
     2630#define R_IA64_SEGREL64MSB      0x5e    /* @segrel(sym + add), data8 MSB */
     2631#define R_IA64_SEGREL64LSB      0x5f    /* @segrel(sym + add), data8 LSB */
     2632#define R_IA64_SECREL32MSB      0x64    /* @secrel(sym + add), data4 MSB */
     2633#define R_IA64_SECREL32LSB      0x65    /* @secrel(sym + add), data4 LSB */
     2634#define R_IA64_SECREL64MSB      0x66    /* @secrel(sym + add), data8 MSB */
     2635#define R_IA64_SECREL64LSB      0x67    /* @secrel(sym + add), data8 LSB */
     2636#define R_IA64_REL32MSB         0x6c    /* data 4 + REL */
     2637#define R_IA64_REL32LSB         0x6d    /* data 4 + REL */
     2638#define R_IA64_REL64MSB         0x6e    /* data 8 + REL */
     2639#define R_IA64_REL64LSB         0x6f    /* data 8 + REL */
     2640#define R_IA64_LTV32MSB         0x74    /* symbol + addend, data4 MSB */
     2641#define R_IA64_LTV32LSB         0x75    /* symbol + addend, data4 LSB */
     2642#define R_IA64_LTV64MSB         0x76    /* symbol + addend, data8 MSB */
     2643#define R_IA64_LTV64LSB         0x77    /* symbol + addend, data8 LSB */
     2644#define R_IA64_PCREL21BI        0x79    /* @pcrel(sym + add), 21bit inst */
     2645#define R_IA64_PCREL22          0x7a    /* @pcrel(sym + add), 22bit inst */
     2646#define R_IA64_PCREL64I         0x7b    /* @pcrel(sym + add), 64bit inst */
     2647#define R_IA64_IPLTMSB          0x80    /* dynamic reloc, imported PLT, MSB */
     2648#define R_IA64_IPLTLSB          0x81    /* dynamic reloc, imported PLT, LSB */
     2649#define R_IA64_COPY             0x84    /* copy relocation */
     2650#define R_IA64_SUB              0x85    /* Addend and symbol difference */
     2651#define R_IA64_LTOFF22X         0x86    /* LTOFF22, relaxable.  */
     2652#define R_IA64_LDXMOV           0x87    /* Use of LTOFF22X.  */
     2653#define R_IA64_TPREL14          0x91    /* @tprel(sym + add), imm14 */
     2654#define R_IA64_TPREL22          0x92    /* @tprel(sym + add), imm22 */
     2655#define R_IA64_TPREL64I         0x93    /* @tprel(sym + add), imm64 */
     2656#define R_IA64_TPREL64MSB       0x96    /* @tprel(sym + add), data8 MSB */
     2657#define R_IA64_TPREL64LSB       0x97    /* @tprel(sym + add), data8 LSB */
     2658#define R_IA64_LTOFF_TPREL22    0x9a    /* @ltoff(@tprel(s+a)), imm2 */
     2659#define R_IA64_DTPMOD64MSB      0xa6    /* @dtpmod(sym + add), data8 MSB */
     2660#define R_IA64_DTPMOD64LSB      0xa7    /* @dtpmod(sym + add), data8 LSB */
     2661#define R_IA64_LTOFF_DTPMOD22   0xaa    /* @ltoff(@dtpmod(sym + add)), imm22 */
     2662#define R_IA64_DTPREL14         0xb1    /* @dtprel(sym + add), imm14 */
     2663#define R_IA64_DTPREL22         0xb2    /* @dtprel(sym + add), imm22 */
     2664#define R_IA64_DTPREL64I        0xb3    /* @dtprel(sym + add), imm64 */
     2665#define R_IA64_DTPREL32MSB      0xb4    /* @dtprel(sym + add), data4 MSB */
     2666#define R_IA64_DTPREL32LSB      0xb5    /* @dtprel(sym + add), data4 LSB */
     2667#define R_IA64_DTPREL64MSB      0xb6    /* @dtprel(sym + add), data8 MSB */
     2668#define R_IA64_DTPREL64LSB      0xb7    /* @dtprel(sym + add), data8 LSB */
     2669#define R_IA64_LTOFF_DTPREL22   0xba    /* @ltoff(@dtprel(s+a)), imm22 */
     2670
     2671/* SH specific declarations */
     2672
     2673/* Processor specific flags for the ELF header e_flags field.  */
     2674#define EF_SH_MACH_MASK         0x1f
     2675#define EF_SH_UNKNOWN           0x0
     2676#define EF_SH1                  0x1
     2677#define EF_SH2                  0x2
     2678#define EF_SH3                  0x3
     2679#define EF_SH_DSP               0x4
     2680#define EF_SH3_DSP              0x5
     2681#define EF_SH4AL_DSP            0x6
     2682#define EF_SH3E                 0x8
     2683#define EF_SH4                  0x9
     2684#define EF_SH2E                 0xb
     2685#define EF_SH4A                 0xc
     2686#define EF_SH2A                 0xd
     2687#define EF_SH4_NOFPU            0x10
     2688#define EF_SH4A_NOFPU           0x11
     2689#define EF_SH4_NOMMU_NOFPU      0x12
     2690#define EF_SH2A_NOFPU           0x13
     2691#define EF_SH3_NOMMU            0x14
     2692#define EF_SH2A_SH4_NOFPU       0x15
     2693#define EF_SH2A_SH3_NOFPU       0x16
     2694#define EF_SH2A_SH4             0x17
     2695#define EF_SH2A_SH3E            0x18
     2696
     2697/* SH relocs.  */
     2698#define R_SH_NONE               0
     2699#define R_SH_DIR32              1
     2700#define R_SH_REL32              2
     2701#define R_SH_DIR8WPN            3
     2702#define R_SH_IND12W             4
     2703#define R_SH_DIR8WPL            5
     2704#define R_SH_DIR8WPZ            6
     2705#define R_SH_DIR8BP             7
     2706#define R_SH_DIR8W              8
     2707#define R_SH_DIR8L              9
     2708#define R_SH_SWITCH16           25
     2709#define R_SH_SWITCH32           26
     2710#define R_SH_USES               27
     2711#define R_SH_COUNT              28
     2712#define R_SH_ALIGN              29
     2713#define R_SH_CODE               30
     2714#define R_SH_DATA               31
     2715#define R_SH_LABEL              32
     2716#define R_SH_SWITCH8            33
     2717#define R_SH_GNU_VTINHERIT      34
     2718#define R_SH_GNU_VTENTRY        35
     2719#define R_SH_TLS_GD_32          144
     2720#define R_SH_TLS_LD_32          145
     2721#define R_SH_TLS_LDO_32         146
     2722#define R_SH_TLS_IE_32          147
     2723#define R_SH_TLS_LE_32          148
     2724#define R_SH_TLS_DTPMOD32       149
     2725#define R_SH_TLS_DTPOFF32       150
     2726#define R_SH_TLS_TPOFF32        151
     2727#define R_SH_GOT32              160
     2728#define R_SH_PLT32              161
     2729#define R_SH_COPY               162
     2730#define R_SH_GLOB_DAT           163
     2731#define R_SH_JMP_SLOT           164
     2732#define R_SH_RELATIVE           165
     2733#define R_SH_GOTOFF             166
     2734#define R_SH_GOTPC              167
     2735/* Keep this the last entry.  */
     2736#define R_SH_NUM                256
     2737
     2738/* S/390 specific definitions.  */
     2739
     2740/* Valid values for the e_flags field.  */
     2741
     2742#define EF_S390_HIGH_GPRS    0x00000001  /* High GPRs kernel facility needed.  */
     2743
     2744/* Additional s390 relocs */
     2745
     2746#define R_390_NONE              0       /* No reloc.  */
     2747#define R_390_8                 1       /* Direct 8 bit.  */
     2748#define R_390_12                2       /* Direct 12 bit.  */
     2749#define R_390_16                3       /* Direct 16 bit.  */
     2750#define R_390_32                4       /* Direct 32 bit.  */
     2751#define R_390_PC32              5       /* PC relative 32 bit.  */
     2752#define R_390_GOT12             6       /* 12 bit GOT offset.  */
     2753#define R_390_GOT32             7       /* 32 bit GOT offset.  */
     2754#define R_390_PLT32             8       /* 32 bit PC relative PLT address.  */
     2755#define R_390_COPY              9       /* Copy symbol at runtime.  */
     2756#define R_390_GLOB_DAT          10      /* Create GOT entry.  */
     2757#define R_390_JMP_SLOT          11      /* Create PLT entry.  */
     2758#define R_390_RELATIVE          12      /* Adjust by program base.  */
     2759#define R_390_GOTOFF32          13      /* 32 bit offset to GOT.         */
     2760#define R_390_GOTPC             14      /* 32 bit PC relative offset to GOT.  */
     2761#define R_390_GOT16             15      /* 16 bit GOT offset.  */
     2762#define R_390_PC16              16      /* PC relative 16 bit.  */
     2763#define R_390_PC16DBL           17      /* PC relative 16 bit shifted by 1.  */
     2764#define R_390_PLT16DBL          18      /* 16 bit PC rel. PLT shifted by 1.  */
     2765#define R_390_PC32DBL           19      /* PC relative 32 bit shifted by 1.  */
     2766#define R_390_PLT32DBL          20      /* 32 bit PC rel. PLT shifted by 1.  */
     2767#define R_390_GOTPCDBL          21      /* 32 bit PC rel. GOT shifted by 1.  */
     2768#define R_390_64                22      /* Direct 64 bit.  */
     2769#define R_390_PC64              23      /* PC relative 64 bit.  */
     2770#define R_390_GOT64             24      /* 64 bit GOT offset.  */
     2771#define R_390_PLT64             25      /* 64 bit PC relative PLT address.  */
     2772#define R_390_GOTENT            26      /* 32 bit PC rel. to GOT entry >> 1. */
     2773#define R_390_GOTOFF16          27      /* 16 bit offset to GOT. */
     2774#define R_390_GOTOFF64          28      /* 64 bit offset to GOT. */
     2775#define R_390_GOTPLT12          29      /* 12 bit offset to jump slot.  */
     2776#define R_390_GOTPLT16          30      /* 16 bit offset to jump slot.  */
     2777#define R_390_GOTPLT32          31      /* 32 bit offset to jump slot.  */
     2778#define R_390_GOTPLT64          32      /* 64 bit offset to jump slot.  */
     2779#define R_390_GOTPLTENT         33      /* 32 bit rel. offset to jump slot.  */
     2780#define R_390_PLTOFF16          34      /* 16 bit offset from GOT to PLT. */
     2781#define R_390_PLTOFF32          35      /* 32 bit offset from GOT to PLT. */
     2782#define R_390_PLTOFF64          36      /* 16 bit offset from GOT to PLT. */
     2783#define R_390_TLS_LOAD          37      /* Tag for load insn in TLS code.  */
     2784#define R_390_TLS_GDCALL        38      /* Tag for function call in general
     2785                                           dynamic TLS code. */
     2786#define R_390_TLS_LDCALL        39      /* Tag for function call in local
     2787                                           dynamic TLS code. */
     2788#define R_390_TLS_GD32          40      /* Direct 32 bit for general dynamic
     2789                                           thread local data.  */
     2790#define R_390_TLS_GD64          41      /* Direct 64 bit for general dynamic
     2791                                          thread local data.  */
     2792#define R_390_TLS_GOTIE12       42      /* 12 bit GOT offset for static TLS
     2793                                           block offset.  */
     2794#define R_390_TLS_GOTIE32       43      /* 32 bit GOT offset for static TLS
     2795                                           block offset.  */
     2796#define R_390_TLS_GOTIE64       44      /* 64 bit GOT offset for static TLS
     2797                                           block offset. */
     2798#define R_390_TLS_LDM32         45      /* Direct 32 bit for local dynamic
     2799                                           thread local data in LE code.  */
     2800#define R_390_TLS_LDM64         46      /* Direct 64 bit for local dynamic
     2801                                           thread local data in LE code.  */
     2802#define R_390_TLS_IE32          47      /* 32 bit address of GOT entry for
     2803                                           negated static TLS block offset.  */
     2804#define R_390_TLS_IE64          48      /* 64 bit address of GOT entry for
     2805                                           negated static TLS block offset.  */
     2806#define R_390_TLS_IEENT         49      /* 32 bit rel. offset to GOT entry for
     2807                                           negated static TLS block offset.  */
     2808#define R_390_TLS_LE32          50      /* 32 bit negated offset relative to
     2809                                           static TLS block.  */
     2810#define R_390_TLS_LE64          51      /* 64 bit negated offset relative to
     2811                                           static TLS block.  */
     2812#define R_390_TLS_LDO32         52      /* 32 bit offset relative to TLS
     2813                                           block.  */
     2814#define R_390_TLS_LDO64         53      /* 64 bit offset relative to TLS
     2815                                           block.  */
     2816#define R_390_TLS_DTPMOD        54      /* ID of module containing symbol.  */
     2817#define R_390_TLS_DTPOFF        55      /* Offset in TLS block.  */
     2818#define R_390_TLS_TPOFF         56      /* Negated offset in static TLS
     2819                                           block.  */
     2820#define R_390_20                57      /* Direct 20 bit.  */
     2821#define R_390_GOT20             58      /* 20 bit GOT offset.  */
     2822#define R_390_GOTPLT20          59      /* 20 bit offset to jump slot.  */
     2823#define R_390_TLS_GOTIE20       60      /* 20 bit GOT offset for static TLS
     2824                                           block offset.  */
     2825#define R_390_IRELATIVE         61      /* STT_GNU_IFUNC relocation.  */
     2826/* Keep this the last entry.  */
     2827#define R_390_NUM               62
     2828
     2829
     2830/* CRIS relocations.  */
     2831#define R_CRIS_NONE             0
     2832#define R_CRIS_8                1
     2833#define R_CRIS_16               2
     2834#define R_CRIS_32               3
     2835#define R_CRIS_8_PCREL          4
     2836#define R_CRIS_16_PCREL         5
     2837#define R_CRIS_32_PCREL         6
     2838#define R_CRIS_GNU_VTINHERIT    7
     2839#define R_CRIS_GNU_VTENTRY      8
     2840#define R_CRIS_COPY             9
     2841#define R_CRIS_GLOB_DAT         10
     2842#define R_CRIS_JUMP_SLOT        11
     2843#define R_CRIS_RELATIVE         12
     2844#define R_CRIS_16_GOT           13
     2845#define R_CRIS_32_GOT           14
     2846#define R_CRIS_16_GOTPLT        15
     2847#define R_CRIS_32_GOTPLT        16
     2848#define R_CRIS_32_GOTREL        17
     2849#define R_CRIS_32_PLT_GOTREL    18
     2850#define R_CRIS_32_PLT_PCREL     19
     2851
     2852#define R_CRIS_NUM              20
     2853
    10472854
    10482855/* AMD x86-64 relocations.  */
     
    10752882                                           to GOT entry for IE symbol */
    10762883#define R_X86_64_TPOFF32        23      /* Offset in initial TLS block */
    1077 
    1078 #define R_X86_64_NUM            24
    1079 
    1080 /* For Sparc64, legal values for d_tag of Elf64_Dyn.  */
    1081 
    1082 #define DT_SPARC_REGISTER 0x70000001
    1083 #define DT_SPARC_NUM    2
    1084 
    1085 /* Bits present in AT_HWCAP, primarily for Sparc32.  */
    1086 
    1087 #define HWCAP_SPARC_FLUSH       1       /* The cpu supports flush insn.  */
    1088 #define HWCAP_SPARC_STBAR       2
    1089 #define HWCAP_SPARC_SWAP        4
    1090 #define HWCAP_SPARC_MULDIV      8
    1091 #define HWCAP_SPARC_V9          16      /* The cpu is v9, so v8plus is ok.  */
    1092 
    1093 /* MIPS R3000 specific definitions.  */
    1094 
    1095 /* Legal values for e_flags field of Elf32_Ehdr.  */
    1096 
    1097 #define EF_MIPS_NOREORDER   1           /* A .noreorder directive was used */
    1098 #define EF_MIPS_PIC         2           /* Contains PIC code */
    1099 #define EF_MIPS_CPIC        4           /* Uses PIC calling sequence */
    1100 #define EF_MIPS_XGOT        8
    1101 #define EF_MIPS_64BIT_WHIRL 16
    1102 #define EF_MIPS_ABI2        32
    1103 #define EF_MIPS_ABI_ON32    64
    1104 #define EF_MIPS_ARCH        0xf0000000  /* MIPS architecture level */
    1105 
    1106 /* Legal values for MIPS architecture level.  */
    1107 
    1108 #define EF_MIPS_ARCH_1      0x00000000  /* -mips1 code.  */
    1109 #define EF_MIPS_ARCH_2      0x10000000  /* -mips2 code.  */
    1110 #define EF_MIPS_ARCH_3      0x20000000  /* -mips3 code.  */
    1111 #define EF_MIPS_ARCH_4      0x30000000  /* -mips4 code.  */
    1112 #define EF_MIPS_ARCH_5      0x40000000  /* -mips5 code.  */
    1113 
    1114 /* The following are non-official names and should not be used.  */
    1115 
    1116 #define E_MIPS_ARCH_1     0x00000000    /* -mips1 code.  */
    1117 #define E_MIPS_ARCH_2     0x10000000    /* -mips2 code.  */
    1118 #define E_MIPS_ARCH_3     0x20000000    /* -mips3 code.  */
    1119 #define E_MIPS_ARCH_4     0x30000000    /* -mips4 code.  */
    1120 #define E_MIPS_ARCH_5     0x40000000    /* -mips5 code.  */
    1121 
    1122 /* Special section indices.  */
    1123 
    1124 #define SHN_MIPS_ACOMMON 0xff00         /* Allocated common symbols */
    1125 #define SHN_MIPS_TEXT    0xff01         /* Allocated test symbols.  */
    1126 #define SHN_MIPS_DATA    0xff02         /* Allocated data symbols.  */
    1127 #define SHN_MIPS_SCOMMON 0xff03         /* Small common symbols */
    1128 #define SHN_MIPS_SUNDEFINED 0xff04      /* Small undefined symbols */
    1129 
    1130 /* Legal values for sh_type field of Elf32_Shdr.  */
    1131 
    1132 #define SHT_MIPS_LIBLIST       0x70000000 /* Shared objects used in link */
    1133 #define SHT_MIPS_MSYM          0x70000001
    1134 #define SHT_MIPS_CONFLICT      0x70000002 /* Conflicting symbols */
    1135 #define SHT_MIPS_GPTAB         0x70000003 /* Global data area sizes */
    1136 #define SHT_MIPS_UCODE         0x70000004 /* Reserved for SGI/MIPS compilers */
    1137 #define SHT_MIPS_DEBUG         0x70000005 /* MIPS ECOFF debugging information*/
    1138 #define SHT_MIPS_REGINFO       0x70000006 /* Register usage information */
    1139 #define SHT_MIPS_PACKAGE       0x70000007
    1140 #define SHT_MIPS_PACKSYM       0x70000008
    1141 #define SHT_MIPS_RELD          0x70000009
    1142 #define SHT_MIPS_IFACE         0x7000000b
    1143 #define SHT_MIPS_CONTENT       0x7000000c
    1144 #define SHT_MIPS_OPTIONS       0x7000000d /* Miscellaneous options.  */
    1145 #define SHT_MIPS_SHDR          0x70000010
    1146 #define SHT_MIPS_FDESC         0x70000011
    1147 #define SHT_MIPS_EXTSYM        0x70000012
    1148 #define SHT_MIPS_DENSE         0x70000013
    1149 #define SHT_MIPS_PDESC         0x70000014
    1150 #define SHT_MIPS_LOCSYM        0x70000015
    1151 #define SHT_MIPS_AUXSYM        0x70000016
    1152 #define SHT_MIPS_OPTSYM        0x70000017
    1153 #define SHT_MIPS_LOCSTR        0x70000018
    1154 #define SHT_MIPS_LINE          0x70000019
    1155 #define SHT_MIPS_RFDESC        0x7000001a
    1156 #define SHT_MIPS_DELTASYM      0x7000001b
    1157 #define SHT_MIPS_DELTAINST     0x7000001c
    1158 #define SHT_MIPS_DELTACLASS    0x7000001d
    1159 #define SHT_MIPS_DWARF         0x7000001e /* DWARF debugging information.  */
    1160 #define SHT_MIPS_DELTADECL     0x7000001f
    1161 #define SHT_MIPS_SYMBOL_LIB    0x70000020
    1162 #define SHT_MIPS_EVENTS        0x70000021 /* Event section.  */
    1163 #define SHT_MIPS_TRANSLATE     0x70000022
    1164 #define SHT_MIPS_PIXIE         0x70000023
    1165 #define SHT_MIPS_XLATE         0x70000024
    1166 #define SHT_MIPS_XLATE_DEBUG   0x70000025
    1167 #define SHT_MIPS_WHIRL         0x70000026
    1168 #define SHT_MIPS_EH_REGION     0x70000027
    1169 #define SHT_MIPS_XLATE_OLD     0x70000028
    1170 #define SHT_MIPS_PDR_EXCEPTION 0x70000029
    1171 
    1172 /* Legal values for sh_flags field of Elf32_Shdr.  */
    1173 
    1174 #define SHF_MIPS_GPREL   0x10000000     /* Must be part of global data area */
    1175 #define SHF_MIPS_MERGE   0x20000000
    1176 #define SHF_MIPS_ADDR    0x40000000
    1177 #define SHF_MIPS_STRINGS 0x80000000
    1178 #define SHF_MIPS_NOSTRIP 0x08000000
    1179 #define SHF_MIPS_LOCAL   0x04000000
    1180 #define SHF_MIPS_NAMES   0x02000000
    1181 #define SHF_MIPS_NODUPE  0x01000000
    1182 
    1183 
    1184 /* Symbol tables.  */
    1185 
    1186 /* MIPS specific values for `st_other'.  */
    1187 #define STO_MIPS_DEFAULT                0x0
    1188 #define STO_MIPS_INTERNAL               0x1
    1189 #define STO_MIPS_HIDDEN                 0x2
    1190 #define STO_MIPS_PROTECTED              0x3
    1191 #define STO_MIPS_SC_ALIGN_UNUSED        0xff
    1192 
    1193 /* MIPS specific values for `st_info'.  */
    1194 #define STB_MIPS_SPLIT_COMMON           13
    1195 
    1196 /* Entries found in sections of type SHT_MIPS_GPTAB.  */
    1197 
    1198 typedef union
    1199 {
    1200   struct
    1201     {
    1202       Elf32_Word gt_current_g_value;    /* -G value used for compilation */
    1203       Elf32_Word gt_unused;             /* Not used */
    1204     } gt_header;                        /* First entry in section */
    1205   struct
    1206     {
    1207       Elf32_Word gt_g_value;            /* If this value were used for -G */
    1208       Elf32_Word gt_bytes;              /* This many bytes would be used */
    1209     } gt_entry;                         /* Subsequent entries in section */
    1210 } Elf32_gptab;
    1211 
    1212 /* Entry found in sections of type SHT_MIPS_REGINFO.  */
    1213 
    1214 typedef struct
    1215 {
    1216   Elf32_Word    ri_gprmask;             /* General registers used */
    1217   Elf32_Word    ri_cprmask[4];          /* Coprocessor registers used */
    1218   Elf32_Sword   ri_gp_value;            /* $gp register value */
    1219 } Elf32_RegInfo;
    1220 
    1221 /* Entries found in sections of type SHT_MIPS_OPTIONS.  */
    1222 
    1223 typedef struct
    1224 {
    1225   unsigned char kind;           /* Determines interpretation of the
    1226                                    variable part of descriptor.  */
    1227   unsigned char size;           /* Size of descriptor, including header.  */
    1228   Elf32_Section section;        /* Section header index of section affected,
    1229                                    0 for global options.  */
    1230   Elf32_Word info;              /* Kind-specific information.  */
    1231 } Elf_Options;
    1232 
    1233 /* Values for `kind' field in Elf_Options.  */
    1234 
    1235 #define ODK_NULL        0       /* Undefined.  */
    1236 #define ODK_REGINFO     1       /* Register usage information.  */
    1237 #define ODK_EXCEPTIONS  2       /* Exception processing options.  */
    1238 #define ODK_PAD         3       /* Section padding options.  */
    1239 #define ODK_HWPATCH     4       /* Hardware workarounds performed */
    1240 #define ODK_FILL        5       /* record the fill value used by the linker. */
    1241 #define ODK_TAGS        6       /* reserve space for desktop tools to write. */
    1242 #define ODK_HWAND       7       /* HW workarounds.  'AND' bits when merging. */
    1243 #define ODK_HWOR        8       /* HW workarounds.  'OR' bits when merging.  */
    1244 
    1245 /* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries.  */
    1246 
    1247 #define OEX_FPU_MIN     0x1f    /* FPE's which MUST be enabled.  */
    1248 #define OEX_FPU_MAX     0x1f00  /* FPE's which MAY be enabled.  */
    1249 #define OEX_PAGE0       0x10000 /* page zero must be mapped.  */
    1250 #define OEX_SMM         0x20000 /* Force sequential memory mode?  */
    1251 #define OEX_FPDBUG      0x40000 /* Force floating point debug mode?  */
    1252 #define OEX_PRECISEFP   OEX_FPDBUG
    1253 #define OEX_DISMISS     0x80000 /* Dismiss invalid address faults?  */
    1254 
    1255 #define OEX_FPU_INVAL   0x10
    1256 #define OEX_FPU_DIV0    0x08
    1257 #define OEX_FPU_OFLO    0x04
    1258 #define OEX_FPU_UFLO    0x02
    1259 #define OEX_FPU_INEX    0x01
    1260 
    1261 /* Masks for `info' in Elf_Options for an ODK_HWPATCH entry.  */
    1262 
    1263 #define OHW_R4KEOP      0x1     /* R4000 end-of-page patch.  */
    1264 #define OHW_R8KPFETCH   0x2     /* may need R8000 prefetch patch.  */
    1265 #define OHW_R5KEOP      0x4     /* R5000 end-of-page patch.  */
    1266 #define OHW_R5KCVTL     0x8     /* R5000 cvt.[ds].l bug.  clean=1.  */
    1267 
    1268 #define OPAD_PREFIX     0x1
    1269 #define OPAD_POSTFIX    0x2
    1270 #define OPAD_SYMBOL     0x4
    1271 
    1272 /* Entry found in `.options' section.  */
    1273 
    1274 typedef struct
    1275 {
    1276   Elf32_Word hwp_flags1;        /* Extra flags.  */
    1277   Elf32_Word hwp_flags2;        /* Extra flags.  */
    1278 } Elf_Options_Hw;
    1279 
    1280 /* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries.  */
    1281 
    1282 #define OHWA0_R4KEOP_CHECKED    0x00000001
    1283 #define OHWA1_R4KEOP_CLEAN      0x00000002
    1284 
    1285 /* MIPS relocs.  */
    1286 
    1287 #define R_MIPS_NONE             0       /* No reloc */
    1288 #define R_MIPS_16               1       /* Direct 16 bit */
    1289 #define R_MIPS_32               2       /* Direct 32 bit */
    1290 #define R_MIPS_REL32            3       /* PC relative 32 bit */
    1291 #define R_MIPS_26               4       /* Direct 26 bit shifted */
    1292 #define R_MIPS_HI16             5       /* High 16 bit */
    1293 #define R_MIPS_LO16             6       /* Low 16 bit */
    1294 #define R_MIPS_GPREL16          7       /* GP relative 16 bit */
    1295 #define R_MIPS_LITERAL          8       /* 16 bit literal entry */
    1296 #define R_MIPS_GOT16            9       /* 16 bit GOT entry */
    1297 #define R_MIPS_PC16             10      /* PC relative 16 bit */
    1298 #define R_MIPS_CALL16           11      /* 16 bit GOT entry for function */
    1299 #define R_MIPS_GPREL32          12      /* GP relative 32 bit */
    1300 
    1301 #define R_MIPS_SHIFT5           16
    1302 #define R_MIPS_SHIFT6           17
    1303 #define R_MIPS_64               18
    1304 #define R_MIPS_GOT_DISP         19
    1305 #define R_MIPS_GOT_PAGE         20
    1306 #define R_MIPS_GOT_OFST         21
    1307 #define R_MIPS_GOT_HI16         22
    1308 #define R_MIPS_GOT_LO16         23
    1309 #define R_MIPS_SUB              24
    1310 #define R_MIPS_INSERT_A         25
    1311 #define R_MIPS_INSERT_B         26
    1312 #define R_MIPS_DELETE           27
    1313 #define R_MIPS_HIGHER           28
    1314 #define R_MIPS_HIGHEST          29
    1315 #define R_MIPS_CALL_HI16        30
    1316 #define R_MIPS_CALL_LO16        31
    1317 #define R_MIPS_SCN_DISP         32
    1318 #define R_MIPS_REL16            33
    1319 #define R_MIPS_ADD_IMMEDIATE    34
    1320 #define R_MIPS_PJUMP            35
    1321 #define R_MIPS_RELGOT           36
    1322 #define R_MIPS_JALR             37
    1323 /* Keep this the last entry.  */
    1324 #define R_MIPS_NUM              38
    1325 
    1326 /* Legal values for p_type field of Elf32_Phdr.  */
    1327 
    1328 #define PT_MIPS_REGINFO 0x70000000      /* Register usage information */
    1329 #define PT_MIPS_RTPROC  0x70000001      /* Runtime procedure table. */
    1330 #define PT_MIPS_OPTIONS 0x70000002
    1331 
    1332 /* Special program header types.  */
    1333 
    1334 #define PF_MIPS_LOCAL   0x10000000
    1335 
    1336 /* Legal values for d_tag field of Elf32_Dyn.  */
    1337 
    1338 #define DT_MIPS_RLD_VERSION  0x70000001 /* Runtime linker interface version */
    1339 #define DT_MIPS_TIME_STAMP   0x70000002 /* Timestamp */
    1340 #define DT_MIPS_ICHECKSUM    0x70000003 /* Checksum */
    1341 #define DT_MIPS_IVERSION     0x70000004 /* Version string (string tbl index) */
    1342 #define DT_MIPS_FLAGS        0x70000005 /* Flags */
    1343 #define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */
    1344 #define DT_MIPS_MSYM         0x70000007
    1345 #define DT_MIPS_CONFLICT     0x70000008 /* Address of CONFLICT section */
    1346 #define DT_MIPS_LIBLIST      0x70000009 /* Address of LIBLIST section */
    1347 #define DT_MIPS_LOCAL_GOTNO  0x7000000a /* Number of local GOT entries */
    1348 #define DT_MIPS_CONFLICTNO   0x7000000b /* Number of CONFLICT entries */
    1349 #define DT_MIPS_LIBLISTNO    0x70000010 /* Number of LIBLIST entries */
    1350 #define DT_MIPS_SYMTABNO     0x70000011 /* Number of DYNSYM entries */
    1351 #define DT_MIPS_UNREFEXTNO   0x70000012 /* First external DYNSYM */
    1352 #define DT_MIPS_GOTSYM       0x70000013 /* First GOT entry in DYNSYM */
    1353 #define DT_MIPS_HIPAGENO     0x70000014 /* Number of GOT page table entries */
    1354 #define DT_MIPS_RLD_MAP      0x70000016 /* Address of run time loader map.  */
    1355 #define DT_MIPS_DELTA_CLASS  0x70000017 /* Delta C++ class definition.  */
    1356 #define DT_MIPS_DELTA_CLASS_NO    0x70000018 /* Number of entries in
    1357                                                 DT_MIPS_DELTA_CLASS.  */
    1358 #define DT_MIPS_DELTA_INSTANCE    0x70000019 /* Delta C++ class instances.  */
    1359 #define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
    1360                                                 DT_MIPS_DELTA_INSTANCE.  */
    1361 #define DT_MIPS_DELTA_RELOC  0x7000001b /* Delta relocations.  */
    1362 #define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
    1363                                              DT_MIPS_DELTA_RELOC.  */
    1364 #define DT_MIPS_DELTA_SYM    0x7000001d /* Delta symbols that Delta
    1365                                            relocations refer to.  */
    1366 #define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
    1367                                            DT_MIPS_DELTA_SYM.  */
    1368 #define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
    1369                                              class declaration.  */
    1370 #define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
    1371                                                 DT_MIPS_DELTA_CLASSSYM.  */
    1372 #define DT_MIPS_CXX_FLAGS    0x70000022 /* Flags indicating for C++ flavor.  */
    1373 #define DT_MIPS_PIXIE_INIT   0x70000023
    1374 #define DT_MIPS_SYMBOL_LIB   0x70000024
    1375 #define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
    1376 #define DT_MIPS_LOCAL_GOTIDX 0x70000026
    1377 #define DT_MIPS_HIDDEN_GOTIDX 0x70000027
    1378 #define DT_MIPS_PROTECTED_GOTIDX 0x70000028
    1379 #define DT_MIPS_OPTIONS      0x70000029 /* Address of .options.  */
    1380 #define DT_MIPS_INTERFACE    0x7000002a /* Address of .interface.  */
    1381 #define DT_MIPS_DYNSTR_ALIGN 0x7000002b
    1382 #define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
    1383 #define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
    1384                                                     function stored in GOT.  */
    1385 #define DT_MIPS_PERF_SUFFIX  0x7000002e /* Default suffix of dso to be added
    1386                                            by rld on dlopen() calls.  */
    1387 #define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
    1388 #define DT_MIPS_GP_VALUE     0x70000030 /* GP value for aux GOTs.  */
    1389 #define DT_MIPS_AUX_DYNAMIC  0x70000031 /* Address of aux .dynamic.  */
    1390 #define DT_MIPS_NUM          0x32
    1391 
    1392 /* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry.  */
    1393 
    1394 #define RHF_NONE                   0            /* No flags */
    1395 #define RHF_QUICKSTART             (1 << 0)     /* Use quickstart */
    1396 #define RHF_NOTPOT                 (1 << 1)     /* Hash size not power of 2 */
    1397 #define RHF_NO_LIBRARY_REPLACEMENT (1 << 2)     /* Ignore LD_LIBRARY_PATH */
    1398 #define RHF_NO_MOVE                (1 << 3)
    1399 #define RHF_SGI_ONLY               (1 << 4)
    1400 #define RHF_GUARANTEE_INIT         (1 << 5)
    1401 #define RHF_DELTA_C_PLUS_PLUS      (1 << 6)
    1402 #define RHF_GUARANTEE_START_INIT   (1 << 7)
    1403 #define RHF_PIXIE                  (1 << 8)
    1404 #define RHF_DEFAULT_DELAY_LOAD     (1 << 9)
    1405 #define RHF_REQUICKSTART           (1 << 10)
    1406 #define RHF_REQUICKSTARTED         (1 << 11)
    1407 #define RHF_CORD                   (1 << 12)
    1408 #define RHF_NO_UNRES_UNDEF         (1 << 13)
    1409 #define RHF_RLD_ORDER_SAFE         (1 << 14)
    1410 
    1411 /* Entries found in sections of type SHT_MIPS_LIBLIST.  */
    1412 
    1413 typedef struct
    1414 {
    1415   Elf32_Word l_name;            /* Name (string table index) */
    1416   Elf32_Word l_time_stamp;      /* Timestamp */
    1417   Elf32_Word l_checksum;        /* Checksum */
    1418   Elf32_Word l_version;         /* Interface version */
    1419   Elf32_Word l_flags;           /* Flags */
    1420 } Elf32_Lib;
    1421 
    1422 typedef struct
    1423 {
    1424   Elf64_Word l_name;            /* Name (string table index) */
    1425   Elf64_Word l_time_stamp;      /* Timestamp */
    1426   Elf64_Word l_checksum;        /* Checksum */
    1427   Elf64_Word l_version;         /* Interface version */
    1428   Elf64_Word l_flags;           /* Flags */
    1429 } Elf64_Lib;
    1430 
    1431 
    1432 /* Legal values for l_flags.  */
    1433 
    1434 #define LL_NONE           0
    1435 #define LL_EXACT_MATCH    (1 << 0)      /* Require exact match */
    1436 #define LL_IGNORE_INT_VER (1 << 1)      /* Ignore interface version */
    1437 #define LL_REQUIRE_MINOR  (1 << 2)
    1438 #define LL_EXPORTS        (1 << 3)
    1439 #define LL_DELAY_LOAD     (1 << 4)
    1440 #define LL_DELTA          (1 << 5)
    1441 
    1442 /* Entries found in sections of type SHT_MIPS_CONFLICT.  */
    1443 
    1444 typedef Elf32_Addr Elf32_Conflict;
    1445 
    1446 
    1447 /* HPPA specific definitions.  */
    1448 
    1449 /* Legal values for e_flags field of Elf32_Ehdr.  */
    1450 
    1451 #define EF_PARISC_TRAPNL        1       /* Trap nil pointer dereference.  */
    1452 #define EF_PARISC_EXT           2       /* Program uses arch. extensions.  */
    1453 #define EF_PARISC_ARCH          0xffff0000 /* Architecture version.  */
    1454 /* Defined values are:
    1455                                 0x020b  PA-RISC 1.0 big-endian
    1456                                 0x0210  PA-RISC 1.1 big-endian
    1457                                 0x028b  PA-RISC 1.0 little-endian
    1458                                 0x0290  PA-RISC 1.1 little-endian
    1459 */
    1460 
    1461 /* Legal values for sh_type field of Elf32_Shdr.  */
    1462 
    1463 #define SHT_PARISC_GOT          0x70000000 /* GOT for external data.  */
    1464 #define SHT_PARISC_ARCH         0x70000001 /* Architecture extensions.  */
    1465 #define SHT_PARISC_GLOBAL       0x70000002 /* Definition of $global$.  */
    1466 #define SHT_PARISC_MILLI        0x70000003 /* Millicode routines.  */
    1467 #define SHT_PARISC_UNWIND       0x70000004 /* Unwind information.  */
    1468 #define SHT_PARISC_PLT          0x70000005 /* Procedure linkage table.  */
    1469 #define SHT_PARISC_SDATA        0x70000006 /* Short initialized data.  */
    1470 #define SHT_PARISC_SBSS         0x70000007 /* Short uninitialized data.  */
    1471 #define SHT_PARISC_SYMEXTN      0x70000008 /* Argument/relocation info.  */
    1472 #define SHT_PARISC_STUBS        0x70000009 /* Linker stubs.  */
    1473 
    1474 /* Legal values for sh_flags field of Elf32_Shdr.  */
    1475 
    1476 #define SHF_PARISC_GLOBAL       0x10000000 /* Section defines dp.  */
    1477 #define SHF_PARISC_SHORT        0x20000000 /* Section with short addressing. */
    1478 
    1479 /* Legal values for ST_TYPE subfield of st_info (symbol type).  */
    1480 
    1481 #define STT_PARISC_MILLICODE    13      /* Millicode function entry point.  */
    1482 
    1483 /* HPPA relocs.  */
    1484 
    1485 #define R_PARISC_NONE           0       /* No reloc.  */
    1486 #define R_PARISC_DIR32          1       /* Direct 32-bit reference.  */
    1487 #define R_PARISC_DIR21L         2       /* Left 21 bits of eff. address.  */
    1488 #define R_PARISC_DIR17R         3       /* Right 17 bits of eff. address.  */
    1489 #define R_PARISC_DIR14R         4       /* Right 14 bits of eff. address.  */
    1490 #define R_PARISC_PCREL21L       5       /* PC-relative, left 21 bits.  */
    1491 #define R_PARISC_PCREL14R       6       /* PC-relative, right 14 bits.  */
    1492 #define R_PARISC_PCREL17C       7       /* Conditional PC-relative, ignore
    1493                                            if displacement > 17bits.  */
    1494 #define R_PARISC_PCREL17F       8       /* Conditional PC-relative, must
    1495                                            fit in 17bits.  */
    1496 #define R_PARISC_DPREL21L       9       /* DP-relative, left 21 bits.  */
    1497 #define R_PARISC_DPREL14R       10      /* DP-relative, right 14 bits.  */
    1498 #define R_PARISC_DPREL14F       11      /* DP-relative, must bit in 14 bits. */
    1499 #define R_PARISC_DLTREL21L      12      /* DLT-relative, left 21 bits.  */
    1500 #define R_PARISC_DLTREL14R      13      /* DLT-relative, right 14 bits.  */
    1501 #define R_PARISC_DLTREL14F      14      /* DLT-relative, must fit in 14 bits.*/
    1502 #define R_PARISC_DLTIND21L      15      /* DLT-relative indirect, left
    1503                                            21 bits.  */
    1504 #define R_PARISC_DLTIND14R      16      /* DLT-relative indirect, right
    1505                                            14 bits.  */
    1506 #define R_PARISC_DLTIND14F      17      /* DLT-relative indirect, must fit
    1507                                            int 14 bits.  */
    1508 #define R_PARISC_PLABEL32       18      /* Direct 32-bit reference to proc.  */
    1509 
    1510 /* Alpha specific definitions.  */
    1511 
    1512 /* Legal values for e_flags field of Elf64_Ehdr.  */
    1513 
    1514 #define EF_ALPHA_32BIT          1       /* All addresses must be < 2GB.  */
    1515 #define EF_ALPHA_CANRELAX       2       /* Relocations for relaxing exist.  */
    1516 
    1517 /* Legal values for sh_type field of Elf64_Shdr.  */
    1518 
    1519 /* These two are primerily concerned with ECOFF debugging info.  */
    1520 #define SHT_ALPHA_DEBUG         0x70000001
    1521 #define SHT_ALPHA_REGINFO       0x70000002
    1522 
    1523 /* Legal values for sh_flags field of Elf64_Shdr.  */
    1524 
    1525 #define SHF_ALPHA_GPREL         0x10000000
    1526 
    1527 /* Legal values for st_other field of Elf64_Sym.  */
    1528 #define STO_ALPHA_NOPV          0x80    /* No PV required.  */
    1529 #define STO_ALPHA_STD_GPLOAD    0x88    /* PV only used for initial ldgp.  */
    1530 
    1531 /* Alpha relocs.  */
    1532 
    1533 #define R_ALPHA_NONE            0       /* No reloc */
    1534 #define R_ALPHA_REFLONG         1       /* Direct 32 bit */
    1535 #define R_ALPHA_REFQUAD         2       /* Direct 64 bit */
    1536 #define R_ALPHA_GPREL32         3       /* GP relative 32 bit */
    1537 #define R_ALPHA_LITERAL         4       /* GP relative 16 bit w/optimization */
    1538 #define R_ALPHA_LITUSE          5       /* Optimization hint for LITERAL */
    1539 #define R_ALPHA_GPDISP          6       /* Add displacement to GP */
    1540 #define R_ALPHA_BRADDR          7       /* PC+4 relative 23 bit shifted */
    1541 #define R_ALPHA_HINT            8       /* PC+4 relative 16 bit shifted */
    1542 #define R_ALPHA_SREL16          9       /* PC relative 16 bit */
    1543 #define R_ALPHA_SREL32          10      /* PC relative 32 bit */
    1544 #define R_ALPHA_SREL64          11      /* PC relative 64 bit */
    1545 #define R_ALPHA_OP_PUSH         12      /* OP stack push */
    1546 #define R_ALPHA_OP_STORE        13      /* OP stack pop and store */
    1547 #define R_ALPHA_OP_PSUB         14      /* OP stack subtract */
    1548 #define R_ALPHA_OP_PRSHIFT      15      /* OP stack right shift */
    1549 #define R_ALPHA_GPVALUE         16
    1550 #define R_ALPHA_GPRELHIGH       17
    1551 #define R_ALPHA_GPRELLOW        18
    1552 #define R_ALPHA_IMMED_GP_16     19
    1553 #define R_ALPHA_IMMED_GP_HI32   20
    1554 #define R_ALPHA_IMMED_SCN_HI32  21
    1555 #define R_ALPHA_IMMED_BR_HI32   22
    1556 #define R_ALPHA_IMMED_LO32      23
    1557 #define R_ALPHA_COPY            24      /* Copy symbol at runtime */
    1558 #define R_ALPHA_GLOB_DAT        25      /* Create GOT entry */
    1559 #define R_ALPHA_JMP_SLOT        26      /* Create PLT entry */
    1560 #define R_ALPHA_RELATIVE        27      /* Adjust by program base */
    1561 /* Keep this the last entry.  */
    1562 #define R_ALPHA_NUM             28
    1563 
    1564 
    1565 /* PowerPC specific declarations */
    1566 
    1567 /* PowerPC relocations defined by the ABIs */
    1568 #define R_PPC_NONE              0
    1569 #define R_PPC_ADDR32            1       /* 32bit absolute address */
    1570 #define R_PPC_ADDR24            2       /* 26bit address, 2 bits ignored.  */
    1571 #define R_PPC_ADDR16            3       /* 16bit absolute address */
    1572 #define R_PPC_ADDR16_LO         4       /* lower 16bit of absolute address */
    1573 #define R_PPC_ADDR16_HI         5       /* high 16bit of absolute address */
    1574 #define R_PPC_ADDR16_HA         6       /* adjusted high 16bit */
    1575 #define R_PPC_ADDR14            7       /* 16bit address, 2 bits ignored */
    1576 #define R_PPC_ADDR14_BRTAKEN    8
    1577 #define R_PPC_ADDR14_BRNTAKEN   9
    1578 #define R_PPC_REL24             10      /* PC relative 26 bit */
    1579 #define R_PPC_REL14             11      /* PC relative 16 bit */
    1580 #define R_PPC_REL14_BRTAKEN     12
    1581 #define R_PPC_REL14_BRNTAKEN    13
    1582 #define R_PPC_GOT16             14
    1583 #define R_PPC_GOT16_LO          15
    1584 #define R_PPC_GOT16_HI          16
    1585 #define R_PPC_GOT16_HA          17
    1586 #define R_PPC_PLTREL24          18
    1587 #define R_PPC_COPY              19
    1588 #define R_PPC_GLOB_DAT          20
    1589 #define R_PPC_JMP_SLOT          21
    1590 #define R_PPC_RELATIVE          22
    1591 #define R_PPC_LOCAL24PC         23
    1592 #define R_PPC_UADDR32           24
    1593 #define R_PPC_UADDR16           25
    1594 #define R_PPC_REL32             26
    1595 #define R_PPC_PLT32             27
    1596 #define R_PPC_PLTREL32          28
    1597 #define R_PPC_PLT16_LO          29
    1598 #define R_PPC_PLT16_HI          30
    1599 #define R_PPC_PLT16_HA          31
    1600 #define R_PPC_SDAREL16          32
    1601 #define R_PPC_SECTOFF           33
    1602 #define R_PPC_SECTOFF_LO        34
    1603 #define R_PPC_SECTOFF_HI        35
    1604 #define R_PPC_SECTOFF_HA        36
    1605 /* Keep this the last entry.  */
    1606 #define R_PPC_NUM               37
    1607 
    1608 /* The remaining relocs are from the Embedded ELF ABI, and are not
    1609    in the SVR4 ELF ABI.  */
    1610 #define R_PPC_EMB_NADDR32       101
    1611 #define R_PPC_EMB_NADDR16       102
    1612 #define R_PPC_EMB_NADDR16_LO    103
    1613 #define R_PPC_EMB_NADDR16_HI    104
    1614 #define R_PPC_EMB_NADDR16_HA    105
    1615 #define R_PPC_EMB_SDAI16        106
    1616 #define R_PPC_EMB_SDA2I16       107
    1617 #define R_PPC_EMB_SDA2REL       108
    1618 #define R_PPC_EMB_SDA21         109     /* 16 bit offset in SDA */
    1619 #define R_PPC_EMB_MRKREF        110
    1620 #define R_PPC_EMB_RELSEC16      111
    1621 #define R_PPC_EMB_RELST_LO      112
    1622 #define R_PPC_EMB_RELST_HI      113
    1623 #define R_PPC_EMB_RELST_HA      114
    1624 #define R_PPC_EMB_BIT_FLD       115
    1625 #define R_PPC_EMB_RELSDA        116     /* 16 bit relative offset in SDA */
    1626 
    1627 /* Diab tool relocations.  */
    1628 #define R_PPC_DIAB_SDA21_LO     180     /* like EMB_SDA21, but lower 16 bit */
    1629 #define R_PPC_DIAB_SDA21_HI     181     /* like EMB_SDA21, but high 16 bit */
    1630 #define R_PPC_DIAB_SDA21_HA     182     /* like EMB_SDA21, adjusted high 16 */
    1631 #define R_PPC_DIAB_RELSDA_LO    183     /* like EMB_RELSDA, but lower 16 bit */
    1632 #define R_PPC_DIAB_RELSDA_HI    184     /* like EMB_RELSDA, but high 16 bit */
    1633 #define R_PPC_DIAB_RELSDA_HA    185     /* like EMB_RELSDA, adjusted high 16 */
    1634 
    1635 /* This is a phony reloc to handle any old fashioned TOC16 references
    1636    that may still be in object files.  */
    1637 #define R_PPC_TOC16             255
    1638 
    1639 
    1640 /* ARM specific declarations */
    1641 
    1642 /* Processor specific flags for the ELF header e_flags field.  */
    1643 #define EF_ARM_RELEXEC     0x01
    1644 #define EF_ARM_HASENTRY    0x02
    1645 #define EF_ARM_INTERWORK   0x04
    1646 #define EF_ARM_APCS_26     0x08
    1647 #define EF_ARM_APCS_FLOAT  0x10
    1648 #define EF_ARM_PIC         0x20
    1649 #define EF_ALIGN8          0x40         /* 8-bit structure alignment is in use */
    1650 #define EF_NEW_ABI         0x80
    1651 #define EF_OLD_ABI         0x100
    1652 
    1653 /* Additional symbol types for Thumb */
    1654 #define STT_ARM_TFUNC      0xd
    1655 
    1656 /* ARM-specific values for sh_flags */
    1657 #define SHF_ARM_ENTRYSECT  0x10000000   /* Section contains an entry point */
    1658 #define SHF_ARM_COMDEF     0x80000000   /* Section may be multiply defined
    1659                                            in the input to a link step */
    1660 
    1661 /* ARM-specific program header flags */
    1662 #define PF_ARM_SB          0x10000000   /* Segment contains the location
    1663                                            addressed by the static base */
    1664 
    1665 /* ARM relocs.  */
    1666 #define R_ARM_NONE              0       /* No reloc */
    1667 #define R_ARM_PC24              1       /* PC relative 26 bit branch */
    1668 #define R_ARM_ABS32             2       /* Direct 32 bit  */
    1669 #define R_ARM_REL32             3       /* PC relative 32 bit */
    1670 #define R_ARM_PC13              4
    1671 #define R_ARM_ABS16             5       /* Direct 16 bit */
    1672 #define R_ARM_ABS12             6       /* Direct 12 bit */
    1673 #define R_ARM_THM_ABS5          7
    1674 #define R_ARM_ABS8              8       /* Direct 8 bit */
    1675 #define R_ARM_SBREL32           9
    1676 #define R_ARM_THM_CALL          10
    1677 #define R_ARM_THM_PC8           11
    1678 #define R_ARM_AMP_VCALL9        12
    1679 #define R_ARM_SWI24             13
    1680 #define R_ARM_THM_SWI8          14
    1681 #define R_ARM_XPC25             15
    1682 #define R_ARM_THM_XPC22         16
    1683 #define R_ARM_COPY              20      /* Copy symbol at runtime */
    1684 #define R_ARM_GLOB_DAT          21      /* Create GOT entry */
    1685 #define R_ARM_JUMP_SLOT         22      /* Create PLT entry */
    1686 #define R_ARM_RELATIVE          23      /* Adjust by program base */
    1687 #define R_ARM_GOTOFF32          24      /* 32 bit offset to GOT */
    1688 #define R_ARM_BASE_PREL         25      /* 32 bit PC relative offset to GOT */
    1689 #define R_ARM_GOT_BREL          26      /* 32 bit GOT entry */
    1690 #define R_ARM_PLT32             27      /* 32 bit PLT address */
    1691 #define R_ARM_CALL              28
    1692 #define R_ARM_JUMP24            29
    1693 #define R_ARM_THM_JUMP24        30
    1694 #define R_ARM_V4BX              40
    1695 #define R_ARM_PREL31            42
    1696 #define R_ARM_MOVW_ABS_NC       43
    1697 #define R_ARM_MOVT_ABS          44
    1698 #define R_ARM_THM_MOVW_ABS_NC   47
    1699 #define R_ARM_THM_MOVT_ABS      48
    1700 #define R_ARM_GNU_VTENTRY       100
    1701 #define R_ARM_GNU_VTINHERIT     101
    1702 #define R_ARM_THM_PC11          102     /* thumb unconditional branch */
    1703 #define R_ARM_THM_PC9           103     /* thumb conditional branch */
    1704 #define R_ARM_RXPC25            249
    1705 #define R_ARM_RSBREL32          250
    1706 #define R_ARM_THM_RPC22         251
    1707 #define R_ARM_RREL32            252
    1708 #define R_ARM_RABS22            253
    1709 #define R_ARM_RPC24             254
    1710 #define R_ARM_RBASE             255
    1711 /* Keep this the last entry.  */
    1712 #define R_ARM_NUM               256
    1713 
    1714 /* TMS320C67xx specific declarations */
    1715 /* XXX: no ELF standard yet */
    1716 
    1717 /* TMS320C67xx relocs. */
    1718 #define R_C60_32       1
    1719 #define R_C60_GOT32     3               /* 32 bit GOT entry */
    1720 #define R_C60_PLT32     4               /* 32 bit PLT address */
    1721 #define R_C60_COPY      5               /* Copy symbol at runtime */
    1722 #define R_C60_GLOB_DAT  6               /* Create GOT entry */
    1723 #define R_C60_JMP_SLOT  7               /* Create PLT entry */
    1724 #define R_C60_RELATIVE  8               /* Adjust by program base */
    1725 #define R_C60_GOTOFF    9               /* 32 bit offset to GOT */
    1726 #define R_C60_GOTPC     10              /* 32 bit PC relative offset to GOT */
    1727 
    1728 #define R_C60HI16      0x55       // high 16 bit MVKH embedded
    1729 #define R_C60LO16      0x54       // low 16 bit MVKL embedded
    1730 
    1731 #endif  /* elf.h */
     2884#define R_X86_64_PC64           24      /* PC relative 64 bit */
     2885#define R_X86_64_GOTOFF64       25      /* 64 bit offset to GOT */
     2886#define R_X86_64_GOTPC32        26      /* 32 bit signed pc relative
     2887                                           offset to GOT */
     2888#define R_X86_64_GOT64          27      /* 64-bit GOT entry offset */
     2889#define R_X86_64_GOTPCREL64     28      /* 64-bit PC relative offset
     2890                                           to GOT entry */
     2891#define R_X86_64_GOTPC64        29      /* 64-bit PC relative offset to GOT */
     2892#define R_X86_64_GOTPLT64       30      /* like GOT64, says PLT entry needed */
     2893#define R_X86_64_PLTOFF64       31      /* 64-bit GOT relative offset
     2894                                           to PLT entry */
     2895#define R_X86_64_SIZE32         32      /* Size of symbol plus 32-bit addend */
     2896#define R_X86_64_SIZE64         33      /* Size of symbol plus 64-bit addend */
     2897#define R_X86_64_GOTPC32_TLSDESC 34     /* GOT offset for TLS descriptor.  */
     2898#define R_X86_64_TLSDESC_CALL   35      /* Marker for call through TLS
     2899                                           descriptor.  */
     2900#define R_X86_64_TLSDESC        36      /* TLS descriptor.  */
     2901#define R_X86_64_IRELATIVE      37      /* Adjust indirectly by program base */
     2902#define R_X86_64_RELATIVE64     38      /* 64-bit adjust by program base */
     2903#define R_X86_64_GOTPCRELX      41      /* like GOTPCREL, but optionally with
     2904                                           linker optimizations */
     2905#define R_X86_64_REX_GOTPCRELX  42      /* like GOTPCRELX, but a REX prefix
     2906                                           is present */
     2907
     2908#define R_X86_64_NUM            43
     2909
     2910
     2911/* AM33 relocations.  */
     2912#define R_MN10300_NONE          0       /* No reloc.  */
     2913#define R_MN10300_32            1       /* Direct 32 bit.  */
     2914#define R_MN10300_16            2       /* Direct 16 bit.  */
     2915#define R_MN10300_8             3       /* Direct 8 bit.  */
     2916#define R_MN10300_PCREL32       4       /* PC-relative 32-bit.  */
     2917#define R_MN10300_PCREL16       5       /* PC-relative 16-bit signed.  */
     2918#define R_MN10300_PCREL8        6       /* PC-relative 8-bit signed.  */
     2919#define R_MN10300_GNU_VTINHERIT 7       /* Ancient C++ vtable garbage... */
     2920#define R_MN10300_GNU_VTENTRY   8       /* ... collection annotation.  */
     2921#define R_MN10300_24            9       /* Direct 24 bit.  */
     2922#define R_MN10300_GOTPC32       10      /* 32-bit PCrel offset to GOT.  */
     2923#define R_MN10300_GOTPC16       11      /* 16-bit PCrel offset to GOT.  */
     2924#define R_MN10300_GOTOFF32      12      /* 32-bit offset from GOT.  */
     2925#define R_MN10300_GOTOFF24      13      /* 24-bit offset from GOT.  */
     2926#define R_MN10300_GOTOFF16      14      /* 16-bit offset from GOT.  */
     2927#define R_MN10300_PLT32         15      /* 32-bit PCrel to PLT entry.  */
     2928#define R_MN10300_PLT16         16      /* 16-bit PCrel to PLT entry.  */
     2929#define R_MN10300_GOT32         17      /* 32-bit offset to GOT entry.  */
     2930#define R_MN10300_GOT24         18      /* 24-bit offset to GOT entry.  */
     2931#define R_MN10300_GOT16         19      /* 16-bit offset to GOT entry.  */
     2932#define R_MN10300_COPY          20      /* Copy symbol at runtime.  */
     2933#define R_MN10300_GLOB_DAT      21      /* Create GOT entry.  */
     2934#define R_MN10300_JMP_SLOT      22      /* Create PLT entry.  */
     2935#define R_MN10300_RELATIVE      23      /* Adjust by program base.  */
     2936#define R_MN10300_TLS_GD        24      /* 32-bit offset for global dynamic.  */
     2937#define R_MN10300_TLS_LD        25      /* 32-bit offset for local dynamic.  */
     2938#define R_MN10300_TLS_LDO       26      /* Module-relative offset.  */
     2939#define R_MN10300_TLS_GOTIE     27      /* GOT offset for static TLS block
     2940                                           offset.  */
     2941#define R_MN10300_TLS_IE        28      /* GOT address for static TLS block
     2942                                           offset.  */
     2943#define R_MN10300_TLS_LE        29      /* Offset relative to static TLS
     2944                                           block.  */
     2945#define R_MN10300_TLS_DTPMOD    30      /* ID of module containing symbol.  */
     2946#define R_MN10300_TLS_DTPOFF    31      /* Offset in module TLS block.  */
     2947#define R_MN10300_TLS_TPOFF     32      /* Offset in static TLS block.  */
     2948#define R_MN10300_SYM_DIFF      33      /* Adjustment for next reloc as needed
     2949                                           by linker relaxation.  */
     2950#define R_MN10300_ALIGN         34      /* Alignment requirement for linker
     2951                                           relaxation.  */
     2952#define R_MN10300_NUM           35
     2953
     2954
     2955/* M32R relocs.  */
     2956#define R_M32R_NONE             0       /* No reloc. */
     2957#define R_M32R_16               1       /* Direct 16 bit. */
     2958#define R_M32R_32               2       /* Direct 32 bit. */
     2959#define R_M32R_24               3       /* Direct 24 bit. */
     2960#define R_M32R_10_PCREL         4       /* PC relative 10 bit shifted. */
     2961#define R_M32R_18_PCREL         5       /* PC relative 18 bit shifted. */
     2962#define R_M32R_26_PCREL         6       /* PC relative 26 bit shifted. */
     2963#define R_M32R_HI16_ULO         7       /* High 16 bit with unsigned low. */
     2964#define R_M32R_HI16_SLO         8       /* High 16 bit with signed low. */
     2965#define R_M32R_LO16             9       /* Low 16 bit. */
     2966#define R_M32R_SDA16            10      /* 16 bit offset in SDA. */
     2967#define R_M32R_GNU_VTINHERIT    11
     2968#define R_M32R_GNU_VTENTRY      12
     2969/* M32R relocs use SHT_RELA.  */
     2970#define R_M32R_16_RELA          33      /* Direct 16 bit. */
     2971#define R_M32R_32_RELA          34      /* Direct 32 bit. */
     2972#define R_M32R_24_RELA          35      /* Direct 24 bit. */
     2973#define R_M32R_10_PCREL_RELA    36      /* PC relative 10 bit shifted. */
     2974#define R_M32R_18_PCREL_RELA    37      /* PC relative 18 bit shifted. */
     2975#define R_M32R_26_PCREL_RELA    38      /* PC relative 26 bit shifted. */
     2976#define R_M32R_HI16_ULO_RELA    39      /* High 16 bit with unsigned low */
     2977#define R_M32R_HI16_SLO_RELA    40      /* High 16 bit with signed low */
     2978#define R_M32R_LO16_RELA        41      /* Low 16 bit */
     2979#define R_M32R_SDA16_RELA       42      /* 16 bit offset in SDA */
     2980#define R_M32R_RELA_GNU_VTINHERIT       43
     2981#define R_M32R_RELA_GNU_VTENTRY 44
     2982#define R_M32R_REL32            45      /* PC relative 32 bit.  */
     2983
     2984#define R_M32R_GOT24            48      /* 24 bit GOT entry */
     2985#define R_M32R_26_PLTREL        49      /* 26 bit PC relative to PLT shifted */
     2986#define R_M32R_COPY             50      /* Copy symbol at runtime */
     2987#define R_M32R_GLOB_DAT         51      /* Create GOT entry */
     2988#define R_M32R_JMP_SLOT         52      /* Create PLT entry */
     2989#define R_M32R_RELATIVE         53      /* Adjust by program base */
     2990#define R_M32R_GOTOFF           54      /* 24 bit offset to GOT */
     2991#define R_M32R_GOTPC24          55      /* 24 bit PC relative offset to GOT */
     2992#define R_M32R_GOT16_HI_ULO     56      /* High 16 bit GOT entry with unsigned
     2993                                           low */
     2994#define R_M32R_GOT16_HI_SLO     57      /* High 16 bit GOT entry with signed
     2995                                           low */
     2996#define R_M32R_GOT16_LO         58      /* Low 16 bit GOT entry */
     2997#define R_M32R_GOTPC_HI_ULO     59      /* High 16 bit PC relative offset to
     2998                                           GOT with unsigned low */
     2999#define R_M32R_GOTPC_HI_SLO     60      /* High 16 bit PC relative offset to
     3000                                           GOT with signed low */
     3001#define R_M32R_GOTPC_LO         61      /* Low 16 bit PC relative offset to
     3002                                           GOT */
     3003#define R_M32R_GOTOFF_HI_ULO    62      /* High 16 bit offset to GOT
     3004                                           with unsigned low */
     3005#define R_M32R_GOTOFF_HI_SLO    63      /* High 16 bit offset to GOT
     3006                                           with signed low */
     3007#define R_M32R_GOTOFF_LO        64      /* Low 16 bit offset to GOT */
     3008#define R_M32R_NUM              256     /* Keep this the last entry. */
     3009
     3010
     3011/* TILEPro relocations.  */
     3012#define R_TILEPRO_NONE          0       /* No reloc */
     3013#define R_TILEPRO_32            1       /* Direct 32 bit */
     3014#define R_TILEPRO_16            2       /* Direct 16 bit */
     3015#define R_TILEPRO_8             3       /* Direct 8 bit */
     3016#define R_TILEPRO_32_PCREL      4       /* PC relative 32 bit */
     3017#define R_TILEPRO_16_PCREL      5       /* PC relative 16 bit */
     3018#define R_TILEPRO_8_PCREL       6       /* PC relative 8 bit */
     3019#define R_TILEPRO_LO16          7       /* Low 16 bit */
     3020#define R_TILEPRO_HI16          8       /* High 16 bit */
     3021#define R_TILEPRO_HA16          9       /* High 16 bit, adjusted */
     3022#define R_TILEPRO_COPY          10      /* Copy relocation */
     3023#define R_TILEPRO_GLOB_DAT      11      /* Create GOT entry */
     3024#define R_TILEPRO_JMP_SLOT      12      /* Create PLT entry */
     3025#define R_TILEPRO_RELATIVE      13      /* Adjust by program base */
     3026#define R_TILEPRO_BROFF_X1      14      /* X1 pipe branch offset */
     3027#define R_TILEPRO_JOFFLONG_X1   15      /* X1 pipe jump offset */
     3028#define R_TILEPRO_JOFFLONG_X1_PLT 16    /* X1 pipe jump offset to PLT */
     3029#define R_TILEPRO_IMM8_X0       17      /* X0 pipe 8-bit */
     3030#define R_TILEPRO_IMM8_Y0       18      /* Y0 pipe 8-bit */
     3031#define R_TILEPRO_IMM8_X1       19      /* X1 pipe 8-bit */
     3032#define R_TILEPRO_IMM8_Y1       20      /* Y1 pipe 8-bit */
     3033#define R_TILEPRO_MT_IMM15_X1   21      /* X1 pipe mtspr */
     3034#define R_TILEPRO_MF_IMM15_X1   22      /* X1 pipe mfspr */
     3035#define R_TILEPRO_IMM16_X0      23      /* X0 pipe 16-bit */
     3036#define R_TILEPRO_IMM16_X1      24      /* X1 pipe 16-bit */
     3037#define R_TILEPRO_IMM16_X0_LO   25      /* X0 pipe low 16-bit */
     3038#define R_TILEPRO_IMM16_X1_LO   26      /* X1 pipe low 16-bit */
     3039#define R_TILEPRO_IMM16_X0_HI   27      /* X0 pipe high 16-bit */
     3040#define R_TILEPRO_IMM16_X1_HI   28      /* X1 pipe high 16-bit */
     3041#define R_TILEPRO_IMM16_X0_HA   29      /* X0 pipe high 16-bit, adjusted */
     3042#define R_TILEPRO_IMM16_X1_HA   30      /* X1 pipe high 16-bit, adjusted */
     3043#define R_TILEPRO_IMM16_X0_PCREL 31     /* X0 pipe PC relative 16 bit */
     3044#define R_TILEPRO_IMM16_X1_PCREL 32     /* X1 pipe PC relative 16 bit */
     3045#define R_TILEPRO_IMM16_X0_LO_PCREL 33  /* X0 pipe PC relative low 16 bit */
     3046#define R_TILEPRO_IMM16_X1_LO_PCREL 34  /* X1 pipe PC relative low 16 bit */
     3047#define R_TILEPRO_IMM16_X0_HI_PCREL 35  /* X0 pipe PC relative high 16 bit */
     3048#define R_TILEPRO_IMM16_X1_HI_PCREL 36  /* X1 pipe PC relative high 16 bit */
     3049#define R_TILEPRO_IMM16_X0_HA_PCREL 37  /* X0 pipe PC relative ha() 16 bit */
     3050#define R_TILEPRO_IMM16_X1_HA_PCREL 38  /* X1 pipe PC relative ha() 16 bit */
     3051#define R_TILEPRO_IMM16_X0_GOT  39      /* X0 pipe 16-bit GOT offset */
     3052#define R_TILEPRO_IMM16_X1_GOT  40      /* X1 pipe 16-bit GOT offset */
     3053#define R_TILEPRO_IMM16_X0_GOT_LO 41    /* X0 pipe low 16-bit GOT offset */
     3054#define R_TILEPRO_IMM16_X1_GOT_LO 42    /* X1 pipe low 16-bit GOT offset */
     3055#define R_TILEPRO_IMM16_X0_GOT_HI 43    /* X0 pipe high 16-bit GOT offset */
     3056#define R_TILEPRO_IMM16_X1_GOT_HI 44    /* X1 pipe high 16-bit GOT offset */
     3057#define R_TILEPRO_IMM16_X0_GOT_HA 45    /* X0 pipe ha() 16-bit GOT offset */
     3058#define R_TILEPRO_IMM16_X1_GOT_HA 46    /* X1 pipe ha() 16-bit GOT offset */
     3059#define R_TILEPRO_MMSTART_X0    47      /* X0 pipe mm "start" */
     3060#define R_TILEPRO_MMEND_X0      48      /* X0 pipe mm "end" */
     3061#define R_TILEPRO_MMSTART_X1    49      /* X1 pipe mm "start" */
     3062#define R_TILEPRO_MMEND_X1      50      /* X1 pipe mm "end" */
     3063#define R_TILEPRO_SHAMT_X0      51      /* X0 pipe shift amount */
     3064#define R_TILEPRO_SHAMT_X1      52      /* X1 pipe shift amount */
     3065#define R_TILEPRO_SHAMT_Y0      53      /* Y0 pipe shift amount */
     3066#define R_TILEPRO_SHAMT_Y1      54      /* Y1 pipe shift amount */
     3067#define R_TILEPRO_DEST_IMM8_X1  55      /* X1 pipe destination 8-bit */
     3068/* Relocs 56-59 are currently not defined.  */
     3069#define R_TILEPRO_TLS_GD_CALL   60      /* "jal" for TLS GD */
     3070#define R_TILEPRO_IMM8_X0_TLS_GD_ADD 61 /* X0 pipe "addi" for TLS GD */
     3071#define R_TILEPRO_IMM8_X1_TLS_GD_ADD 62 /* X1 pipe "addi" for TLS GD */
     3072#define R_TILEPRO_IMM8_Y0_TLS_GD_ADD 63 /* Y0 pipe "addi" for TLS GD */
     3073#define R_TILEPRO_IMM8_Y1_TLS_GD_ADD 64 /* Y1 pipe "addi" for TLS GD */
     3074#define R_TILEPRO_TLS_IE_LOAD   65      /* "lw_tls" for TLS IE */
     3075#define R_TILEPRO_IMM16_X0_TLS_GD 66    /* X0 pipe 16-bit TLS GD offset */
     3076#define R_TILEPRO_IMM16_X1_TLS_GD 67    /* X1 pipe 16-bit TLS GD offset */
     3077#define R_TILEPRO_IMM16_X0_TLS_GD_LO 68 /* X0 pipe low 16-bit TLS GD offset */
     3078#define R_TILEPRO_IMM16_X1_TLS_GD_LO 69 /* X1 pipe low 16-bit TLS GD offset */
     3079#define R_TILEPRO_IMM16_X0_TLS_GD_HI 70 /* X0 pipe high 16-bit TLS GD offset */
     3080#define R_TILEPRO_IMM16_X1_TLS_GD_HI 71 /* X1 pipe high 16-bit TLS GD offset */
     3081#define R_TILEPRO_IMM16_X0_TLS_GD_HA 72 /* X0 pipe ha() 16-bit TLS GD offset */
     3082#define R_TILEPRO_IMM16_X1_TLS_GD_HA 73 /* X1 pipe ha() 16-bit TLS GD offset */
     3083#define R_TILEPRO_IMM16_X0_TLS_IE 74    /* X0 pipe 16-bit TLS IE offset */
     3084#define R_TILEPRO_IMM16_X1_TLS_IE 75    /* X1 pipe 16-bit TLS IE offset */
     3085#define R_TILEPRO_IMM16_X0_TLS_IE_LO 76 /* X0 pipe low 16-bit TLS IE offset */
     3086#define R_TILEPRO_IMM16_X1_TLS_IE_LO 77 /* X1 pipe low 16-bit TLS IE offset */
     3087#define R_TILEPRO_IMM16_X0_TLS_IE_HI 78 /* X0 pipe high 16-bit TLS IE offset */
     3088#define R_TILEPRO_IMM16_X1_TLS_IE_HI 79 /* X1 pipe high 16-bit TLS IE offset */
     3089#define R_TILEPRO_IMM16_X0_TLS_IE_HA 80 /* X0 pipe ha() 16-bit TLS IE offset */
     3090#define R_TILEPRO_IMM16_X1_TLS_IE_HA 81 /* X1 pipe ha() 16-bit TLS IE offset */
     3091#define R_TILEPRO_TLS_DTPMOD32  82      /* ID of module containing symbol */
     3092#define R_TILEPRO_TLS_DTPOFF32  83      /* Offset in TLS block */
     3093#define R_TILEPRO_TLS_TPOFF32   84      /* Offset in static TLS block */
     3094#define R_TILEPRO_IMM16_X0_TLS_LE 85    /* X0 pipe 16-bit TLS LE offset */
     3095#define R_TILEPRO_IMM16_X1_TLS_LE 86    /* X1 pipe 16-bit TLS LE offset */
     3096#define R_TILEPRO_IMM16_X0_TLS_LE_LO 87 /* X0 pipe low 16-bit TLS LE offset */
     3097#define R_TILEPRO_IMM16_X1_TLS_LE_LO 88 /* X1 pipe low 16-bit TLS LE offset */
     3098#define R_TILEPRO_IMM16_X0_TLS_LE_HI 89 /* X0 pipe high 16-bit TLS LE offset */
     3099#define R_TILEPRO_IMM16_X1_TLS_LE_HI 90 /* X1 pipe high 16-bit TLS LE offset */
     3100#define R_TILEPRO_IMM16_X0_TLS_LE_HA 91 /* X0 pipe ha() 16-bit TLS LE offset */
     3101#define R_TILEPRO_IMM16_X1_TLS_LE_HA 92 /* X1 pipe ha() 16-bit TLS LE offset */
     3102
     3103#define R_TILEPRO_GNU_VTINHERIT 128     /* GNU C++ vtable hierarchy */
     3104#define R_TILEPRO_GNU_VTENTRY   129     /* GNU C++ vtable member usage */
     3105
     3106#define R_TILEPRO_NUM           130
     3107
     3108
     3109/* TILE-Gx relocations.  */
     3110#define R_TILEGX_NONE           0       /* No reloc */
     3111#define R_TILEGX_64             1       /* Direct 64 bit */
     3112#define R_TILEGX_32             2       /* Direct 32 bit */
     3113#define R_TILEGX_16             3       /* Direct 16 bit */
     3114#define R_TILEGX_8              4       /* Direct 8 bit */
     3115#define R_TILEGX_64_PCREL       5       /* PC relative 64 bit */
     3116#define R_TILEGX_32_PCREL       6       /* PC relative 32 bit */
     3117#define R_TILEGX_16_PCREL       7       /* PC relative 16 bit */
     3118#define R_TILEGX_8_PCREL        8       /* PC relative 8 bit */
     3119#define R_TILEGX_HW0            9       /* hword 0 16-bit */
     3120#define R_TILEGX_HW1            10      /* hword 1 16-bit */
     3121#define R_TILEGX_HW2            11      /* hword 2 16-bit */
     3122#define R_TILEGX_HW3            12      /* hword 3 16-bit */
     3123#define R_TILEGX_HW0_LAST       13      /* last hword 0 16-bit */
     3124#define R_TILEGX_HW1_LAST       14      /* last hword 1 16-bit */
     3125#define R_TILEGX_HW2_LAST       15      /* last hword 2 16-bit */
     3126#define R_TILEGX_COPY           16      /* Copy relocation */
     3127#define R_TILEGX_GLOB_DAT       17      /* Create GOT entry */
     3128#define R_TILEGX_JMP_SLOT       18      /* Create PLT entry */
     3129#define R_TILEGX_RELATIVE       19      /* Adjust by program base */
     3130#define R_TILEGX_BROFF_X1       20      /* X1 pipe branch offset */
     3131#define R_TILEGX_JUMPOFF_X1     21      /* X1 pipe jump offset */
     3132#define R_TILEGX_JUMPOFF_X1_PLT 22      /* X1 pipe jump offset to PLT */
     3133#define R_TILEGX_IMM8_X0        23      /* X0 pipe 8-bit */
     3134#define R_TILEGX_IMM8_Y0        24      /* Y0 pipe 8-bit */
     3135#define R_TILEGX_IMM8_X1        25      /* X1 pipe 8-bit */
     3136#define R_TILEGX_IMM8_Y1        26      /* Y1 pipe 8-bit */
     3137#define R_TILEGX_DEST_IMM8_X1   27      /* X1 pipe destination 8-bit */
     3138#define R_TILEGX_MT_IMM14_X1    28      /* X1 pipe mtspr */
     3139#define R_TILEGX_MF_IMM14_X1    29      /* X1 pipe mfspr */
     3140#define R_TILEGX_MMSTART_X0     30      /* X0 pipe mm "start" */
     3141#define R_TILEGX_MMEND_X0       31      /* X0 pipe mm "end" */
     3142#define R_TILEGX_SHAMT_X0       32      /* X0 pipe shift amount */
     3143#define R_TILEGX_SHAMT_X1       33      /* X1 pipe shift amount */
     3144#define R_TILEGX_SHAMT_Y0       34      /* Y0 pipe shift amount */
     3145#define R_TILEGX_SHAMT_Y1       35      /* Y1 pipe shift amount */
     3146#define R_TILEGX_IMM16_X0_HW0   36      /* X0 pipe hword 0 */
     3147#define R_TILEGX_IMM16_X1_HW0   37      /* X1 pipe hword 0 */
     3148#define R_TILEGX_IMM16_X0_HW1   38      /* X0 pipe hword 1 */
     3149#define R_TILEGX_IMM16_X1_HW1   39      /* X1 pipe hword 1 */
     3150#define R_TILEGX_IMM16_X0_HW2   40      /* X0 pipe hword 2 */
     3151#define R_TILEGX_IMM16_X1_HW2   41      /* X1 pipe hword 2 */
     3152#define R_TILEGX_IMM16_X0_HW3   42      /* X0 pipe hword 3 */
     3153#define R_TILEGX_IMM16_X1_HW3   43      /* X1 pipe hword 3 */
     3154#define R_TILEGX_IMM16_X0_HW0_LAST 44   /* X0 pipe last hword 0 */
     3155#define R_TILEGX_IMM16_X1_HW0_LAST 45   /* X1 pipe last hword 0 */
     3156#define R_TILEGX_IMM16_X0_HW1_LAST 46   /* X0 pipe last hword 1 */
     3157#define R_TILEGX_IMM16_X1_HW1_LAST 47   /* X1 pipe last hword 1 */
     3158#define R_TILEGX_IMM16_X0_HW2_LAST 48   /* X0 pipe last hword 2 */
     3159#define R_TILEGX_IMM16_X1_HW2_LAST 49   /* X1 pipe last hword 2 */
     3160#define R_TILEGX_IMM16_X0_HW0_PCREL 50  /* X0 pipe PC relative hword 0 */
     3161#define R_TILEGX_IMM16_X1_HW0_PCREL 51  /* X1 pipe PC relative hword 0 */
     3162#define R_TILEGX_IMM16_X0_HW1_PCREL 52  /* X0 pipe PC relative hword 1 */
     3163#define R_TILEGX_IMM16_X1_HW1_PCREL 53  /* X1 pipe PC relative hword 1 */
     3164#define R_TILEGX_IMM16_X0_HW2_PCREL 54  /* X0 pipe PC relative hword 2 */
     3165#define R_TILEGX_IMM16_X1_HW2_PCREL 55  /* X1 pipe PC relative hword 2 */
     3166#define R_TILEGX_IMM16_X0_HW3_PCREL 56  /* X0 pipe PC relative hword 3 */
     3167#define R_TILEGX_IMM16_X1_HW3_PCREL 57  /* X1 pipe PC relative hword 3 */
     3168#define R_TILEGX_IMM16_X0_HW0_LAST_PCREL 58 /* X0 pipe PC-rel last hword 0 */
     3169#define R_TILEGX_IMM16_X1_HW0_LAST_PCREL 59 /* X1 pipe PC-rel last hword 0 */
     3170#define R_TILEGX_IMM16_X0_HW1_LAST_PCREL 60 /* X0 pipe PC-rel last hword 1 */
     3171#define R_TILEGX_IMM16_X1_HW1_LAST_PCREL 61 /* X1 pipe PC-rel last hword 1 */
     3172#define R_TILEGX_IMM16_X0_HW2_LAST_PCREL 62 /* X0 pipe PC-rel last hword 2 */
     3173#define R_TILEGX_IMM16_X1_HW2_LAST_PCREL 63 /* X1 pipe PC-rel last hword 2 */
     3174#define R_TILEGX_IMM16_X0_HW0_GOT 64    /* X0 pipe hword 0 GOT offset */
     3175#define R_TILEGX_IMM16_X1_HW0_GOT 65    /* X1 pipe hword 0 GOT offset */
     3176#define R_TILEGX_IMM16_X0_HW0_PLT_PCREL 66 /* X0 pipe PC-rel PLT hword 0 */
     3177#define R_TILEGX_IMM16_X1_HW0_PLT_PCREL 67 /* X1 pipe PC-rel PLT hword 0 */
     3178#define R_TILEGX_IMM16_X0_HW1_PLT_PCREL 68 /* X0 pipe PC-rel PLT hword 1 */
     3179#define R_TILEGX_IMM16_X1_HW1_PLT_PCREL 69 /* X1 pipe PC-rel PLT hword 1 */
     3180#define R_TILEGX_IMM16_X0_HW2_PLT_PCREL 70 /* X0 pipe PC-rel PLT hword 2 */
     3181#define R_TILEGX_IMM16_X1_HW2_PLT_PCREL 71 /* X1 pipe PC-rel PLT hword 2 */
     3182#define R_TILEGX_IMM16_X0_HW0_LAST_GOT 72 /* X0 pipe last hword 0 GOT offset */
     3183#define R_TILEGX_IMM16_X1_HW0_LAST_GOT 73 /* X1 pipe last hword 0 GOT offset */
     3184#define R_TILEGX_IMM16_X0_HW1_LAST_GOT 74 /* X0 pipe last hword 1 GOT offset */
     3185#define R_TILEGX_IMM16_X1_HW1_LAST_GOT 75 /* X1 pipe last hword 1 GOT offset */
     3186#define R_TILEGX_IMM16_X0_HW3_PLT_PCREL 76 /* X0 pipe PC-rel PLT hword 3 */
     3187#define R_TILEGX_IMM16_X1_HW3_PLT_PCREL 77 /* X1 pipe PC-rel PLT hword 3 */
     3188#define R_TILEGX_IMM16_X0_HW0_TLS_GD 78 /* X0 pipe hword 0 TLS GD offset */
     3189#define R_TILEGX_IMM16_X1_HW0_TLS_GD 79 /* X1 pipe hword 0 TLS GD offset */
     3190#define R_TILEGX_IMM16_X0_HW0_TLS_LE 80 /* X0 pipe hword 0 TLS LE offset */
     3191#define R_TILEGX_IMM16_X1_HW0_TLS_LE 81 /* X1 pipe hword 0 TLS LE offset */
     3192#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE 82 /* X0 pipe last hword 0 LE off */
     3193#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE 83 /* X1 pipe last hword 0 LE off */
     3194#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE 84 /* X0 pipe last hword 1 LE off */
     3195#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE 85 /* X1 pipe last hword 1 LE off */
     3196#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD 86 /* X0 pipe last hword 0 GD off */
     3197#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD 87 /* X1 pipe last hword 0 GD off */
     3198#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD 88 /* X0 pipe last hword 1 GD off */
     3199#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD 89 /* X1 pipe last hword 1 GD off */
     3200/* Relocs 90-91 are currently not defined.  */
     3201#define R_TILEGX_IMM16_X0_HW0_TLS_IE 92 /* X0 pipe hword 0 TLS IE offset */
     3202#define R_TILEGX_IMM16_X1_HW0_TLS_IE 93 /* X1 pipe hword 0 TLS IE offset */
     3203#define R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL 94 /* X0 pipe PC-rel PLT last hword 0 */
     3204#define R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL 95 /* X1 pipe PC-rel PLT last hword 0 */
     3205#define R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL 96 /* X0 pipe PC-rel PLT last hword 1 */
     3206#define R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL 97 /* X1 pipe PC-rel PLT last hword 1 */
     3207#define R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL 98 /* X0 pipe PC-rel PLT last hword 2 */
     3208#define R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL 99 /* X1 pipe PC-rel PLT last hword 2 */
     3209#define R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE 100 /* X0 pipe last hword 0 IE off */
     3210#define R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE 101 /* X1 pipe last hword 0 IE off */
     3211#define R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE 102 /* X0 pipe last hword 1 IE off */
     3212#define R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE 103 /* X1 pipe last hword 1 IE off */
     3213/* Relocs 104-105 are currently not defined.  */
     3214#define R_TILEGX_TLS_DTPMOD64   106     /* 64-bit ID of symbol's module */
     3215#define R_TILEGX_TLS_DTPOFF64   107     /* 64-bit offset in TLS block */
     3216#define R_TILEGX_TLS_TPOFF64    108     /* 64-bit offset in static TLS block */
     3217#define R_TILEGX_TLS_DTPMOD32   109     /* 32-bit ID of symbol's module */
     3218#define R_TILEGX_TLS_DTPOFF32   110     /* 32-bit offset in TLS block */
     3219#define R_TILEGX_TLS_TPOFF32    111     /* 32-bit offset in static TLS block */
     3220#define R_TILEGX_TLS_GD_CALL    112     /* "jal" for TLS GD */
     3221#define R_TILEGX_IMM8_X0_TLS_GD_ADD 113 /* X0 pipe "addi" for TLS GD */
     3222#define R_TILEGX_IMM8_X1_TLS_GD_ADD 114 /* X1 pipe "addi" for TLS GD */
     3223#define R_TILEGX_IMM8_Y0_TLS_GD_ADD 115 /* Y0 pipe "addi" for TLS GD */
     3224#define R_TILEGX_IMM8_Y1_TLS_GD_ADD 116 /* Y1 pipe "addi" for TLS GD */
     3225#define R_TILEGX_TLS_IE_LOAD    117     /* "ld_tls" for TLS IE */
     3226#define R_TILEGX_IMM8_X0_TLS_ADD 118    /* X0 pipe "addi" for TLS GD/IE */
     3227#define R_TILEGX_IMM8_X1_TLS_ADD 119    /* X1 pipe "addi" for TLS GD/IE */
     3228#define R_TILEGX_IMM8_Y0_TLS_ADD 120    /* Y0 pipe "addi" for TLS GD/IE */
     3229#define R_TILEGX_IMM8_Y1_TLS_ADD 121    /* Y1 pipe "addi" for TLS GD/IE */
     3230
     3231#define R_TILEGX_GNU_VTINHERIT  128     /* GNU C++ vtable hierarchy */
     3232#define R_TILEGX_GNU_VTENTRY    129     /* GNU C++ vtable member usage */
     3233
     3234#define R_TILEGX_NUM            130
     3235
     3236
     3237#endif  /* elf.h */
Note: See TracChangeset for help on using the changeset viewer.