Dr Andrew Scott G7VAV

My photo
 
April 2024
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12


elf.h
0001: /* This file defines standard ELF types, structures, and macros.
0002:    Copyright (C) 1995-2003,2004,2005,2006,2007,2008,2009,2010,2011
0003:         Free Software Foundation, Inc.
0004:    This file is part of the GNU C Library.
0005: 
0006:    The GNU C Library is free software; you can redistribute it and/or
0007:    modify it under the terms of the GNU Lesser General Public
0008:    License as published by the Free Software Foundation; either
0009:    version 2.1 of the License, or (at your option) any later version.
0010: 
0011:    The GNU C Library is distributed in the hope that it will be useful,
0012:    but WITHOUT ANY WARRANTY; without even the implied warranty of
0013:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0014:    Lesser General Public License for more details.
0015: 
0016:    You should have received a copy of the GNU Lesser General Public
0017:    License along with the GNU C Library; if not, write to the Free
0018:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
0019:    02111-1307 USA.  */
0020: 
0021: #ifndef _ELF_H
0022: #define _ELF_H 1
0023: 
0024: #include <features.h>
0025: 
0026: __BEGIN_DECLS
0027: 
0028: /* Standard ELF types.  */
0029: 
0030: #include <stdint.h>
0031: 
0032: /* Type for a 16-bit quantity.  */
0033: typedef uint16_t Elf32_Half;
0034: typedef uint16_t Elf64_Half;
0035: 
0036: /* Types for signed and unsigned 32-bit quantities.  */
0037: typedef uint32_t Elf32_Word;
0038: typedef int32_t  Elf32_Sword;
0039: typedef uint32_t Elf64_Word;
0040: typedef int32_t  Elf64_Sword;
0041: 
0042: /* Types for signed and unsigned 64-bit quantities.  */
0043: typedef uint64_t Elf32_Xword;
0044: typedef int64_t  Elf32_Sxword;
0045: typedef uint64_t Elf64_Xword;
0046: typedef int64_t  Elf64_Sxword;
0047: 
0048: /* Type of addresses.  */
0049: typedef uint32_t Elf32_Addr;
0050: typedef uint64_t Elf64_Addr;
0051: 
0052: /* Type of file offsets.  */
0053: typedef uint32_t Elf32_Off;
0054: typedef uint64_t Elf64_Off;
0055: 
0056: /* Type for section indices, which are 16-bit quantities.  */
0057: typedef uint16_t Elf32_Section;
0058: typedef uint16_t Elf64_Section;
0059: 
0060: /* Type for version symbol information.  */
0061: typedef Elf32_Half Elf32_Versym;
0062: typedef Elf64_Half Elf64_Versym;
0063: 
0064: 
0065: /* The ELF file header.  This appears at the start of every ELF file.  */
0066: 
0067: #define EI_NIDENT (16)
0068: 
0069: typedef struct
0070: {
0071:   unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
0072:   Elf32_Half    e_type;                 /* Object file type */
0073:   Elf32_Half    e_machine;              /* Architecture */
0074:   Elf32_Word    e_version;              /* Object file version */
0075:   Elf32_Addr    e_entry;                /* Entry point virtual address */
0076:   Elf32_Off     e_phoff;                /* Program header table file offset */
0077:   Elf32_Off     e_shoff;                /* Section header table file offset */
0078:   Elf32_Word    e_flags;                /* Processor-specific flags */
0079:   Elf32_Half    e_ehsize;               /* ELF header size in bytes */
0080:   Elf32_Half    e_phentsize;            /* Program header table entry size */
0081:   Elf32_Half    e_phnum;                /* Program header table entry count */
0082:   Elf32_Half    e_shentsize;            /* Section header table entry size */
0083:   Elf32_Half    e_shnum;                /* Section header table entry count */
0084:   Elf32_Half    e_shstrndx;             /* Section header string table index */
0085: } Elf32_Ehdr;
0086: 
0087: typedef struct
0088: {
0089:   unsigned char e_ident[EI_NIDENT];     /* Magic number and other info */
0090:   Elf64_Half    e_type;                 /* Object file type */
0091:   Elf64_Half    e_machine;              /* Architecture */
0092:   Elf64_Word    e_version;              /* Object file version */
0093:   Elf64_Addr    e_entry;                /* Entry point virtual address */
0094:   Elf64_Off     e_phoff;                /* Program header table file offset */
0095:   Elf64_Off     e_shoff;                /* Section header table file offset */
0096:   Elf64_Word    e_flags;                /* Processor-specific flags */
0097:   Elf64_Half    e_ehsize;               /* ELF header size in bytes */
0098:   Elf64_Half    e_phentsize;            /* Program header table entry size */
0099:   Elf64_Half    e_phnum;                /* Program header table entry count */
0100:   Elf64_Half    e_shentsize;            /* Section header table entry size */
0101:   Elf64_Half    e_shnum;                /* Section header table entry count */
0102:   Elf64_Half    e_shstrndx;             /* Section header string table index */
0103: } Elf64_Ehdr;
0104: 
0105: /* Fields in the e_ident array.  The EI_* macros are indices into the
0106:    array.  The macros under each EI_* macro are the values the byte
0107:    may have.  */
0108: 
0109: #define EI_MAG0         0               /* File identification byte 0 index */
0110: #define ELFMAG0         0x7f            /* Magic number byte 0 */
0111: 
0112: #define EI_MAG1         1               /* File identification byte 1 index */
0113: #define ELFMAG1         'E'             /* Magic number byte 1 */
0114: 
0115: #define EI_MAG2         2               /* File identification byte 2 index */
0116: #define ELFMAG2         'L'             /* Magic number byte 2 */
0117: 
0118: #define EI_MAG3         3               /* File identification byte 3 index */
0119: #define ELFMAG3         'F'             /* Magic number byte 3 */
0120: 
0121: /* Conglomeration of the identification bytes, for easy testing as a word.  */
0122: #define ELFMAG          "\177ELF"
0123: #define SELFMAG         4
0124: 
0125: #define EI_CLASS        4               /* File class byte index */
0126: #define ELFCLASSNONE    0               /* Invalid class */
0127: #define ELFCLASS32      1               /* 32-bit objects */
0128: #define ELFCLASS64      2               /* 64-bit objects */
0129: #define ELFCLASSNUM     3
0130: 
0131: #define EI_DATA         5               /* Data encoding byte index */
0132: #define ELFDATANONE     0               /* Invalid data encoding */
0133: #define ELFDATA2LSB     1               /* 2's complement, little endian */
0134: #define ELFDATA2MSB     2               /* 2's complement, big endian */
0135: #define ELFDATANUM      3
0136: 
0137: #define EI_VERSION      6               /* File version byte index */
0138:                                         /* Value must be EV_CURRENT */
0139: 
0140: #define EI_OSABI        7               /* OS ABI identification */
0141: #define ELFOSABI_NONE           0       /* UNIX System V ABI */
0142: #define ELFOSABI_SYSV           0       /* Alias.  */
0143: #define ELFOSABI_HPUX           1       /* HP-UX */
0144: #define ELFOSABI_NETBSD         2       /* NetBSD.  */
0145: #define ELFOSABI_GNU            3       /* Object uses GNU ELF extensions.  */
0146: #define ELFOSABI_LINUX          ELFOSABI_GNU /* Compatibility alias.  */
0147: #define ELFOSABI_SOLARIS        6       /* Sun Solaris.  */
0148: #define ELFOSABI_AIX            7       /* IBM AIX.  */
0149: #define ELFOSABI_IRIX           8       /* SGI Irix.  */
0150: #define ELFOSABI_FREEBSD        9       /* FreeBSD.  */
0151: #define ELFOSABI_TRU64          10      /* Compaq TRU64 UNIX.  */
0152: #define ELFOSABI_MODESTO        11      /* Novell Modesto.  */
0153: #define ELFOSABI_OPENBSD        12      /* OpenBSD.  */
0154: #define ELFOSABI_ARM_AEABI      64      /* ARM EABI */
0155: #define ELFOSABI_ARM            97      /* ARM */
0156: #define ELFOSABI_STANDALONE     255     /* Standalone (embedded) application */
0157: 
0158: #define EI_ABIVERSION   8               /* ABI version */
0159: 
0160: #define EI_PAD          9               /* Byte index of padding bytes */
0161: 
0162: /* Legal values for e_type (object file type).  */
0163: 
0164: #define ET_NONE         0               /* No file type */
0165: #define ET_REL          1               /* Relocatable file */
0166: #define ET_EXEC         2               /* Executable file */
0167: #define ET_DYN          3               /* Shared object file */
0168: #define ET_CORE         4               /* Core file */
0169: #define ET_NUM          5               /* Number of defined types */
0170: #define ET_LOOS         0xfe00          /* OS-specific range start */
0171: #define ET_HIOS         0xfeff          /* OS-specific range end */
0172: #define ET_LOPROC       0xff00          /* Processor-specific range start */
0173: #define ET_HIPROC       0xffff          /* Processor-specific range end */
0174: 
0175: /* Legal values for e_machine (architecture).  */
0176: 
0177: #define EM_NONE          0              /* No machine */
0178: #define EM_M32           1              /* AT&T WE 32100 */
0179: #define EM_SPARC         2              /* SUN SPARC */
0180: #define EM_386           3              /* Intel 80386 */
0181: #define EM_68K           4              /* Motorola m68k family */
0182: #define EM_88K           5              /* Motorola m88k family */
0183: #define EM_860           7              /* Intel 80860 */
0184: #define EM_MIPS          8              /* MIPS R3000 big-endian */
0185: #define EM_S370          9              /* IBM System/370 */
0186: #define EM_MIPS_RS3_LE  10              /* MIPS R3000 little-endian */
0187: 
0188: #define EM_PARISC       15              /* HPPA */
0189: #define EM_VPP500       17              /* Fujitsu VPP500 */
0190: #define EM_SPARC32PLUS  18              /* Sun's "v8plus" */
0191: #define EM_960          19              /* Intel 80960 */
0192: #define EM_PPC          20              /* PowerPC */
0193: #define EM_PPC64        21              /* PowerPC 64-bit */
0194: #define EM_S390         22              /* IBM S390 */
0195: 
0196: #define EM_V800         36              /* NEC V800 series */
0197: #define EM_FR20         37              /* Fujitsu FR20 */
0198: #define EM_RH32         38              /* TRW RH-32 */
0199: #define EM_RCE          39              /* Motorola RCE */
0200: #define EM_ARM          40              /* ARM */
0201: #define EM_FAKE_ALPHA   41              /* Digital Alpha */
0202: #define EM_SH           42              /* Hitachi SH */
0203: #define EM_SPARCV9      43              /* SPARC v9 64-bit */
0204: #define EM_TRICORE      44              /* Siemens Tricore */
0205: #define EM_ARC          45              /* Argonaut RISC Core */
0206: #define EM_H8_300       46              /* Hitachi H8/300 */
0207: #define EM_H8_300H      47              /* Hitachi H8/300H */
0208: #define EM_H8S          48              /* Hitachi H8S */
0209: #define EM_H8_500       49              /* Hitachi H8/500 */
0210: #define EM_IA_64        50              /* Intel Merced */
0211: #define EM_MIPS_X       51              /* Stanford MIPS-X */
0212: #define EM_COLDFIRE     52              /* Motorola Coldfire */
0213: #define EM_68HC12       53              /* Motorola M68HC12 */
0214: #define EM_MMA          54              /* Fujitsu MMA Multimedia Accelerator*/
0215: #define EM_PCP          55              /* Siemens PCP */
0216: #define EM_NCPU         56              /* Sony nCPU embeeded RISC */
0217: #define EM_NDR1         57              /* Denso NDR1 microprocessor */
0218: #define EM_STARCORE     58              /* Motorola Start*Core processor */
0219: #define EM_ME16         59              /* Toyota ME16 processor */
0220: #define EM_ST100        60              /* STMicroelectronic ST100 processor */
0221: #define EM_TINYJ        61              /* Advanced Logic Corp. Tinyj emb.fam*/
0222: #define EM_X86_64       62              /* AMD x86-64 architecture */
0223: #define EM_PDSP         63              /* Sony DSP Processor */
0224: 
0225: #define EM_FX66         66              /* Siemens FX66 microcontroller */
0226: #define EM_ST9PLUS      67              /* STMicroelectronics ST9+ 8/16 mc */
0227: #define EM_ST7          68              /* STmicroelectronics ST7 8 bit mc */
0228: #define EM_68HC16       69              /* Motorola MC68HC16 microcontroller */
0229: #define EM_68HC11       70              /* Motorola MC68HC11 microcontroller */
0230: #define EM_68HC08       71              /* Motorola MC68HC08 microcontroller */
0231: #define EM_68HC05       72              /* Motorola MC68HC05 microcontroller */
0232: #define EM_SVX          73              /* Silicon Graphics SVx */
0233: #define EM_ST19         74              /* STMicroelectronics ST19 8 bit mc */
0234: #define EM_VAX          75              /* Digital VAX */
0235: #define EM_CRIS         76              /* Axis Communications 32-bit embedded processor */
0236: #define EM_JAVELIN      77              /* Infineon Technologies 32-bit embedded processor */
0237: #define EM_FIREPATH     78              /* Element 14 64-bit DSP Processor */
0238: #define EM_ZSP          79              /* LSI Logic 16-bit DSP Processor */
0239: #define EM_MMIX         80              /* Donald Knuth's educational 64-bit processor */
0240: #define EM_HUANY        81              /* Harvard University machine-independent object files */
0241: #define EM_PRISM        82              /* SiTera Prism */
0242: #define EM_AVR          83              /* Atmel AVR 8-bit microcontroller */
0243: #define EM_FR30         84              /* Fujitsu FR30 */
0244: #define EM_D10V         85              /* Mitsubishi D10V */
0245: #define EM_D30V         86              /* Mitsubishi D30V */
0246: #define EM_V850         87              /* NEC v850 */
0247: #define EM_M32R         88              /* Mitsubishi M32R */
0248: #define EM_MN10300      89              /* Matsushita MN10300 */
0249: #define EM_MN10200      90              /* Matsushita MN10200 */
0250: #define EM_PJ           91              /* picoJava */
0251: #define EM_OPENRISC     92              /* OpenRISC 32-bit embedded processor */
0252: #define EM_ARC_A5       93              /* ARC Cores Tangent-A5 */
0253: #define EM_XTENSA       94              /* Tensilica Xtensa Architecture */
0254: #define EM_NUM          95
0255: 
0256: /* If it is necessary to assign new unofficial EM_* values, please
0257:    pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the
0258:    chances of collision with official or non-GNU unofficial values.  */
0259: 
0260: #define EM_ALPHA        0x9026
0261: 
0262: /* Legal values for e_version (version).  */
0263: 
0264: #define EV_NONE         0               /* Invalid ELF version */
0265: #define EV_CURRENT      1               /* Current version */
0266: #define EV_NUM          2
0267: 
0268: /* Section header.  */
0269: 
0270: typedef struct
0271: {
0272:   Elf32_Word    sh_name;                /* Section name (string tbl index) */
0273:   Elf32_Word    sh_type;                /* Section type */
0274:   Elf32_Word    sh_flags;               /* Section flags */
0275:   Elf32_Addr    sh_addr;                /* Section virtual addr at execution */
0276:   Elf32_Off     sh_offset;              /* Section file offset */
0277:   Elf32_Word    sh_size;                /* Section size in bytes */
0278:   Elf32_Word    sh_link;                /* Link to another section */
0279:   Elf32_Word    sh_info;                /* Additional section information */
0280:   Elf32_Word    sh_addralign;           /* Section alignment */
0281:   Elf32_Word    sh_entsize;             /* Entry size if section holds table */
0282: } Elf32_Shdr;
0283: 
0284: typedef struct
0285: {
0286:   Elf64_Word    sh_name;                /* Section name (string tbl index) */
0287:   Elf64_Word    sh_type;                /* Section type */
0288:   Elf64_Xword   sh_flags;               /* Section flags */
0289:   Elf64_Addr    sh_addr;                /* Section virtual addr at execution */
0290:   Elf64_Off     sh_offset;              /* Section file offset */
0291:   Elf64_Xword   sh_size;                /* Section size in bytes */
0292:   Elf64_Word    sh_link;                /* Link to another section */
0293:   Elf64_Word    sh_info;                /* Additional section information */
0294:   Elf64_Xword   sh_addralign;           /* Section alignment */
0295:   Elf64_Xword   sh_entsize;             /* Entry size if section holds table */
0296: } Elf64_Shdr;
0297: 
0298: /* Special section indices.  */
0299: 
0300: #define SHN_UNDEF       0               /* Undefined section */
0301: #define SHN_LORESERVE   0xff00          /* Start of reserved indices */
0302: #define SHN_LOPROC      0xff00          /* Start of processor-specific */
0303: #define SHN_BEFORE      0xff00          /* Order section before all others
0304:                                            (Solaris).  */
0305: #define SHN_AFTER       0xff01          /* Order section after all others
0306:                                            (Solaris).  */
0307: #define SHN_HIPROC      0xff1f          /* End of processor-specific */
0308: #define SHN_LOOS        0xff20          /* Start of OS-specific */
0309: #define SHN_HIOS        0xff3f          /* End of OS-specific */
0310: #define SHN_ABS         0xfff1          /* Associated symbol is absolute */
0311: #define SHN_COMMON      0xfff2          /* Associated symbol is common */
0312: #define SHN_XINDEX      0xffff          /* Index is in extra table.  */
0313: #define SHN_HIRESERVE   0xffff          /* End of reserved indices */
0314: 
0315: /* Legal values for sh_type (section type).  */
0316: 
0317: #define SHT_NULL          0             /* Section header table entry unused */
0318: #define SHT_PROGBITS      1             /* Program data */
0319: #define SHT_SYMTAB        2             /* Symbol table */
0320: #define SHT_STRTAB        3             /* String table */
0321: #define SHT_RELA          4             /* Relocation entries with addends */
0322: #define SHT_HASH          5             /* Symbol hash table */
0323: #define SHT_DYNAMIC       6             /* Dynamic linking information */
0324: #define SHT_NOTE          7             /* Notes */
0325: #define SHT_NOBITS        8             /* Program space with no data (bss) */
0326: #define SHT_REL           9             /* Relocation entries, no addends */
0327: #define SHT_SHLIB         10            /* Reserved */
0328: #define SHT_DYNSYM        11            /* Dynamic linker symbol table */
0329: #define SHT_INIT_ARRAY    14            /* Array of constructors */
0330: #define SHT_FINI_ARRAY    15            /* Array of destructors */
0331: #define SHT_PREINIT_ARRAY 16            /* Array of pre-constructors */
0332: #define SHT_GROUP         17            /* Section group */
0333: #define SHT_SYMTAB_SHNDX  18            /* Extended section indeces */
0334: #define SHT_NUM           19            /* Number of defined types.  */
0335: #define SHT_LOOS          0x60000000    /* Start OS-specific.  */
0336: #define SHT_GNU_ATTRIBUTES 0x6ffffff5   /* Object attributes.  */
0337: #define SHT_GNU_HASH      0x6ffffff6    /* GNU-style hash table.  */
0338: #define SHT_GNU_LIBLIST   0x6ffffff7    /* Prelink library list */
0339: #define SHT_CHECKSUM      0x6ffffff8    /* Checksum for DSO content.  */
0340: #define SHT_LOSUNW        0x6ffffffa    /* Sun-specific low bound.  */
0341: #define SHT_SUNW_move     0x6ffffffa
0342: #define SHT_SUNW_COMDAT   0x6ffffffb
0343: #define SHT_SUNW_syminfo  0x6ffffffc
0344: #define SHT_GNU_verdef    0x6ffffffd    /* Version definition section.  */
0345: #define SHT_GNU_verneed   0x6ffffffe    /* Version needs section.  */
0346: #define SHT_GNU_versym    0x6fffffff    /* Version symbol table.  */
0347: #define SHT_HISUNW        0x6fffffff    /* Sun-specific high bound.  */
0348: #define SHT_HIOS          0x6fffffff    /* End OS-specific type */
0349: #define SHT_LOPROC        0x70000000    /* Start of processor-specific */
0350: #define SHT_HIPROC        0x7fffffff    /* End of processor-specific */
0351: #define SHT_LOUSER        0x80000000    /* Start of application-specific */
0352: #define SHT_HIUSER        0x8fffffff    /* End of application-specific */
0353: 
0354: /* Legal values for sh_flags (section flags).  */
0355: 
0356: #define SHF_WRITE            (1 << 0)   /* Writable */
0357: #define SHF_ALLOC            (1 << 1)   /* Occupies memory during execution */
0358: #define SHF_EXECINSTR        (1 << 2)   /* Executable */
0359: #define SHF_MERGE            (1 << 4)   /* Might be merged */
0360: #define SHF_STRINGS          (1 << 5)   /* Contains nul-terminated strings */
0361: #define SHF_INFO_LINK        (1 << 6)   /* `sh_info' contains SHT index */
0362: #define SHF_LINK_ORDER       (1 << 7)   /* Preserve order after combining */
0363: #define SHF_OS_NONCONFORMING (1 << 8)   /* Non-standard OS specific handling
0364:                                            required */
0365: #define SHF_GROUP            (1 << 9)   /* Section is member of a group.  */
0366: #define SHF_TLS              (1 << 10)  /* Section hold thread-local data.  */
0367: #define SHF_MASKOS           0x0ff00000 /* OS-specific.  */
0368: #define SHF_MASKPROC         0xf0000000 /* Processor-specific */
0369: #define SHF_ORDERED          (1 << 30)  /* Special ordering requirement
0370:                                            (Solaris).  */
0371: #define SHF_EXCLUDE          (1 << 31)  /* Section is excluded unless
0372:                                            referenced or allocated (Solaris).*/
0373: 
0374: /* Section group handling.  */
0375: #define GRP_COMDAT      0x1             /* Mark group as COMDAT.  */
0376: 
0377: /* Symbol table entry.  */
0378: 
0379: typedef struct
0380: {
0381:   Elf32_Word    st_name;                /* Symbol name (string tbl index) */
0382:   Elf32_Addr    st_value;               /* Symbol value */
0383:   Elf32_Word    st_size;                /* Symbol size */
0384:   unsigned char st_info;                /* Symbol type and binding */
0385:   unsigned char st_other;               /* Symbol visibility */
0386:   Elf32_Section st_shndx;               /* Section index */
0387: } Elf32_Sym;
0388: 
0389: typedef struct
0390: {
0391:   Elf64_Word    st_name;                /* Symbol name (string tbl index) */
0392:   unsigned char st_info;                /* Symbol type and binding */
0393:   unsigned char st_other;               /* Symbol visibility */
0394:   Elf64_Section st_shndx;               /* Section index */
0395:   Elf64_Addr    st_value;               /* Symbol value */
0396:   Elf64_Xword   st_size;                /* Symbol size */
0397: } Elf64_Sym;
0398: 
0399: /* The syminfo section if available contains additional information about
0400:    every dynamic symbol.  */
0401: 
0402: typedef struct
0403: {
0404:   Elf32_Half si_boundto;                /* Direct bindings, symbol bound to */
0405:   Elf32_Half si_flags;                  /* Per symbol flags */
0406: } Elf32_Syminfo;
0407: 
0408: typedef struct
0409: {
0410:   Elf64_Half si_boundto;                /* Direct bindings, symbol bound to */
0411:   Elf64_Half si_flags;                  /* Per symbol flags */
0412: } Elf64_Syminfo;
0413: 
0414: /* Possible values for si_boundto.  */
0415: #define SYMINFO_BT_SELF         0xffff  /* Symbol bound to self */
0416: #define SYMINFO_BT_PARENT       0xfffe  /* Symbol bound to parent */
0417: #define SYMINFO_BT_LOWRESERVE   0xff00  /* Beginning of reserved entries */
0418: 
0419: /* Possible bitmasks for si_flags.  */
0420: #define SYMINFO_FLG_DIRECT      0x0001  /* Direct bound symbol */
0421: #define SYMINFO_FLG_PASSTHRU    0x0002  /* Pass-thru symbol for translator */
0422: #define SYMINFO_FLG_COPY        0x0004  /* Symbol is a copy-reloc */
0423: #define SYMINFO_FLG_LAZYLOAD    0x0008  /* Symbol bound to object to be lazy
0424:                                            loaded */
0425: /* Syminfo version values.  */
0426: #define SYMINFO_NONE            0
0427: #define SYMINFO_CURRENT         1
0428: #define SYMINFO_NUM             2
0429: 
0430: 
0431: /* How to extract and insert information held in the st_info field.  */
0432: 
0433: #define ELF32_ST_BIND(val)              (((unsigned char) (val)) >> 4)
0434: #define ELF32_ST_TYPE(val)              ((val) & 0xf)
0435: #define ELF32_ST_INFO(bind, type)       (((bind) << 4) + ((type) & 0xf))
0436: 
0437: /* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field.  */
0438: #define ELF64_ST_BIND(val)              ELF32_ST_BIND (val)
0439: #define ELF64_ST_TYPE(val)              ELF32_ST_TYPE (val)
0440: #define ELF64_ST_INFO(bind, type)       ELF32_ST_INFO ((bind), (type))
0441: 
0442: /* Legal values for ST_BIND subfield of st_info (symbol binding).  */
0443: 
0444: #define STB_LOCAL       0               /* Local symbol */
0445: #define STB_GLOBAL      1               /* Global symbol */
0446: #define STB_WEAK        2               /* Weak symbol */
0447: #define STB_NUM         3               /* Number of defined types.  */
0448: #define STB_LOOS        10              /* Start of OS-specific */
0449: #define STB_GNU_UNIQUE  10              /* Unique symbol.  */
0450: #define STB_HIOS        12              /* End of OS-specific */
0451: #define STB_LOPROC      13              /* Start of processor-specific */
0452: #define STB_HIPROC      15              /* End of processor-specific */
0453: 
0454: /* Legal values for ST_TYPE subfield of st_info (symbol type).  */
0455: 
0456: #define STT_NOTYPE      0               /* Symbol type is unspecified */
0457: #define STT_OBJECT      1               /* Symbol is a data object */
0458: #define STT_FUNC        2               /* Symbol is a code object */
0459: #define STT_SECTION     3               /* Symbol associated with a section */
0460: #define STT_FILE        4               /* Symbol's name is file name */
0461: #define STT_COMMON      5               /* Symbol is a common data object */
0462: #define STT_TLS         6               /* Symbol is thread-local data object*/
0463: #define STT_NUM         7               /* Number of defined types.  */
0464: #define STT_LOOS        10              /* Start of OS-specific */
0465: #define STT_GNU_IFUNC   10              /* Symbol is indirect code object */
0466: #define STT_HIOS        12              /* End of OS-specific */
0467: #define STT_LOPROC      13              /* Start of processor-specific */
0468: #define STT_HIPROC      15              /* End of processor-specific */
0469: 
0470: 
0471: /* Symbol table indices are found in the hash buckets and chain table
0472:    of a symbol hash table section.  This special index value indicates
0473:    the end of a chain, meaning no further symbols are found in that bucket.  */
0474: 
0475: #define STN_UNDEF       0               /* End of a chain.  */
0476: 
0477: 
0478: /* How to extract and insert information held in the st_other field.  */
0479: 
0480: #define ELF32_ST_VISIBILITY(o)  ((o) & 0x03)
0481: 
0482: /* For ELF64 the definitions are the same.  */
0483: #define ELF64_ST_VISIBILITY(o)  ELF32_ST_VISIBILITY (o)
0484: 
0485: /* Symbol visibility specification encoded in the st_other field.  */
0486: #define STV_DEFAULT     0               /* Default symbol visibility rules */
0487: #define STV_INTERNAL    1               /* Processor specific hidden class */
0488: #define STV_HIDDEN      2               /* Sym unavailable in other modules */
0489: #define STV_PROTECTED   3               /* Not preemptible, not exported */
0490: 
0491: 
0492: /* Relocation table entry without addend (in section of type SHT_REL).  */
0493: 
0494: typedef struct
0495: {
0496:   Elf32_Addr    r_offset;               /* Address */
0497:   Elf32_Word    r_info;                 /* Relocation type and symbol index */
0498: } Elf32_Rel;
0499: 
0500: /* I have seen two different definitions of the Elf64_Rel and
0501:    Elf64_Rela structures, so we'll leave them out until Novell (or
0502:    whoever) gets their act together.  */
0503: /* The following, at least, is used on Sparc v9, MIPS, and Alpha.  */
0504: 
0505: typedef struct
0506: {
0507:   Elf64_Addr    r_offset;               /* Address */
0508:   Elf64_Xword   r_info;                 /* Relocation type and symbol index */
0509: } Elf64_Rel;
0510: 
0511: /* Relocation table entry with addend (in section of type SHT_RELA).  */
0512: 
0513: typedef struct
0514: {
0515:   Elf32_Addr    r_offset;               /* Address */
0516:   Elf32_Word    r_info;                 /* Relocation type and symbol index */
0517:   Elf32_Sword   r_addend;               /* Addend */
0518: } Elf32_Rela;
0519: 
0520: typedef struct
0521: {
0522:   Elf64_Addr    r_offset;               /* Address */
0523:   Elf64_Xword   r_info;                 /* Relocation type and symbol index */
0524:   Elf64_Sxword  r_addend;               /* Addend */
0525: } Elf64_Rela;
0526: 
0527: /* How to extract and insert information held in the r_info field.  */
0528: 
0529: #define ELF32_R_SYM(val)                ((val) >> 8)
0530: #define ELF32_R_TYPE(val)               ((val) & 0xff)
0531: #define ELF32_R_INFO(sym, type)         (((sym) << 8) + ((type) & 0xff))
0532: 
0533: #define ELF64_R_SYM(i)                  ((i) >> 32)
0534: #define ELF64_R_TYPE(i)                 ((i) & 0xffffffff)
0535: #define ELF64_R_INFO(sym,type)          ((((Elf64_Xword) (sym)) << 32) + (type))
0536: 
0537: /* Program segment header.  */
0538: 
0539: typedef struct
0540: {
0541:   Elf32_Word    p_type;                 /* Segment type */
0542:   Elf32_Off     p_offset;               /* Segment file offset */
0543:   Elf32_Addr    p_vaddr;                /* Segment virtual address */
0544:   Elf32_Addr    p_paddr;                /* Segment physical address */
0545:   Elf32_Word    p_filesz;               /* Segment size in file */
0546:   Elf32_Word    p_memsz;                /* Segment size in memory */
0547:   Elf32_Word    p_flags;                /* Segment flags */
0548:   Elf32_Word    p_align;                /* Segment alignment */
0549: } Elf32_Phdr;
0550: 
0551: typedef struct
0552: {
0553:   Elf64_Word    p_type;                 /* Segment type */
0554:   Elf64_Word    p_flags;                /* Segment flags */
0555:   Elf64_Off     p_offset;               /* Segment file offset */
0556:   Elf64_Addr    p_vaddr;                /* Segment virtual address */
0557:   Elf64_Addr    p_paddr;                /* Segment physical address */
0558:   Elf64_Xword   p_filesz;               /* Segment size in file */
0559:   Elf64_Xword   p_memsz;                /* Segment size in memory */
0560:   Elf64_Xword   p_align;                /* Segment alignment */
0561: } Elf64_Phdr;
0562: 
0563: /* Special value for e_phnum.  This indicates that the real number of
0564:    program headers is too large to fit into e_phnum.  Instead the real
0565:    value is in the field sh_info of section 0.  */
0566: 
0567: #define PN_XNUM         0xffff
0568: 
0569: /* Legal values for p_type (segment type).  */
0570: 
0571: #define PT_NULL         0               /* Program header table entry unused */
0572: #define PT_LOAD         1               /* Loadable program segment */
0573: #define PT_DYNAMIC      2               /* Dynamic linking information */
0574: #define PT_INTERP       3               /* Program interpreter */
0575: #define PT_NOTE         4               /* Auxiliary information */
0576: #define PT_SHLIB        5               /* Reserved */
0577: #define PT_PHDR         6               /* Entry for header table itself */
0578: #define PT_TLS          7               /* Thread-local storage segment */
0579: #define PT_NUM          8               /* Number of defined types */
0580: #define PT_LOOS         0x60000000      /* Start of OS-specific */
0581: #define PT_GNU_EH_FRAME 0x6474e550      /* GCC .eh_frame_hdr segment */
0582: #define PT_GNU_STACK    0x6474e551      /* Indicates stack executability */
0583: #define PT_GNU_RELRO    0x6474e552      /* Read-only after relocation */
0584: #define PT_LOSUNW       0x6ffffffa
0585: #define PT_SUNWBSS      0x6ffffffa      /* Sun Specific segment */
0586: #define PT_SUNWSTACK    0x6ffffffb      /* Stack segment */
0587: #define PT_HISUNW       0x6fffffff
0588: #define PT_HIOS         0x6fffffff      /* End of OS-specific */
0589: #define PT_LOPROC       0x70000000      /* Start of processor-specific */
0590: #define PT_HIPROC       0x7fffffff      /* End of processor-specific */
0591: 
0592: /* Legal values for p_flags (segment flags).  */
0593: 
0594: #define PF_X            (1 << 0)        /* Segment is executable */
0595: #define PF_W            (1 << 1)        /* Segment is writable */
0596: #define PF_R            (1 << 2)        /* Segment is readable */
0597: #define PF_MASKOS       0x0ff00000      /* OS-specific */
0598: #define PF_MASKPROC     0xf0000000      /* Processor-specific */
0599: 
0600: /* Legal values for note segment descriptor types for core files. */
0601: 
0602: #define NT_PRSTATUS     1               /* Contains copy of prstatus struct */
0603: #define NT_FPREGSET     2               /* Contains copy of fpregset struct */
0604: #define NT_PRPSINFO     3               /* Contains copy of prpsinfo struct */
0605: #define NT_PRXREG       4               /* Contains copy of prxregset struct */
0606: #define NT_TASKSTRUCT   4               /* Contains copy of task structure */
0607: #define NT_PLATFORM     5               /* String from sysinfo(SI_PLATFORM) */
0608: #define NT_AUXV         6               /* Contains copy of auxv array */
0609: #define NT_GWINDOWS     7               /* Contains copy of gwindows struct */
0610: #define NT_ASRS         8               /* Contains copy of asrset struct */
0611: #define NT_PSTATUS      10              /* Contains copy of pstatus struct */
0612: #define NT_PSINFO       13              /* Contains copy of psinfo struct */
0613: #define NT_PRCRED       14              /* Contains copy of prcred struct */
0614: #define NT_UTSNAME      15              /* Contains copy of utsname struct */
0615: #define NT_LWPSTATUS    16              /* Contains copy of lwpstatus struct */
0616: #define NT_LWPSINFO     17              /* Contains copy of lwpinfo struct */
0617: #define NT_PRFPXREG     20              /* Contains copy of fprxregset struct */
0618: #define NT_PRXFPREG     0x46e62b7f      /* Contains copy of user_fxsr_struct */
0619: #define NT_PPC_VMX      0x100           /* PowerPC Altivec/VMX registers */
0620: #define NT_PPC_SPE      0x101           /* PowerPC SPE/EVR registers */
0621: #define NT_PPC_VSX      0x102           /* PowerPC VSX registers */
0622: #define NT_386_TLS      0x200           /* i386 TLS slots (struct user_desc) */
0623: #define NT_386_IOPERM   0x201           /* x86 io permission bitmap (1=deny) */
0624: #define NT_X86_XSTATE   0x202           /* x86 extended state using xsave */
0625: 
0626: /* Legal values for the note segment descriptor types for object files.  */
0627: 
0628: #define NT_VERSION      1               /* Contains a version string.  */
0629: 
0630: 
0631: /* Dynamic section entry.  */
0632: 
0633: typedef struct
0634: {
0635:   Elf32_Sword   d_tag;                  /* Dynamic entry type */
0636:   union
0637:     {
0638:       Elf32_Word d_val;                 /* Integer value */
0639:       Elf32_Addr d_ptr;                 /* Address value */
0640:     } d_un;
0641: } Elf32_Dyn;
0642: 
0643: typedef struct
0644: {
0645:   Elf64_Sxword  d_tag;                  /* Dynamic entry type */
0646:   union
0647:     {
0648:       Elf64_Xword d_val;                /* Integer value */
0649:       Elf64_Addr d_ptr;                 /* Address value */
0650:     } d_un;
0651: } Elf64_Dyn;
0652: 
0653: /* Legal values for d_tag (dynamic entry type).  */
0654: 
0655: #define DT_NULL         0               /* Marks end of dynamic section */
0656: #define DT_NEEDED       1               /* Name of needed library */
0657: #define DT_PLTRELSZ     2               /* Size in bytes of PLT relocs */
0658: #define DT_PLTGOT       3               /* Processor defined value */
0659: #define DT_HASH         4               /* Address of symbol hash table */
0660: #define DT_STRTAB       5               /* Address of string table */
0661: #define DT_SYMTAB       6               /* Address of symbol table */
0662: #define DT_RELA         7               /* Address of Rela relocs */
0663: #define DT_RELASZ       8               /* Total size of Rela relocs */
0664: #define DT_RELAENT      9               /* Size of one Rela reloc */
0665: #define DT_STRSZ        10              /* Size of string table */
0666: #define DT_SYMENT       11              /* Size of one symbol table entry */
0667: #define DT_INIT         12              /* Address of init function */
0668: #define DT_FINI         13              /* Address of termination function */
0669: #define DT_SONAME       14              /* Name of shared object */
0670: #define DT_RPATH        15              /* Library search path (deprecated) */
0671: #define DT_SYMBOLIC     16              /* Start symbol search here */
0672: #define DT_REL          17              /* Address of Rel relocs */
0673: #define DT_RELSZ        18              /* Total size of Rel relocs */
0674: #define DT_RELENT       19              /* Size of one Rel reloc */
0675: #define DT_PLTREL       20              /* Type of reloc in PLT */
0676: #define DT_DEBUG        21              /* For debugging; unspecified */
0677: #define DT_TEXTREL      22              /* Reloc might modify .text */
0678: #define DT_JMPREL       23              /* Address of PLT relocs */
0679: #define DT_BIND_NOW     24              /* Process relocations of object */
0680: #define DT_INIT_ARRAY   25              /* Array with addresses of init fct */
0681: #define DT_FINI_ARRAY   26              /* Array with addresses of fini fct */
0682: #define DT_INIT_ARRAYSZ 27              /* Size in bytes of DT_INIT_ARRAY */
0683: #define DT_FINI_ARRAYSZ 28              /* Size in bytes of DT_FINI_ARRAY */
0684: #define DT_RUNPATH      29              /* Library search path */
0685: #define DT_FLAGS        30              /* Flags for the object being loaded */
0686: #define DT_ENCODING     32              /* Start of encoded range */
0687: #define DT_PREINIT_ARRAY 32             /* Array with addresses of preinit fct*/
0688: #define DT_PREINIT_ARRAYSZ 33           /* size in bytes of DT_PREINIT_ARRAY */
0689: #define DT_NUM          34              /* Number used */
0690: #define DT_LOOS         0x6000000d      /* Start of OS-specific */
0691: #define DT_HIOS         0x6ffff000      /* End of OS-specific */
0692: #define DT_LOPROC       0x70000000      /* Start of processor-specific */
0693: #define DT_HIPROC       0x7fffffff      /* End of processor-specific */
0694: #define DT_PROCNUM      DT_MIPS_NUM     /* Most used by any processor */
0695: 
0696: /* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the
0697:    Dyn.d_un.d_val field of the Elf*_Dyn structure.  This follows Sun's
0698:    approach.  */
0699: #define DT_VALRNGLO     0x6ffffd00
0700: #define DT_GNU_PRELINKED 0x6ffffdf5     /* Prelinking timestamp */
0701: #define DT_GNU_CONFLICTSZ 0x6ffffdf6    /* Size of conflict section */
0702: #define DT_GNU_LIBLISTSZ 0x6ffffdf7     /* Size of library list */
0703: #define DT_CHECKSUM     0x6ffffdf8
0704: #define DT_PLTPADSZ     0x6ffffdf9
0705: #define DT_MOVEENT      0x6ffffdfa
0706: #define DT_MOVESZ       0x6ffffdfb
0707: #define DT_FEATURE_1    0x6ffffdfc      /* Feature selection (DTF_*).  */
0708: #define DT_POSFLAG_1    0x6ffffdfd      /* Flags for DT_* entries, effecting
0709:                                            the following DT_* entry.  */
0710: #define DT_SYMINSZ      0x6ffffdfe      /* Size of syminfo table (in bytes) */
0711: #define DT_SYMINENT     0x6ffffdff      /* Entry size of syminfo */
0712: #define DT_VALRNGHI     0x6ffffdff
0713: #define DT_VALTAGIDX(tag)       (DT_VALRNGHI - (tag))   /* Reverse order! */
0714: #define DT_VALNUM 12
0715: 
0716: /* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the
0717:    Dyn.d_un.d_ptr field of the Elf*_Dyn structure.
0718: 
0719:    If any adjustment is made to the ELF object after it has been
0720:    built these entries will need to be adjusted.  */
0721: #define DT_ADDRRNGLO    0x6ffffe00
0722: #define DT_GNU_HASH     0x6ffffef5      /* GNU-style hash table.  */
0723: #define DT_TLSDESC_PLT  0x6ffffef6
0724: #define DT_TLSDESC_GOT  0x6ffffef7
0725: #define DT_GNU_CONFLICT 0x6ffffef8      /* Start of conflict section */
0726: #define DT_GNU_LIBLIST  0x6ffffef9      /* Library list */
0727: #define DT_CONFIG       0x6ffffefa      /* Configuration information.  */
0728: #define DT_DEPAUDIT     0x6ffffefb      /* Dependency auditing.  */
0729: #define DT_AUDIT        0x6ffffefc      /* Object auditing.  */
0730: #define DT_PLTPAD       0x6ffffefd      /* PLT padding.  */
0731: #define DT_MOVETAB      0x6ffffefe      /* Move table.  */
0732: #define DT_SYMINFO      0x6ffffeff      /* Syminfo table.  */
0733: #define DT_ADDRRNGHI    0x6ffffeff
0734: #define DT_ADDRTAGIDX(tag)      (DT_ADDRRNGHI - (tag))  /* Reverse order! */
0735: #define DT_ADDRNUM 11
0736: 
0737: /* The versioning entry types.  The next are defined as part of the
0738:    GNU extension.  */
0739: #define DT_VERSYM       0x6ffffff0
0740: 
0741: #define DT_RELACOUNT    0x6ffffff9
0742: #define DT_RELCOUNT     0x6ffffffa
0743: 
0744: /* These were chosen by Sun.  */
0745: #define DT_FLAGS_1      0x6ffffffb      /* State flags, see DF_1_* below.  */
0746: #define DT_VERDEF       0x6ffffffc      /* Address of version definition
0747:                                            table */
0748: #define DT_VERDEFNUM    0x6ffffffd      /* Number of version definitions */
0749: #define DT_VERNEED      0x6ffffffe      /* Address of table with needed
0750:                                            versions */
0751: #define DT_VERNEEDNUM   0x6fffffff      /* Number of needed versions */
0752: #define DT_VERSIONTAGIDX(tag)   (DT_VERNEEDNUM - (tag)) /* Reverse order! */
0753: #define DT_VERSIONTAGNUM 16
0754: 
0755: /* Sun added these machine-independent extensions in the "processor-specific"
0756:    range.  Be compatible.  */
0757: #define DT_AUXILIARY    0x7ffffffd      /* Shared object to load before self */
0758: #define DT_FILTER       0x7fffffff      /* Shared object to get values from */
0759: #define DT_EXTRATAGIDX(tag)     ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1)
0760: #define DT_EXTRANUM     3
0761: 
0762: /* Values of `d_un.d_val' in the DT_FLAGS entry.  */
0763: #define DF_ORIGIN       0x00000001      /* Object may use DF_ORIGIN */
0764: #define DF_SYMBOLIC     0x00000002      /* Symbol resolutions starts here */
0765: #define DF_TEXTREL      0x00000004      /* Object contains text relocations */
0766: #define DF_BIND_NOW     0x00000008      /* No lazy binding for this object */
0767: #define DF_STATIC_TLS   0x00000010      /* Module uses the static TLS model */
0768: 
0769: /* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1
0770:    entry in the dynamic section.  */
0771: #define DF_1_NOW        0x00000001      /* Set RTLD_NOW for this object.  */
0772: #define DF_1_GLOBAL     0x00000002      /* Set RTLD_GLOBAL for this object.  */
0773: #define DF_1_GROUP      0x00000004      /* Set RTLD_GROUP for this object.  */
0774: #define DF_1_NODELETE   0x00000008      /* Set RTLD_NODELETE for this object.*/
0775: #define DF_1_LOADFLTR   0x00000010      /* Trigger filtee loading at runtime.*/
0776: #define DF_1_INITFIRST  0x00000020      /* Set RTLD_INITFIRST for this object*/
0777: #define DF_1_NOOPEN     0x00000040      /* Set RTLD_NOOPEN for this object.  */
0778: #define DF_1_ORIGIN     0x00000080      /* $ORIGIN must be handled.  */
0779: #define DF_1_DIRECT     0x00000100      /* Direct binding enabled.  */
0780: #define DF_1_TRANS      0x00000200
0781: #define DF_1_INTERPOSE  0x00000400      /* Object is used to interpose.  */
0782: #define DF_1_NODEFLIB   0x00000800      /* Ignore default lib search path.  */
0783: #define DF_1_NODUMP     0x00001000      /* Object can't be dldump'ed.  */
0784: #define DF_1_CONFALT    0x00002000      /* Configuration alternative created.*/
0785: #define DF_1_ENDFILTEE  0x00004000      /* Filtee terminates filters search. */
0786: #define DF_1_DISPRELDNE 0x00008000      /* Disp reloc applied at build time. */
0787: #define DF_1_DISPRELPND 0x00010000      /* Disp reloc applied at run-time.  */
0788: 
0789: /* Flags for the feature selection in DT_FEATURE_1.  */
0790: #define DTF_1_PARINIT   0x00000001
0791: #define DTF_1_CONFEXP   0x00000002
0792: 
0793: /* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry.  */
0794: #define DF_P1_LAZYLOAD  0x00000001      /* Lazyload following object.  */
0795: #define DF_P1_GROUPPERM 0x00000002      /* Symbols from next object are not
0796:                                            generally available.  */
0797: 
0798: /* Version definition sections.  */
0799: 
0800: typedef struct
0801: {
0802:   Elf32_Half    vd_version;             /* Version revision */
0803:   Elf32_Half    vd_flags;               /* Version information */
0804:   Elf32_Half    vd_ndx;                 /* Version Index */
0805:   Elf32_Half    vd_cnt;                 /* Number of associated aux entries */
0806:   Elf32_Word    vd_hash;                /* Version name hash value */
0807:   Elf32_Word    vd_aux;                 /* Offset in bytes to verdaux array */
0808:   Elf32_Word    vd_next;                /* Offset in bytes to next verdef
0809:                                            entry */
0810: } Elf32_Verdef;
0811: 
0812: typedef struct
0813: {
0814:   Elf64_Half    vd_version;             /* Version revision */
0815:   Elf64_Half    vd_flags;               /* Version information */
0816:   Elf64_Half    vd_ndx;                 /* Version Index */
0817:   Elf64_Half    vd_cnt;                 /* Number of associated aux entries */
0818:   Elf64_Word    vd_hash;                /* Version name hash value */
0819:   Elf64_Word    vd_aux;                 /* Offset in bytes to verdaux array */
0820:   Elf64_Word    vd_next;                /* Offset in bytes to next verdef
0821:                                            entry */
0822: } Elf64_Verdef;
0823: 
0824: 
0825: /* Legal values for vd_version (version revision).  */
0826: #define VER_DEF_NONE    0               /* No version */
0827: #define VER_DEF_CURRENT 1               /* Current version */
0828: #define VER_DEF_NUM     2               /* Given version number */
0829: 
0830: /* Legal values for vd_flags (version information flags).  */
0831: #define VER_FLG_BASE    0x1             /* Version definition of file itself */
0832: #define VER_FLG_WEAK    0x2             /* Weak version identifier */
0833: 
0834: /* Versym symbol index values.  */
0835: #define VER_NDX_LOCAL           0       /* Symbol is local.  */
0836: #define VER_NDX_GLOBAL          1       /* Symbol is global.  */
0837: #define VER_NDX_LORESERVE       0xff00  /* Beginning of reserved entries.  */
0838: #define VER_NDX_ELIMINATE       0xff01  /* Symbol is to be eliminated.  */
0839: 
0840: /* Auxialiary version information.  */
0841: 
0842: typedef struct
0843: {
0844:   Elf32_Word    vda_name;               /* Version or dependency names */
0845:   Elf32_Word    vda_next;               /* Offset in bytes to next verdaux
0846:                                            entry */
0847: } Elf32_Verdaux;
0848: 
0849: typedef struct
0850: {
0851:   Elf64_Word    vda_name;               /* Version or dependency names */
0852:   Elf64_Word    vda_next;               /* Offset in bytes to next verdaux
0853:                                            entry */
0854: } Elf64_Verdaux;
0855: 
0856: 
0857: /* Version dependency section.  */
0858: 
0859: typedef struct
0860: {
0861:   Elf32_Half    vn_version;             /* Version of structure */
0862:   Elf32_Half    vn_cnt;                 /* Number of associated aux entries */
0863:   Elf32_Word    vn_file;                /* Offset of filename for this
0864:                                            dependency */
0865:   Elf32_Word    vn_aux;                 /* Offset in bytes to vernaux array */
0866:   Elf32_Word    vn_next;                /* Offset in bytes to next verneed
0867:                                            entry */
0868: } Elf32_Verneed;
0869: 
0870: typedef struct
0871: {
0872:   Elf64_Half    vn_version;             /* Version of structure */
0873:   Elf64_Half    vn_cnt;                 /* Number of associated aux entries */
0874:   Elf64_Word    vn_file;                /* Offset of filename for this
0875:                                            dependency */
0876:   Elf64_Word    vn_aux;                 /* Offset in bytes to vernaux array */
0877:   Elf64_Word    vn_next;                /* Offset in bytes to next verneed
0878:                                            entry */
0879: } Elf64_Verneed;
0880: 
0881: 
0882: /* Legal values for vn_version (version revision).  */
0883: #define VER_NEED_NONE    0              /* No version */
0884: #define VER_NEED_CURRENT 1              /* Current version */
0885: #define VER_NEED_NUM     2              /* Given version number */
0886: 
0887: /* Auxiliary needed version information.  */
0888: 
0889: typedef struct
0890: {
0891:   Elf32_Word    vna_hash;               /* Hash value of dependency name */
0892:   Elf32_Half    vna_flags;              /* Dependency specific information */
0893:   Elf32_Half    vna_other;              /* Unused */
0894:   Elf32_Word    vna_name;               /* Dependency name string offset */
0895:   Elf32_Word    vna_next;               /* Offset in bytes to next vernaux
0896:                                            entry */
0897: } Elf32_Vernaux;
0898: 
0899: typedef struct
0900: {
0901:   Elf64_Word    vna_hash;               /* Hash value of dependency name */
0902:   Elf64_Half    vna_flags;              /* Dependency specific information */
0903:   Elf64_Half    vna_other;              /* Unused */
0904:   Elf64_Word    vna_name;               /* Dependency name string offset */
0905:   Elf64_Word    vna_next;               /* Offset in bytes to next vernaux
0906:                                            entry */
0907: } Elf64_Vernaux;
0908: 
0909: 
0910: /* Legal values for vna_flags.  */
0911: #define VER_FLG_WEAK    0x2             /* Weak version identifier */
0912: 
0913: 
0914: /* Auxiliary vector.  */
0915: 
0916: /* This vector is normally only used by the program interpreter.  The
0917:    usual definition in an ABI supplement uses the name auxv_t.  The
0918:    vector is not usually defined in a standard <elf.h> file, but it
0919:    can't hurt.  We rename it to avoid conflicts.  The sizes of these
0920:    types are an arrangement between the exec server and the program
0921:    interpreter, so we don't fully specify them here.  */
0922: 
0923: typedef struct
0924: {
0925:   uint32_t a_type;              /* Entry type */
0926:   union
0927:     {
0928:       uint32_t a_val;           /* Integer value */
0929:       /* We use to have pointer elements added here.  We cannot do that,
0930:          though, since it does not work when using 32-bit definitions
0931:          on 64-bit platforms and vice versa.  */
0932:     } a_un;
0933: } Elf32_auxv_t;
0934: 
0935: typedef struct
0936: {
0937:   uint64_t a_type;              /* Entry type */
0938:   union
0939:     {
0940:       uint64_t a_val;           /* Integer value */
0941:       /* We use to have pointer elements added here.  We cannot do that,
0942:          though, since it does not work when using 32-bit definitions
0943:          on 64-bit platforms and vice versa.  */
0944:     } a_un;
0945: } Elf64_auxv_t;
0946: 
0947: /* Legal values for a_type (entry type).  */
0948: 
0949: #define AT_NULL         0               /* End of vector */
0950: #define AT_IGNORE       1               /* Entry should be ignored */
0951: #define AT_EXECFD       2               /* File descriptor of program */
0952: #define AT_PHDR         3               /* Program headers for program */
0953: #define AT_PHENT        4               /* Size of program header entry */
0954: #define AT_PHNUM        5               /* Number of program headers */
0955: #define AT_PAGESZ       6               /* System page size */
0956: #define AT_BASE         7               /* Base address of interpreter */
0957: #define AT_FLAGS        8               /* Flags */
0958: #define AT_ENTRY        9               /* Entry point of program */
0959: #define AT_NOTELF       10              /* Program is not ELF */
0960: #define AT_UID          11              /* Real uid */
0961: #define AT_EUID         12              /* Effective uid */
0962: #define AT_GID          13              /* Real gid */
0963: #define AT_EGID         14              /* Effective gid */
0964: #define AT_CLKTCK       17              /* Frequency of times() */
0965: 
0966: /* Some more special a_type values describing the hardware.  */
0967: #define AT_PLATFORM     15              /* String identifying platform.  */
0968: #define AT_HWCAP        16              /* Machine dependent hints about
0969:                                            processor capabilities.  */
0970: 
0971: /* This entry gives some information about the FPU initialization
0972:    performed by the kernel.  */
0973: #define AT_FPUCW        18              /* Used FPU control word.  */
0974: 
0975: /* Cache block sizes.  */
0976: #define AT_DCACHEBSIZE  19              /* Data cache block size.  */
0977: #define AT_ICACHEBSIZE  20              /* Instruction cache block size.  */
0978: #define AT_UCACHEBSIZE  21              /* Unified cache block size.  */
0979: 
0980: /* A special ignored value for PPC, used by the kernel to control the
0981:    interpretation of the AUXV. Must be > 16.  */
0982: #define AT_IGNOREPPC    22              /* Entry should be ignored.  */
0983: 
0984: #define AT_SECURE       23              /* Boolean, was exec setuid-like?  */
0985: 
0986: #define AT_BASE_PLATFORM 24             /* String identifying real platforms.*/
0987: 
0988: #define AT_RANDOM       25              /* Address of 16 random bytes.  */
0989: 
0990: #define AT_EXECFN       31              /* Filename of executable.  */
0991: 
0992: /* Pointer to the global system page used for system calls and other
0993:    nice things.  */
0994: #define AT_SYSINFO      32
0995: #define AT_SYSINFO_EHDR 33
0996: 
0997: /* Shapes of the caches.  Bits 0-3 contains associativity; bits 4-7 contains
0998:    log2 of line size; mask those to get cache size.  */
0999: #define AT_L1I_CACHESHAPE       34
1000: #define AT_L1D_CACHESHAPE       35
1001: #define AT_L2_CACHESHAPE        36
1002: #define AT_L3_CACHESHAPE        37
1003: 
1004: /* Note section contents.  Each entry in the note section begins with
1005:    a header of a fixed form.  */
1006: 
1007: typedef struct
1008: {
1009:   Elf32_Word n_namesz;                  /* Length of the note's name.  */
1010:   Elf32_Word n_descsz;                  /* Length of the note's descriptor.  */
1011:   Elf32_Word n_type;                    /* Type of the note.  */
1012: } Elf32_Nhdr;
1013: 
1014: typedef struct
1015: {
1016:   Elf64_Word n_namesz;                  /* Length of the note's name.  */
1017:   Elf64_Word n_descsz;                  /* Length of the note's descriptor.  */
1018:   Elf64_Word n_type;                    /* Type of the note.  */
1019: } Elf64_Nhdr;
1020: 
1021: /* Known names of notes.  */
1022: 
1023: /* Solaris entries in the note section have this name.  */
1024: #define ELF_NOTE_SOLARIS        "SUNW Solaris"
1025: 
1026: /* Note entries for GNU systems have this name.  */
1027: #define ELF_NOTE_GNU            "GNU"
1028: 
1029: 
1030: /* Defined types of notes for Solaris.  */
1031: 
1032: /* Value of descriptor (one word) is desired pagesize for the binary.  */
1033: #define ELF_NOTE_PAGESIZE_HINT  1
1034: 
1035: 
1036: /* Defined note types for GNU systems.  */
1037: 
1038: /* ABI information.  The descriptor consists of words:
1039:    word 0: OS descriptor
1040:    word 1: major version of the ABI
1041:    word 2: minor version of the ABI
1042:    word 3: subminor version of the ABI
1043: */
1044: #define NT_GNU_ABI_TAG  1
1045: #define ELF_NOTE_ABI    NT_GNU_ABI_TAG /* Old name.  */
1046: 
1047: /* Known OSes.  These values can appear in word 0 of an
1048:    NT_GNU_ABI_TAG note section entry.  */
1049: #define ELF_NOTE_OS_LINUX       0
1050: #define ELF_NOTE_OS_GNU         1
1051: #define ELF_NOTE_OS_SOLARIS2    2
1052: #define ELF_NOTE_OS_FREEBSD     3
1053: 
1054: /* Synthetic hwcap information.  The descriptor begins with two words:
1055:    word 0: number of entries
1056:    word 1: bitmask of enabled entries
1057:    Then follow variable-length entries, one byte followed by a
1058:    '\0'-terminated hwcap name string.  The byte gives the bit
1059:    number to test if enabled, (1U << bit) & bitmask.  */
1060: #define NT_GNU_HWCAP    2
1061: 
1062: /* Build ID bits as generated by ld --build-id.
1063:    The descriptor consists of any nonzero number of bytes.  */
1064: #define NT_GNU_BUILD_ID 3
1065: 
1066: /* Version note generated by GNU gold containing a version string.  */
1067: #define NT_GNU_GOLD_VERSION     4
1068: 
1069: 
1070: /* Move records.  */
1071: typedef struct
1072: {
1073:   Elf32_Xword m_value;          /* Symbol value.  */
1074:   Elf32_Word m_info;            /* Size and index.  */
1075:   Elf32_Word m_poffset;         /* Symbol offset.  */
1076:   Elf32_Half m_repeat;          /* Repeat count.  */
1077:   Elf32_Half m_stride;          /* Stride info.  */
1078: } Elf32_Move;
1079: 
1080: typedef struct
1081: {
1082:   Elf64_Xword m_value;          /* Symbol value.  */
1083:   Elf64_Xword m_info;           /* Size and index.  */
1084:   Elf64_Xword m_poffset;        /* Symbol offset.  */
1085:   Elf64_Half m_repeat;          /* Repeat count.  */
1086:   Elf64_Half m_stride;          /* Stride info.  */
1087: } Elf64_Move;
1088: 
1089: /* Macro to construct move records.  */
1090: #define ELF32_M_SYM(info)       ((info) >> 8)
1091: #define ELF32_M_SIZE(info)      ((unsigned char) (info))
1092: #define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size))
1093: 
1094: #define ELF64_M_SYM(info)       ELF32_M_SYM (info)
1095: #define ELF64_M_SIZE(info)      ELF32_M_SIZE (info)
1096: #define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size)
1097: 
1098: 
1099: /* Motorola 68k specific definitions.  */
1100: 
1101: /* Values for Elf32_Ehdr.e_flags.  */
1102: #define EF_CPU32        0x00810000
1103: 
1104: /* m68k relocs.  */
1105: 
1106: #define R_68K_NONE      0               /* No reloc */
1107: #define R_68K_32        1               /* Direct 32 bit  */
1108: #define R_68K_16        2               /* Direct 16 bit  */
1109: #define R_68K_8         3               /* Direct 8 bit  */
1110: #define R_68K_PC32      4               /* PC relative 32 bit */
1111: #define R_68K_PC16      5               /* PC relative 16 bit */
1112: #define R_68K_PC8       6               /* PC relative 8 bit */
1113: #define R_68K_GOT32     7               /* 32 bit PC relative GOT entry */
1114: #define R_68K_GOT16     8               /* 16 bit PC relative GOT entry */
1115: #define R_68K_GOT8      9               /* 8 bit PC relative GOT entry */
1116: #define R_68K_GOT32O    10              /* 32 bit GOT offset */
1117: #define R_68K_GOT16O    11              /* 16 bit GOT offset */
1118: #define R_68K_GOT8O     12              /* 8 bit GOT offset */
1119: #define R_68K_PLT32     13              /* 32 bit PC relative PLT address */
1120: #define R_68K_PLT16     14              /* 16 bit PC relative PLT address */
1121: #define R_68K_PLT8      15              /* 8 bit PC relative PLT address */
1122: #define R_68K_PLT32O    16              /* 32 bit PLT offset */
1123: #define R_68K_PLT16O    17              /* 16 bit PLT offset */
1124: #define R_68K_PLT8O     18              /* 8 bit PLT offset */
1125: #define R_68K_COPY      19              /* Copy symbol at runtime */
1126: #define R_68K_GLOB_DAT  20              /* Create GOT entry */
1127: #define R_68K_JMP_SLOT  21              /* Create PLT entry */
1128: #define R_68K_RELATIVE  22              /* Adjust by program base */
1129: #define R_68K_TLS_GD32      25          /* 32 bit GOT offset for GD */
1130: #define R_68K_TLS_GD16      26          /* 16 bit GOT offset for GD */
1131: #define R_68K_TLS_GD8       27          /* 8 bit GOT offset for GD */
1132: #define R_68K_TLS_LDM32     28          /* 32 bit GOT offset for LDM */
1133: #define R_68K_TLS_LDM16     29          /* 16 bit GOT offset for LDM */
1134: #define R_68K_TLS_LDM8      30          /* 8 bit GOT offset for LDM */
1135: #define R_68K_TLS_LDO32     31          /* 32 bit module-relative offset */
1136: #define R_68K_TLS_LDO16     32          /* 16 bit module-relative offset */
1137: #define R_68K_TLS_LDO8      33          /* 8 bit module-relative offset */
1138: #define R_68K_TLS_IE32      34          /* 32 bit GOT offset for IE */
1139: #define R_68K_TLS_IE16      35          /* 16 bit GOT offset for IE */
1140: #define R_68K_TLS_IE8       36          /* 8 bit GOT offset for IE */
1141: #define R_68K_TLS_LE32      37          /* 32 bit offset relative to
1142:                                            static TLS block */
1143: #define R_68K_TLS_LE16      38          /* 16 bit offset relative to
1144:                                            static TLS block */
1145: #define R_68K_TLS_LE8       39          /* 8 bit offset relative to
1146:                                            static TLS block */
1147: #define R_68K_TLS_DTPMOD32  40          /* 32 bit module number */
1148: #define R_68K_TLS_DTPREL32  41          /* 32 bit module-relative offset */
1149: #define R_68K_TLS_TPREL32   42          /* 32 bit TP-relative offset */
1150: /* Keep this the last entry.  */
1151: #define R_68K_NUM       43
1152: 
1153: /* Intel 80386 specific definitions.  */
1154: 
1155: /* i386 relocs.  */
1156: 
1157: #define R_386_NONE         0            /* No reloc */
1158: #define R_386_32           1            /* Direct 32 bit  */
1159: #define R_386_PC32         2            /* PC relative 32 bit */
1160: #define R_386_GOT32        3            /* 32 bit GOT entry */
1161: #define R_386_PLT32        4            /* 32 bit PLT address */
1162: #define R_386_COPY         5            /* Copy symbol at runtime */
1163: #define R_386_GLOB_DAT     6            /* Create GOT entry */
1164: #define R_386_JMP_SLOT     7            /* Create PLT entry */
1165: #define R_386_RELATIVE     8            /* Adjust by program base */
1166: #define R_386_GOTOFF       9            /* 32 bit offset to GOT */
1167: #define R_386_GOTPC        10           /* 32 bit PC relative offset to GOT */
1168: #define R_386_32PLT        11
1169: #define R_386_TLS_TPOFF    14           /* Offset in static TLS block */
1170: #define R_386_TLS_IE       15           /* Address of GOT entry for static TLS
1171:                                            block offset */
1172: #define R_386_TLS_GOTIE    16           /* GOT entry for static TLS block
1173:                                            offset */
1174: #define R_386_TLS_LE       17           /* Offset relative to static TLS
1175:                                            block */
1176: #define R_386_TLS_GD       18           /* Direct 32 bit for GNU version of
1177:                                            general dynamic thread local data */
1178: #define R_386_TLS_LDM      19           /* Direct 32 bit for GNU version of
1179:                                            local dynamic thread local data
1180:                                            in LE code */
1181: #define R_386_16           20
1182: #define R_386_PC16         21
1183: #define R_386_8            22
1184: #define R_386_PC8          23
1185: #define R_386_TLS_GD_32    24           /* Direct 32 bit for general dynamic
1186:                                            thread local data */
1187: #define R_386_TLS_GD_PUSH  25           /* Tag for pushl in GD TLS code */
1188: #define R_386_TLS_GD_CALL  26           /* Relocation for call to
1189:                                            __tls_get_addr() */
1190: #define R_386_TLS_GD_POP   27           /* Tag for popl in GD TLS code */
1191: #define R_386_TLS_LDM_32   28           /* Direct 32 bit for local dynamic
1192:                                            thread local data in LE code */
1193: #define R_386_TLS_LDM_PUSH 29           /* Tag for pushl in LDM TLS code */
1194: #define R_386_TLS_LDM_CALL 30           /* Relocation for call to
1195:                                            __tls_get_addr() in LDM code */
1196: #define R_386_TLS_LDM_POP  31           /* Tag for popl in LDM TLS code */
1197: #define R_386_TLS_LDO_32   32           /* Offset relative to TLS block */
1198: #define R_386_TLS_IE_32    33           /* GOT entry for negated static TLS
1199:                                            block offset */
1200: #define R_386_TLS_LE_32    34           /* Negated offset relative to static
1201:                                            TLS block */
1202: #define R_386_TLS_DTPMOD32 35           /* ID of module containing symbol */
1203: #define R_386_TLS_DTPOFF32 36           /* Offset in TLS block */
1204: #define R_386_TLS_TPOFF32  37           /* Negated offset in static TLS block */
1205: /* 38? */
1206: #define R_386_TLS_GOTDESC  39           /* GOT offset for TLS descriptor.  */
1207: #define R_386_TLS_DESC_CALL 40          /* Marker of call through TLS
1208:                                            descriptor for
1209:                                            relaxation.  */
1210: #define R_386_TLS_DESC     41           /* TLS descriptor containing
1211:                                            pointer to code and to
1212:                                            argument, returning the TLS
1213:                                            offset for the symbol.  */
1214: #define R_386_IRELATIVE    42           /* Adjust indirectly by program base */
1215: /* Keep this the last entry.  */
1216: #define R_386_NUM          43
1217: 
1218: /* SUN SPARC specific definitions.  */
1219: 
1220: /* Legal values for ST_TYPE subfield of st_info (symbol type).  */
1221: 
1222: #define STT_SPARC_REGISTER      13      /* Global register reserved to app. */
1223: 
1224: /* Values for Elf64_Ehdr.e_flags.  */
1225: 
1226: #define EF_SPARCV9_MM           3
1227: #define EF_SPARCV9_TSO          0
1228: #define EF_SPARCV9_PSO          1
1229: #define EF_SPARCV9_RMO          2
1230: #define EF_SPARC_LEDATA         0x800000 /* little endian data */
1231: #define EF_SPARC_EXT_MASK       0xFFFF00
1232: #define EF_SPARC_32PLUS         0x000100 /* generic V8+ features */
1233: #define EF_SPARC_SUN_US1        0x000200 /* Sun UltraSPARC1 extensions */
1234: #define EF_SPARC_HAL_R1         0x000400 /* HAL R1 extensions */
1235: #define EF_SPARC_SUN_US3        0x000800 /* Sun UltraSPARCIII extensions */
1236: 
1237: /* SPARC relocs.  */
1238: 
1239: #define R_SPARC_NONE            0       /* No reloc */
1240: #define R_SPARC_8               1       /* Direct 8 bit */
1241: #define R_SPARC_16              2       /* Direct 16 bit */
1242: #define R_SPARC_32              3       /* Direct 32 bit */
1243: #define R_SPARC_DISP8           4       /* PC relative 8 bit */
1244: #define R_SPARC_DISP16          5       /* PC relative 16 bit */
1245: #define R_SPARC_DISP32          6       /* PC relative 32 bit */
1246: #define R_SPARC_WDISP30         7       /* PC relative 30 bit shifted */
1247: #define R_SPARC_WDISP22         8       /* PC relative 22 bit shifted */
1248: #define R_SPARC_HI22            9       /* High 22 bit */
1249: #define R_SPARC_22              10      /* Direct 22 bit */
1250: #define R_SPARC_13              11      /* Direct 13 bit */
1251: #define R_SPARC_LO10            12      /* Truncated 10 bit */
1252: #define R_SPARC_GOT10           13      /* Truncated 10 bit GOT entry */
1253: #define R_SPARC_GOT13           14      /* 13 bit GOT entry */
1254: #define R_SPARC_GOT22           15      /* 22 bit GOT entry shifted */
1255: #define R_SPARC_PC10            16      /* PC relative 10 bit truncated */
1256: #define R_SPARC_PC22            17      /* PC relative 22 bit shifted */
1257: #define R_SPARC_WPLT30          18      /* 30 bit PC relative PLT address */
1258: #define R_SPARC_COPY            19      /* Copy symbol at runtime */
1259: #define R_SPARC_GLOB_DAT        20      /* Create GOT entry */
1260: #define R_SPARC_JMP_SLOT        21      /* Create PLT entry */
1261: #define R_SPARC_RELATIVE        22      /* Adjust by program base */
1262: #define R_SPARC_UA32            23      /* Direct 32 bit unaligned */
1263: 
1264: /* Additional Sparc64 relocs.  */
1265: 
1266: #define R_SPARC_PLT32           24      /* Direct 32 bit ref to PLT entry */
1267: #define R_SPARC_HIPLT22         25      /* High 22 bit PLT entry */
1268: #define R_SPARC_LOPLT10         26      /* Truncated 10 bit PLT entry */
1269: #define R_SPARC_PCPLT32         27      /* PC rel 32 bit ref to PLT entry */
1270: #define R_SPARC_PCPLT22         28      /* PC rel high 22 bit PLT entry */
1271: #define R_SPARC_PCPLT10         29      /* PC rel trunc 10 bit PLT entry */
1272: #define R_SPARC_10              30      /* Direct 10 bit */
1273: #define R_SPARC_11              31      /* Direct 11 bit */
1274: #define R_SPARC_64              32      /* Direct 64 bit */
1275: #define R_SPARC_OLO10           33      /* 10bit with secondary 13bit addend */
1276: #define R_SPARC_HH22            34      /* Top 22 bits of direct 64 bit */
1277: #define R_SPARC_HM10            35      /* High middle 10 bits of ... */
1278: #define R_SPARC_LM22            36      /* Low middle 22 bits of ... */
1279: #define R_SPARC_PC_HH22         37      /* Top 22 bits of pc rel 64 bit */
1280: #define R_SPARC_PC_HM10         38      /* High middle 10 bit of ... */
1281: #define R_SPARC_PC_LM22         39      /* Low miggle 22 bits of ... */
1282: #define R_SPARC_WDISP16         40      /* PC relative 16 bit shifted */
1283: #define R_SPARC_WDISP19         41      /* PC relative 19 bit shifted */
1284: #define R_SPARC_GLOB_JMP        42      /* was part of v9 ABI but was removed */
1285: #define R_SPARC_7               43      /* Direct 7 bit */
1286: #define R_SPARC_5               44      /* Direct 5 bit */
1287: #define R_SPARC_6               45      /* Direct 6 bit */
1288: #define R_SPARC_DISP64          46      /* PC relative 64 bit */
1289: #define R_SPARC_PLT64           47      /* Direct 64 bit ref to PLT entry */
1290: #define R_SPARC_HIX22           48      /* High 22 bit complemented */
1291: #define R_SPARC_LOX10           49      /* Truncated 11 bit complemented */
1292: #define R_SPARC_H44             50      /* Direct high 12 of 44 bit */
1293: #define R_SPARC_M44             51      /* Direct mid 22 of 44 bit */
1294: #define R_SPARC_L44             52      /* Direct low 10 of 44 bit */
1295: #define R_SPARC_REGISTER        53      /* Global register usage */
1296: #define R_SPARC_UA64            54      /* Direct 64 bit unaligned */
1297: #define R_SPARC_UA16            55      /* Direct 16 bit unaligned */
1298: #define R_SPARC_TLS_GD_HI22     56
1299: #define R_SPARC_TLS_GD_LO10     57
1300: #define R_SPARC_TLS_GD_ADD      58
1301: #define R_SPARC_TLS_GD_CALL     59
1302: #define R_SPARC_TLS_LDM_HI22    60
1303: #define R_SPARC_TLS_LDM_LO10    61
1304: #define R_SPARC_TLS_LDM_ADD     62
1305: #define R_SPARC_TLS_LDM_CALL    63
1306: #define R_SPARC_TLS_LDO_HIX22   64
1307: #define R_SPARC_TLS_LDO_LOX10   65
1308: #define R_SPARC_TLS_LDO_ADD     66
1309: #define R_SPARC_TLS_IE_HI22     67
1310: #define R_SPARC_TLS_IE_LO10     68
1311: #define R_SPARC_TLS_IE_LD       69
1312: #define R_SPARC_TLS_IE_LDX      70
1313: #define R_SPARC_TLS_IE_ADD      71
1314: #define R_SPARC_TLS_LE_HIX22    72
1315: #define R_SPARC_TLS_LE_LOX10    73
1316: #define R_SPARC_TLS_DTPMOD32    74
1317: #define R_SPARC_TLS_DTPMOD64    75
1318: #define R_SPARC_TLS_DTPOFF32    76
1319: #define R_SPARC_TLS_DTPOFF64    77
1320: #define R_SPARC_TLS_TPOFF32     78
1321: #define R_SPARC_TLS_TPOFF64     79
1322: #define R_SPARC_GOTDATA_HIX22   80
1323: #define R_SPARC_GOTDATA_LOX10   81
1324: #define R_SPARC_GOTDATA_OP_HIX22        82
1325: #define R_SPARC_GOTDATA_OP_LOX10        83
1326: #define R_SPARC_GOTDATA_OP      84
1327: #define R_SPARC_H34             85
1328: #define R_SPARC_SIZE32          86
1329: #define R_SPARC_SIZE64          87
1330: #define R_SPARC_JMP_IREL        248
1331: #define R_SPARC_IRELATIVE       249
1332: #define R_SPARC_GNU_VTINHERIT   250
1333: #define R_SPARC_GNU_VTENTRY     251
1334: #define R_SPARC_REV32           252
1335: /* Keep this the last entry.  */
1336: #define R_SPARC_NUM             253
1337: 
1338: /* For Sparc64, legal values for d_tag of Elf64_Dyn.  */
1339: 
1340: #define DT_SPARC_REGISTER 0x70000001
1341: #define DT_SPARC_NUM    2
1342: 
1343: /* MIPS R3000 specific definitions.  */
1344: 
1345: /* Legal values for e_flags field of Elf32_Ehdr.  */
1346: 
1347: #define EF_MIPS_NOREORDER   1           /* A .noreorder directive was used */
1348: #define EF_MIPS_PIC         2           /* Contains PIC code */
1349: #define EF_MIPS_CPIC        4           /* Uses PIC calling sequence */
1350: #define EF_MIPS_XGOT        8
1351: #define EF_MIPS_64BIT_WHIRL 16
1352: #define EF_MIPS_ABI2        32
1353: #define EF_MIPS_ABI_ON32    64
1354: #define EF_MIPS_ARCH        0xf0000000  /* MIPS architecture level */
1355: 
1356: /* Legal values for MIPS architecture level.  */
1357: 
1358: #define EF_MIPS_ARCH_1      0x00000000  /* -mips1 code.  */
1359: #define EF_MIPS_ARCH_2      0x10000000  /* -mips2 code.  */
1360: #define EF_MIPS_ARCH_3      0x20000000  /* -mips3 code.  */
1361: #define EF_MIPS_ARCH_4      0x30000000  /* -mips4 code.  */
1362: #define EF_MIPS_ARCH_5      0x40000000  /* -mips5 code.  */
1363: #define EF_MIPS_ARCH_32     0x60000000  /* MIPS32 code.  */
1364: #define EF_MIPS_ARCH_64     0x70000000  /* MIPS64 code.  */
1365: 
1366: /* The following are non-official names and should not be used.  */
1367: 
1368: #define E_MIPS_ARCH_1     0x00000000    /* -mips1 code.  */
1369: #define E_MIPS_ARCH_2     0x10000000    /* -mips2 code.  */
1370: #define E_MIPS_ARCH_3     0x20000000    /* -mips3 code.  */
1371: #define E_MIPS_ARCH_4     0x30000000    /* -mips4 code.  */
1372: #define E_MIPS_ARCH_5     0x40000000    /* -mips5 code.  */
1373: #define E_MIPS_ARCH_32    0x60000000    /* MIPS32 code.  */
1374: #define E_MIPS_ARCH_64    0x70000000    /* MIPS64 code.  */
1375: 
1376: /* Special section indices.  */
1377: 
1378: #define SHN_MIPS_ACOMMON    0xff00      /* Allocated common symbols */
1379: #define SHN_MIPS_TEXT       0xff01      /* Allocated test symbols.  */
1380: #define SHN_MIPS_DATA       0xff02      /* Allocated data symbols.  */
1381: #define SHN_MIPS_SCOMMON    0xff03      /* Small common symbols */
1382: #define SHN_MIPS_SUNDEFINED 0xff04      /* Small undefined symbols */
1383: 
1384: /* Legal values for sh_type field of Elf32_Shdr.  */
1385: 
1386: #define SHT_MIPS_LIBLIST       0x70000000 /* Shared objects used in link */
1387: #define SHT_MIPS_MSYM          0x70000001
1388: #define SHT_MIPS_CONFLICT      0x70000002 /* Conflicting symbols */
1389: #define SHT_MIPS_GPTAB         0x70000003 /* Global data area sizes */
1390: #define SHT_MIPS_UCODE         0x70000004 /* Reserved for SGI/MIPS compilers */
1391: #define SHT_MIPS_DEBUG         0x70000005 /* MIPS ECOFF debugging information*/
1392: #define SHT_MIPS_REGINFO       0x70000006 /* Register usage information */
1393: #define SHT_MIPS_PACKAGE       0x70000007
1394: #define SHT_MIPS_PACKSYM       0x70000008
1395: #define SHT_MIPS_RELD          0x70000009
1396: #define SHT_MIPS_IFACE         0x7000000b
1397: #define SHT_MIPS_CONTENT       0x7000000c
1398: #define SHT_MIPS_OPTIONS       0x7000000d /* Miscellaneous options.  */
1399: #define SHT_MIPS_SHDR          0x70000010
1400: #define SHT_MIPS_FDESC         0x70000011
1401: #define SHT_MIPS_EXTSYM        0x70000012
1402: #define SHT_MIPS_DENSE         0x70000013
1403: #define SHT_MIPS_PDESC         0x70000014
1404: #define SHT_MIPS_LOCSYM        0x70000015
1405: #define SHT_MIPS_AUXSYM        0x70000016
1406: #define SHT_MIPS_OPTSYM        0x70000017
1407: #define SHT_MIPS_LOCSTR        0x70000018
1408: #define SHT_MIPS_LINE          0x70000019
1409: #define SHT_MIPS_RFDESC        0x7000001a
1410: #define SHT_MIPS_DELTASYM      0x7000001b
1411: #define SHT_MIPS_DELTAINST     0x7000001c
1412: #define SHT_MIPS_DELTACLASS    0x7000001d
1413: #define SHT_MIPS_DWARF         0x7000001e /* DWARF debugging information.  */
1414: #define SHT_MIPS_DELTADECL     0x7000001f
1415: #define SHT_MIPS_SYMBOL_LIB    0x70000020
1416: #define SHT_MIPS_EVENTS        0x70000021 /* Event section.  */
1417: #define SHT_MIPS_TRANSLATE     0x70000022
1418: #define SHT_MIPS_PIXIE         0x70000023
1419: #define SHT_MIPS_XLATE         0x70000024
1420: #define SHT_MIPS_XLATE_DEBUG   0x70000025
1421: #define SHT_MIPS_WHIRL         0x70000026
1422: #define SHT_MIPS_EH_REGION     0x70000027
1423: #define SHT_MIPS_XLATE_OLD     0x70000028
1424: #define SHT_MIPS_PDR_EXCEPTION 0x70000029
1425: 
1426: /* Legal values for sh_flags field of Elf32_Shdr.  */
1427: 
1428: #define SHF_MIPS_GPREL   0x10000000     /* Must be part of global data area */
1429: #define SHF_MIPS_MERGE   0x20000000
1430: #define SHF_MIPS_ADDR    0x40000000
1431: #define SHF_MIPS_STRINGS 0x80000000
1432: #define SHF_MIPS_NOSTRIP 0x08000000
1433: #define SHF_MIPS_LOCAL   0x04000000
1434: #define SHF_MIPS_NAMES   0x02000000
1435: #define SHF_MIPS_NODUPE  0x01000000
1436: 
1437: 
1438: /* Symbol tables.  */
1439: 
1440: /* MIPS specific values for `st_other'.  */
1441: #define STO_MIPS_DEFAULT                0x0
1442: #define STO_MIPS_INTERNAL               0x1
1443: #define STO_MIPS_HIDDEN                 0x2
1444: #define STO_MIPS_PROTECTED              0x3
1445: #define STO_MIPS_PLT                    0x8
1446: #define STO_MIPS_SC_ALIGN_UNUSED        0xff
1447: 
1448: /* MIPS specific values for `st_info'.  */
1449: #define STB_MIPS_SPLIT_COMMON           13
1450: 
1451: /* Entries found in sections of type SHT_MIPS_GPTAB.  */
1452: 
1453: typedef union
1454: {
1455:   struct
1456:     {
1457:       Elf32_Word gt_current_g_value;    /* -G value used for compilation */
1458:       Elf32_Word gt_unused;             /* Not used */
1459:     } gt_header;                        /* First entry in section */
1460:   struct
1461:     {
1462:       Elf32_Word gt_g_value;            /* If this value were used for -G */
1463:       Elf32_Word gt_bytes;              /* This many bytes would be used */
1464:     } gt_entry;                         /* Subsequent entries in section */
1465: } Elf32_gptab;
1466: 
1467: /* Entry found in sections of type SHT_MIPS_REGINFO.  */
1468: 
1469: typedef struct
1470: {
1471:   Elf32_Word    ri_gprmask;             /* General registers used */
1472:   Elf32_Word    ri_cprmask[4];          /* Coprocessor registers used */
1473:   Elf32_Sword   ri_gp_value;            /* $gp register value */
1474: } Elf32_RegInfo;
1475: 
1476: /* Entries found in sections of type SHT_MIPS_OPTIONS.  */
1477: 
1478: typedef struct
1479: {
1480:   unsigned char kind;           /* Determines interpretation of the
1481:                                    variable part of descriptor.  */
1482:   unsigned char size;           /* Size of descriptor, including header.  */
1483:   Elf32_Section section;        /* Section header index of section affected,
1484:                                    0 for global options.  */
1485:   Elf32_Word info;              /* Kind-specific information.  */
1486: } Elf_Options;
1487: 
1488: /* Values for `kind' field in Elf_Options.  */
1489: 
1490: #define ODK_NULL        0       /* Undefined.  */
1491: #define ODK_REGINFO     1       /* Register usage information.  */
1492: #define ODK_EXCEPTIONS  2       /* Exception processing options.  */
1493: #define ODK_PAD         3       /* Section padding options.  */
1494: #define ODK_HWPATCH     4       /* Hardware workarounds performed */
1495: #define ODK_FILL        5       /* record the fill value used by the linker. */
1496: #define ODK_TAGS        6       /* reserve space for desktop tools to write. */
1497: #define ODK_HWAND       7       /* HW workarounds.  'AND' bits when merging. */
1498: #define ODK_HWOR        8       /* HW workarounds.  'OR' bits when merging.  */
1499: 
1500: /* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries.  */
1501: 
1502: #define OEX_FPU_MIN     0x1f    /* FPE's which MUST be enabled.  */
1503: #define OEX_FPU_MAX     0x1f00  /* FPE's which MAY be enabled.  */
1504: #define OEX_PAGE0       0x10000 /* page zero must be mapped.  */
1505: #define OEX_SMM         0x20000 /* Force sequential memory mode?  */
1506: #define OEX_FPDBUG      0x40000 /* Force floating point debug mode?  */
1507: #define OEX_PRECISEFP   OEX_FPDBUG
1508: #define OEX_DISMISS     0x80000 /* Dismiss invalid address faults?  */
1509: 
1510: #define OEX_FPU_INVAL   0x10
1511: #define OEX_FPU_DIV0    0x08
1512: #define OEX_FPU_OFLO    0x04
1513: #define OEX_FPU_UFLO    0x02
1514: #define OEX_FPU_INEX    0x01
1515: 
1516: /* Masks for `info' in Elf_Options for an ODK_HWPATCH entry.  */
1517: 
1518: #define OHW_R4KEOP      0x1     /* R4000 end-of-page patch.  */
1519: #define OHW_R8KPFETCH   0x2     /* may need R8000 prefetch patch.  */
1520: #define OHW_R5KEOP      0x4     /* R5000 end-of-page patch.  */
1521: #define OHW_R5KCVTL     0x8     /* R5000 cvt.[ds].l bug.  clean=1.  */
1522: 
1523: #define OPAD_PREFIX     0x1
1524: #define OPAD_POSTFIX    0x2
1525: #define OPAD_SYMBOL     0x4
1526: 
1527: /* Entry found in `.options' section.  */
1528: 
1529: typedef struct
1530: {
1531:   Elf32_Word hwp_flags1;        /* Extra flags.  */
1532:   Elf32_Word hwp_flags2;        /* Extra flags.  */
1533: } Elf_Options_Hw;
1534: 
1535: /* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries.  */
1536: 
1537: #define OHWA0_R4KEOP_CHECKED    0x00000001
1538: #define OHWA1_R4KEOP_CLEAN      0x00000002
1539: 
1540: /* MIPS relocs.  */
1541: 
1542: #define R_MIPS_NONE             0       /* No reloc */
1543: #define R_MIPS_16               1       /* Direct 16 bit */
1544: #define R_MIPS_32               2       /* Direct 32 bit */
1545: #define R_MIPS_REL32            3       /* PC relative 32 bit */
1546: #define R_MIPS_26               4       /* Direct 26 bit shifted */
1547: #define R_MIPS_HI16             5       /* High 16 bit */
1548: #define R_MIPS_LO16             6       /* Low 16 bit */
1549: #define R_MIPS_GPREL16          7       /* GP relative 16 bit */
1550: #define R_MIPS_LITERAL          8       /* 16 bit literal entry */
1551: #define R_MIPS_GOT16            9       /* 16 bit GOT entry */
1552: #define R_MIPS_PC16             10      /* PC relative 16 bit */
1553: #define R_MIPS_CALL16           11      /* 16 bit GOT entry for function */
1554: #define R_MIPS_GPREL32          12      /* GP relative 32 bit */
1555: 
1556: #define R_MIPS_SHIFT5           16
1557: #define R_MIPS_SHIFT6           17
1558: #define R_MIPS_64               18
1559: #define R_MIPS_GOT_DISP         19
1560: #define R_MIPS_GOT_PAGE         20
1561: #define R_MIPS_GOT_OFST         21
1562: #define R_MIPS_GOT_HI16         22
1563: #define R_MIPS_GOT_LO16         23
1564: #define R_MIPS_SUB              24
1565: #define R_MIPS_INSERT_A         25
1566: #define R_MIPS_INSERT_B         26
1567: #define R_MIPS_DELETE           27
1568: #define R_MIPS_HIGHER           28
1569: #define R_MIPS_HIGHEST          29
1570: #define R_MIPS_CALL_HI16        30
1571: #define R_MIPS_CALL_LO16        31
1572: #define R_MIPS_SCN_DISP         32
1573: #define R_MIPS_REL16            33
1574: #define R_MIPS_ADD_IMMEDIATE    34
1575: #define R_MIPS_PJUMP            35
1576: #define R_MIPS_RELGOT           36
1577: #define R_MIPS_JALR             37
1578: #define R_MIPS_TLS_DTPMOD32     38      /* Module number 32 bit */
1579: #define R_MIPS_TLS_DTPREL32     39      /* Module-relative offset 32 bit */
1580: #define R_MIPS_TLS_DTPMOD64     40      /* Module number 64 bit */
1581: #define R_MIPS_TLS_DTPREL64     41      /* Module-relative offset 64 bit */
1582: #define R_MIPS_TLS_GD           42      /* 16 bit GOT offset for GD */
1583: #define R_MIPS_TLS_LDM          43      /* 16 bit GOT offset for LDM */
1584: #define R_MIPS_TLS_DTPREL_HI16  44      /* Module-relative offset, high 16 bits */
1585: #define R_MIPS_TLS_DTPREL_LO16  45      /* Module-relative offset, low 16 bits */
1586: #define R_MIPS_TLS_GOTTPREL     46      /* 16 bit GOT offset for IE */
1587: #define R_MIPS_TLS_TPREL32      47      /* TP-relative offset, 32 bit */
1588: #define R_MIPS_TLS_TPREL64      48      /* TP-relative offset, 64 bit */
1589: #define R_MIPS_TLS_TPREL_HI16   49      /* TP-relative offset, high 16 bits */
1590: #define R_MIPS_TLS_TPREL_LO16   50      /* TP-relative offset, low 16 bits */
1591: #define R_MIPS_GLOB_DAT         51
1592: #define R_MIPS_COPY             126
1593: #define R_MIPS_JUMP_SLOT        127
1594: /* Keep this the last entry.  */
1595: #define R_MIPS_NUM              128
1596: 
1597: /* Legal values for p_type field of Elf32_Phdr.  */
1598: 
1599: #define PT_MIPS_REGINFO 0x70000000      /* Register usage information */
1600: #define PT_MIPS_RTPROC  0x70000001      /* Runtime procedure table. */
1601: #define PT_MIPS_OPTIONS 0x70000002
1602: 
1603: /* Special program header types.  */
1604: 
1605: #define PF_MIPS_LOCAL   0x10000000
1606: 
1607: /* Legal values for d_tag field of Elf32_Dyn.  */
1608: 
1609: #define DT_MIPS_RLD_VERSION  0x70000001 /* Runtime linker interface version */
1610: #define DT_MIPS_TIME_STAMP   0x70000002 /* Timestamp */
1611: #define DT_MIPS_ICHECKSUM    0x70000003 /* Checksum */
1612: #define DT_MIPS_IVERSION     0x70000004 /* Version string (string tbl index) */
1613: #define DT_MIPS_FLAGS        0x70000005 /* Flags */
1614: #define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */
1615: #define DT_MIPS_MSYM         0x70000007
1616: #define DT_MIPS_CONFLICT     0x70000008 /* Address of CONFLICT section */
1617: #define DT_MIPS_LIBLIST      0x70000009 /* Address of LIBLIST section */
1618: #define DT_MIPS_LOCAL_GOTNO  0x7000000a /* Number of local GOT entries */
1619: #define DT_MIPS_CONFLICTNO   0x7000000b /* Number of CONFLICT entries */
1620: #define DT_MIPS_LIBLISTNO    0x70000010 /* Number of LIBLIST entries */
1621: #define DT_MIPS_SYMTABNO     0x70000011 /* Number of DYNSYM entries */
1622: #define DT_MIPS_UNREFEXTNO   0x70000012 /* First external DYNSYM */
1623: #define DT_MIPS_GOTSYM       0x70000013 /* First GOT entry in DYNSYM */
1624: #define DT_MIPS_HIPAGENO     0x70000014 /* Number of GOT page table entries */
1625: #define DT_MIPS_RLD_MAP      0x70000016 /* Address of run time loader map.  */
1626: #define DT_MIPS_DELTA_CLASS  0x70000017 /* Delta C++ class definition.  */
1627: #define DT_MIPS_DELTA_CLASS_NO    0x70000018 /* Number of entries in
1628:                                                 DT_MIPS_DELTA_CLASS.  */
1629: #define DT_MIPS_DELTA_INSTANCE    0x70000019 /* Delta C++ class instances.  */
1630: #define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in
1631:                                                 DT_MIPS_DELTA_INSTANCE.  */
1632: #define DT_MIPS_DELTA_RELOC  0x7000001b /* Delta relocations.  */
1633: #define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in
1634:                                              DT_MIPS_DELTA_RELOC.  */
1635: #define DT_MIPS_DELTA_SYM    0x7000001d /* Delta symbols that Delta
1636:                                            relocations refer to.  */
1637: #define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in
1638:                                            DT_MIPS_DELTA_SYM.  */
1639: #define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the
1640:                                              class declaration.  */
1641: #define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in
1642:                                                 DT_MIPS_DELTA_CLASSSYM.  */
1643: #define DT_MIPS_CXX_FLAGS    0x70000022 /* Flags indicating for C++ flavor.  */
1644: #define DT_MIPS_PIXIE_INIT   0x70000023
1645: #define DT_MIPS_SYMBOL_LIB   0x70000024
1646: #define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025
1647: #define DT_MIPS_LOCAL_GOTIDX 0x70000026
1648: #define DT_MIPS_HIDDEN_GOTIDX 0x70000027
1649: #define DT_MIPS_PROTECTED_GOTIDX 0x70000028
1650: #define DT_MIPS_OPTIONS      0x70000029 /* Address of .options.  */
1651: #define DT_MIPS_INTERFACE    0x7000002a /* Address of .interface.  */
1652: #define DT_MIPS_DYNSTR_ALIGN 0x7000002b
1653: #define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */
1654: #define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve
1655:                                                     function stored in GOT.  */
1656: #define DT_MIPS_PERF_SUFFIX  0x7000002e /* Default suffix of dso to be added
1657:                                            by rld on dlopen() calls.  */
1658: #define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */
1659: #define DT_MIPS_GP_VALUE     0x70000030 /* GP value for aux GOTs.  */
1660: #define DT_MIPS_AUX_DYNAMIC  0x70000031 /* Address of aux .dynamic.  */
1661: /* The address of .got.plt in an executable using the new non-PIC ABI.  */
1662: #define DT_MIPS_PLTGOT       0x70000032
1663: /* The base of the PLT in an executable using the new non-PIC ABI if that
1664:    PLT is writable.  For a non-writable PLT, this is omitted or has a zero
1665:    value.  */
1666: #define DT_MIPS_RWPLT        0x70000034
1667: #define DT_MIPS_NUM          0x35
1668: 
1669: /* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry.  */
1670: 
1671: #define RHF_NONE                   0            /* No flags */
1672: #define RHF_QUICKSTART             (1 << 0)     /* Use quickstart */
1673: #define RHF_NOTPOT                 (1 << 1)     /* Hash size not power of 2 */
1674: #define RHF_NO_LIBRARY_REPLACEMENT (1 << 2)     /* Ignore LD_LIBRARY_PATH */
1675: #define RHF_NO_MOVE                (1 << 3)
1676: #define RHF_SGI_ONLY               (1 << 4)
1677: #define RHF_GUARANTEE_INIT         (1 << 5)
1678: #define RHF_DELTA_C_PLUS_PLUS      (1 << 6)
1679: #define RHF_GUARANTEE_START_INIT   (1 << 7)
1680: #define RHF_PIXIE                  (1 << 8)
1681: #define RHF_DEFAULT_DELAY_LOAD     (1 << 9)
1682: #define RHF_REQUICKSTART           (1 << 10)
1683: #define RHF_REQUICKSTARTED         (1 << 11)
1684: #define RHF_CORD                   (1 << 12)
1685: #define RHF_NO_UNRES_UNDEF         (1 << 13)
1686: #define RHF_RLD_ORDER_SAFE         (1 << 14)
1687: 
1688: /* Entries found in sections of type SHT_MIPS_LIBLIST.  */
1689: 
1690: typedef struct
1691: {
1692:   Elf32_Word l_name;            /* Name (string table index) */
1693:   Elf32_Word l_time_stamp;      /* Timestamp */
1694:   Elf32_Word l_checksum;        /* Checksum */
1695:   Elf32_Word l_version;         /* Interface version */
1696:   Elf32_Word l_flags;           /* Flags */
1697: } Elf32_Lib;
1698: 
1699: typedef struct
1700: {
1701:   Elf64_Word l_name;            /* Name (string table index) */
1702:   Elf64_Word l_time_stamp;      /* Timestamp */
1703:   Elf64_Word l_checksum;        /* Checksum */
1704:   Elf64_Word l_version;         /* Interface version */
1705:   Elf64_Word l_flags;           /* Flags */
1706: } Elf64_Lib;
1707: 
1708: 
1709: /* Legal values for l_flags.  */
1710: 
1711: #define LL_NONE           0
1712: #define LL_EXACT_MATCH    (1 << 0)      /* Require exact match */
1713: #define LL_IGNORE_INT_VER (1 << 1)      /* Ignore interface version */
1714: #define LL_REQUIRE_MINOR  (1 << 2)
1715: #define LL_EXPORTS        (1 << 3)
1716: #define LL_DELAY_LOAD     (1 << 4)
1717: #define LL_DELTA          (1 << 5)
1718: 
1719: /* Entries found in sections of type SHT_MIPS_CONFLICT.  */
1720: 
1721: typedef Elf32_Addr Elf32_Conflict;
1722: 
1723: 
1724: /* HPPA specific definitions.  */
1725: 
1726: /* Legal values for e_flags field of Elf32_Ehdr.  */
1727: 
1728: #define EF_PARISC_TRAPNIL       0x00010000 /* Trap nil pointer dereference.  */
1729: #define EF_PARISC_EXT           0x00020000 /* Program uses arch. extensions. */
1730: #define EF_PARISC_LSB           0x00040000 /* Program expects little endian. */
1731: #define EF_PARISC_WIDE          0x00080000 /* Program expects wide mode.  */
1732: #define EF_PARISC_NO_KABP       0x00100000 /* No kernel assisted branch
1733:                                               prediction.  */
1734: #define EF_PARISC_LAZYSWAP      0x00400000 /* Allow lazy swapping.  */
1735: #define EF_PARISC_ARCH          0x0000ffff /* Architecture version.  */
1736: 
1737: /* Defined values for `e_flags & EF_PARISC_ARCH' are:  */
1738: 
1739: #define EFA_PARISC_1_0              0x020b /* PA-RISC 1.0 big-endian.  */
1740: #define EFA_PARISC_1_1              0x0210 /* PA-RISC 1.1 big-endian.  */
1741: #define EFA_PARISC_2_0              0x0214 /* PA-RISC 2.0 big-endian.  */
1742: 
1743: /* Additional section indeces.  */
1744: 
1745: #define SHN_PARISC_ANSI_COMMON  0xff00     /* Section for tenatively declared
1746:                                               symbols in ANSI C.  */
1747: #define SHN_PARISC_HUGE_COMMON  0xff01     /* Common blocks in huge model.  */
1748: 
1749: /* Legal values for sh_type field of Elf32_Shdr.  */
1750: 
1751: #define SHT_PARISC_EXT          0x70000000 /* Contains product specific ext. */
1752: #define SHT_PARISC_UNWIND       0x70000001 /* Unwind information.  */
1753: #define SHT_PARISC_DOC          0x70000002 /* Debug info for optimized code. */
1754: 
1755: /* Legal values for sh_flags field of Elf32_Shdr.  */
1756: 
1757: #define SHF_PARISC_SHORT        0x20000000 /* Section with short addressing. */
1758: #define SHF_PARISC_HUGE         0x40000000 /* Section far from gp.  */
1759: #define SHF_PARISC_SBP          0x80000000 /* Static branch prediction code. */
1760: 
1761: /* Legal values for ST_TYPE subfield of st_info (symbol type).  */
1762: 
1763: #define STT_PARISC_MILLICODE    13      /* Millicode function entry point.  */
1764: 
1765: #define STT_HP_OPAQUE           (STT_LOOS + 0x1)
1766: #define STT_HP_STUB             (STT_LOOS + 0x2)
1767: 
1768: /* HPPA relocs.  */
1769: 
1770: #define R_PARISC_NONE           0       /* No reloc.  */
1771: #define R_PARISC_DIR32          1       /* Direct 32-bit reference.  */
1772: #define R_PARISC_DIR21L         2       /* Left 21 bits of eff. address.  */
1773: #define R_PARISC_DIR17R         3       /* Right 17 bits of eff. address.  */
1774: #define R_PARISC_DIR17F         4       /* 17 bits of eff. address.  */
1775: #define R_PARISC_DIR14R         6       /* Right 14 bits of eff. address.  */
1776: #define R_PARISC_PCREL32        9       /* 32-bit rel. address.  */
1777: #define R_PARISC_PCREL21L       10      /* Left 21 bits of rel. address.  */
1778: #define R_PARISC_PCREL17R       11      /* Right 17 bits of rel. address.  */
1779: #define R_PARISC_PCREL17F       12      /* 17 bits of rel. address.  */
1780: #define R_PARISC_PCREL14R       14      /* Right 14 bits of rel. address.  */
1781: #define R_PARISC_DPREL21L       18      /* Left 21 bits of rel. address.  */
1782: #define R_PARISC_DPREL14R       22      /* Right 14 bits of rel. address.  */
1783: #define R_PARISC_GPREL21L       26      /* GP-relative, left 21 bits.  */
1784: #define R_PARISC_GPREL14R       30      /* GP-relative, right 14 bits.  */
1785: #define R_PARISC_LTOFF21L       34      /* LT-relative, left 21 bits.  */
1786: #define R_PARISC_LTOFF14R       38      /* LT-relative, right 14 bits.  */
1787: #define R_PARISC_SECREL32       41      /* 32 bits section rel. address.  */
1788: #define R_PARISC_SEGBASE        48      /* No relocation, set segment base.  */
1789: #define R_PARISC_SEGREL32       49      /* 32 bits segment rel. address.  */
1790: #define R_PARISC_PLTOFF21L      50      /* PLT rel. address, left 21 bits.  */
1791: #define R_PARISC_PLTOFF14R      54      /* PLT rel. address, right 14 bits.  */
1792: #define R_PARISC_LTOFF_FPTR32   57      /* 32 bits LT-rel. function pointer. */
1793: #define R_PARISC_LTOFF_FPTR21L  58      /* LT-rel. fct ptr, left 21 bits. */
1794: #define R_PARISC_LTOFF_FPTR14R  62      /* LT-rel. fct ptr, right 14 bits. */
1795: #define R_PARISC_FPTR64         64      /* 64 bits function address.  */
1796: #define R_PARISC_PLABEL32       65      /* 32 bits function address.  */
1797: #define R_PARISC_PLABEL21L      66      /* Left 21 bits of fdesc address.  */
1798: #define R_PARISC_PLABEL14R      70      /* Right 14 bits of fdesc address.  */
1799: #define R_PARISC_PCREL64        72      /* 64 bits PC-rel. address.  */
1800: #define R_PARISC_PCREL22F       74      /* 22 bits PC-rel. address.  */
1801: #define R_PARISC_PCREL14WR      75      /* PC-rel. address, right 14 bits.  */
1802: #define R_PARISC_PCREL14DR      76      /* PC rel. address, right 14 bits.  */
1803: #define R_PARISC_PCREL16F       77      /* 16 bits PC-rel. address.  */
1804: #define R_PARISC_PCREL16WF      78      /* 16 bits PC-rel. address.  */
1805: #define R_PARISC_PCREL16DF      79      /* 16 bits PC-rel. address.  */
1806: #define R_PARISC_DIR64          80      /* 64 bits of eff. address.  */
1807: #define R_PARISC_DIR14WR        83      /* 14 bits of eff. address.  */
1808: #define R_PARISC_DIR14DR        84      /* 14 bits of eff. address.  */
1809: #define R_PARISC_DIR16F         85      /* 16 bits of eff. address.  */
1810: #define R_PARISC_DIR16WF        86      /* 16 bits of eff. address.  */
1811: #define R_PARISC_DIR16DF        87      /* 16 bits of eff. address.  */
1812: #define R_PARISC_GPREL64        88      /* 64 bits of GP-rel. address.  */
1813: #define R_PARISC_GPREL14WR      91      /* GP-rel. address, right 14 bits.  */
1814: #define R_PARISC_GPREL14DR      92      /* GP-rel. address, right 14 bits.  */
1815: #define R_PARISC_GPREL16F       93      /* 16 bits GP-rel. address.  */
1816: #define R_PARISC_GPREL16WF      94      /* 16 bits GP-rel. address.  */
1817: #define R_PARISC_GPREL16DF      95      /* 16 bits GP-rel. address.  */
1818: #define R_PARISC_LTOFF64        96      /* 64 bits LT-rel. address.  */
1819: #define R_PARISC_LTOFF14WR      99      /* LT-rel. address, right 14 bits.  */
1820: #define R_PARISC_LTOFF14DR      100     /* LT-rel. address, right 14 bits.  */
1821: #define R_PARISC_LTOFF16F       101     /* 16 bits LT-rel. address.  */
1822: #define R_PARISC_LTOFF16WF      102     /* 16 bits LT-rel. address.  */
1823: #define R_PARISC_LTOFF16DF      103     /* 16 bits LT-rel. address.  */
1824: #define R_PARISC_SECREL64       104     /* 64 bits section rel. address.  */
1825: #define R_PARISC_SEGREL64       112     /* 64 bits segment rel. address.  */
1826: #define R_PARISC_PLTOFF14WR     115     /* PLT-rel. address, right 14 bits.  */
1827: #define R_PARISC_PLTOFF14DR     116     /* PLT-rel. address, right 14 bits.  */
1828: #define R_PARISC_PLTOFF16F      117     /* 16 bits LT-rel. address.  */
1829: #define R_PARISC_PLTOFF16WF     118     /* 16 bits PLT-rel. address.  */
1830: #define R_PARISC_PLTOFF16DF     119     /* 16 bits PLT-rel. address.  */
1831: #define R_PARISC_LTOFF_FPTR64   120     /* 64 bits LT-rel. function ptr.  */
1832: #define R_PARISC_LTOFF_FPTR14WR 123     /* LT-rel. fct. ptr., right 14 bits. */
1833: #define R_PARISC_LTOFF_FPTR14DR 124     /* LT-rel. fct. ptr., right 14 bits. */
1834: #define R_PARISC_LTOFF_FPTR16F  125     /* 16 bits LT-rel. function ptr.  */
1835: #define R_PARISC_LTOFF_FPTR16WF 126     /* 16 bits LT-rel. function ptr.  */
1836: #define R_PARISC_LTOFF_FPTR16DF 127     /* 16 bits LT-rel. function ptr.  */
1837: #define R_PARISC_LORESERVE      128
1838: #define R_PARISC_COPY           128     /* Copy relocation.  */
1839: #define R_PARISC_IPLT           129     /* Dynamic reloc, imported PLT */
1840: #define R_PARISC_EPLT           130     /* Dynamic reloc, exported PLT */
1841: #define R_PARISC_TPREL32        153     /* 32 bits TP-rel. address.  */
1842: #define R_PARISC_TPREL21L       154     /* TP-rel. address, left 21 bits.  */
1843: #define R_PARISC_TPREL14R       158     /* TP-rel. address, right 14 bits.  */
1844: #define R_PARISC_LTOFF_TP21L    162     /* LT-TP-rel. address, left 21 bits. */
1845: #define R_PARISC_LTOFF_TP14R    166     /* LT-TP-rel. address, right 14 bits.*/
1846: #define R_PARISC_LTOFF_TP14F    167     /* 14 bits LT-TP-rel. address.  */
1847: #define R_PARISC_TPREL64        216     /* 64 bits TP-rel. address.  */
1848: #define R_PARISC_TPREL14WR      219     /* TP-rel. address, right 14 bits.  */
1849: #define R_PARISC_TPREL14DR      220     /* TP-rel. address, right 14 bits.  */
1850: #define R_PARISC_TPREL16F       221     /* 16 bits TP-rel. address.  */
1851: #define R_PARISC_TPREL16WF      222     /* 16 bits TP-rel. address.  */
1852: #define R_PARISC_TPREL16DF      223     /* 16 bits TP-rel. address.  */
1853: #define R_PARISC_LTOFF_TP64     224     /* 64 bits LT-TP-rel. address.  */
1854: #define R_PARISC_LTOFF_TP14WR   227     /* LT-TP-rel. address, right 14 bits.*/
1855: #define R_PARISC_LTOFF_TP14DR   228     /* LT-TP-rel. address, right 14 bits.*/
1856: #define R_PARISC_LTOFF_TP16F    229     /* 16 bits LT-TP-rel. address.  */
1857: #define R_PARISC_LTOFF_TP16WF   230     /* 16 bits LT-TP-rel. address.  */
1858: #define R_PARISC_LTOFF_TP16DF   231     /* 16 bits LT-TP-rel. address.  */
1859: #define R_PARISC_GNU_VTENTRY    232
1860: #define R_PARISC_GNU_VTINHERIT  233
1861: #define R_PARISC_TLS_GD21L      234     /* GD 21-bit left.  */
1862: #define R_PARISC_TLS_GD14R      235     /* GD 14-bit right.  */
1863: #define R_PARISC_TLS_GDCALL     236     /* GD call to __t_g_a.  */
1864: #define R_PARISC_TLS_LDM21L     237     /* LD module 21-bit left.  */
1865: #define R_PARISC_TLS_LDM14R     238     /* LD module 14-bit right.  */
1866: #define R_PARISC_TLS_LDMCALL    239     /* LD module call to __t_g_a.  */
1867: #define R_PARISC_TLS_LDO21L     240     /* LD offset 21-bit left.  */
1868: #define R_PARISC_TLS_LDO14R     241     /* LD offset 14-bit right.  */
1869: #define R_PARISC_TLS_DTPMOD32   242     /* DTP module 32-bit.  */
1870: #define R_PARISC_TLS_DTPMOD64   243     /* DTP module 64-bit.  */
1871: #define R_PARISC_TLS_DTPOFF32   244     /* DTP offset 32-bit.  */
1872: #define R_PARISC_TLS_DTPOFF64   245     /* DTP offset 32-bit.  */
1873: #define R_PARISC_TLS_LE21L      R_PARISC_TPREL21L
1874: #define R_PARISC_TLS_LE14R      R_PARISC_TPREL14R
1875: #define R_PARISC_TLS_IE21L      R_PARISC_LTOFF_TP21L
1876: #define R_PARISC_TLS_IE14R      R_PARISC_LTOFF_TP14R
1877: #define R_PARISC_TLS_TPREL32    R_PARISC_TPREL32
1878: #define R_PARISC_TLS_TPREL64    R_PARISC_TPREL64
1879: #define R_PARISC_HIRESERVE      255
1880: 
1881: /* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr.  */
1882: 
1883: #define PT_HP_TLS               (PT_LOOS + 0x0)
1884: #define PT_HP_CORE_NONE         (PT_LOOS + 0x1)
1885: #define PT_HP_CORE_VERSION      (PT_LOOS + 0x2)
1886: #define PT_HP_CORE_KERNEL       (PT_LOOS + 0x3)
1887: #define PT_HP_CORE_COMM         (PT_LOOS + 0x4)
1888: #define PT_HP_CORE_PROC         (PT_LOOS + 0x5)
1889: #define PT_HP_CORE_LOADABLE     (PT_LOOS + 0x6)
1890: #define PT_HP_CORE_STACK        (PT_LOOS + 0x7)
1891: #define PT_HP_CORE_SHM          (PT_LOOS + 0x8)
1892: #define PT_HP_CORE_MMF          (PT_LOOS + 0x9)
1893: #define PT_HP_PARALLEL          (PT_LOOS + 0x10)
1894: #define PT_HP_FASTBIND          (PT_LOOS + 0x11)
1895: #define PT_HP_OPT_ANNOT         (PT_LOOS + 0x12)
1896: #define PT_HP_HSL_ANNOT         (PT_LOOS + 0x13)
1897: #define PT_HP_STACK             (PT_LOOS + 0x14)
1898: 
1899: #define PT_PARISC_ARCHEXT       0x70000000
1900: #define PT_PARISC_UNWIND        0x70000001
1901: 
1902: /* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr.  */
1903: 
1904: #define PF_PARISC_SBP           0x08000000
1905: 
1906: #define PF_HP_PAGE_SIZE         0x00100000
1907: #define PF_HP_FAR_SHARED        0x00200000
1908: #define PF_HP_NEAR_SHARED       0x00400000
1909: #define PF_HP_CODE              0x01000000
1910: #define PF_HP_MODIFY            0x02000000
1911: #define PF_HP_LAZYSWAP          0x04000000
1912: #define PF_HP_SBP               0x08000000
1913: 
1914: 
1915: /* Alpha specific definitions.  */
1916: 
1917: /* Legal values for e_flags field of Elf64_Ehdr.  */
1918: 
1919: #define EF_ALPHA_32BIT          1       /* All addresses must be < 2GB.  */
1920: #define EF_ALPHA_CANRELAX       2       /* Relocations for relaxing exist.  */
1921: 
1922: /* Legal values for sh_type field of Elf64_Shdr.  */
1923: 
1924: /* These two are primerily concerned with ECOFF debugging info.  */
1925: #define SHT_ALPHA_DEBUG         0x70000001
1926: #define SHT_ALPHA_REGINFO       0x70000002
1927: 
1928: /* Legal values for sh_flags field of Elf64_Shdr.  */
1929: 
1930: #define SHF_ALPHA_GPREL         0x10000000
1931: 
1932: /* Legal values for st_other field of Elf64_Sym.  */
1933: #define STO_ALPHA_NOPV          0x80    /* No PV required.  */
1934: #define STO_ALPHA_STD_GPLOAD    0x88    /* PV only used for initial ldgp.  */
1935: 
1936: /* Alpha relocs.  */
1937: 
1938: #define R_ALPHA_NONE            0       /* No reloc */
1939: #define R_ALPHA_REFLONG         1       /* Direct 32 bit */
1940: #define R_ALPHA_REFQUAD         2       /* Direct 64 bit */
1941: #define R_ALPHA_GPREL32         3       /* GP relative 32 bit */
1942: #define R_ALPHA_LITERAL         4       /* GP relative 16 bit w/optimization */
1943: #define R_ALPHA_LITUSE          5       /* Optimization hint for LITERAL */
1944: #define R_ALPHA_GPDISP          6       /* Add displacement to GP */
1945: #define R_ALPHA_BRADDR          7       /* PC+4 relative 23 bit shifted */
1946: #define R_ALPHA_HINT            8       /* PC+4 relative 16 bit shifted */
1947: #define R_ALPHA_SREL16          9       /* PC relative 16 bit */
1948: #define R_ALPHA_SREL32          10      /* PC relative 32 bit */
1949: #define R_ALPHA_SREL64          11      /* PC relative 64 bit */
1950: #define R_ALPHA_GPRELHIGH       17      /* GP relative 32 bit, high 16 bits */
1951: #define R_ALPHA_GPRELLOW        18      /* GP relative 32 bit, low 16 bits */
1952: #define R_ALPHA_GPREL16         19      /* GP relative 16 bit */
1953: #define R_ALPHA_COPY            24      /* Copy symbol at runtime */
1954: #define R_ALPHA_GLOB_DAT        25      /* Create GOT entry */
1955: #define R_ALPHA_JMP_SLOT        26      /* Create PLT entry */
1956: #define R_ALPHA_RELATIVE        27      /* Adjust by program base */
1957: #define R_ALPHA_TLS_GD_HI       28
1958: #define R_ALPHA_TLSGD           29
1959: #define R_ALPHA_TLS_LDM         30
1960: #define R_ALPHA_DTPMOD64        31
1961: #define R_ALPHA_GOTDTPREL       32
1962: #define R_ALPHA_DTPREL64        33
1963: #define R_ALPHA_DTPRELHI        34
1964: #define R_ALPHA_DTPRELLO        35
1965: #define R_ALPHA_DTPREL16        36
1966: #define R_ALPHA_GOTTPREL        37
1967: #define R_ALPHA_TPREL64         38
1968: #define R_ALPHA_TPRELHI         39
1969: #define R_ALPHA_TPRELLO         40
1970: #define R_ALPHA_TPREL16         41
1971: /* Keep this the last entry.  */
1972: #define R_ALPHA_NUM             46
1973: 
1974: /* Magic values of the LITUSE relocation addend.  */
1975: #define LITUSE_ALPHA_ADDR       0
1976: #define LITUSE_ALPHA_BASE       1
1977: #define LITUSE_ALPHA_BYTOFF     2
1978: #define LITUSE_ALPHA_JSR        3
1979: #define LITUSE_ALPHA_TLS_GD     4
1980: #define LITUSE_ALPHA_TLS_LDM    5
1981: 
1982: /* Legal values for d_tag of Elf64_Dyn.  */
1983: #define DT_ALPHA_PLTRO          (DT_LOPROC + 0)
1984: #define DT_ALPHA_NUM            1
1985: 
1986: /* PowerPC specific declarations */
1987: 
1988: /* Values for Elf32/64_Ehdr.e_flags.  */
1989: #define EF_PPC_EMB              0x80000000      /* PowerPC embedded flag */
1990: 
1991: /* Cygnus local bits below */
1992: #define EF_PPC_RELOCATABLE      0x00010000      /* PowerPC -mrelocatable flag*/
1993: #define EF_PPC_RELOCATABLE_LIB  0x00008000      /* PowerPC -mrelocatable-lib
1994:                                                    flag */
1995: 
1996: /* PowerPC relocations defined by the ABIs */
1997: #define R_PPC_NONE              0
1998: #define R_PPC_ADDR32            1       /* 32bit absolute address */
1999: #define R_PPC_ADDR24            2       /* 26bit address, 2 bits ignored.  */
2000: #define R_PPC_ADDR16            3       /* 16bit absolute address */
2001: #define R_PPC_ADDR16_LO         4       /* lower 16bit of absolute address */
2002: #define R_PPC_ADDR16_HI         5       /* high 16bit of absolute address */
2003: #define R_PPC_ADDR16_HA         6       /* adjusted high 16bit */
2004: #define R_PPC_ADDR14            7       /* 16bit address, 2 bits ignored */
2005: #define R_PPC_ADDR14_BRTAKEN    8
2006: #define R_PPC_ADDR14_BRNTAKEN   9
2007: #define R_PPC_REL24             10      /* PC relative 26 bit */
2008: #define R_PPC_REL14             11      /* PC relative 16 bit */
2009: #define R_PPC_REL14_BRTAKEN     12
2010: #define R_PPC_REL14_BRNTAKEN    13
2011: #define R_PPC_GOT16             14
2012: #define R_PPC_GOT16_LO          15
2013: #define R_PPC_GOT16_HI          16
2014: #define R_PPC_GOT16_HA          17
2015: #define R_PPC_PLTREL24          18
2016: #define R_PPC_COPY              19
2017: #define R_PPC_GLOB_DAT          20
2018: #define R_PPC_JMP_SLOT          21
2019: #define R_PPC_RELATIVE          22
2020: #define R_PPC_LOCAL24PC         23
2021: #define R_PPC_UADDR32           24
2022: #define R_PPC_UADDR16           25
2023: #define R_PPC_REL32             26
2024: #define R_PPC_PLT32             27
2025: #define R_PPC_PLTREL32          28
2026: #define R_PPC_PLT16_LO          29
2027: #define R_PPC_PLT16_HI          30
2028: #define R_PPC_PLT16_HA          31
2029: #define R_PPC_SDAREL16          32
2030: #define R_PPC_SECTOFF           33
2031: #define R_PPC_SECTOFF_LO        34
2032: #define R_PPC_SECTOFF_HI        35
2033: #define R_PPC_SECTOFF_HA        36
2034: 
2035: /* PowerPC relocations defined for the TLS access ABI.  */
2036: #define R_PPC_TLS               67 /* none      (sym+add)@tls */
2037: #define R_PPC_DTPMOD32          68 /* word32    (sym+add)@dtpmod */
2038: #define R_PPC_TPREL16           69 /* half16*   (sym+add)@tprel */
2039: #define R_PPC_TPREL16_LO        70 /* half16    (sym+add)@tprel@l */
2040: #define R_PPC_TPREL16_HI        71 /* half16    (sym+add)@tprel@h */
2041: #define R_PPC_TPREL16_HA        72 /* half16    (sym+add)@tprel@ha */
2042: #define R_PPC_TPREL32           73 /* word32    (sym+add)@tprel */
2043: #define R_PPC_DTPREL16          74 /* half16*   (sym+add)@dtprel */
2044: #define R_PPC_DTPREL16_LO       75 /* half16    (sym+add)@dtprel@l */
2045: #define R_PPC_DTPREL16_HI       76 /* half16    (sym+add)@dtprel@h */
2046: #define R_PPC_DTPREL16_HA       77 /* half16    (sym+add)@dtprel@ha */
2047: #define R_PPC_DTPREL32          78 /* word32    (sym+add)@dtprel */
2048: #define R_PPC_GOT_TLSGD16       79 /* half16*   (sym+add)@got@tlsgd */
2049: #define R_PPC_GOT_TLSGD16_LO    80 /* half16    (sym+add)@got@tlsgd@l */
2050: #define R_PPC_GOT_TLSGD16_HI    81 /* half16    (sym+add)@got@tlsgd@h */
2051: #define R_PPC_GOT_TLSGD16_HA    82 /* half16    (sym+add)@got@tlsgd@ha */
2052: #define R_PPC_GOT_TLSLD16       83 /* half16*   (sym+add)@got@tlsld */
2053: #define R_PPC_GOT_TLSLD16_LO    84 /* half16    (sym+add)@got@tlsld@l */
2054: #define R_PPC_GOT_TLSLD16_HI    85 /* half16    (sym+add)@got@tlsld@h */
2055: #define R_PPC_GOT_TLSLD16_HA    86 /* half16    (sym+add)@got@tlsld@ha */
2056: #define R_PPC_GOT_TPREL16       87 /* half16*   (sym+add)@got@tprel */
2057: #define R_PPC_GOT_TPREL16_LO    88 /* half16    (sym+add)@got@tprel@l */
2058: #define R_PPC_GOT_TPREL16_HI    89 /* half16    (sym+add)@got@tprel@h */
2059: #define R_PPC_GOT_TPREL16_HA    90 /* half16    (sym+add)@got@tprel@ha */
2060: #define R_PPC_GOT_DTPREL16      91 /* half16*   (sym+add)@got@dtprel */
2061: #define R_PPC_GOT_DTPREL16_LO   92 /* half16*   (sym+add)@got@dtprel@l */
2062: #define R_PPC_GOT_DTPREL16_HI   93 /* half16*   (sym+add)@got@dtprel@h */
2063: #define R_PPC_GOT_DTPREL16_HA   94 /* half16*   (sym+add)@got@dtprel@ha */
2064: 
2065: /* The remaining relocs are from the Embedded ELF ABI, and are not
2066:    in the SVR4 ELF ABI.  */
2067: #define R_PPC_EMB_NADDR32       101
2068: #define R_PPC_EMB_NADDR16       102
2069: #define R_PPC_EMB_NADDR16_LO    103
2070: #define R_PPC_EMB_NADDR16_HI    104
2071: #define R_PPC_EMB_NADDR16_HA    105
2072: #define R_PPC_EMB_SDAI16        106
2073: #define R_PPC_EMB_SDA2I16       107
2074: #define R_PPC_EMB_SDA2REL       108
2075: #define R_PPC_EMB_SDA21         109     /* 16 bit offset in SDA */
2076: #define R_PPC_EMB_MRKREF        110
2077: #define R_PPC_EMB_RELSEC16      111
2078: #define R_PPC_EMB_RELST_LO      112
2079: #define R_PPC_EMB_RELST_HI      113
2080: #define R_PPC_EMB_RELST_HA      114
2081: #define R_PPC_EMB_BIT_FLD       115
2082: #define R_PPC_EMB_RELSDA        116     /* 16 bit relative offset in SDA */
2083: 
2084: /* Diab tool relocations.  */
2085: #define R_PPC_DIAB_SDA21_LO     180     /* like EMB_SDA21, but lower 16 bit */
2086: #define R_PPC_DIAB_SDA21_HI     181     /* like EMB_SDA21, but high 16 bit */
2087: #define R_PPC_DIAB_SDA21_HA     182     /* like EMB_SDA21, adjusted high 16 */
2088: #define R_PPC_DIAB_RELSDA_LO    183     /* like EMB_RELSDA, but lower 16 bit */
2089: #define R_PPC_DIAB_RELSDA_HI    184     /* like EMB_RELSDA, but high 16 bit */
2090: #define R_PPC_DIAB_RELSDA_HA    185     /* like EMB_RELSDA, adjusted high 16 */
2091: 
2092: /* GNU extension to support local ifunc.  */
2093: #define R_PPC_IRELATIVE         248
2094: 
2095: /* GNU relocs used in PIC code sequences.  */
2096: #define R_PPC_REL16             249     /* half16   (sym+add-.) */
2097: #define R_PPC_REL16_LO          250     /* half16   (sym+add-.)@l */
2098: #define R_PPC_REL16_HI          251     /* half16   (sym+add-.)@h */
2099: #define R_PPC_REL16_HA          252     /* half16   (sym+add-.)@ha */
2100: 
2101: /* This is a phony reloc to handle any old fashioned TOC16 references
2102:    that may still be in object files.  */
2103: #define R_PPC_TOC16             255
2104: 
2105: /* PowerPC specific values for the Dyn d_tag field.  */
2106: #define DT_PPC_GOT              (DT_LOPROC + 0)
2107: #define DT_PPC_NUM              1
2108: 
2109: /* PowerPC64 relocations defined by the ABIs */
2110: #define R_PPC64_NONE            R_PPC_NONE
2111: #define R_PPC64_ADDR32          R_PPC_ADDR32 /* 32bit absolute address */
2112: #define R_PPC64_ADDR24          R_PPC_ADDR24 /* 26bit address, word aligned */
2113: #define R_PPC64_ADDR16          R_PPC_ADDR16 /* 16bit absolute address */
2114: #define R_PPC64_ADDR16_LO       R_PPC_ADDR16_LO /* lower 16bits of address */
2115: #define R_PPC64_ADDR16_HI       R_PPC_ADDR16_HI /* high 16bits of address. */
2116: #define R_PPC64_ADDR16_HA       R_PPC_ADDR16_HA /* adjusted high 16bits.  */
2117: #define R_PPC64_ADDR14          R_PPC_ADDR14 /* 16bit address, word aligned */
2118: #define R_PPC64_ADDR14_BRTAKEN  R_PPC_ADDR14_BRTAKEN
2119: #define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN
2120: #define R_PPC64_REL24           R_PPC_REL24 /* PC-rel. 26 bit, word aligned */
2121: #define R_PPC64_REL14           R_PPC_REL14 /* PC relative 16 bit */
2122: #define R_PPC64_REL14_BRTAKEN   R_PPC_REL14_BRTAKEN
2123: #define R_PPC64_REL14_BRNTAKEN  R_PPC_REL14_BRNTAKEN
2124: #define R_PPC64_GOT16           R_PPC_GOT16
2125: #define R_PPC64_GOT16_LO        R_PPC_GOT16_LO
2126: #define R_PPC64_GOT16_HI        R_PPC_GOT16_HI
2127: #define R_PPC64_GOT16_HA        R_PPC_GOT16_HA
2128: 
2129: #define R_PPC64_COPY            R_PPC_COPY
2130: #define R_PPC64_GLOB_DAT        R_PPC_GLOB_DAT
2131: #define R_PPC64_JMP_SLOT        R_PPC_JMP_SLOT
2132: #define R_PPC64_RELATIVE        R_PPC_RELATIVE
2133: 
2134: #define R_PPC64_UADDR32         R_PPC_UADDR32
2135: #define R_PPC64_UADDR16         R_PPC_UADDR16
2136: #define R_PPC64_REL32           R_PPC_REL32
2137: #define R_PPC64_PLT32           R_PPC_PLT32
2138: #define R_PPC64_PLTREL32        R_PPC_PLTREL32
2139: #define R_PPC64_PLT16_LO        R_PPC_PLT16_LO
2140: #define R_PPC64_PLT16_HI        R_PPC_PLT16_HI
2141: #define R_PPC64_PLT16_HA        R_PPC_PLT16_HA
2142: 
2143: #define R_PPC64_SECTOFF         R_PPC_SECTOFF
2144: #define R_PPC64_SECTOFF_LO      R_PPC_SECTOFF_LO
2145: #define R_PPC64_SECTOFF_HI      R_PPC_SECTOFF_HI
2146: #define R_PPC64_SECTOFF_HA      R_PPC_SECTOFF_HA
2147: #define R_PPC64_ADDR30          37 /* word30 (S + A - P) >> 2 */
2148: #define R_PPC64_ADDR64          38 /* doubleword64 S + A */
2149: #define R_PPC64_ADDR16_HIGHER   39 /* half16 #higher(S + A) */
2150: #define R_PPC64_ADDR16_HIGHERA  40 /* half16 #highera(S + A) */
2151: #define R_PPC64_ADDR16_HIGHEST  41 /* half16 #highest(S + A) */
2152: #define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A) */
2153: #define R_PPC64_UADDR64         43 /* doubleword64 S + A */
2154: #define R_PPC64_REL64           44 /* doubleword64 S + A - P */
2155: #define R_PPC64_PLT64           45 /* doubleword64 L + A */
2156: #define R_PPC64_PLTREL64        46 /* doubleword64 L + A - P */
2157: #define R_PPC64_TOC16           47 /* half16* S + A - .TOC */
2158: #define R_PPC64_TOC16_LO        48 /* half16 #lo(S + A - .TOC.) */
2159: #define R_PPC64_TOC16_HI        49 /* half16 #hi(S + A - .TOC.) */
2160: #define R_PPC64_TOC16_HA        50 /* half16 #ha(S + A - .TOC.) */
2161: #define R_PPC64_TOC             51 /* doubleword64 .TOC */
2162: #define R_PPC64_PLTGOT16        52 /* half16* M + A */
2163: #define R_PPC64_PLTGOT16_LO     53 /* half16 #lo(M + A) */
2164: #define R_PPC64_PLTGOT16_HI     54 /* half16 #hi(M + A) */
2165: #define R_PPC64_PLTGOT16_HA     55 /* half16 #ha(M + A) */
2166: 
2167: #define R_PPC64_ADDR16_DS       56 /* half16ds* (S + A) >> 2 */
2168: #define R_PPC64_ADDR16_LO_DS    57 /* half16ds  #lo(S + A) >> 2 */
2169: #define R_PPC64_GOT16_DS        58 /* half16ds* (G + A) >> 2 */
2170: #define R_PPC64_GOT16_LO_DS     59 /* half16ds  #lo(G + A) >> 2 */
2171: #define R_PPC64_PLT16_LO_DS     60 /* half16ds  #lo(L + A) >> 2 */
2172: #define R_PPC64_SECTOFF_DS      61 /* half16ds* (R + A) >> 2 */
2173: #define R_PPC64_SECTOFF_LO_DS   62 /* half16ds  #lo(R + A) >> 2 */
2174: #define R_PPC64_TOC16_DS        63 /* half16ds* (S + A - .TOC.) >> 2 */
2175: #define R_PPC64_TOC16_LO_DS     64 /* half16ds  #lo(S + A - .TOC.) >> 2 */
2176: #define R_PPC64_PLTGOT16_DS     65 /* half16ds* (M + A) >> 2 */
2177: #define R_PPC64_PLTGOT16_LO_DS  66 /* half16ds  #lo(M + A) >> 2 */
2178: 
2179: /* PowerPC64 relocations defined for the TLS access ABI.  */
2180: #define R_PPC64_TLS             67 /* none      (sym+add)@tls */
2181: #define R_PPC64_DTPMOD64        68 /* doubleword64 (sym+add)@dtpmod */
2182: #define R_PPC64_TPREL16         69 /* half16*   (sym+add)@tprel */
2183: #define R_PPC64_TPREL16_LO      70 /* half16    (sym+add)@tprel@l */
2184: #define R_PPC64_TPREL16_HI      71 /* half16    (sym+add)@tprel@h */
2185: #define R_PPC64_TPREL16_HA      72 /* half16    (sym+add)@tprel@ha */
2186: #define R_PPC64_TPREL64         73 /* doubleword64 (sym+add)@tprel */
2187: #define R_PPC64_DTPREL16        74 /* half16*   (sym+add)@dtprel */
2188: #define R_PPC64_DTPREL16_LO     75 /* half16    (sym+add)@dtprel@l */
2189: #define R_PPC64_DTPREL16_HI     76 /* half16    (sym+add)@dtprel@h */
2190: #define R_PPC64_DTPREL16_HA     77 /* half16    (sym+add)@dtprel@ha */
2191: #define R_PPC64_DTPREL64        78 /* doubleword64 (sym+add)@dtprel */
2192: #define R_PPC64_GOT_TLSGD16     79 /* half16*   (sym+add)@got@tlsgd */
2193: #define R_PPC64_GOT_TLSGD16_LO  80 /* half16    (sym+add)@got@tlsgd@l */
2194: #define R_PPC64_GOT_TLSGD16_HI  81 /* half16    (sym+add)@got@tlsgd@h */
2195: #define R_PPC64_GOT_TLSGD16_HA  82 /* half16    (sym+add)@got@tlsgd@ha */
2196: #define R_PPC64_GOT_TLSLD16     83 /* half16*   (sym+add)@got@tlsld */
2197: #define R_PPC64_GOT_TLSLD16_LO  84 /* half16    (sym+add)@got@tlsld@l */
2198: #define R_PPC64_GOT_TLSLD16_HI  85 /* half16    (sym+add)@got@tlsld@h */
2199: #define R_PPC64_GOT_TLSLD16_HA  86 /* half16    (sym+add)@got@tlsld@ha */
2200: #define R_PPC64_GOT_TPREL16_DS  87 /* half16ds* (sym+add)@got@tprel */
2201: #define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */
2202: #define R_PPC64_GOT_TPREL16_HI  89 /* half16    (sym+add)@got@tprel@h */
2203: #define R_PPC64_GOT_TPREL16_HA  90 /* half16    (sym+add)@got@tprel@ha */
2204: #define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel */
2205: #define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */
2206: #define R_PPC64_GOT_DTPREL16_HI 93 /* half16    (sym+add)@got@dtprel@h */
2207: #define R_PPC64_GOT_DTPREL16_HA 94 /* half16    (sym+add)@got@dtprel@ha */
2208: #define R_PPC64_TPREL16_DS      95 /* half16ds* (sym+add)@tprel */
2209: #define R_PPC64_TPREL16_LO_DS   96 /* half16ds  (sym+add)@tprel@l */
2210: #define R_PPC64_TPREL16_HIGHER  97 /* half16    (sym+add)@tprel@higher */
2211: #define R_PPC64_TPREL16_HIGHERA 98 /* half16    (sym+add)@tprel@highera */
2212: #define R_PPC64_TPREL16_HIGHEST 99 /* half16    (sym+add)@tprel@highest */
2213: #define R_PPC64_TPREL16_HIGHESTA 100 /* half16  (sym+add)@tprel@highesta */
2214: #define R_PPC64_DTPREL16_DS     101 /* half16ds* (sym+add)@dtprel */
2215: #define R_PPC64_DTPREL16_LO_DS  102 /* half16ds (sym+add)@dtprel@l */
2216: #define R_PPC64_DTPREL16_HIGHER 103 /* half16   (sym+add)@dtprel@higher */
2217: #define R_PPC64_DTPREL16_HIGHERA 104 /* half16  (sym+add)@dtprel@highera */
2218: #define R_PPC64_DTPREL16_HIGHEST 105 /* half16  (sym+add)@dtprel@highest */
2219: #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */
2220: 
2221: /* GNU extension to support local ifunc.  */
2222: #define R_PPC64_JMP_IREL        247
2223: #define R_PPC64_IRELATIVE       248
2224: #define R_PPC64_REL16           249     /* half16   (sym+add-.) */
2225: #define R_PPC64_REL16_LO        250     /* half16   (sym+add-.)@l */
2226: #define R_PPC64_REL16_HI        251     /* half16   (sym+add-.)@h */
2227: #define R_PPC64_REL16_HA        252     /* half16   (sym+add-.)@ha */
2228: 
2229: /* PowerPC64 specific values for the Dyn d_tag field.  */
2230: #define DT_PPC64_GLINK  (DT_LOPROC + 0)
2231: #define DT_PPC64_OPD    (DT_LOPROC + 1)
2232: #define DT_PPC64_OPDSZ  (DT_LOPROC + 2)
2233: #define DT_PPC64_NUM    3
2234: 
2235: 
2236: /* ARM specific declarations */
2237: 
2238: /* Processor specific flags for the ELF header e_flags field.  */
2239: #define EF_ARM_RELEXEC          0x01
2240: #define EF_ARM_HASENTRY         0x02
2241: #define EF_ARM_INTERWORK        0x04
2242: #define EF_ARM_APCS_26          0x08
2243: #define EF_ARM_APCS_FLOAT       0x10
2244: #define EF_ARM_PIC              0x20
2245: #define EF_ARM_ALIGN8           0x40 /* 8-bit structure alignment is in use */
2246: #define EF_ARM_NEW_ABI          0x80
2247: #define EF_ARM_OLD_ABI          0x100
2248: #define EF_ARM_SOFT_FLOAT       0x200
2249: #define EF_ARM_VFP_FLOAT        0x400
2250: #define EF_ARM_MAVERICK_FLOAT   0x800
2251: 
2252: 
2253: /* Other constants defined in the ARM ELF spec. version B-01.  */
2254: /* NB. These conflict with values defined above.  */
2255: #define EF_ARM_SYMSARESORTED    0x04
2256: #define EF_ARM_DYNSYMSUSESEGIDX 0x08
2257: #define EF_ARM_MAPSYMSFIRST     0x10
2258: #define EF_ARM_EABIMASK         0XFF000000
2259: 
2260: /* Constants defined in AAELF.  */
2261: #define EF_ARM_BE8          0x00800000
2262: #define EF_ARM_LE8          0x00400000
2263: 
2264: #define EF_ARM_EABI_VERSION(flags)      ((flags) & EF_ARM_EABIMASK)
2265: #define EF_ARM_EABI_UNKNOWN     0x00000000
2266: #define EF_ARM_EABI_VER1        0x01000000
2267: #define EF_ARM_EABI_VER2        0x02000000
2268: #define EF_ARM_EABI_VER3        0x03000000
2269: #define EF_ARM_EABI_VER4        0x04000000
2270: #define EF_ARM_EABI_VER5        0x05000000
2271: 
2272: /* Additional symbol types for Thumb.  */
2273: #define STT_ARM_TFUNC           STT_LOPROC /* A Thumb function.  */
2274: #define STT_ARM_16BIT           STT_HIPROC /* A Thumb label.  */
2275: 
2276: /* ARM-specific values for sh_flags */
2277: #define SHF_ARM_ENTRYSECT       0x10000000 /* Section contains an entry point */
2278: #define SHF_ARM_COMDEF          0x80000000 /* Section may be multiply defined
2279:                                               in the input to a link step.  */
2280: 
2281: /* ARM-specific program header flags */
2282: #define PF_ARM_SB               0x10000000 /* Segment contains the location
2283:                                               addressed by the static base. */
2284: #define PF_ARM_PI               0x20000000 /* Position-independent segment.  */
2285: #define PF_ARM_ABS              0x40000000 /* Absolute segment.  */
2286: 
2287: /* Processor specific values for the Phdr p_type field.  */
2288: #define PT_ARM_EXIDX            (PT_LOPROC + 1) /* ARM unwind segment.  */
2289: 
2290: /* Processor specific values for the Shdr sh_type field.  */
2291: #define SHT_ARM_EXIDX           (SHT_LOPROC + 1) /* ARM unwind section.  */
2292: #define SHT_ARM_PREEMPTMAP      (SHT_LOPROC + 2) /* Preemption details.  */
2293: #define SHT_ARM_ATTRIBUTES      (SHT_LOPROC + 3) /* ARM attributes section.  */
2294: 
2295: 
2296: /* ARM relocs.  */
2297: 
2298: #define R_ARM_NONE              0       /* No reloc */
2299: #define R_ARM_PC24              1       /* PC relative 26 bit branch */
2300: #define R_ARM_ABS32             2       /* Direct 32 bit  */
2301: #define R_ARM_REL32             3       /* PC relative 32 bit */
2302: #define R_ARM_PC13              4
2303: #define R_ARM_ABS16             5       /* Direct 16 bit */
2304: #define R_ARM_ABS12             6       /* Direct 12 bit */
2305: #define R_ARM_THM_ABS5          7
2306: #define R_ARM_ABS8              8       /* Direct 8 bit */
2307: #define R_ARM_SBREL32           9
2308: #define R_ARM_THM_PC22          10
2309: #define R_ARM_THM_PC8           11
2310: #define R_ARM_AMP_VCALL9        12
2311: #define R_ARM_SWI24             13      /* Obsolete static relocation.  */
2312: #define R_ARM_TLS_DESC          13      /* Dynamic relocation.  */
2313: #define R_ARM_THM_SWI8          14
2314: #define R_ARM_XPC25             15
2315: #define R_ARM_THM_XPC22         16
2316: #define R_ARM_TLS_DTPMOD32      17      /* ID of module containing symbol */
2317: #define R_ARM_TLS_DTPOFF32      18      /* Offset in TLS block */
2318: #define R_ARM_TLS_TPOFF32       19      /* Offset in static TLS block */
2319: #define R_ARM_COPY              20      /* Copy symbol at runtime */
2320: #define R_ARM_GLOB_DAT          21      /* Create GOT entry */
2321: #define R_ARM_JUMP_SLOT         22      /* Create PLT entry */
2322: #define R_ARM_RELATIVE          23      /* Adjust by program base */
2323: #define R_ARM_GOTOFF            24      /* 32 bit offset to GOT */
2324: #define R_ARM_GOTPC             25      /* 32 bit PC relative offset to GOT */
2325: #define R_ARM_GOT32             26      /* 32 bit GOT entry */
2326: #define R_ARM_PLT32             27      /* 32 bit PLT address */
2327: #define R_ARM_ALU_PCREL_7_0     32
2328: #define R_ARM_ALU_PCREL_15_8    33
2329: #define R_ARM_ALU_PCREL_23_15   34
2330: #define R_ARM_LDR_SBREL_11_0    35
2331: #define R_ARM_ALU_SBREL_19_12   36
2332: #define R_ARM_ALU_SBREL_27_20   37
2333: #define R_ARM_TLS_GOTDESC       90
2334: #define R_ARM_TLS_CALL          91
2335: #define R_ARM_TLS_DESCSEQ       92
2336: #define R_ARM_THM_TLS_CALL      93
2337: #define R_ARM_GNU_VTENTRY       100
2338: #define R_ARM_GNU_VTINHERIT     101
2339: #define R_ARM_THM_PC11          102     /* thumb unconditional branch */
2340: #define R_ARM_THM_PC9           103     /* thumb conditional branch */
2341: #define R_ARM_TLS_GD32          104     /* PC-rel 32 bit for global dynamic
2342:                                            thread local data */
2343: #define R_ARM_TLS_LDM32         105     /* PC-rel 32 bit for local dynamic
2344:                                            thread local data */
2345: #define R_ARM_TLS_LDO32         106     /* 32 bit offset relative to TLS
2346:                                            block */
2347: #define R_ARM_TLS_IE32          107     /* PC-rel 32 bit for GOT entry of
2348:                                            static TLS block offset */
2349: #define R_ARM_TLS_LE32          108     /* 32 bit offset relative to static
2350:                                            TLS block */
2351: #define R_ARM_THM_TLS_DESCSEQ   129
2352: #define R_ARM_IRELATIVE         160
2353: #define R_ARM_RXPC25            249
2354: #define R_ARM_RSBREL32          250
2355: #define R_ARM_THM_RPC22         251
2356: #define R_ARM_RREL32            252
2357: #define R_ARM_RABS22            253
2358: #define R_ARM_RPC24             254
2359: #define R_ARM_RBASE             255
2360: /* Keep this the last entry.  */
2361: #define R_ARM_NUM               256
2362: 
2363: /* IA-64 specific declarations.  */
2364: 
2365: /* Processor specific flags for the Ehdr e_flags field.  */
2366: #define EF_IA_64_MASKOS         0x0000000f      /* os-specific flags */
2367: #define EF_IA_64_ABI64          0x00000010      /* 64-bit ABI */
2368: #define EF_IA_64_ARCH           0xff000000      /* arch. version mask */
2369: 
2370: /* Processor specific values for the Phdr p_type field.  */
2371: #define PT_IA_64_ARCHEXT        (PT_LOPROC + 0) /* arch extension bits */
2372: #define PT_IA_64_UNWIND         (PT_LOPROC + 1) /* ia64 unwind bits */
2373: #define PT_IA_64_HP_OPT_ANOT    (PT_LOOS + 0x12)
2374: #define PT_IA_64_HP_HSL_ANOT    (PT_LOOS + 0x13)
2375: #define PT_IA_64_HP_STACK       (PT_LOOS + 0x14)
2376: 
2377: /* Processor specific flags for the Phdr p_flags field.  */
2378: #define PF_IA_64_NORECOV        0x80000000      /* spec insns w/o recovery */
2379: 
2380: /* Processor specific values for the Shdr sh_type field.  */
2381: #define SHT_IA_64_EXT           (SHT_LOPROC + 0) /* extension bits */
2382: #define SHT_IA_64_UNWIND        (SHT_LOPROC + 1) /* unwind bits */
2383: 
2384: /* Processor specific flags for the Shdr sh_flags field.  */
2385: #define SHF_IA_64_SHORT         0x10000000      /* section near gp */
2386: #define SHF_IA_64_NORECOV       0x20000000      /* spec insns w/o recovery */
2387: 
2388: /* Processor specific values for the Dyn d_tag field.  */
2389: #define DT_IA_64_PLT_RESERVE    (DT_LOPROC + 0)
2390: #define DT_IA_64_NUM            1
2391: 
2392: /* IA-64 relocations.  */
2393: #define R_IA64_NONE             0x00    /* none */
2394: #define R_IA64_IMM14            0x21    /* symbol + addend, add imm14 */
2395: #define R_IA64_IMM22            0x22    /* symbol + addend, add imm22 */
2396: #define R_IA64_IMM64            0x23    /* symbol + addend, mov imm64 */
2397: #define R_IA64_DIR32MSB         0x24    /* symbol + addend, data4 MSB */
2398: #define R_IA64_DIR32LSB         0x25    /* symbol + addend, data4 LSB */
2399: #define R_IA64_DIR64MSB         0x26    /* symbol + addend, data8 MSB */
2400: #define R_IA64_DIR64LSB         0x27    /* symbol + addend, data8 LSB */
2401: #define R_IA64_GPREL22          0x2a    /* @gprel(sym + add), add imm22 */
2402: #define R_IA64_GPREL64I         0x2b    /* @gprel(sym + add), mov imm64 */
2403: #define R_IA64_GPREL32MSB       0x2c    /* @gprel(sym + add), data4 MSB */
2404: #define R_IA64_GPREL32LSB       0x2d    /* @gprel(sym + add), data4 LSB */
2405: #define R_IA64_GPREL64MSB       0x2e    /* @gprel(sym + add), data8 MSB */
2406: #define R_IA64_GPREL64LSB       0x2f    /* @gprel(sym + add), data8 LSB */
2407: #define R_IA64_LTOFF22          0x32    /* @ltoff(sym + add), add imm22 */
2408: #define R_IA64_LTOFF64I         0x33    /* @ltoff(sym + add), mov imm64 */
2409: #define R_IA64_PLTOFF22         0x3a    /* @pltoff(sym + add), add imm22 */
2410: #define R_IA64_PLTOFF64I        0x3b    /* @pltoff(sym + add), mov imm64 */
2411: #define R_IA64_PLTOFF64MSB      0x3e    /* @pltoff(sym + add), data8 MSB */
2412: #define R_IA64_PLTOFF64LSB      0x3f    /* @pltoff(sym + add), data8 LSB */
2413: #define R_IA64_FPTR64I          0x43    /* @fptr(sym + add), mov imm64 */
2414: #define R_IA64_FPTR32MSB        0x44    /* @fptr(sym + add), data4 MSB */
2415: #define R_IA64_FPTR32LSB        0x45    /* @fptr(sym + add), data4 LSB */
2416: #define R_IA64_FPTR64MSB        0x46    /* @fptr(sym + add), data8 MSB */
2417: #define R_IA64_FPTR64LSB        0x47    /* @fptr(sym + add), data8 LSB */
2418: #define R_IA64_PCREL60B         0x48    /* @pcrel(sym + add), brl */
2419: #define R_IA64_PCREL21B         0x49    /* @pcrel(sym + add), ptb, call */
2420: #define R_IA64_PCREL21M         0x4a    /* @pcrel(sym + add), chk.s */
2421: #define R_IA64_PCREL21F         0x4b    /* @pcrel(sym + add), fchkf */
2422: #define R_IA64_PCREL32MSB       0x4c    /* @pcrel(sym + add), data4 MSB */
2423: #define R_IA64_PCREL32LSB       0x4d    /* @pcrel(sym + add), data4 LSB */
2424: #define R_IA64_PCREL64MSB       0x4e    /* @pcrel(sym + add), data8 MSB */
2425: #define R_IA64_PCREL64LSB       0x4f    /* @pcrel(sym + add), data8 LSB */
2426: #define R_IA64_LTOFF_FPTR22     0x52    /* @ltoff(@fptr(s+a)), imm22 */
2427: #define R_IA64_LTOFF_FPTR64I    0x53    /* @ltoff(@fptr(s+a)), imm64 */
2428: #define R_IA64_LTOFF_FPTR32MSB  0x54    /* @ltoff(@fptr(s+a)), data4 MSB */
2429: #define R_IA64_LTOFF_FPTR32LSB  0x55    /* @ltoff(@fptr(s+a)), data4 LSB */
2430: #define R_IA64_LTOFF_FPTR64MSB  0x56    /* @ltoff(@fptr(s+a)), data8 MSB */
2431: #define R_IA64_LTOFF_FPTR64LSB  0x57    /* @ltoff(@fptr(s+a)), data8 LSB */
2432: #define R_IA64_SEGREL32MSB      0x5c    /* @segrel(sym + add), data4 MSB */
2433: #define R_IA64_SEGREL32LSB      0x5d    /* @segrel(sym + add), data4 LSB */
2434: #define R_IA64_SEGREL64MSB      0x5e    /* @segrel(sym + add), data8 MSB */
2435: #define R_IA64_SEGREL64LSB      0x5f    /* @segrel(sym + add), data8 LSB */
2436: #define R_IA64_SECREL32MSB      0x64    /* @secrel(sym + add), data4 MSB */
2437: #define R_IA64_SECREL32LSB      0x65    /* @secrel(sym + add), data4 LSB */
2438: #define R_IA64_SECREL64MSB      0x66    /* @secrel(sym + add), data8 MSB */
2439: #define R_IA64_SECREL64LSB      0x67    /* @secrel(sym + add), data8 LSB */
2440: #define R_IA64_REL32MSB         0x6c    /* data 4 + REL */
2441: #define R_IA64_REL32LSB         0x6d    /* data 4 + REL */
2442: #define R_IA64_REL64MSB         0x6e    /* data 8 + REL */
2443: #define R_IA64_REL64LSB         0x6f    /* data 8 + REL */
2444: #define R_IA64_LTV32MSB         0x74    /* symbol + addend, data4 MSB */
2445: #define R_IA64_LTV32LSB         0x75    /* symbol + addend, data4 LSB */
2446: #define R_IA64_LTV64MSB         0x76    /* symbol + addend, data8 MSB */
2447: #define R_IA64_LTV64LSB         0x77    /* symbol + addend, data8 LSB */
2448: #define R_IA64_PCREL21BI        0x79    /* @pcrel(sym + add), 21bit inst */
2449: #define R_IA64_PCREL22          0x7a    /* @pcrel(sym + add), 22bit inst */
2450: #define R_IA64_PCREL64I         0x7b    /* @pcrel(sym + add), 64bit inst */
2451: #define R_IA64_IPLTMSB          0x80    /* dynamic reloc, imported PLT, MSB */
2452: #define R_IA64_IPLTLSB          0x81    /* dynamic reloc, imported PLT, LSB */
2453: #define R_IA64_COPY             0x84    /* copy relocation */
2454: #define R_IA64_SUB              0x85    /* Addend and symbol difference */
2455: #define R_IA64_LTOFF22X         0x86    /* LTOFF22, relaxable.  */
2456: #define R_IA64_LDXMOV           0x87    /* Use of LTOFF22X.  */
2457: #define R_IA64_TPREL14          0x91    /* @tprel(sym + add), imm14 */
2458: #define R_IA64_TPREL22          0x92    /* @tprel(sym + add), imm22 */
2459: #define R_IA64_TPREL64I         0x93    /* @tprel(sym + add), imm64 */
2460: #define R_IA64_TPREL64MSB       0x96    /* @tprel(sym + add), data8 MSB */
2461: #define R_IA64_TPREL64LSB       0x97    /* @tprel(sym + add), data8 LSB */
2462: #define R_IA64_LTOFF_TPREL22    0x9a    /* @ltoff(@tprel(s+a)), imm2 */
2463: #define R_IA64_DTPMOD64MSB      0xa6    /* @dtpmod(sym + add), data8 MSB */
2464: #define R_IA64_DTPMOD64LSB      0xa7    /* @dtpmod(sym + add), data8 LSB */
2465: #define R_IA64_LTOFF_DTPMOD22   0xaa    /* @ltoff(@dtpmod(sym + add)), imm22 */
2466: #define R_IA64_DTPREL14         0xb1    /* @dtprel(sym + add), imm14 */
2467: #define R_IA64_DTPREL22         0xb2    /* @dtprel(sym + add), imm22 */
2468: #define R_IA64_DTPREL64I        0xb3    /* @dtprel(sym + add), imm64 */
2469: #define R_IA64_DTPREL32MSB      0xb4    /* @dtprel(sym + add), data4 MSB */
2470: #define R_IA64_DTPREL32LSB      0xb5    /* @dtprel(sym + add), data4 LSB */
2471: #define R_IA64_DTPREL64MSB      0xb6    /* @dtprel(sym + add), data8 MSB */
2472: #define R_IA64_DTPREL64LSB      0xb7    /* @dtprel(sym + add), data8 LSB */
2473: #define R_IA64_LTOFF_DTPREL22   0xba    /* @ltoff(@dtprel(s+a)), imm22 */
2474: 
2475: /* SH specific declarations */
2476: 
2477: /* Processor specific flags for the ELF header e_flags field.  */
2478: #define EF_SH_MACH_MASK         0x1f
2479: #define EF_SH_UNKNOWN           0x0
2480: #define EF_SH1                  0x1
2481: #define EF_SH2                  0x2
2482: #define EF_SH3                  0x3
2483: #define EF_SH_DSP               0x4
2484: #define EF_SH3_DSP              0x5
2485: #define EF_SH4AL_DSP            0x6
2486: #define EF_SH3E                 0x8
2487: #define EF_SH4                  0x9
2488: #define EF_SH2E                 0xb
2489: #define EF_SH4A                 0xc
2490: #define EF_SH2A                 0xd
2491: #define EF_SH4_NOFPU            0x10
2492: #define EF_SH4A_NOFPU           0x11
2493: #define EF_SH4_NOMMU_NOFPU      0x12
2494: #define EF_SH2A_NOFPU           0x13
2495: #define EF_SH3_NOMMU            0x14
2496: #define EF_SH2A_SH4_NOFPU       0x15
2497: #define EF_SH2A_SH3_NOFPU       0x16
2498: #define EF_SH2A_SH4             0x17
2499: #define EF_SH2A_SH3E            0x18
2500: 
2501: /* SH relocs.  */
2502: #define R_SH_NONE               0
2503: #define R_SH_DIR32              1
2504: #define R_SH_REL32              2
2505: #define R_SH_DIR8WPN            3
2506: #define R_SH_IND12W             4
2507: #define R_SH_DIR8WPL            5
2508: #define R_SH_DIR8WPZ            6
2509: #define R_SH_DIR8BP             7
2510: #define R_SH_DIR8W              8
2511: #define R_SH_DIR8L              9
2512: #define R_SH_SWITCH16           25
2513: #define R_SH_SWITCH32           26
2514: #define R_SH_USES               27
2515: #define R_SH_COUNT              28
2516: #define R_SH_ALIGN              29
2517: #define R_SH_CODE               30
2518: #define R_SH_DATA               31
2519: #define R_SH_LABEL              32
2520: #define R_SH_SWITCH8            33
2521: #define R_SH_GNU_VTINHERIT      34
2522: #define R_SH_GNU_VTENTRY        35
2523: #define R_SH_TLS_GD_32          144
2524: #define R_SH_TLS_LD_32          145
2525: #define R_SH_TLS_LDO_32         146
2526: #define R_SH_TLS_IE_32          147
2527: #define R_SH_TLS_LE_32          148
2528: #define R_SH_TLS_DTPMOD32       149
2529: #define R_SH_TLS_DTPOFF32       150
2530: #define R_SH_TLS_TPOFF32        151
2531: #define R_SH_GOT32              160
2532: #define R_SH_PLT32              161
2533: #define R_SH_COPY               162
2534: #define R_SH_GLOB_DAT           163
2535: #define R_SH_JMP_SLOT           164
2536: #define R_SH_RELATIVE           165
2537: #define R_SH_GOTOFF             166
2538: #define R_SH_GOTPC              167
2539: /* Keep this the last entry.  */
2540: #define R_SH_NUM                256
2541: 
2542: /* S/390 specific definitions.  */
2543: 
2544: /* Valid values for the e_flags field.  */
2545: 
2546: #define EF_S390_HIGH_GPRS    0x00000001  /* High GPRs kernel facility needed.  */
2547: 
2548: /* Additional s390 relocs */
2549: 
2550: #define R_390_NONE              0       /* No reloc.  */
2551: #define R_390_8                 1       /* Direct 8 bit.  */
2552: #define R_390_12                2       /* Direct 12 bit.  */
2553: #define R_390_16                3       /* Direct 16 bit.  */
2554: #define R_390_32                4       /* Direct 32 bit.  */
2555: #define R_390_PC32              5       /* PC relative 32 bit.  */
2556: #define R_390_GOT12             6       /* 12 bit GOT offset.  */
2557: #define R_390_GOT32             7       /* 32 bit GOT offset.  */
2558: #define R_390_PLT32             8       /* 32 bit PC relative PLT address.  */
2559: #define R_390_COPY              9       /* Copy symbol at runtime.  */
2560: #define R_390_GLOB_DAT          10      /* Create GOT entry.  */
2561: #define R_390_JMP_SLOT          11      /* Create PLT entry.  */
2562: #define R_390_RELATIVE          12      /* Adjust by program base.  */
2563: #define R_390_GOTOFF32          13      /* 32 bit offset to GOT.         */
2564: #define R_390_GOTPC             14      /* 32 bit PC relative offset to GOT.  */
2565: #define R_390_GOT16             15      /* 16 bit GOT offset.  */
2566: #define R_390_PC16              16      /* PC relative 16 bit.  */
2567: #define R_390_PC16DBL           17      /* PC relative 16 bit shifted by 1.  */
2568: #define R_390_PLT16DBL          18      /* 16 bit PC rel. PLT shifted by 1.  */
2569: #define R_390_PC32DBL           19      /* PC relative 32 bit shifted by 1.  */
2570: #define R_390_PLT32DBL          20      /* 32 bit PC rel. PLT shifted by 1.  */
2571: #define R_390_GOTPCDBL          21      /* 32 bit PC rel. GOT shifted by 1.  */
2572: #define R_390_64                22      /* Direct 64 bit.  */
2573: #define R_390_PC64              23      /* PC relative 64 bit.  */
2574: #define R_390_GOT64             24      /* 64 bit GOT offset.  */
2575: #define R_390_PLT64             25      /* 64 bit PC relative PLT address.  */
2576: #define R_390_GOTENT            26      /* 32 bit PC rel. to GOT entry >> 1. */
2577: #define R_390_GOTOFF16          27      /* 16 bit offset to GOT. */
2578: #define R_390_GOTOFF64          28      /* 64 bit offset to GOT. */
2579: #define R_390_GOTPLT12          29      /* 12 bit offset to jump slot.  */
2580: #define R_390_GOTPLT16          30      /* 16 bit offset to jump slot.  */
2581: #define R_390_GOTPLT32          31      /* 32 bit offset to jump slot.  */
2582: #define R_390_GOTPLT64          32      /* 64 bit offset to jump slot.  */
2583: #define R_390_GOTPLTENT         33      /* 32 bit rel. offset to jump slot.  */
2584: #define R_390_PLTOFF16          34      /* 16 bit offset from GOT to PLT. */
2585: #define R_390_PLTOFF32          35      /* 32 bit offset from GOT to PLT. */
2586: #define R_390_PLTOFF64          36      /* 16 bit offset from GOT to PLT. */
2587: #define R_390_TLS_LOAD          37      /* Tag for load insn in TLS code.  */
2588: #define R_390_TLS_GDCALL        38      /* Tag for function call in general
2589:                                            dynamic TLS code. */
2590: #define R_390_TLS_LDCALL        39      /* Tag for function call in local
2591:                                            dynamic TLS code. */
2592: #define R_390_TLS_GD32          40      /* Direct 32 bit for general dynamic
2593:                                            thread local data.  */
2594: #define R_390_TLS_GD64          41      /* Direct 64 bit for general dynamic
2595:                                           thread local data.  */
2596: #define R_390_TLS_GOTIE12       42      /* 12 bit GOT offset for static TLS
2597:                                            block offset.  */
2598: #define R_390_TLS_GOTIE32       43      /* 32 bit GOT offset for static TLS
2599:                                            block offset.  */
2600: #define R_390_TLS_GOTIE64       44      /* 64 bit GOT offset for static TLS
2601:                                            block offset. */
2602: #define R_390_TLS_LDM32         45      /* Direct 32 bit for local dynamic
2603:                                            thread local data in LE code.  */
2604: #define R_390_TLS_LDM64         46      /* Direct 64 bit for local dynamic
2605:                                            thread local data in LE code.  */
2606: #define R_390_TLS_IE32          47      /* 32 bit address of GOT entry for
2607:                                            negated static TLS block offset.  */
2608: #define R_390_TLS_IE64          48      /* 64 bit address of GOT entry for
2609:                                            negated static TLS block offset.  */
2610: #define R_390_TLS_IEENT         49      /* 32 bit rel. offset to GOT entry for
2611:                                            negated static TLS block offset.  */
2612: #define R_390_TLS_LE32          50      /* 32 bit negated offset relative to
2613:                                            static TLS block.  */
2614: #define R_390_TLS_LE64          51      /* 64 bit negated offset relative to
2615:                                            static TLS block.  */
2616: #define R_390_TLS_LDO32         52      /* 32 bit offset relative to TLS
2617:                                            block.  */
2618: #define R_390_TLS_LDO64         53      /* 64 bit offset relative to TLS
2619:                                            block.  */
2620: #define R_390_TLS_DTPMOD        54      /* ID of module containing symbol.  */
2621: #define R_390_TLS_DTPOFF        55      /* Offset in TLS block.  */
2622: #define R_390_TLS_TPOFF         56      /* Negated offset in static TLS
2623:                                            block.  */
2624: #define R_390_20                57      /* Direct 20 bit.  */
2625: #define R_390_GOT20             58      /* 20 bit GOT offset.  */
2626: #define R_390_GOTPLT20          59      /* 20 bit offset to jump slot.  */
2627: #define R_390_TLS_GOTIE20       60      /* 20 bit GOT offset for static TLS
2628:                                            block offset.  */
2629: /* Keep this the last entry.  */
2630: #define R_390_NUM               61
2631: 
2632: 
2633: /* CRIS relocations.  */
2634: #define R_CRIS_NONE             0
2635: #define R_CRIS_8                1
2636: #define R_CRIS_16               2
2637: #define R_CRIS_32               3
2638: #define R_CRIS_8_PCREL          4
2639: #define R_CRIS_16_PCREL         5
2640: #define R_CRIS_32_PCREL         6
2641: #define R_CRIS_GNU_VTINHERIT    7
2642: #define R_CRIS_GNU_VTENTRY      8
2643: #define R_CRIS_COPY             9
2644: #define R_CRIS_GLOB_DAT         10
2645: #define R_CRIS_JUMP_SLOT        11
2646: #define R_CRIS_RELATIVE         12
2647: #define R_CRIS_16_GOT           13
2648: #define R_CRIS_32_GOT           14
2649: #define R_CRIS_16_GOTPLT        15
2650: #define R_CRIS_32_GOTPLT        16
2651: #define R_CRIS_32_GOTREL        17
2652: #define R_CRIS_32_PLT_GOTREL    18
2653: #define R_CRIS_32_PLT_PCREL     19
2654: 
2655: #define R_CRIS_NUM              20
2656: 
2657: 
2658: /* AMD x86-64 relocations.  */
2659: #define R_X86_64_NONE           0       /* No reloc */
2660: #define R_X86_64_64             1       /* Direct 64 bit  */
2661: #define R_X86_64_PC32           2       /* PC relative 32 bit signed */
2662: #define R_X86_64_GOT32          3       /* 32 bit GOT entry */
2663: #define R_X86_64_PLT32          4       /* 32 bit PLT address */
2664: #define R_X86_64_COPY           5       /* Copy symbol at runtime */
2665: #define R_X86_64_GLOB_DAT       6       /* Create GOT entry */
2666: #define R_X86_64_JUMP_SLOT      7       /* Create PLT entry */
2667: #define R_X86_64_RELATIVE       8       /* Adjust by program base */
2668: #define R_X86_64_GOTPCREL       9       /* 32 bit signed PC relative
2669:                                            offset to GOT */
2670: #define R_X86_64_32             10      /* Direct 32 bit zero extended */
2671: #define R_X86_64_32S            11      /* Direct 32 bit sign extended */
2672: #define R_X86_64_16             12      /* Direct 16 bit zero extended */
2673: #define R_X86_64_PC16           13      /* 16 bit sign extended pc relative */
2674: #define R_X86_64_8              14      /* Direct 8 bit sign extended  */
2675: #define R_X86_64_PC8            15      /* 8 bit sign extended pc relative */
2676: #define R_X86_64_DTPMOD64       16      /* ID of module containing symbol */
2677: #define R_X86_64_DTPOFF64       17      /* Offset in module's TLS block */
2678: #define R_X86_64_TPOFF64        18      /* Offset in initial TLS block */
2679: #define R_X86_64_TLSGD          19      /* 32 bit signed PC relative offset
2680:                                            to two GOT entries for GD symbol */
2681: #define R_X86_64_TLSLD          20      /* 32 bit signed PC relative offset
2682:                                            to two GOT entries for LD symbol */
2683: #define R_X86_64_DTPOFF32       21      /* Offset in TLS block */
2684: #define R_X86_64_GOTTPOFF       22      /* 32 bit signed PC relative offset
2685:                                            to GOT entry for IE symbol */
2686: #define R_X86_64_TPOFF32        23      /* Offset in initial TLS block */
2687: #define R_X86_64_PC64           24      /* PC relative 64 bit */
2688: #define R_X86_64_GOTOFF64       25      /* 64 bit offset to GOT */
2689: #define R_X86_64_GOTPC32        26      /* 32 bit signed pc relative
2690:                                            offset to GOT */
2691: #define R_X86_64_GOT64          27      /* 64-bit GOT entry offset */
2692: #define R_X86_64_GOTPCREL64     28      /* 64-bit PC relative offset
2693:                                            to GOT entry */
2694: #define R_X86_64_GOTPC64        29      /* 64-bit PC relative offset to GOT */
2695: #define R_X86_64_GOTPLT64       30      /* like GOT64, says PLT entry needed */
2696: #define R_X86_64_PLTOFF64       31      /* 64-bit GOT relative offset
2697:                                            to PLT entry */
2698: #define R_X86_64_SIZE32         32      /* Size of symbol plus 32-bit addend */
2699: #define R_X86_64_SIZE64         33      /* Size of symbol plus 64-bit addend */
2700: #define R_X86_64_GOTPC32_TLSDESC 34     /* GOT offset for TLS descriptor.  */
2701: #define R_X86_64_TLSDESC_CALL   35      /* Marker for call through TLS
2702:                                            descriptor.  */
2703: #define R_X86_64_TLSDESC        36      /* TLS descriptor.  */
2704: #define R_X86_64_IRELATIVE      37      /* Adjust indirectly by program base */
2705: 
2706: #define R_X86_64_NUM            38
2707: 
2708: 
2709: /* AM33 relocations.  */
2710: #define R_MN10300_NONE          0       /* No reloc.  */
2711: #define R_MN10300_32            1       /* Direct 32 bit.  */
2712: #define R_MN10300_16            2       /* Direct 16 bit.  */
2713: #define R_MN10300_8             3       /* Direct 8 bit.  */
2714: #define R_MN10300_PCREL32       4       /* PC-relative 32-bit.  */
2715: #define R_MN10300_PCREL16       5       /* PC-relative 16-bit signed.  */
2716: #define R_MN10300_PCREL8        6       /* PC-relative 8-bit signed.  */
2717: #define R_MN10300_GNU_VTINHERIT 7       /* Ancient C++ vtable garbage... */
2718: #define R_MN10300_GNU_VTENTRY   8       /* ... collection annotation.  */
2719: #define R_MN10300_24            9       /* Direct 24 bit.  */
2720: #define R_MN10300_GOTPC32       10      /* 32-bit PCrel offset to GOT.  */
2721: #define R_MN10300_GOTPC16       11      /* 16-bit PCrel offset to GOT.  */
2722: #define R_MN10300_GOTOFF32      12      /* 32-bit offset from GOT.  */
2723: #define R_MN10300_GOTOFF24      13      /* 24-bit offset from GOT.  */
2724: #define R_MN10300_GOTOFF16      14      /* 16-bit offset from GOT.  */
2725: #define R_MN10300_PLT32         15      /* 32-bit PCrel to PLT entry.  */
2726: #define R_MN10300_PLT16         16      /* 16-bit PCrel to PLT entry.  */
2727: #define R_MN10300_GOT32         17      /* 32-bit offset to GOT entry.  */
2728: #define R_MN10300_GOT24         18      /* 24-bit offset to GOT entry.  */
2729: #define R_MN10300_GOT16         19      /* 16-bit offset to GOT entry.  */
2730: #define R_MN10300_COPY          20      /* Copy symbol at runtime.  */
2731: #define R_MN10300_GLOB_DAT      21      /* Create GOT entry.  */
2732: #define R_MN10300_JMP_SLOT      22      /* Create PLT entry.  */
2733: #define R_MN10300_RELATIVE      23      /* Adjust by program base.  */
2734: 
2735: #define R_MN10300_NUM           24
2736: 
2737: 
2738: /* M32R relocs.  */
2739: #define R_M32R_NONE             0       /* No reloc. */
2740: #define R_M32R_16               1       /* Direct 16 bit. */
2741: #define R_M32R_32               2       /* Direct 32 bit. */
2742: #define R_M32R_24               3       /* Direct 24 bit. */
2743: #define R_M32R_10_PCREL         4       /* PC relative 10 bit shifted. */
2744: #define R_M32R_18_PCREL         5       /* PC relative 18 bit shifted. */
2745: #define R_M32R_26_PCREL         6       /* PC relative 26 bit shifted. */
2746: #define R_M32R_HI16_ULO         7       /* High 16 bit with unsigned low. */
2747: #define R_M32R_HI16_SLO         8       /* High 16 bit with signed low. */
2748: #define R_M32R_LO16             9       /* Low 16 bit. */
2749: #define R_M32R_SDA16            10      /* 16 bit offset in SDA. */
2750: #define R_M32R_GNU_VTINHERIT    11
2751: #define R_M32R_GNU_VTENTRY      12
2752: /* M32R relocs use SHT_RELA.  */
2753: #define R_M32R_16_RELA          33      /* Direct 16 bit. */
2754: #define R_M32R_32_RELA          34      /* Direct 32 bit. */
2755: #define R_M32R_24_RELA          35      /* Direct 24 bit. */
2756: #define R_M32R_10_PCREL_RELA    36      /* PC relative 10 bit shifted. */
2757: #define R_M32R_18_PCREL_RELA    37      /* PC relative 18 bit shifted. */
2758: #define R_M32R_26_PCREL_RELA    38      /* PC relative 26 bit shifted. */
2759: #define R_M32R_HI16_ULO_RELA    39      /* High 16 bit with unsigned low */
2760: #define R_M32R_HI16_SLO_RELA    40      /* High 16 bit with signed low */
2761: #define R_M32R_LO16_RELA        41      /* Low 16 bit */
2762: #define R_M32R_SDA16_RELA       42      /* 16 bit offset in SDA */
2763: #define R_M32R_RELA_GNU_VTINHERIT       43
2764: #define R_M32R_RELA_GNU_VTENTRY 44
2765: #define R_M32R_REL32            45      /* PC relative 32 bit.  */
2766: 
2767: #define R_M32R_GOT24            48      /* 24 bit GOT entry */
2768: #define R_M32R_26_PLTREL        49      /* 26 bit PC relative to PLT shifted */
2769: #define R_M32R_COPY             50      /* Copy symbol at runtime */
2770: #define R_M32R_GLOB_DAT         51      /* Create GOT entry */
2771: #define R_M32R_JMP_SLOT         52      /* Create PLT entry */
2772: #define R_M32R_RELATIVE         53      /* Adjust by program base */
2773: #define R_M32R_GOTOFF           54      /* 24 bit offset to GOT */
2774: #define R_M32R_GOTPC24          55      /* 24 bit PC relative offset to GOT */
2775: #define R_M32R_GOT16_HI_ULO     56      /* High 16 bit GOT entry with unsigned
2776:                                            low */
2777: #define R_M32R_GOT16_HI_SLO     57      /* High 16 bit GOT entry with signed
2778:                                            low */
2779: #define R_M32R_GOT16_LO         58      /* Low 16 bit GOT entry */
2780: #define R_M32R_GOTPC_HI_ULO     59      /* High 16 bit PC relative offset to
2781:                                            GOT with unsigned low */
2782: #define R_M32R_GOTPC_HI_SLO     60      /* High 16 bit PC relative offset to
2783:                                            GOT with signed low */
2784: #define R_M32R_GOTPC_LO         61      /* Low 16 bit PC relative offset to
2785:                                            GOT */
2786: #define R_M32R_GOTOFF_HI_ULO    62      /* High 16 bit offset to GOT
2787:                                            with unsigned low */
2788: #define R_M32R_GOTOFF_HI_SLO    63      /* High 16 bit offset to GOT
2789:                                            with signed low */
2790: #define R_M32R_GOTOFF_LO        64      /* Low 16 bit offset to GOT */
2791: #define R_M32R_NUM              256     /* Keep this the last entry. */
2792: 
2793: 
2794: __END_DECLS
2795: 
2796: #endif  /* elf.h */
2797: 


for client 18.191.228.88
© Andrew Scott 2006 - 2024,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/