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

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

Generated by: LCOV version 1.7