1*5c0de15dSLoGin /* This file defines standard ELF types, structures, and macros. 2*5c0de15dSLoGin Copyright (C) 1995-2022 Free Software Foundation, Inc. 3*5c0de15dSLoGin This file is part of the GNU C Library. 4*5c0de15dSLoGin 5*5c0de15dSLoGin The GNU C Library is free software; you can redistribute it and/or 6*5c0de15dSLoGin modify it under the terms of the GNU Lesser General Public 7*5c0de15dSLoGin License as published by the Free Software Foundation; either 8*5c0de15dSLoGin version 2.1 of the License, or (at your option) any later version. 9*5c0de15dSLoGin 10*5c0de15dSLoGin The GNU C Library is distributed in the hope that it will be useful, 11*5c0de15dSLoGin but WITHOUT ANY WARRANTY; without even the implied warranty of 12*5c0de15dSLoGin MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13*5c0de15dSLoGin Lesser General Public License for more details. 14*5c0de15dSLoGin 15*5c0de15dSLoGin You should have received a copy of the GNU Lesser General Public 16*5c0de15dSLoGin License along with the GNU C Library; if not, see 17*5c0de15dSLoGin <https://www.gnu.org/licenses/>. */ 18*5c0de15dSLoGin 19*5c0de15dSLoGin #ifndef _ELF_H 20*5c0de15dSLoGin #define _ELF_H 1 21*5c0de15dSLoGin 22*5c0de15dSLoGin /* Standard ELF types. */ 23*5c0de15dSLoGin 24*5c0de15dSLoGin #include <stdint.h> 25*5c0de15dSLoGin 26*5c0de15dSLoGin /* Type for a 16-bit quantity. */ 27*5c0de15dSLoGin typedef uint16_t Elf32_Half; 28*5c0de15dSLoGin typedef uint16_t Elf64_Half; 29*5c0de15dSLoGin 30*5c0de15dSLoGin /* Types for signed and unsigned 32-bit quantities. */ 31*5c0de15dSLoGin typedef uint32_t Elf32_Word; 32*5c0de15dSLoGin typedef int32_t Elf32_Sword; 33*5c0de15dSLoGin typedef uint32_t Elf64_Word; 34*5c0de15dSLoGin typedef int32_t Elf64_Sword; 35*5c0de15dSLoGin 36*5c0de15dSLoGin /* Types for signed and unsigned 64-bit quantities. */ 37*5c0de15dSLoGin typedef uint64_t Elf32_Xword; 38*5c0de15dSLoGin typedef int64_t Elf32_Sxword; 39*5c0de15dSLoGin typedef uint64_t Elf64_Xword; 40*5c0de15dSLoGin typedef int64_t Elf64_Sxword; 41*5c0de15dSLoGin 42*5c0de15dSLoGin /* Type of addresses. */ 43*5c0de15dSLoGin typedef uint32_t Elf32_Addr; 44*5c0de15dSLoGin typedef uint64_t Elf64_Addr; 45*5c0de15dSLoGin 46*5c0de15dSLoGin /* Type of file offsets. */ 47*5c0de15dSLoGin typedef uint32_t Elf32_Off; 48*5c0de15dSLoGin typedef uint64_t Elf64_Off; 49*5c0de15dSLoGin 50*5c0de15dSLoGin /* Type for section indices, which are 16-bit quantities. */ 51*5c0de15dSLoGin typedef uint16_t Elf32_Section; 52*5c0de15dSLoGin typedef uint16_t Elf64_Section; 53*5c0de15dSLoGin 54*5c0de15dSLoGin /* Type for version symbol information. */ 55*5c0de15dSLoGin typedef Elf32_Half Elf32_Versym; 56*5c0de15dSLoGin typedef Elf64_Half Elf64_Versym; 57*5c0de15dSLoGin 58*5c0de15dSLoGin 59*5c0de15dSLoGin /* The ELF file header. This appears at the start of every ELF file. */ 60*5c0de15dSLoGin 61*5c0de15dSLoGin #define EI_NIDENT (16) 62*5c0de15dSLoGin 63*5c0de15dSLoGin typedef struct 64*5c0de15dSLoGin { 65*5c0de15dSLoGin unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ 66*5c0de15dSLoGin Elf32_Half e_type; /* Object file type */ 67*5c0de15dSLoGin Elf32_Half e_machine; /* Architecture */ 68*5c0de15dSLoGin Elf32_Word e_version; /* Object file version */ 69*5c0de15dSLoGin Elf32_Addr e_entry; /* Entry point virtual address */ 70*5c0de15dSLoGin Elf32_Off e_phoff; /* Program header table file offset */ 71*5c0de15dSLoGin Elf32_Off e_shoff; /* Section header table file offset */ 72*5c0de15dSLoGin Elf32_Word e_flags; /* Processor-specific flags */ 73*5c0de15dSLoGin Elf32_Half e_ehsize; /* ELF header size in bytes */ 74*5c0de15dSLoGin Elf32_Half e_phentsize; /* Program header table entry size */ 75*5c0de15dSLoGin Elf32_Half e_phnum; /* Program header table entry count */ 76*5c0de15dSLoGin Elf32_Half e_shentsize; /* Section header table entry size */ 77*5c0de15dSLoGin Elf32_Half e_shnum; /* Section header table entry count */ 78*5c0de15dSLoGin Elf32_Half e_shstrndx; /* Section header string table index */ 79*5c0de15dSLoGin } Elf32_Ehdr; 80*5c0de15dSLoGin 81*5c0de15dSLoGin typedef struct 82*5c0de15dSLoGin { 83*5c0de15dSLoGin unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ 84*5c0de15dSLoGin Elf64_Half e_type; /* Object file type */ 85*5c0de15dSLoGin Elf64_Half e_machine; /* Architecture */ 86*5c0de15dSLoGin Elf64_Word e_version; /* Object file version */ 87*5c0de15dSLoGin Elf64_Addr e_entry; /* Entry point virtual address */ 88*5c0de15dSLoGin Elf64_Off e_phoff; /* Program header table file offset */ 89*5c0de15dSLoGin Elf64_Off e_shoff; /* Section header table file offset */ 90*5c0de15dSLoGin Elf64_Word e_flags; /* Processor-specific flags */ 91*5c0de15dSLoGin Elf64_Half e_ehsize; /* ELF header size in bytes */ 92*5c0de15dSLoGin Elf64_Half e_phentsize; /* Program header table entry size */ 93*5c0de15dSLoGin Elf64_Half e_phnum; /* Program header table entry count */ 94*5c0de15dSLoGin Elf64_Half e_shentsize; /* Section header table entry size */ 95*5c0de15dSLoGin Elf64_Half e_shnum; /* Section header table entry count */ 96*5c0de15dSLoGin Elf64_Half e_shstrndx; /* Section header string table index */ 97*5c0de15dSLoGin } Elf64_Ehdr; 98*5c0de15dSLoGin 99*5c0de15dSLoGin /* Fields in the e_ident array. The EI_* macros are indices into the 100*5c0de15dSLoGin array. The macros under each EI_* macro are the values the byte 101*5c0de15dSLoGin may have. */ 102*5c0de15dSLoGin 103*5c0de15dSLoGin #define EI_MAG0 0 /* File identification byte 0 index */ 104*5c0de15dSLoGin #define ELFMAG0 0x7f /* Magic number byte 0 */ 105*5c0de15dSLoGin 106*5c0de15dSLoGin #define EI_MAG1 1 /* File identification byte 1 index */ 107*5c0de15dSLoGin #define ELFMAG1 'E' /* Magic number byte 1 */ 108*5c0de15dSLoGin 109*5c0de15dSLoGin #define EI_MAG2 2 /* File identification byte 2 index */ 110*5c0de15dSLoGin #define ELFMAG2 'L' /* Magic number byte 2 */ 111*5c0de15dSLoGin 112*5c0de15dSLoGin #define EI_MAG3 3 /* File identification byte 3 index */ 113*5c0de15dSLoGin #define ELFMAG3 'F' /* Magic number byte 3 */ 114*5c0de15dSLoGin 115*5c0de15dSLoGin /* Conglomeration of the identification bytes, for easy testing as a word. */ 116*5c0de15dSLoGin #define ELFMAG "\177ELF" 117*5c0de15dSLoGin #define SELFMAG 4 118*5c0de15dSLoGin 119*5c0de15dSLoGin #define EI_CLASS 4 /* File class byte index */ 120*5c0de15dSLoGin #define ELFCLASSNONE 0 /* Invalid class */ 121*5c0de15dSLoGin #define ELFCLASS32 1 /* 32-bit objects */ 122*5c0de15dSLoGin #define ELFCLASS64 2 /* 64-bit objects */ 123*5c0de15dSLoGin #define ELFCLASSNUM 3 124*5c0de15dSLoGin 125*5c0de15dSLoGin #define EI_DATA 5 /* Data encoding byte index */ 126*5c0de15dSLoGin #define ELFDATANONE 0 /* Invalid data encoding */ 127*5c0de15dSLoGin #define ELFDATA2LSB 1 /* 2's complement, little endian */ 128*5c0de15dSLoGin #define ELFDATA2MSB 2 /* 2's complement, big endian */ 129*5c0de15dSLoGin #define ELFDATANUM 3 130*5c0de15dSLoGin 131*5c0de15dSLoGin #define EI_VERSION 6 /* File version byte index */ 132*5c0de15dSLoGin /* Value must be EV_CURRENT */ 133*5c0de15dSLoGin 134*5c0de15dSLoGin #define EI_OSABI 7 /* OS ABI identification */ 135*5c0de15dSLoGin #define ELFOSABI_NONE 0 /* UNIX System V ABI */ 136*5c0de15dSLoGin #define ELFOSABI_SYSV 0 /* Alias. */ 137*5c0de15dSLoGin #define ELFOSABI_HPUX 1 /* HP-UX */ 138*5c0de15dSLoGin #define ELFOSABI_NETBSD 2 /* NetBSD. */ 139*5c0de15dSLoGin #define ELFOSABI_GNU 3 /* Object uses GNU ELF extensions. */ 140*5c0de15dSLoGin #define ELFOSABI_LINUX ELFOSABI_GNU /* Compatibility alias. */ 141*5c0de15dSLoGin #define ELFOSABI_SOLARIS 6 /* Sun Solaris. */ 142*5c0de15dSLoGin #define ELFOSABI_AIX 7 /* IBM AIX. */ 143*5c0de15dSLoGin #define ELFOSABI_IRIX 8 /* SGI Irix. */ 144*5c0de15dSLoGin #define ELFOSABI_FREEBSD 9 /* FreeBSD. */ 145*5c0de15dSLoGin #define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX. */ 146*5c0de15dSLoGin #define ELFOSABI_MODESTO 11 /* Novell Modesto. */ 147*5c0de15dSLoGin #define ELFOSABI_OPENBSD 12 /* OpenBSD. */ 148*5c0de15dSLoGin #define ELFOSABI_ARM_AEABI 64 /* ARM EABI */ 149*5c0de15dSLoGin #define ELFOSABI_ARM 97 /* ARM */ 150*5c0de15dSLoGin #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ 151*5c0de15dSLoGin 152*5c0de15dSLoGin #define EI_ABIVERSION 8 /* ABI version */ 153*5c0de15dSLoGin 154*5c0de15dSLoGin #define EI_PAD 9 /* Byte index of padding bytes */ 155*5c0de15dSLoGin 156*5c0de15dSLoGin /* Legal values for e_type (object file type). */ 157*5c0de15dSLoGin 158*5c0de15dSLoGin #define ET_NONE 0 /* No file type */ 159*5c0de15dSLoGin #define ET_REL 1 /* Relocatable file */ 160*5c0de15dSLoGin #define ET_EXEC 2 /* Executable file */ 161*5c0de15dSLoGin #define ET_DYN 3 /* Shared object file */ 162*5c0de15dSLoGin #define ET_CORE 4 /* Core file */ 163*5c0de15dSLoGin #define ET_NUM 5 /* Number of defined types */ 164*5c0de15dSLoGin #define ET_LOOS 0xfe00 /* OS-specific range start */ 165*5c0de15dSLoGin #define ET_HIOS 0xfeff /* OS-specific range end */ 166*5c0de15dSLoGin #define ET_LOPROC 0xff00 /* Processor-specific range start */ 167*5c0de15dSLoGin #define ET_HIPROC 0xffff /* Processor-specific range end */ 168*5c0de15dSLoGin 169*5c0de15dSLoGin /* Legal values for e_machine (architecture). */ 170*5c0de15dSLoGin 171*5c0de15dSLoGin #define EM_NONE 0 /* No machine */ 172*5c0de15dSLoGin #define EM_M32 1 /* AT&T WE 32100 */ 173*5c0de15dSLoGin #define EM_SPARC 2 /* SUN SPARC */ 174*5c0de15dSLoGin #define EM_386 3 /* Intel 80386 */ 175*5c0de15dSLoGin #define EM_68K 4 /* Motorola m68k family */ 176*5c0de15dSLoGin #define EM_88K 5 /* Motorola m88k family */ 177*5c0de15dSLoGin #define EM_IAMCU 6 /* Intel MCU */ 178*5c0de15dSLoGin #define EM_860 7 /* Intel 80860 */ 179*5c0de15dSLoGin #define EM_MIPS 8 /* MIPS R3000 big-endian */ 180*5c0de15dSLoGin #define EM_S370 9 /* IBM System/370 */ 181*5c0de15dSLoGin #define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */ 182*5c0de15dSLoGin /* reserved 11-14 */ 183*5c0de15dSLoGin #define EM_PARISC 15 /* HPPA */ 184*5c0de15dSLoGin /* reserved 16 */ 185*5c0de15dSLoGin #define EM_VPP500 17 /* Fujitsu VPP500 */ 186*5c0de15dSLoGin #define EM_SPARC32PLUS 18 /* Sun's "v8plus" */ 187*5c0de15dSLoGin #define EM_960 19 /* Intel 80960 */ 188*5c0de15dSLoGin #define EM_PPC 20 /* PowerPC */ 189*5c0de15dSLoGin #define EM_PPC64 21 /* PowerPC 64-bit */ 190*5c0de15dSLoGin #define EM_S390 22 /* IBM S390 */ 191*5c0de15dSLoGin #define EM_SPU 23 /* IBM SPU/SPC */ 192*5c0de15dSLoGin /* reserved 24-35 */ 193*5c0de15dSLoGin #define EM_V800 36 /* NEC V800 series */ 194*5c0de15dSLoGin #define EM_FR20 37 /* Fujitsu FR20 */ 195*5c0de15dSLoGin #define EM_RH32 38 /* TRW RH-32 */ 196*5c0de15dSLoGin #define EM_RCE 39 /* Motorola RCE */ 197*5c0de15dSLoGin #define EM_ARM 40 /* ARM */ 198*5c0de15dSLoGin #define EM_FAKE_ALPHA 41 /* Digital Alpha */ 199*5c0de15dSLoGin #define EM_SH 42 /* Hitachi SH */ 200*5c0de15dSLoGin #define EM_SPARCV9 43 /* SPARC v9 64-bit */ 201*5c0de15dSLoGin #define EM_TRICORE 44 /* Siemens Tricore */ 202*5c0de15dSLoGin #define EM_ARC 45 /* Argonaut RISC Core */ 203*5c0de15dSLoGin #define EM_H8_300 46 /* Hitachi H8/300 */ 204*5c0de15dSLoGin #define EM_H8_300H 47 /* Hitachi H8/300H */ 205*5c0de15dSLoGin #define EM_H8S 48 /* Hitachi H8S */ 206*5c0de15dSLoGin #define EM_H8_500 49 /* Hitachi H8/500 */ 207*5c0de15dSLoGin #define EM_IA_64 50 /* Intel Merced */ 208*5c0de15dSLoGin #define EM_MIPS_X 51 /* Stanford MIPS-X */ 209*5c0de15dSLoGin #define EM_COLDFIRE 52 /* Motorola Coldfire */ 210*5c0de15dSLoGin #define EM_68HC12 53 /* Motorola M68HC12 */ 211*5c0de15dSLoGin #define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */ 212*5c0de15dSLoGin #define EM_PCP 55 /* Siemens PCP */ 213*5c0de15dSLoGin #define EM_NCPU 56 /* Sony nCPU embeeded RISC */ 214*5c0de15dSLoGin #define EM_NDR1 57 /* Denso NDR1 microprocessor */ 215*5c0de15dSLoGin #define EM_STARCORE 58 /* Motorola Start*Core processor */ 216*5c0de15dSLoGin #define EM_ME16 59 /* Toyota ME16 processor */ 217*5c0de15dSLoGin #define EM_ST100 60 /* STMicroelectronic ST100 processor */ 218*5c0de15dSLoGin #define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam */ 219*5c0de15dSLoGin #define EM_X86_64 62 /* AMD x86-64 architecture */ 220*5c0de15dSLoGin #define EM_PDSP 63 /* Sony DSP Processor */ 221*5c0de15dSLoGin #define EM_PDP10 64 /* Digital PDP-10 */ 222*5c0de15dSLoGin #define EM_PDP11 65 /* Digital PDP-11 */ 223*5c0de15dSLoGin #define EM_FX66 66 /* Siemens FX66 microcontroller */ 224*5c0de15dSLoGin #define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ 225*5c0de15dSLoGin #define EM_ST7 68 /* STmicroelectronics ST7 8 bit mc */ 226*5c0de15dSLoGin #define EM_68HC16 69 /* Motorola MC68HC16 microcontroller */ 227*5c0de15dSLoGin #define EM_68HC11 70 /* Motorola MC68HC11 microcontroller */ 228*5c0de15dSLoGin #define EM_68HC08 71 /* Motorola MC68HC08 microcontroller */ 229*5c0de15dSLoGin #define EM_68HC05 72 /* Motorola MC68HC05 microcontroller */ 230*5c0de15dSLoGin #define EM_SVX 73 /* Silicon Graphics SVx */ 231*5c0de15dSLoGin #define EM_ST19 74 /* STMicroelectronics ST19 8 bit mc */ 232*5c0de15dSLoGin #define EM_VAX 75 /* Digital VAX */ 233*5c0de15dSLoGin #define EM_CRIS 76 /* Axis Communications 32-bit emb.proc */ 234*5c0de15dSLoGin #define EM_JAVELIN 77 /* Infineon Technologies 32-bit emb.proc */ 235*5c0de15dSLoGin #define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ 236*5c0de15dSLoGin #define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ 237*5c0de15dSLoGin #define EM_MMIX 80 /* Donald Knuth's educational 64-bit proc */ 238*5c0de15dSLoGin #define EM_HUANY 81 /* Harvard University machine-independent object files */ 239*5c0de15dSLoGin #define EM_PRISM 82 /* SiTera Prism */ 240*5c0de15dSLoGin #define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ 241*5c0de15dSLoGin #define EM_FR30 84 /* Fujitsu FR30 */ 242*5c0de15dSLoGin #define EM_D10V 85 /* Mitsubishi D10V */ 243*5c0de15dSLoGin #define EM_D30V 86 /* Mitsubishi D30V */ 244*5c0de15dSLoGin #define EM_V850 87 /* NEC v850 */ 245*5c0de15dSLoGin #define EM_M32R 88 /* Mitsubishi M32R */ 246*5c0de15dSLoGin #define EM_MN10300 89 /* Matsushita MN10300 */ 247*5c0de15dSLoGin #define EM_MN10200 90 /* Matsushita MN10200 */ 248*5c0de15dSLoGin #define EM_PJ 91 /* picoJava */ 249*5c0de15dSLoGin #define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ 250*5c0de15dSLoGin #define EM_ARC_COMPACT 93 /* ARC International ARCompact */ 251*5c0de15dSLoGin #define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ 252*5c0de15dSLoGin #define EM_VIDEOCORE 95 /* Alphamosaic VideoCore */ 253*5c0de15dSLoGin #define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Proc */ 254*5c0de15dSLoGin #define EM_NS32K 97 /* National Semi. 32000 */ 255*5c0de15dSLoGin #define EM_TPC 98 /* Tenor Network TPC */ 256*5c0de15dSLoGin #define EM_SNP1K 99 /* Trebia SNP 1000 */ 257*5c0de15dSLoGin #define EM_ST200 100 /* STMicroelectronics ST200 */ 258*5c0de15dSLoGin #define EM_IP2K 101 /* Ubicom IP2xxx */ 259*5c0de15dSLoGin #define EM_MAX 102 /* MAX processor */ 260*5c0de15dSLoGin #define EM_CR 103 /* National Semi. CompactRISC */ 261*5c0de15dSLoGin #define EM_F2MC16 104 /* Fujitsu F2MC16 */ 262*5c0de15dSLoGin #define EM_MSP430 105 /* Texas Instruments msp430 */ 263*5c0de15dSLoGin #define EM_BLACKFIN 106 /* Analog Devices Blackfin DSP */ 264*5c0de15dSLoGin #define EM_SE_C33 107 /* Seiko Epson S1C33 family */ 265*5c0de15dSLoGin #define EM_SEP 108 /* Sharp embedded microprocessor */ 266*5c0de15dSLoGin #define EM_ARCA 109 /* Arca RISC */ 267*5c0de15dSLoGin #define EM_UNICORE 110 /* PKU-Unity & MPRC Peking Uni. mc series */ 268*5c0de15dSLoGin #define EM_EXCESS 111 /* eXcess configurable cpu */ 269*5c0de15dSLoGin #define EM_DXP 112 /* Icera Semi. Deep Execution Processor */ 270*5c0de15dSLoGin #define EM_ALTERA_NIOS2 113 /* Altera Nios II */ 271*5c0de15dSLoGin #define EM_CRX 114 /* National Semi. CompactRISC CRX */ 272*5c0de15dSLoGin #define EM_XGATE 115 /* Motorola XGATE */ 273*5c0de15dSLoGin #define EM_C166 116 /* Infineon C16x/XC16x */ 274*5c0de15dSLoGin #define EM_M16C 117 /* Renesas M16C */ 275*5c0de15dSLoGin #define EM_DSPIC30F 118 /* Microchip Technology dsPIC30F */ 276*5c0de15dSLoGin #define EM_CE 119 /* Freescale Communication Engine RISC */ 277*5c0de15dSLoGin #define EM_M32C 120 /* Renesas M32C */ 278*5c0de15dSLoGin /* reserved 121-130 */ 279*5c0de15dSLoGin #define EM_TSK3000 131 /* Altium TSK3000 */ 280*5c0de15dSLoGin #define EM_RS08 132 /* Freescale RS08 */ 281*5c0de15dSLoGin #define EM_SHARC 133 /* Analog Devices SHARC family */ 282*5c0de15dSLoGin #define EM_ECOG2 134 /* Cyan Technology eCOG2 */ 283*5c0de15dSLoGin #define EM_SCORE7 135 /* Sunplus S+core7 RISC */ 284*5c0de15dSLoGin #define EM_DSP24 136 /* New Japan Radio (NJR) 24-bit DSP */ 285*5c0de15dSLoGin #define EM_VIDEOCORE3 137 /* Broadcom VideoCore III */ 286*5c0de15dSLoGin #define EM_LATTICEMICO32 138 /* RISC for Lattice FPGA */ 287*5c0de15dSLoGin #define EM_SE_C17 139 /* Seiko Epson C17 */ 288*5c0de15dSLoGin #define EM_TI_C6000 140 /* Texas Instruments TMS320C6000 DSP */ 289*5c0de15dSLoGin #define EM_TI_C2000 141 /* Texas Instruments TMS320C2000 DSP */ 290*5c0de15dSLoGin #define EM_TI_C5500 142 /* Texas Instruments TMS320C55x DSP */ 291*5c0de15dSLoGin #define EM_TI_ARP32 143 /* Texas Instruments App. Specific RISC */ 292*5c0de15dSLoGin #define EM_TI_PRU 144 /* Texas Instruments Prog. Realtime Unit */ 293*5c0de15dSLoGin /* reserved 145-159 */ 294*5c0de15dSLoGin #define EM_MMDSP_PLUS 160 /* STMicroelectronics 64bit VLIW DSP */ 295*5c0de15dSLoGin #define EM_CYPRESS_M8C 161 /* Cypress M8C */ 296*5c0de15dSLoGin #define EM_R32C 162 /* Renesas R32C */ 297*5c0de15dSLoGin #define EM_TRIMEDIA 163 /* NXP Semi. TriMedia */ 298*5c0de15dSLoGin #define EM_QDSP6 164 /* QUALCOMM DSP6 */ 299*5c0de15dSLoGin #define EM_8051 165 /* Intel 8051 and variants */ 300*5c0de15dSLoGin #define EM_STXP7X 166 /* STMicroelectronics STxP7x */ 301*5c0de15dSLoGin #define EM_NDS32 167 /* Andes Tech. compact code emb. RISC */ 302*5c0de15dSLoGin #define EM_ECOG1X 168 /* Cyan Technology eCOG1X */ 303*5c0de15dSLoGin #define EM_MAXQ30 169 /* Dallas Semi. MAXQ30 mc */ 304*5c0de15dSLoGin #define EM_XIMO16 170 /* New Japan Radio (NJR) 16-bit DSP */ 305*5c0de15dSLoGin #define EM_MANIK 171 /* M2000 Reconfigurable RISC */ 306*5c0de15dSLoGin #define EM_CRAYNV2 172 /* Cray NV2 vector architecture */ 307*5c0de15dSLoGin #define EM_RX 173 /* Renesas RX */ 308*5c0de15dSLoGin #define EM_METAG 174 /* Imagination Tech. META */ 309*5c0de15dSLoGin #define EM_MCST_ELBRUS 175 /* MCST Elbrus */ 310*5c0de15dSLoGin #define EM_ECOG16 176 /* Cyan Technology eCOG16 */ 311*5c0de15dSLoGin #define EM_CR16 177 /* National Semi. CompactRISC CR16 */ 312*5c0de15dSLoGin #define EM_ETPU 178 /* Freescale Extended Time Processing Unit */ 313*5c0de15dSLoGin #define EM_SLE9X 179 /* Infineon Tech. SLE9X */ 314*5c0de15dSLoGin #define EM_L10M 180 /* Intel L10M */ 315*5c0de15dSLoGin #define EM_K10M 181 /* Intel K10M */ 316*5c0de15dSLoGin /* reserved 182 */ 317*5c0de15dSLoGin #define EM_AARCH64 183 /* ARM AARCH64 */ 318*5c0de15dSLoGin /* reserved 184 */ 319*5c0de15dSLoGin #define EM_AVR32 185 /* Amtel 32-bit microprocessor */ 320*5c0de15dSLoGin #define EM_STM8 186 /* STMicroelectronics STM8 */ 321*5c0de15dSLoGin #define EM_TILE64 187 /* Tilera TILE64 */ 322*5c0de15dSLoGin #define EM_TILEPRO 188 /* Tilera TILEPro */ 323*5c0de15dSLoGin #define EM_MICROBLAZE 189 /* Xilinx MicroBlaze */ 324*5c0de15dSLoGin #define EM_CUDA 190 /* NVIDIA CUDA */ 325*5c0de15dSLoGin #define EM_TILEGX 191 /* Tilera TILE-Gx */ 326*5c0de15dSLoGin #define EM_CLOUDSHIELD 192 /* CloudShield */ 327*5c0de15dSLoGin #define EM_COREA_1ST 193 /* KIPO-KAIST Core-A 1st gen. */ 328*5c0de15dSLoGin #define EM_COREA_2ND 194 /* KIPO-KAIST Core-A 2nd gen. */ 329*5c0de15dSLoGin #define EM_ARCV2 195 /* Synopsys ARCv2 ISA. */ 330*5c0de15dSLoGin #define EM_OPEN8 196 /* Open8 RISC */ 331*5c0de15dSLoGin #define EM_RL78 197 /* Renesas RL78 */ 332*5c0de15dSLoGin #define EM_VIDEOCORE5 198 /* Broadcom VideoCore V */ 333*5c0de15dSLoGin #define EM_78KOR 199 /* Renesas 78KOR */ 334*5c0de15dSLoGin #define EM_56800EX 200 /* Freescale 56800EX DSC */ 335*5c0de15dSLoGin #define EM_BA1 201 /* Beyond BA1 */ 336*5c0de15dSLoGin #define EM_BA2 202 /* Beyond BA2 */ 337*5c0de15dSLoGin #define EM_XCORE 203 /* XMOS xCORE */ 338*5c0de15dSLoGin #define EM_MCHP_PIC 204 /* Microchip 8-bit PIC(r) */ 339*5c0de15dSLoGin #define EM_INTELGT 205 /* Intel Graphics Technology */ 340*5c0de15dSLoGin /* reserved 206-209 */ 341*5c0de15dSLoGin #define EM_KM32 210 /* KM211 KM32 */ 342*5c0de15dSLoGin #define EM_KMX32 211 /* KM211 KMX32 */ 343*5c0de15dSLoGin #define EM_EMX16 212 /* KM211 KMX16 */ 344*5c0de15dSLoGin #define EM_EMX8 213 /* KM211 KMX8 */ 345*5c0de15dSLoGin #define EM_KVARC 214 /* KM211 KVARC */ 346*5c0de15dSLoGin #define EM_CDP 215 /* Paneve CDP */ 347*5c0de15dSLoGin #define EM_COGE 216 /* Cognitive Smart Memory Processor */ 348*5c0de15dSLoGin #define EM_COOL 217 /* Bluechip CoolEngine */ 349*5c0de15dSLoGin #define EM_NORC 218 /* Nanoradio Optimized RISC */ 350*5c0de15dSLoGin #define EM_CSR_KALIMBA 219 /* CSR Kalimba */ 351*5c0de15dSLoGin #define EM_Z80 220 /* Zilog Z80 */ 352*5c0de15dSLoGin #define EM_VISIUM 221 /* Controls and Data Services VISIUMcore */ 353*5c0de15dSLoGin #define EM_FT32 222 /* FTDI Chip FT32 */ 354*5c0de15dSLoGin #define EM_MOXIE 223 /* Moxie processor */ 355*5c0de15dSLoGin #define EM_AMDGPU 224 /* AMD GPU */ 356*5c0de15dSLoGin /* reserved 225-242 */ 357*5c0de15dSLoGin #define EM_RISCV 243 /* RISC-V */ 358*5c0de15dSLoGin 359*5c0de15dSLoGin #define EM_BPF 247 /* Linux BPF -- in-kernel virtual machine */ 360*5c0de15dSLoGin #define EM_CSKY 252 /* C-SKY */ 361*5c0de15dSLoGin 362*5c0de15dSLoGin #define EM_NUM 253 363*5c0de15dSLoGin 364*5c0de15dSLoGin /* Old spellings/synonyms. */ 365*5c0de15dSLoGin 366*5c0de15dSLoGin #define EM_ARC_A5 EM_ARC_COMPACT 367*5c0de15dSLoGin 368*5c0de15dSLoGin /* If it is necessary to assign new unofficial EM_* values, please 369*5c0de15dSLoGin pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the 370*5c0de15dSLoGin chances of collision with official or non-GNU unofficial values. */ 371*5c0de15dSLoGin 372*5c0de15dSLoGin #define EM_ALPHA 0x9026 373*5c0de15dSLoGin 374*5c0de15dSLoGin /* Legal values for e_version (version). */ 375*5c0de15dSLoGin 376*5c0de15dSLoGin #define EV_NONE 0 /* Invalid ELF version */ 377*5c0de15dSLoGin #define EV_CURRENT 1 /* Current version */ 378*5c0de15dSLoGin #define EV_NUM 2 379*5c0de15dSLoGin 380*5c0de15dSLoGin /* Section header. */ 381*5c0de15dSLoGin 382*5c0de15dSLoGin typedef struct 383*5c0de15dSLoGin { 384*5c0de15dSLoGin Elf32_Word sh_name; /* Section name (string tbl index) */ 385*5c0de15dSLoGin Elf32_Word sh_type; /* Section type */ 386*5c0de15dSLoGin Elf32_Word sh_flags; /* Section flags */ 387*5c0de15dSLoGin Elf32_Addr sh_addr; /* Section virtual addr at execution */ 388*5c0de15dSLoGin Elf32_Off sh_offset; /* Section file offset */ 389*5c0de15dSLoGin Elf32_Word sh_size; /* Section size in bytes */ 390*5c0de15dSLoGin Elf32_Word sh_link; /* Link to another section */ 391*5c0de15dSLoGin Elf32_Word sh_info; /* Additional section information */ 392*5c0de15dSLoGin Elf32_Word sh_addralign; /* Section alignment */ 393*5c0de15dSLoGin Elf32_Word sh_entsize; /* Entry size if section holds table */ 394*5c0de15dSLoGin } Elf32_Shdr; 395*5c0de15dSLoGin 396*5c0de15dSLoGin typedef struct 397*5c0de15dSLoGin { 398*5c0de15dSLoGin Elf64_Word sh_name; /* Section name (string tbl index) */ 399*5c0de15dSLoGin Elf64_Word sh_type; /* Section type */ 400*5c0de15dSLoGin Elf64_Xword sh_flags; /* Section flags */ 401*5c0de15dSLoGin Elf64_Addr sh_addr; /* Section virtual addr at execution */ 402*5c0de15dSLoGin Elf64_Off sh_offset; /* Section file offset */ 403*5c0de15dSLoGin Elf64_Xword sh_size; /* Section size in bytes */ 404*5c0de15dSLoGin Elf64_Word sh_link; /* Link to another section */ 405*5c0de15dSLoGin Elf64_Word sh_info; /* Additional section information */ 406*5c0de15dSLoGin Elf64_Xword sh_addralign; /* Section alignment */ 407*5c0de15dSLoGin Elf64_Xword sh_entsize; /* Entry size if section holds table */ 408*5c0de15dSLoGin } Elf64_Shdr; 409*5c0de15dSLoGin 410*5c0de15dSLoGin /* Special section indices. */ 411*5c0de15dSLoGin 412*5c0de15dSLoGin #define SHN_UNDEF 0 /* Undefined section */ 413*5c0de15dSLoGin #define SHN_LORESERVE 0xff00 /* Start of reserved indices */ 414*5c0de15dSLoGin #define SHN_LOPROC 0xff00 /* Start of processor-specific */ 415*5c0de15dSLoGin #define SHN_BEFORE 0xff00 /* Order section before all others 416*5c0de15dSLoGin (Solaris). */ 417*5c0de15dSLoGin #define SHN_AFTER 0xff01 /* Order section after all others 418*5c0de15dSLoGin (Solaris). */ 419*5c0de15dSLoGin #define SHN_HIPROC 0xff1f /* End of processor-specific */ 420*5c0de15dSLoGin #define SHN_LOOS 0xff20 /* Start of OS-specific */ 421*5c0de15dSLoGin #define SHN_HIOS 0xff3f /* End of OS-specific */ 422*5c0de15dSLoGin #define SHN_ABS 0xfff1 /* Associated symbol is absolute */ 423*5c0de15dSLoGin #define SHN_COMMON 0xfff2 /* Associated symbol is common */ 424*5c0de15dSLoGin #define SHN_XINDEX 0xffff /* Index is in extra table. */ 425*5c0de15dSLoGin #define SHN_HIRESERVE 0xffff /* End of reserved indices */ 426*5c0de15dSLoGin 427*5c0de15dSLoGin /* Legal values for sh_type (section type). */ 428*5c0de15dSLoGin 429*5c0de15dSLoGin #define SHT_NULL 0 /* Section header table entry unused */ 430*5c0de15dSLoGin #define SHT_PROGBITS 1 /* Program data */ 431*5c0de15dSLoGin #define SHT_SYMTAB 2 /* Symbol table */ 432*5c0de15dSLoGin #define SHT_STRTAB 3 /* String table */ 433*5c0de15dSLoGin #define SHT_RELA 4 /* Relocation entries with addends */ 434*5c0de15dSLoGin #define SHT_HASH 5 /* Symbol hash table */ 435*5c0de15dSLoGin #define SHT_DYNAMIC 6 /* Dynamic linking information */ 436*5c0de15dSLoGin #define SHT_NOTE 7 /* Notes */ 437*5c0de15dSLoGin #define SHT_NOBITS 8 /* Program space with no data (bss) */ 438*5c0de15dSLoGin #define SHT_REL 9 /* Relocation entries, no addends */ 439*5c0de15dSLoGin #define SHT_SHLIB 10 /* Reserved */ 440*5c0de15dSLoGin #define SHT_DYNSYM 11 /* Dynamic linker symbol table */ 441*5c0de15dSLoGin #define SHT_INIT_ARRAY 14 /* Array of constructors */ 442*5c0de15dSLoGin #define SHT_FINI_ARRAY 15 /* Array of destructors */ 443*5c0de15dSLoGin #define SHT_PREINIT_ARRAY 16 /* Array of pre-constructors */ 444*5c0de15dSLoGin #define SHT_GROUP 17 /* Section group */ 445*5c0de15dSLoGin #define SHT_SYMTAB_SHNDX 18 /* Extended section indices */ 446*5c0de15dSLoGin #define SHT_NUM 19 /* Number of defined types. */ 447*5c0de15dSLoGin #define SHT_LOOS 0x60000000 /* Start OS-specific. */ 448*5c0de15dSLoGin #define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */ 449*5c0de15dSLoGin #define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */ 450*5c0de15dSLoGin #define SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */ 451*5c0de15dSLoGin #define SHT_CHECKSUM 0x6ffffff8 /* Checksum for DSO content. */ 452*5c0de15dSLoGin #define SHT_LOSUNW 0x6ffffffa /* Sun-specific low bound. */ 453*5c0de15dSLoGin #define SHT_SUNW_move 0x6ffffffa 454*5c0de15dSLoGin #define SHT_SUNW_COMDAT 0x6ffffffb 455*5c0de15dSLoGin #define SHT_SUNW_syminfo 0x6ffffffc 456*5c0de15dSLoGin #define SHT_GNU_verdef 0x6ffffffd /* Version definition section. */ 457*5c0de15dSLoGin #define SHT_GNU_verneed 0x6ffffffe /* Version needs section. */ 458*5c0de15dSLoGin #define SHT_GNU_versym 0x6fffffff /* Version symbol table. */ 459*5c0de15dSLoGin #define SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */ 460*5c0de15dSLoGin #define SHT_HIOS 0x6fffffff /* End OS-specific type */ 461*5c0de15dSLoGin #define SHT_LOPROC 0x70000000 /* Start of processor-specific */ 462*5c0de15dSLoGin #define SHT_HIPROC 0x7fffffff /* End of processor-specific */ 463*5c0de15dSLoGin #define SHT_LOUSER 0x80000000 /* Start of application-specific */ 464*5c0de15dSLoGin #define SHT_HIUSER 0x8fffffff /* End of application-specific */ 465*5c0de15dSLoGin 466*5c0de15dSLoGin /* Legal values for sh_flags (section flags). */ 467*5c0de15dSLoGin 468*5c0de15dSLoGin #define SHF_WRITE (1 << 0) /* Writable */ 469*5c0de15dSLoGin #define SHF_ALLOC (1 << 1) /* Occupies memory during execution */ 470*5c0de15dSLoGin #define SHF_EXECINSTR (1 << 2) /* Executable */ 471*5c0de15dSLoGin #define SHF_MERGE (1 << 4) /* Might be merged */ 472*5c0de15dSLoGin #define SHF_STRINGS (1 << 5) /* Contains nul-terminated strings */ 473*5c0de15dSLoGin #define SHF_INFO_LINK (1 << 6) /* `sh_info' contains SHT index */ 474*5c0de15dSLoGin #define SHF_LINK_ORDER (1 << 7) /* Preserve order after combining */ 475*5c0de15dSLoGin #define SHF_OS_NONCONFORMING (1 << 8) /* Non-standard OS specific handling 476*5c0de15dSLoGin required */ 477*5c0de15dSLoGin #define SHF_GROUP (1 << 9) /* Section is member of a group. */ 478*5c0de15dSLoGin #define SHF_TLS (1 << 10) /* Section hold thread-local data. */ 479*5c0de15dSLoGin #define SHF_COMPRESSED (1 << 11) /* Section with compressed data. */ 480*5c0de15dSLoGin #define SHF_MASKOS 0x0ff00000 /* OS-specific. */ 481*5c0de15dSLoGin #define SHF_MASKPROC 0xf0000000 /* Processor-specific */ 482*5c0de15dSLoGin #define SHF_GNU_RETAIN (1 << 21) /* Not to be GCed by linker. */ 483*5c0de15dSLoGin #define SHF_ORDERED (1 << 30) /* Special ordering requirement 484*5c0de15dSLoGin (Solaris). */ 485*5c0de15dSLoGin #define SHF_EXCLUDE (1U << 31) /* Section is excluded unless 486*5c0de15dSLoGin referenced or allocated (Solaris).*/ 487*5c0de15dSLoGin 488*5c0de15dSLoGin /* Section compression header. Used when SHF_COMPRESSED is set. */ 489*5c0de15dSLoGin 490*5c0de15dSLoGin typedef struct 491*5c0de15dSLoGin { 492*5c0de15dSLoGin Elf32_Word ch_type; /* Compression format. */ 493*5c0de15dSLoGin Elf32_Word ch_size; /* Uncompressed data size. */ 494*5c0de15dSLoGin Elf32_Word ch_addralign; /* Uncompressed data alignment. */ 495*5c0de15dSLoGin } Elf32_Chdr; 496*5c0de15dSLoGin 497*5c0de15dSLoGin typedef struct 498*5c0de15dSLoGin { 499*5c0de15dSLoGin Elf64_Word ch_type; /* Compression format. */ 500*5c0de15dSLoGin Elf64_Word ch_reserved; 501*5c0de15dSLoGin Elf64_Xword ch_size; /* Uncompressed data size. */ 502*5c0de15dSLoGin Elf64_Xword ch_addralign; /* Uncompressed data alignment. */ 503*5c0de15dSLoGin } Elf64_Chdr; 504*5c0de15dSLoGin 505*5c0de15dSLoGin /* Legal values for ch_type (compression algorithm). */ 506*5c0de15dSLoGin #define ELFCOMPRESS_ZLIB 1 /* ZLIB/DEFLATE algorithm. */ 507*5c0de15dSLoGin #define ELFCOMPRESS_LOOS 0x60000000 /* Start of OS-specific. */ 508*5c0de15dSLoGin #define ELFCOMPRESS_HIOS 0x6fffffff /* End of OS-specific. */ 509*5c0de15dSLoGin #define ELFCOMPRESS_LOPROC 0x70000000 /* Start of processor-specific. */ 510*5c0de15dSLoGin #define ELFCOMPRESS_HIPROC 0x7fffffff /* End of processor-specific. */ 511*5c0de15dSLoGin 512*5c0de15dSLoGin /* Section group handling. */ 513*5c0de15dSLoGin #define GRP_COMDAT 0x1 /* Mark group as COMDAT. */ 514*5c0de15dSLoGin 515*5c0de15dSLoGin /* Symbol table entry. */ 516*5c0de15dSLoGin 517*5c0de15dSLoGin typedef struct 518*5c0de15dSLoGin { 519*5c0de15dSLoGin Elf32_Word st_name; /* Symbol name (string tbl index) */ 520*5c0de15dSLoGin Elf32_Addr st_value; /* Symbol value */ 521*5c0de15dSLoGin Elf32_Word st_size; /* Symbol size */ 522*5c0de15dSLoGin unsigned char st_info; /* Symbol type and binding */ 523*5c0de15dSLoGin unsigned char st_other; /* Symbol visibility */ 524*5c0de15dSLoGin Elf32_Section st_shndx; /* Section index */ 525*5c0de15dSLoGin } Elf32_Sym; 526*5c0de15dSLoGin 527*5c0de15dSLoGin typedef struct 528*5c0de15dSLoGin { 529*5c0de15dSLoGin Elf64_Word st_name; /* Symbol name (string tbl index) */ 530*5c0de15dSLoGin unsigned char st_info; /* Symbol type and binding */ 531*5c0de15dSLoGin unsigned char st_other; /* Symbol visibility */ 532*5c0de15dSLoGin Elf64_Section st_shndx; /* Section index */ 533*5c0de15dSLoGin Elf64_Addr st_value; /* Symbol value */ 534*5c0de15dSLoGin Elf64_Xword st_size; /* Symbol size */ 535*5c0de15dSLoGin } Elf64_Sym; 536*5c0de15dSLoGin 537*5c0de15dSLoGin /* The syminfo section if available contains additional information about 538*5c0de15dSLoGin every dynamic symbol. */ 539*5c0de15dSLoGin 540*5c0de15dSLoGin typedef struct 541*5c0de15dSLoGin { 542*5c0de15dSLoGin Elf32_Half si_boundto; /* Direct bindings, symbol bound to */ 543*5c0de15dSLoGin Elf32_Half si_flags; /* Per symbol flags */ 544*5c0de15dSLoGin } Elf32_Syminfo; 545*5c0de15dSLoGin 546*5c0de15dSLoGin typedef struct 547*5c0de15dSLoGin { 548*5c0de15dSLoGin Elf64_Half si_boundto; /* Direct bindings, symbol bound to */ 549*5c0de15dSLoGin Elf64_Half si_flags; /* Per symbol flags */ 550*5c0de15dSLoGin } Elf64_Syminfo; 551*5c0de15dSLoGin 552*5c0de15dSLoGin /* Possible values for si_boundto. */ 553*5c0de15dSLoGin #define SYMINFO_BT_SELF 0xffff /* Symbol bound to self */ 554*5c0de15dSLoGin #define SYMINFO_BT_PARENT 0xfffe /* Symbol bound to parent */ 555*5c0de15dSLoGin #define SYMINFO_BT_LOWRESERVE 0xff00 /* Beginning of reserved entries */ 556*5c0de15dSLoGin 557*5c0de15dSLoGin /* Possible bitmasks for si_flags. */ 558*5c0de15dSLoGin #define SYMINFO_FLG_DIRECT 0x0001 /* Direct bound symbol */ 559*5c0de15dSLoGin #define SYMINFO_FLG_PASSTHRU 0x0002 /* Pass-thru symbol for translator */ 560*5c0de15dSLoGin #define SYMINFO_FLG_COPY 0x0004 /* Symbol is a copy-reloc */ 561*5c0de15dSLoGin #define SYMINFO_FLG_LAZYLOAD 0x0008 /* Symbol bound to object to be lazy 562*5c0de15dSLoGin loaded */ 563*5c0de15dSLoGin /* Syminfo version values. */ 564*5c0de15dSLoGin #define SYMINFO_NONE 0 565*5c0de15dSLoGin #define SYMINFO_CURRENT 1 566*5c0de15dSLoGin #define SYMINFO_NUM 2 567*5c0de15dSLoGin 568*5c0de15dSLoGin 569*5c0de15dSLoGin /* How to extract and insert information held in the st_info field. */ 570*5c0de15dSLoGin 571*5c0de15dSLoGin #define ELF32_ST_BIND(val) (((unsigned char) (val)) >> 4) 572*5c0de15dSLoGin #define ELF32_ST_TYPE(val) ((val) & 0xf) 573*5c0de15dSLoGin #define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf)) 574*5c0de15dSLoGin 575*5c0de15dSLoGin /* Both Elf32_Sym and Elf64_Sym use the same one-byte st_info field. */ 576*5c0de15dSLoGin #define ELF64_ST_BIND(val) ELF32_ST_BIND (val) 577*5c0de15dSLoGin #define ELF64_ST_TYPE(val) ELF32_ST_TYPE (val) 578*5c0de15dSLoGin #define ELF64_ST_INFO(bind, type) ELF32_ST_INFO ((bind), (type)) 579*5c0de15dSLoGin 580*5c0de15dSLoGin /* Legal values for ST_BIND subfield of st_info (symbol binding). */ 581*5c0de15dSLoGin 582*5c0de15dSLoGin #define STB_LOCAL 0 /* Local symbol */ 583*5c0de15dSLoGin #define STB_GLOBAL 1 /* Global symbol */ 584*5c0de15dSLoGin #define STB_WEAK 2 /* Weak symbol */ 585*5c0de15dSLoGin #define STB_NUM 3 /* Number of defined types. */ 586*5c0de15dSLoGin #define STB_LOOS 10 /* Start of OS-specific */ 587*5c0de15dSLoGin #define STB_GNU_UNIQUE 10 /* Unique symbol. */ 588*5c0de15dSLoGin #define STB_HIOS 12 /* End of OS-specific */ 589*5c0de15dSLoGin #define STB_LOPROC 13 /* Start of processor-specific */ 590*5c0de15dSLoGin #define STB_HIPROC 15 /* End of processor-specific */ 591*5c0de15dSLoGin 592*5c0de15dSLoGin /* Legal values for ST_TYPE subfield of st_info (symbol type). */ 593*5c0de15dSLoGin 594*5c0de15dSLoGin #define STT_NOTYPE 0 /* Symbol type is unspecified */ 595*5c0de15dSLoGin #define STT_OBJECT 1 /* Symbol is a data object */ 596*5c0de15dSLoGin #define STT_FUNC 2 /* Symbol is a code object */ 597*5c0de15dSLoGin #define STT_SECTION 3 /* Symbol associated with a section */ 598*5c0de15dSLoGin #define STT_FILE 4 /* Symbol's name is file name */ 599*5c0de15dSLoGin #define STT_COMMON 5 /* Symbol is a common data object */ 600*5c0de15dSLoGin #define STT_TLS 6 /* Symbol is thread-local data object*/ 601*5c0de15dSLoGin #define STT_NUM 7 /* Number of defined types. */ 602*5c0de15dSLoGin #define STT_LOOS 10 /* Start of OS-specific */ 603*5c0de15dSLoGin #define STT_GNU_IFUNC 10 /* Symbol is indirect code object */ 604*5c0de15dSLoGin #define STT_HIOS 12 /* End of OS-specific */ 605*5c0de15dSLoGin #define STT_LOPROC 13 /* Start of processor-specific */ 606*5c0de15dSLoGin #define STT_HIPROC 15 /* End of processor-specific */ 607*5c0de15dSLoGin 608*5c0de15dSLoGin 609*5c0de15dSLoGin /* Symbol table indices are found in the hash buckets and chain table 610*5c0de15dSLoGin of a symbol hash table section. This special index value indicates 611*5c0de15dSLoGin the end of a chain, meaning no further symbols are found in that bucket. */ 612*5c0de15dSLoGin 613*5c0de15dSLoGin #define STN_UNDEF 0 /* End of a chain. */ 614*5c0de15dSLoGin 615*5c0de15dSLoGin 616*5c0de15dSLoGin /* How to extract and insert information held in the st_other field. */ 617*5c0de15dSLoGin 618*5c0de15dSLoGin #define ELF32_ST_VISIBILITY(o) ((o) & 0x03) 619*5c0de15dSLoGin 620*5c0de15dSLoGin /* For ELF64 the definitions are the same. */ 621*5c0de15dSLoGin #define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) 622*5c0de15dSLoGin 623*5c0de15dSLoGin /* Symbol visibility specification encoded in the st_other field. */ 624*5c0de15dSLoGin #define STV_DEFAULT 0 /* Default symbol visibility rules */ 625*5c0de15dSLoGin #define STV_INTERNAL 1 /* Processor specific hidden class */ 626*5c0de15dSLoGin #define STV_HIDDEN 2 /* Sym unavailable in other modules */ 627*5c0de15dSLoGin #define STV_PROTECTED 3 /* Not preemptible, not exported */ 628*5c0de15dSLoGin 629*5c0de15dSLoGin 630*5c0de15dSLoGin /* Relocation table entry without addend (in section of type SHT_REL). */ 631*5c0de15dSLoGin 632*5c0de15dSLoGin typedef struct 633*5c0de15dSLoGin { 634*5c0de15dSLoGin Elf32_Addr r_offset; /* Address */ 635*5c0de15dSLoGin Elf32_Word r_info; /* Relocation type and symbol index */ 636*5c0de15dSLoGin } Elf32_Rel; 637*5c0de15dSLoGin 638*5c0de15dSLoGin /* I have seen two different definitions of the Elf64_Rel and 639*5c0de15dSLoGin Elf64_Rela structures, so we'll leave them out until Novell (or 640*5c0de15dSLoGin whoever) gets their act together. */ 641*5c0de15dSLoGin /* The following, at least, is used on Sparc v9, MIPS, and Alpha. */ 642*5c0de15dSLoGin 643*5c0de15dSLoGin typedef struct 644*5c0de15dSLoGin { 645*5c0de15dSLoGin Elf64_Addr r_offset; /* Address */ 646*5c0de15dSLoGin Elf64_Xword r_info; /* Relocation type and symbol index */ 647*5c0de15dSLoGin } Elf64_Rel; 648*5c0de15dSLoGin 649*5c0de15dSLoGin /* Relocation table entry with addend (in section of type SHT_RELA). */ 650*5c0de15dSLoGin 651*5c0de15dSLoGin typedef struct 652*5c0de15dSLoGin { 653*5c0de15dSLoGin Elf32_Addr r_offset; /* Address */ 654*5c0de15dSLoGin Elf32_Word r_info; /* Relocation type and symbol index */ 655*5c0de15dSLoGin Elf32_Sword r_addend; /* Addend */ 656*5c0de15dSLoGin } Elf32_Rela; 657*5c0de15dSLoGin 658*5c0de15dSLoGin typedef struct 659*5c0de15dSLoGin { 660*5c0de15dSLoGin Elf64_Addr r_offset; /* Address */ 661*5c0de15dSLoGin Elf64_Xword r_info; /* Relocation type and symbol index */ 662*5c0de15dSLoGin Elf64_Sxword r_addend; /* Addend */ 663*5c0de15dSLoGin } Elf64_Rela; 664*5c0de15dSLoGin 665*5c0de15dSLoGin /* How to extract and insert information held in the r_info field. */ 666*5c0de15dSLoGin 667*5c0de15dSLoGin #define ELF32_R_SYM(val) ((val) >> 8) 668*5c0de15dSLoGin #define ELF32_R_TYPE(val) ((val) & 0xff) 669*5c0de15dSLoGin #define ELF32_R_INFO(sym, type) (((sym) << 8) + ((type) & 0xff)) 670*5c0de15dSLoGin 671*5c0de15dSLoGin #define ELF64_R_SYM(i) ((i) >> 32) 672*5c0de15dSLoGin #define ELF64_R_TYPE(i) ((i) & 0xffffffff) 673*5c0de15dSLoGin #define ELF64_R_INFO(sym,type) ((((Elf64_Xword) (sym)) << 32) + (type)) 674*5c0de15dSLoGin 675*5c0de15dSLoGin /* Program segment header. */ 676*5c0de15dSLoGin 677*5c0de15dSLoGin typedef struct 678*5c0de15dSLoGin { 679*5c0de15dSLoGin Elf32_Word p_type; /* Segment type */ 680*5c0de15dSLoGin Elf32_Off p_offset; /* Segment file offset */ 681*5c0de15dSLoGin Elf32_Addr p_vaddr; /* Segment virtual address */ 682*5c0de15dSLoGin Elf32_Addr p_paddr; /* Segment physical address */ 683*5c0de15dSLoGin Elf32_Word p_filesz; /* Segment size in file */ 684*5c0de15dSLoGin Elf32_Word p_memsz; /* Segment size in memory */ 685*5c0de15dSLoGin Elf32_Word p_flags; /* Segment flags */ 686*5c0de15dSLoGin Elf32_Word p_align; /* Segment alignment */ 687*5c0de15dSLoGin } Elf32_Phdr; 688*5c0de15dSLoGin 689*5c0de15dSLoGin typedef struct 690*5c0de15dSLoGin { 691*5c0de15dSLoGin Elf64_Word p_type; /* Segment type */ 692*5c0de15dSLoGin Elf64_Word p_flags; /* Segment flags */ 693*5c0de15dSLoGin Elf64_Off p_offset; /* Segment file offset */ 694*5c0de15dSLoGin Elf64_Addr p_vaddr; /* Segment virtual address */ 695*5c0de15dSLoGin Elf64_Addr p_paddr; /* Segment physical address */ 696*5c0de15dSLoGin Elf64_Xword p_filesz; /* Segment size in file */ 697*5c0de15dSLoGin Elf64_Xword p_memsz; /* Segment size in memory */ 698*5c0de15dSLoGin Elf64_Xword p_align; /* Segment alignment */ 699*5c0de15dSLoGin } Elf64_Phdr; 700*5c0de15dSLoGin 701*5c0de15dSLoGin /* Special value for e_phnum. This indicates that the real number of 702*5c0de15dSLoGin program headers is too large to fit into e_phnum. Instead the real 703*5c0de15dSLoGin value is in the field sh_info of section 0. */ 704*5c0de15dSLoGin 705*5c0de15dSLoGin #define PN_XNUM 0xffff 706*5c0de15dSLoGin 707*5c0de15dSLoGin /* Legal values for p_type (segment type). */ 708*5c0de15dSLoGin 709*5c0de15dSLoGin #define PT_NULL 0 /* Program header table entry unused */ 710*5c0de15dSLoGin #define PT_LOAD 1 /* Loadable program segment */ 711*5c0de15dSLoGin #define PT_DYNAMIC 2 /* Dynamic linking information */ 712*5c0de15dSLoGin #define PT_INTERP 3 /* Program interpreter */ 713*5c0de15dSLoGin #define PT_NOTE 4 /* Auxiliary information */ 714*5c0de15dSLoGin #define PT_SHLIB 5 /* Reserved */ 715*5c0de15dSLoGin #define PT_PHDR 6 /* Entry for header table itself */ 716*5c0de15dSLoGin #define PT_TLS 7 /* Thread-local storage segment */ 717*5c0de15dSLoGin #define PT_NUM 8 /* Number of defined types */ 718*5c0de15dSLoGin #define PT_LOOS 0x60000000 /* Start of OS-specific */ 719*5c0de15dSLoGin #define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */ 720*5c0de15dSLoGin #define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */ 721*5c0de15dSLoGin #define PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */ 722*5c0de15dSLoGin #define PT_GNU_PROPERTY 0x6474e553 /* GNU property */ 723*5c0de15dSLoGin #define PT_LOSUNW 0x6ffffffa 724*5c0de15dSLoGin #define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */ 725*5c0de15dSLoGin #define PT_SUNWSTACK 0x6ffffffb /* Stack segment */ 726*5c0de15dSLoGin #define PT_HISUNW 0x6fffffff 727*5c0de15dSLoGin #define PT_HIOS 0x6fffffff /* End of OS-specific */ 728*5c0de15dSLoGin #define PT_LOPROC 0x70000000 /* Start of processor-specific */ 729*5c0de15dSLoGin #define PT_HIPROC 0x7fffffff /* End of processor-specific */ 730*5c0de15dSLoGin 731*5c0de15dSLoGin /* Legal values for p_flags (segment flags). */ 732*5c0de15dSLoGin 733*5c0de15dSLoGin #define PF_X (1 << 0) /* Segment is executable */ 734*5c0de15dSLoGin #define PF_W (1 << 1) /* Segment is writable */ 735*5c0de15dSLoGin #define PF_R (1 << 2) /* Segment is readable */ 736*5c0de15dSLoGin #define PF_MASKOS 0x0ff00000 /* OS-specific */ 737*5c0de15dSLoGin #define PF_MASKPROC 0xf0000000 /* Processor-specific */ 738*5c0de15dSLoGin 739*5c0de15dSLoGin /* Legal values for note segment descriptor types for core files. */ 740*5c0de15dSLoGin 741*5c0de15dSLoGin #define NT_PRSTATUS 1 /* Contains copy of prstatus struct */ 742*5c0de15dSLoGin #define NT_PRFPREG 2 /* Contains copy of fpregset 743*5c0de15dSLoGin struct. */ 744*5c0de15dSLoGin #define NT_FPREGSET 2 /* Contains copy of fpregset struct */ 745*5c0de15dSLoGin #define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */ 746*5c0de15dSLoGin #define NT_PRXREG 4 /* Contains copy of prxregset struct */ 747*5c0de15dSLoGin #define NT_TASKSTRUCT 4 /* Contains copy of task structure */ 748*5c0de15dSLoGin #define NT_PLATFORM 5 /* String from sysinfo(SI_PLATFORM) */ 749*5c0de15dSLoGin #define NT_AUXV 6 /* Contains copy of auxv array */ 750*5c0de15dSLoGin #define NT_GWINDOWS 7 /* Contains copy of gwindows struct */ 751*5c0de15dSLoGin #define NT_ASRS 8 /* Contains copy of asrset struct */ 752*5c0de15dSLoGin #define NT_PSTATUS 10 /* Contains copy of pstatus struct */ 753*5c0de15dSLoGin #define NT_PSINFO 13 /* Contains copy of psinfo struct */ 754*5c0de15dSLoGin #define NT_PRCRED 14 /* Contains copy of prcred struct */ 755*5c0de15dSLoGin #define NT_UTSNAME 15 /* Contains copy of utsname struct */ 756*5c0de15dSLoGin #define NT_LWPSTATUS 16 /* Contains copy of lwpstatus struct */ 757*5c0de15dSLoGin #define NT_LWPSINFO 17 /* Contains copy of lwpinfo struct */ 758*5c0de15dSLoGin #define NT_PRFPXREG 20 /* Contains copy of fprxregset struct */ 759*5c0de15dSLoGin #define NT_SIGINFO 0x53494749 /* Contains copy of siginfo_t, 760*5c0de15dSLoGin size might increase */ 761*5c0de15dSLoGin #define NT_FILE 0x46494c45 /* Contains information about mapped 762*5c0de15dSLoGin files */ 763*5c0de15dSLoGin #define NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct */ 764*5c0de15dSLoGin #define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */ 765*5c0de15dSLoGin #define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */ 766*5c0de15dSLoGin #define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ 767*5c0de15dSLoGin #define NT_PPC_TAR 0x103 /* Target Address Register */ 768*5c0de15dSLoGin #define NT_PPC_PPR 0x104 /* Program Priority Register */ 769*5c0de15dSLoGin #define NT_PPC_DSCR 0x105 /* Data Stream Control Register */ 770*5c0de15dSLoGin #define NT_PPC_EBB 0x106 /* Event Based Branch Registers */ 771*5c0de15dSLoGin #define NT_PPC_PMU 0x107 /* Performance Monitor Registers */ 772*5c0de15dSLoGin #define NT_PPC_TM_CGPR 0x108 /* TM checkpointed GPR Registers */ 773*5c0de15dSLoGin #define NT_PPC_TM_CFPR 0x109 /* TM checkpointed FPR Registers */ 774*5c0de15dSLoGin #define NT_PPC_TM_CVMX 0x10a /* TM checkpointed VMX Registers */ 775*5c0de15dSLoGin #define NT_PPC_TM_CVSX 0x10b /* TM checkpointed VSX Registers */ 776*5c0de15dSLoGin #define NT_PPC_TM_SPR 0x10c /* TM Special Purpose Registers */ 777*5c0de15dSLoGin #define NT_PPC_TM_CTAR 0x10d /* TM checkpointed Target Address 778*5c0de15dSLoGin Register */ 779*5c0de15dSLoGin #define NT_PPC_TM_CPPR 0x10e /* TM checkpointed Program Priority 780*5c0de15dSLoGin Register */ 781*5c0de15dSLoGin #define NT_PPC_TM_CDSCR 0x10f /* TM checkpointed Data Stream Control 782*5c0de15dSLoGin Register */ 783*5c0de15dSLoGin #define NT_PPC_PKEY 0x110 /* Memory Protection Keys 784*5c0de15dSLoGin registers. */ 785*5c0de15dSLoGin #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ 786*5c0de15dSLoGin #define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ 787*5c0de15dSLoGin #define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */ 788*5c0de15dSLoGin #define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */ 789*5c0de15dSLoGin #define NT_S390_TIMER 0x301 /* s390 timer register */ 790*5c0de15dSLoGin #define NT_S390_TODCMP 0x302 /* s390 TOD clock comparator register */ 791*5c0de15dSLoGin #define NT_S390_TODPREG 0x303 /* s390 TOD programmable register */ 792*5c0de15dSLoGin #define NT_S390_CTRS 0x304 /* s390 control registers */ 793*5c0de15dSLoGin #define NT_S390_PREFIX 0x305 /* s390 prefix register */ 794*5c0de15dSLoGin #define NT_S390_LAST_BREAK 0x306 /* s390 breaking event address */ 795*5c0de15dSLoGin #define NT_S390_SYSTEM_CALL 0x307 /* s390 system call restart data */ 796*5c0de15dSLoGin #define NT_S390_TDB 0x308 /* s390 transaction diagnostic block */ 797*5c0de15dSLoGin #define NT_S390_VXRS_LOW 0x309 /* s390 vector registers 0-15 798*5c0de15dSLoGin upper half. */ 799*5c0de15dSLoGin #define NT_S390_VXRS_HIGH 0x30a /* s390 vector registers 16-31. */ 800*5c0de15dSLoGin #define NT_S390_GS_CB 0x30b /* s390 guarded storage registers. */ 801*5c0de15dSLoGin #define NT_S390_GS_BC 0x30c /* s390 guarded storage 802*5c0de15dSLoGin broadcast control block. */ 803*5c0de15dSLoGin #define NT_S390_RI_CB 0x30d /* s390 runtime instrumentation. */ 804*5c0de15dSLoGin #define NT_ARM_VFP 0x400 /* ARM VFP/NEON registers */ 805*5c0de15dSLoGin #define NT_ARM_TLS 0x401 /* ARM TLS register */ 806*5c0de15dSLoGin #define NT_ARM_HW_BREAK 0x402 /* ARM hardware breakpoint registers */ 807*5c0de15dSLoGin #define NT_ARM_HW_WATCH 0x403 /* ARM hardware watchpoint registers */ 808*5c0de15dSLoGin #define NT_ARM_SYSTEM_CALL 0x404 /* ARM system call number */ 809*5c0de15dSLoGin #define NT_ARM_SVE 0x405 /* ARM Scalable Vector Extension 810*5c0de15dSLoGin registers */ 811*5c0de15dSLoGin #define NT_ARM_PAC_MASK 0x406 /* ARM pointer authentication 812*5c0de15dSLoGin code masks. */ 813*5c0de15dSLoGin #define NT_ARM_PACA_KEYS 0x407 /* ARM pointer authentication 814*5c0de15dSLoGin address keys. */ 815*5c0de15dSLoGin #define NT_ARM_PACG_KEYS 0x408 /* ARM pointer authentication 816*5c0de15dSLoGin generic key. */ 817*5c0de15dSLoGin #define NT_ARM_TAGGED_ADDR_CTRL 0x409 /* AArch64 tagged address 818*5c0de15dSLoGin control. */ 819*5c0de15dSLoGin #define NT_ARM_PAC_ENABLED_KEYS 0x40a /* AArch64 pointer authentication 820*5c0de15dSLoGin enabled keys. */ 821*5c0de15dSLoGin #define NT_VMCOREDD 0x700 /* Vmcore Device Dump Note. */ 822*5c0de15dSLoGin #define NT_MIPS_DSP 0x800 /* MIPS DSP ASE registers. */ 823*5c0de15dSLoGin #define NT_MIPS_FP_MODE 0x801 /* MIPS floating-point mode. */ 824*5c0de15dSLoGin #define NT_MIPS_MSA 0x802 /* MIPS SIMD registers. */ 825*5c0de15dSLoGin 826*5c0de15dSLoGin /* Legal values for the note segment descriptor types for object files. */ 827*5c0de15dSLoGin 828*5c0de15dSLoGin #define NT_VERSION 1 /* Contains a version string. */ 829*5c0de15dSLoGin 830*5c0de15dSLoGin 831*5c0de15dSLoGin /* Dynamic section entry. */ 832*5c0de15dSLoGin 833*5c0de15dSLoGin typedef struct 834*5c0de15dSLoGin { 835*5c0de15dSLoGin Elf32_Sword d_tag; /* Dynamic entry type */ 836*5c0de15dSLoGin union 837*5c0de15dSLoGin { 838*5c0de15dSLoGin Elf32_Word d_val; /* Integer value */ 839*5c0de15dSLoGin Elf32_Addr d_ptr; /* Address value */ 840*5c0de15dSLoGin } d_un; 841*5c0de15dSLoGin } Elf32_Dyn; 842*5c0de15dSLoGin 843*5c0de15dSLoGin typedef struct 844*5c0de15dSLoGin { 845*5c0de15dSLoGin Elf64_Sxword d_tag; /* Dynamic entry type */ 846*5c0de15dSLoGin union 847*5c0de15dSLoGin { 848*5c0de15dSLoGin Elf64_Xword d_val; /* Integer value */ 849*5c0de15dSLoGin Elf64_Addr d_ptr; /* Address value */ 850*5c0de15dSLoGin } d_un; 851*5c0de15dSLoGin } Elf64_Dyn; 852*5c0de15dSLoGin 853*5c0de15dSLoGin /* Legal values for d_tag (dynamic entry type). */ 854*5c0de15dSLoGin 855*5c0de15dSLoGin #define DT_NULL 0 /* Marks end of dynamic section */ 856*5c0de15dSLoGin #define DT_NEEDED 1 /* Name of needed library */ 857*5c0de15dSLoGin #define DT_PLTRELSZ 2 /* Size in bytes of PLT relocs */ 858*5c0de15dSLoGin #define DT_PLTGOT 3 /* Processor defined value */ 859*5c0de15dSLoGin #define DT_HASH 4 /* Address of symbol hash table */ 860*5c0de15dSLoGin #define DT_STRTAB 5 /* Address of string table */ 861*5c0de15dSLoGin #define DT_SYMTAB 6 /* Address of symbol table */ 862*5c0de15dSLoGin #define DT_RELA 7 /* Address of Rela relocs */ 863*5c0de15dSLoGin #define DT_RELASZ 8 /* Total size of Rela relocs */ 864*5c0de15dSLoGin #define DT_RELAENT 9 /* Size of one Rela reloc */ 865*5c0de15dSLoGin #define DT_STRSZ 10 /* Size of string table */ 866*5c0de15dSLoGin #define DT_SYMENT 11 /* Size of one symbol table entry */ 867*5c0de15dSLoGin #define DT_INIT 12 /* Address of init function */ 868*5c0de15dSLoGin #define DT_FINI 13 /* Address of termination function */ 869*5c0de15dSLoGin #define DT_SONAME 14 /* Name of shared object */ 870*5c0de15dSLoGin #define DT_RPATH 15 /* Library search path (deprecated) */ 871*5c0de15dSLoGin #define DT_SYMBOLIC 16 /* Start symbol search here */ 872*5c0de15dSLoGin #define DT_REL 17 /* Address of Rel relocs */ 873*5c0de15dSLoGin #define DT_RELSZ 18 /* Total size of Rel relocs */ 874*5c0de15dSLoGin #define DT_RELENT 19 /* Size of one Rel reloc */ 875*5c0de15dSLoGin #define DT_PLTREL 20 /* Type of reloc in PLT */ 876*5c0de15dSLoGin #define DT_DEBUG 21 /* For debugging; unspecified */ 877*5c0de15dSLoGin #define DT_TEXTREL 22 /* Reloc might modify .text */ 878*5c0de15dSLoGin #define DT_JMPREL 23 /* Address of PLT relocs */ 879*5c0de15dSLoGin #define DT_BIND_NOW 24 /* Process relocations of object */ 880*5c0de15dSLoGin #define DT_INIT_ARRAY 25 /* Array with addresses of init fct */ 881*5c0de15dSLoGin #define DT_FINI_ARRAY 26 /* Array with addresses of fini fct */ 882*5c0de15dSLoGin #define DT_INIT_ARRAYSZ 27 /* Size in bytes of DT_INIT_ARRAY */ 883*5c0de15dSLoGin #define DT_FINI_ARRAYSZ 28 /* Size in bytes of DT_FINI_ARRAY */ 884*5c0de15dSLoGin #define DT_RUNPATH 29 /* Library search path */ 885*5c0de15dSLoGin #define DT_FLAGS 30 /* Flags for the object being loaded */ 886*5c0de15dSLoGin #define DT_ENCODING 32 /* Start of encoded range */ 887*5c0de15dSLoGin #define DT_PREINIT_ARRAY 32 /* Array with addresses of preinit fct*/ 888*5c0de15dSLoGin #define DT_PREINIT_ARRAYSZ 33 /* size in bytes of DT_PREINIT_ARRAY */ 889*5c0de15dSLoGin #define DT_SYMTAB_SHNDX 34 /* Address of SYMTAB_SHNDX section */ 890*5c0de15dSLoGin #define DT_NUM 35 /* Number used */ 891*5c0de15dSLoGin #define DT_LOOS 0x6000000d /* Start of OS-specific */ 892*5c0de15dSLoGin #define DT_HIOS 0x6ffff000 /* End of OS-specific */ 893*5c0de15dSLoGin #define DT_LOPROC 0x70000000 /* Start of processor-specific */ 894*5c0de15dSLoGin #define DT_HIPROC 0x7fffffff /* End of processor-specific */ 895*5c0de15dSLoGin #define DT_PROCNUM DT_MIPS_NUM /* Most used by any processor */ 896*5c0de15dSLoGin 897*5c0de15dSLoGin /* DT_* entries which fall between DT_VALRNGHI & DT_VALRNGLO use the 898*5c0de15dSLoGin Dyn.d_un.d_val field of the Elf*_Dyn structure. This follows Sun's 899*5c0de15dSLoGin approach. */ 900*5c0de15dSLoGin #define DT_VALRNGLO 0x6ffffd00 901*5c0de15dSLoGin #define DT_GNU_PRELINKED 0x6ffffdf5 /* Prelinking timestamp */ 902*5c0de15dSLoGin #define DT_GNU_CONFLICTSZ 0x6ffffdf6 /* Size of conflict section */ 903*5c0de15dSLoGin #define DT_GNU_LIBLISTSZ 0x6ffffdf7 /* Size of library list */ 904*5c0de15dSLoGin #define DT_CHECKSUM 0x6ffffdf8 905*5c0de15dSLoGin #define DT_PLTPADSZ 0x6ffffdf9 906*5c0de15dSLoGin #define DT_MOVEENT 0x6ffffdfa 907*5c0de15dSLoGin #define DT_MOVESZ 0x6ffffdfb 908*5c0de15dSLoGin #define DT_FEATURE_1 0x6ffffdfc /* Feature selection (DTF_*). */ 909*5c0de15dSLoGin #define DT_POSFLAG_1 0x6ffffdfd /* Flags for DT_* entries, effecting 910*5c0de15dSLoGin the following DT_* entry. */ 911*5c0de15dSLoGin #define DT_SYMINSZ 0x6ffffdfe /* Size of syminfo table (in bytes) */ 912*5c0de15dSLoGin #define DT_SYMINENT 0x6ffffdff /* Entry size of syminfo */ 913*5c0de15dSLoGin #define DT_VALRNGHI 0x6ffffdff 914*5c0de15dSLoGin #define DT_VALTAGIDX(tag) (DT_VALRNGHI - (tag)) /* Reverse order! */ 915*5c0de15dSLoGin #define DT_VALNUM 12 916*5c0de15dSLoGin 917*5c0de15dSLoGin /* DT_* entries which fall between DT_ADDRRNGHI & DT_ADDRRNGLO use the 918*5c0de15dSLoGin Dyn.d_un.d_ptr field of the Elf*_Dyn structure. 919*5c0de15dSLoGin 920*5c0de15dSLoGin If any adjustment is made to the ELF object after it has been 921*5c0de15dSLoGin built these entries will need to be adjusted. */ 922*5c0de15dSLoGin #define DT_ADDRRNGLO 0x6ffffe00 923*5c0de15dSLoGin #define DT_GNU_HASH 0x6ffffef5 /* GNU-style hash table. */ 924*5c0de15dSLoGin #define DT_TLSDESC_PLT 0x6ffffef6 925*5c0de15dSLoGin #define DT_TLSDESC_GOT 0x6ffffef7 926*5c0de15dSLoGin #define DT_GNU_CONFLICT 0x6ffffef8 /* Start of conflict section */ 927*5c0de15dSLoGin #define DT_GNU_LIBLIST 0x6ffffef9 /* Library list */ 928*5c0de15dSLoGin #define DT_CONFIG 0x6ffffefa /* Configuration information. */ 929*5c0de15dSLoGin #define DT_DEPAUDIT 0x6ffffefb /* Dependency auditing. */ 930*5c0de15dSLoGin #define DT_AUDIT 0x6ffffefc /* Object auditing. */ 931*5c0de15dSLoGin #define DT_PLTPAD 0x6ffffefd /* PLT padding. */ 932*5c0de15dSLoGin #define DT_MOVETAB 0x6ffffefe /* Move table. */ 933*5c0de15dSLoGin #define DT_SYMINFO 0x6ffffeff /* Syminfo table. */ 934*5c0de15dSLoGin #define DT_ADDRRNGHI 0x6ffffeff 935*5c0de15dSLoGin #define DT_ADDRTAGIDX(tag) (DT_ADDRRNGHI - (tag)) /* Reverse order! */ 936*5c0de15dSLoGin #define DT_ADDRNUM 11 937*5c0de15dSLoGin 938*5c0de15dSLoGin /* The versioning entry types. The next are defined as part of the 939*5c0de15dSLoGin GNU extension. */ 940*5c0de15dSLoGin #define DT_VERSYM 0x6ffffff0 941*5c0de15dSLoGin 942*5c0de15dSLoGin #define DT_RELACOUNT 0x6ffffff9 943*5c0de15dSLoGin #define DT_RELCOUNT 0x6ffffffa 944*5c0de15dSLoGin 945*5c0de15dSLoGin /* These were chosen by Sun. */ 946*5c0de15dSLoGin #define DT_FLAGS_1 0x6ffffffb /* State flags, see DF_1_* below. */ 947*5c0de15dSLoGin #define DT_VERDEF 0x6ffffffc /* Address of version definition 948*5c0de15dSLoGin table */ 949*5c0de15dSLoGin #define DT_VERDEFNUM 0x6ffffffd /* Number of version definitions */ 950*5c0de15dSLoGin #define DT_VERNEED 0x6ffffffe /* Address of table with needed 951*5c0de15dSLoGin versions */ 952*5c0de15dSLoGin #define DT_VERNEEDNUM 0x6fffffff /* Number of needed versions */ 953*5c0de15dSLoGin #define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) /* Reverse order! */ 954*5c0de15dSLoGin #define DT_VERSIONTAGNUM 16 955*5c0de15dSLoGin 956*5c0de15dSLoGin /* Sun added these machine-independent extensions in the "processor-specific" 957*5c0de15dSLoGin range. Be compatible. */ 958*5c0de15dSLoGin #define DT_AUXILIARY 0x7ffffffd /* Shared object to load before self */ 959*5c0de15dSLoGin #define DT_FILTER 0x7fffffff /* Shared object to get values from */ 960*5c0de15dSLoGin #define DT_EXTRATAGIDX(tag) ((Elf32_Word)-((Elf32_Sword) (tag) <<1>>1)-1) 961*5c0de15dSLoGin #define DT_EXTRANUM 3 962*5c0de15dSLoGin 963*5c0de15dSLoGin /* Values of `d_un.d_val' in the DT_FLAGS entry. */ 964*5c0de15dSLoGin #define DF_ORIGIN 0x00000001 /* Object may use DF_ORIGIN */ 965*5c0de15dSLoGin #define DF_SYMBOLIC 0x00000002 /* Symbol resolutions starts here */ 966*5c0de15dSLoGin #define DF_TEXTREL 0x00000004 /* Object contains text relocations */ 967*5c0de15dSLoGin #define DF_BIND_NOW 0x00000008 /* No lazy binding for this object */ 968*5c0de15dSLoGin #define DF_STATIC_TLS 0x00000010 /* Module uses the static TLS model */ 969*5c0de15dSLoGin 970*5c0de15dSLoGin /* State flags selectable in the `d_un.d_val' element of the DT_FLAGS_1 971*5c0de15dSLoGin entry in the dynamic section. */ 972*5c0de15dSLoGin #define DF_1_NOW 0x00000001 /* Set RTLD_NOW for this object. */ 973*5c0de15dSLoGin #define DF_1_GLOBAL 0x00000002 /* Set RTLD_GLOBAL for this object. */ 974*5c0de15dSLoGin #define DF_1_GROUP 0x00000004 /* Set RTLD_GROUP for this object. */ 975*5c0de15dSLoGin #define DF_1_NODELETE 0x00000008 /* Set RTLD_NODELETE for this object.*/ 976*5c0de15dSLoGin #define DF_1_LOADFLTR 0x00000010 /* Trigger filtee loading at runtime.*/ 977*5c0de15dSLoGin #define DF_1_INITFIRST 0x00000020 /* Set RTLD_INITFIRST for this object*/ 978*5c0de15dSLoGin #define DF_1_NOOPEN 0x00000040 /* Set RTLD_NOOPEN for this object. */ 979*5c0de15dSLoGin #define DF_1_ORIGIN 0x00000080 /* $ORIGIN must be handled. */ 980*5c0de15dSLoGin #define DF_1_DIRECT 0x00000100 /* Direct binding enabled. */ 981*5c0de15dSLoGin #define DF_1_TRANS 0x00000200 982*5c0de15dSLoGin #define DF_1_INTERPOSE 0x00000400 /* Object is used to interpose. */ 983*5c0de15dSLoGin #define DF_1_NODEFLIB 0x00000800 /* Ignore default lib search path. */ 984*5c0de15dSLoGin #define DF_1_NODUMP 0x00001000 /* Object can't be dldump'ed. */ 985*5c0de15dSLoGin #define DF_1_CONFALT 0x00002000 /* Configuration alternative created.*/ 986*5c0de15dSLoGin #define DF_1_ENDFILTEE 0x00004000 /* Filtee terminates filters search. */ 987*5c0de15dSLoGin #define DF_1_DISPRELDNE 0x00008000 /* Disp reloc applied at build time. */ 988*5c0de15dSLoGin #define DF_1_DISPRELPND 0x00010000 /* Disp reloc applied at run-time. */ 989*5c0de15dSLoGin #define DF_1_NODIRECT 0x00020000 /* Object has no-direct binding. */ 990*5c0de15dSLoGin #define DF_1_IGNMULDEF 0x00040000 991*5c0de15dSLoGin #define DF_1_NOKSYMS 0x00080000 992*5c0de15dSLoGin #define DF_1_NOHDR 0x00100000 993*5c0de15dSLoGin #define DF_1_EDITED 0x00200000 /* Object is modified after built. */ 994*5c0de15dSLoGin #define DF_1_NORELOC 0x00400000 995*5c0de15dSLoGin #define DF_1_SYMINTPOSE 0x00800000 /* Object has individual interposers. */ 996*5c0de15dSLoGin #define DF_1_GLOBAUDIT 0x01000000 /* Global auditing required. */ 997*5c0de15dSLoGin #define DF_1_SINGLETON 0x02000000 /* Singleton symbols are used. */ 998*5c0de15dSLoGin #define DF_1_STUB 0x04000000 999*5c0de15dSLoGin #define DF_1_PIE 0x08000000 1000*5c0de15dSLoGin #define DF_1_KMOD 0x10000000 1001*5c0de15dSLoGin #define DF_1_WEAKFILTER 0x20000000 1002*5c0de15dSLoGin #define DF_1_NOCOMMON 0x40000000 1003*5c0de15dSLoGin 1004*5c0de15dSLoGin /* Flags for the feature selection in DT_FEATURE_1. */ 1005*5c0de15dSLoGin #define DTF_1_PARINIT 0x00000001 1006*5c0de15dSLoGin #define DTF_1_CONFEXP 0x00000002 1007*5c0de15dSLoGin 1008*5c0de15dSLoGin /* Flags in the DT_POSFLAG_1 entry effecting only the next DT_* entry. */ 1009*5c0de15dSLoGin #define DF_P1_LAZYLOAD 0x00000001 /* Lazyload following object. */ 1010*5c0de15dSLoGin #define DF_P1_GROUPPERM 0x00000002 /* Symbols from next object are not 1011*5c0de15dSLoGin generally available. */ 1012*5c0de15dSLoGin 1013*5c0de15dSLoGin /* Version definition sections. */ 1014*5c0de15dSLoGin 1015*5c0de15dSLoGin typedef struct 1016*5c0de15dSLoGin { 1017*5c0de15dSLoGin Elf32_Half vd_version; /* Version revision */ 1018*5c0de15dSLoGin Elf32_Half vd_flags; /* Version information */ 1019*5c0de15dSLoGin Elf32_Half vd_ndx; /* Version Index */ 1020*5c0de15dSLoGin Elf32_Half vd_cnt; /* Number of associated aux entries */ 1021*5c0de15dSLoGin Elf32_Word vd_hash; /* Version name hash value */ 1022*5c0de15dSLoGin Elf32_Word vd_aux; /* Offset in bytes to verdaux array */ 1023*5c0de15dSLoGin Elf32_Word vd_next; /* Offset in bytes to next verdef 1024*5c0de15dSLoGin entry */ 1025*5c0de15dSLoGin } Elf32_Verdef; 1026*5c0de15dSLoGin 1027*5c0de15dSLoGin typedef struct 1028*5c0de15dSLoGin { 1029*5c0de15dSLoGin Elf64_Half vd_version; /* Version revision */ 1030*5c0de15dSLoGin Elf64_Half vd_flags; /* Version information */ 1031*5c0de15dSLoGin Elf64_Half vd_ndx; /* Version Index */ 1032*5c0de15dSLoGin Elf64_Half vd_cnt; /* Number of associated aux entries */ 1033*5c0de15dSLoGin Elf64_Word vd_hash; /* Version name hash value */ 1034*5c0de15dSLoGin Elf64_Word vd_aux; /* Offset in bytes to verdaux array */ 1035*5c0de15dSLoGin Elf64_Word vd_next; /* Offset in bytes to next verdef 1036*5c0de15dSLoGin entry */ 1037*5c0de15dSLoGin } Elf64_Verdef; 1038*5c0de15dSLoGin 1039*5c0de15dSLoGin 1040*5c0de15dSLoGin /* Legal values for vd_version (version revision). */ 1041*5c0de15dSLoGin #define VER_DEF_NONE 0 /* No version */ 1042*5c0de15dSLoGin #define VER_DEF_CURRENT 1 /* Current version */ 1043*5c0de15dSLoGin #define VER_DEF_NUM 2 /* Given version number */ 1044*5c0de15dSLoGin 1045*5c0de15dSLoGin /* Legal values for vd_flags (version information flags). */ 1046*5c0de15dSLoGin #define VER_FLG_BASE 0x1 /* Version definition of file itself */ 1047*5c0de15dSLoGin #define VER_FLG_WEAK 0x2 /* Weak version identifier */ 1048*5c0de15dSLoGin 1049*5c0de15dSLoGin /* Versym symbol index values. */ 1050*5c0de15dSLoGin #define VER_NDX_LOCAL 0 /* Symbol is local. */ 1051*5c0de15dSLoGin #define VER_NDX_GLOBAL 1 /* Symbol is global. */ 1052*5c0de15dSLoGin #define VER_NDX_LORESERVE 0xff00 /* Beginning of reserved entries. */ 1053*5c0de15dSLoGin #define VER_NDX_ELIMINATE 0xff01 /* Symbol is to be eliminated. */ 1054*5c0de15dSLoGin 1055*5c0de15dSLoGin /* Auxiliary version information. */ 1056*5c0de15dSLoGin 1057*5c0de15dSLoGin typedef struct 1058*5c0de15dSLoGin { 1059*5c0de15dSLoGin Elf32_Word vda_name; /* Version or dependency names */ 1060*5c0de15dSLoGin Elf32_Word vda_next; /* Offset in bytes to next verdaux 1061*5c0de15dSLoGin entry */ 1062*5c0de15dSLoGin } Elf32_Verdaux; 1063*5c0de15dSLoGin 1064*5c0de15dSLoGin typedef struct 1065*5c0de15dSLoGin { 1066*5c0de15dSLoGin Elf64_Word vda_name; /* Version or dependency names */ 1067*5c0de15dSLoGin Elf64_Word vda_next; /* Offset in bytes to next verdaux 1068*5c0de15dSLoGin entry */ 1069*5c0de15dSLoGin } Elf64_Verdaux; 1070*5c0de15dSLoGin 1071*5c0de15dSLoGin 1072*5c0de15dSLoGin /* Version dependency section. */ 1073*5c0de15dSLoGin 1074*5c0de15dSLoGin typedef struct 1075*5c0de15dSLoGin { 1076*5c0de15dSLoGin Elf32_Half vn_version; /* Version of structure */ 1077*5c0de15dSLoGin Elf32_Half vn_cnt; /* Number of associated aux entries */ 1078*5c0de15dSLoGin Elf32_Word vn_file; /* Offset of filename for this 1079*5c0de15dSLoGin dependency */ 1080*5c0de15dSLoGin Elf32_Word vn_aux; /* Offset in bytes to vernaux array */ 1081*5c0de15dSLoGin Elf32_Word vn_next; /* Offset in bytes to next verneed 1082*5c0de15dSLoGin entry */ 1083*5c0de15dSLoGin } Elf32_Verneed; 1084*5c0de15dSLoGin 1085*5c0de15dSLoGin typedef struct 1086*5c0de15dSLoGin { 1087*5c0de15dSLoGin Elf64_Half vn_version; /* Version of structure */ 1088*5c0de15dSLoGin Elf64_Half vn_cnt; /* Number of associated aux entries */ 1089*5c0de15dSLoGin Elf64_Word vn_file; /* Offset of filename for this 1090*5c0de15dSLoGin dependency */ 1091*5c0de15dSLoGin Elf64_Word vn_aux; /* Offset in bytes to vernaux array */ 1092*5c0de15dSLoGin Elf64_Word vn_next; /* Offset in bytes to next verneed 1093*5c0de15dSLoGin entry */ 1094*5c0de15dSLoGin } Elf64_Verneed; 1095*5c0de15dSLoGin 1096*5c0de15dSLoGin 1097*5c0de15dSLoGin /* Legal values for vn_version (version revision). */ 1098*5c0de15dSLoGin #define VER_NEED_NONE 0 /* No version */ 1099*5c0de15dSLoGin #define VER_NEED_CURRENT 1 /* Current version */ 1100*5c0de15dSLoGin #define VER_NEED_NUM 2 /* Given version number */ 1101*5c0de15dSLoGin 1102*5c0de15dSLoGin /* Auxiliary needed version information. */ 1103*5c0de15dSLoGin 1104*5c0de15dSLoGin typedef struct 1105*5c0de15dSLoGin { 1106*5c0de15dSLoGin Elf32_Word vna_hash; /* Hash value of dependency name */ 1107*5c0de15dSLoGin Elf32_Half vna_flags; /* Dependency specific information */ 1108*5c0de15dSLoGin Elf32_Half vna_other; /* Unused */ 1109*5c0de15dSLoGin Elf32_Word vna_name; /* Dependency name string offset */ 1110*5c0de15dSLoGin Elf32_Word vna_next; /* Offset in bytes to next vernaux 1111*5c0de15dSLoGin entry */ 1112*5c0de15dSLoGin } Elf32_Vernaux; 1113*5c0de15dSLoGin 1114*5c0de15dSLoGin typedef struct 1115*5c0de15dSLoGin { 1116*5c0de15dSLoGin Elf64_Word vna_hash; /* Hash value of dependency name */ 1117*5c0de15dSLoGin Elf64_Half vna_flags; /* Dependency specific information */ 1118*5c0de15dSLoGin Elf64_Half vna_other; /* Unused */ 1119*5c0de15dSLoGin Elf64_Word vna_name; /* Dependency name string offset */ 1120*5c0de15dSLoGin Elf64_Word vna_next; /* Offset in bytes to next vernaux 1121*5c0de15dSLoGin entry */ 1122*5c0de15dSLoGin } Elf64_Vernaux; 1123*5c0de15dSLoGin 1124*5c0de15dSLoGin 1125*5c0de15dSLoGin /* Legal values for vna_flags. */ 1126*5c0de15dSLoGin #define VER_FLG_WEAK 0x2 /* Weak version identifier */ 1127*5c0de15dSLoGin 1128*5c0de15dSLoGin 1129*5c0de15dSLoGin /* Auxiliary vector. */ 1130*5c0de15dSLoGin 1131*5c0de15dSLoGin /* This vector is normally only used by the program interpreter. The 1132*5c0de15dSLoGin usual definition in an ABI supplement uses the name auxv_t. The 1133*5c0de15dSLoGin vector is not usually defined in a standard <elf.h> file, but it 1134*5c0de15dSLoGin can't hurt. We rename it to avoid conflicts. The sizes of these 1135*5c0de15dSLoGin types are an arrangement between the exec server and the program 1136*5c0de15dSLoGin interpreter, so we don't fully specify them here. */ 1137*5c0de15dSLoGin 1138*5c0de15dSLoGin typedef struct 1139*5c0de15dSLoGin { 1140*5c0de15dSLoGin uint32_t a_type; /* Entry type */ 1141*5c0de15dSLoGin union 1142*5c0de15dSLoGin { 1143*5c0de15dSLoGin uint32_t a_val; /* Integer value */ 1144*5c0de15dSLoGin /* We use to have pointer elements added here. We cannot do that, 1145*5c0de15dSLoGin though, since it does not work when using 32-bit definitions 1146*5c0de15dSLoGin on 64-bit platforms and vice versa. */ 1147*5c0de15dSLoGin } a_un; 1148*5c0de15dSLoGin } Elf32_auxv_t; 1149*5c0de15dSLoGin 1150*5c0de15dSLoGin typedef struct 1151*5c0de15dSLoGin { 1152*5c0de15dSLoGin uint64_t a_type; /* Entry type */ 1153*5c0de15dSLoGin union 1154*5c0de15dSLoGin { 1155*5c0de15dSLoGin uint64_t a_val; /* Integer value */ 1156*5c0de15dSLoGin /* We use to have pointer elements added here. We cannot do that, 1157*5c0de15dSLoGin though, since it does not work when using 32-bit definitions 1158*5c0de15dSLoGin on 64-bit platforms and vice versa. */ 1159*5c0de15dSLoGin } a_un; 1160*5c0de15dSLoGin } Elf64_auxv_t; 1161*5c0de15dSLoGin 1162*5c0de15dSLoGin /* Legal values for a_type (entry type). */ 1163*5c0de15dSLoGin 1164*5c0de15dSLoGin #define AT_NULL 0 /* End of vector */ 1165*5c0de15dSLoGin #define AT_IGNORE 1 /* Entry should be ignored */ 1166*5c0de15dSLoGin #define AT_EXECFD 2 /* File descriptor of program */ 1167*5c0de15dSLoGin #define AT_PHDR 3 /* Program headers for program */ 1168*5c0de15dSLoGin #define AT_PHENT 4 /* Size of program header entry */ 1169*5c0de15dSLoGin #define AT_PHNUM 5 /* Number of program headers */ 1170*5c0de15dSLoGin #define AT_PAGESZ 6 /* System page size */ 1171*5c0de15dSLoGin #define AT_BASE 7 /* Base address of interpreter */ 1172*5c0de15dSLoGin #define AT_FLAGS 8 /* Flags */ 1173*5c0de15dSLoGin #define AT_ENTRY 9 /* Entry point of program */ 1174*5c0de15dSLoGin #define AT_NOTELF 10 /* Program is not ELF */ 1175*5c0de15dSLoGin #define AT_UID 11 /* Real uid */ 1176*5c0de15dSLoGin #define AT_EUID 12 /* Effective uid */ 1177*5c0de15dSLoGin #define AT_GID 13 /* Real gid */ 1178*5c0de15dSLoGin #define AT_EGID 14 /* Effective gid */ 1179*5c0de15dSLoGin #define AT_CLKTCK 17 /* Frequency of times() */ 1180*5c0de15dSLoGin 1181*5c0de15dSLoGin /* Some more special a_type values describing the hardware. */ 1182*5c0de15dSLoGin #define AT_PLATFORM 15 /* String identifying platform. */ 1183*5c0de15dSLoGin #define AT_HWCAP 16 /* Machine-dependent hints about 1184*5c0de15dSLoGin processor capabilities. */ 1185*5c0de15dSLoGin 1186*5c0de15dSLoGin /* This entry gives some information about the FPU initialization 1187*5c0de15dSLoGin performed by the kernel. */ 1188*5c0de15dSLoGin #define AT_FPUCW 18 /* Used FPU control word. */ 1189*5c0de15dSLoGin 1190*5c0de15dSLoGin /* Cache block sizes. */ 1191*5c0de15dSLoGin #define AT_DCACHEBSIZE 19 /* Data cache block size. */ 1192*5c0de15dSLoGin #define AT_ICACHEBSIZE 20 /* Instruction cache block size. */ 1193*5c0de15dSLoGin #define AT_UCACHEBSIZE 21 /* Unified cache block size. */ 1194*5c0de15dSLoGin 1195*5c0de15dSLoGin /* A special ignored value for PPC, used by the kernel to control the 1196*5c0de15dSLoGin interpretation of the AUXV. Must be > 16. */ 1197*5c0de15dSLoGin #define AT_IGNOREPPC 22 /* Entry should be ignored. */ 1198*5c0de15dSLoGin 1199*5c0de15dSLoGin #define AT_SECURE 23 /* Boolean, was exec setuid-like? */ 1200*5c0de15dSLoGin 1201*5c0de15dSLoGin #define AT_BASE_PLATFORM 24 /* String identifying real platforms.*/ 1202*5c0de15dSLoGin 1203*5c0de15dSLoGin #define AT_RANDOM 25 /* Address of 16 random bytes. */ 1204*5c0de15dSLoGin 1205*5c0de15dSLoGin #define AT_HWCAP2 26 /* More machine-dependent hints about 1206*5c0de15dSLoGin processor capabilities. */ 1207*5c0de15dSLoGin 1208*5c0de15dSLoGin #define AT_EXECFN 31 /* Filename of executable. */ 1209*5c0de15dSLoGin 1210*5c0de15dSLoGin /* Pointer to the global system page used for system calls and other 1211*5c0de15dSLoGin nice things. */ 1212*5c0de15dSLoGin #define AT_SYSINFO 32 1213*5c0de15dSLoGin #define AT_SYSINFO_EHDR 33 1214*5c0de15dSLoGin 1215*5c0de15dSLoGin /* Shapes of the caches. Bits 0-3 contains associativity; bits 4-7 contains 1216*5c0de15dSLoGin log2 of line size; mask those to get cache size. */ 1217*5c0de15dSLoGin #define AT_L1I_CACHESHAPE 34 1218*5c0de15dSLoGin #define AT_L1D_CACHESHAPE 35 1219*5c0de15dSLoGin #define AT_L2_CACHESHAPE 36 1220*5c0de15dSLoGin #define AT_L3_CACHESHAPE 37 1221*5c0de15dSLoGin 1222*5c0de15dSLoGin /* Shapes of the caches, with more room to describe them. 1223*5c0de15dSLoGin *GEOMETRY are comprised of cache line size in bytes in the bottom 16 bits 1224*5c0de15dSLoGin and the cache associativity in the next 16 bits. */ 1225*5c0de15dSLoGin #define AT_L1I_CACHESIZE 40 1226*5c0de15dSLoGin #define AT_L1I_CACHEGEOMETRY 41 1227*5c0de15dSLoGin #define AT_L1D_CACHESIZE 42 1228*5c0de15dSLoGin #define AT_L1D_CACHEGEOMETRY 43 1229*5c0de15dSLoGin #define AT_L2_CACHESIZE 44 1230*5c0de15dSLoGin #define AT_L2_CACHEGEOMETRY 45 1231*5c0de15dSLoGin #define AT_L3_CACHESIZE 46 1232*5c0de15dSLoGin #define AT_L3_CACHEGEOMETRY 47 1233*5c0de15dSLoGin 1234*5c0de15dSLoGin #define AT_MINSIGSTKSZ 51 /* Stack needed for signal delivery */ 1235*5c0de15dSLoGin 1236*5c0de15dSLoGin /* Note section contents. Each entry in the note section begins with 1237*5c0de15dSLoGin a header of a fixed form. */ 1238*5c0de15dSLoGin 1239*5c0de15dSLoGin typedef struct 1240*5c0de15dSLoGin { 1241*5c0de15dSLoGin Elf32_Word n_namesz; /* Length of the note's name. */ 1242*5c0de15dSLoGin Elf32_Word n_descsz; /* Length of the note's descriptor. */ 1243*5c0de15dSLoGin Elf32_Word n_type; /* Type of the note. */ 1244*5c0de15dSLoGin } Elf32_Nhdr; 1245*5c0de15dSLoGin 1246*5c0de15dSLoGin typedef struct 1247*5c0de15dSLoGin { 1248*5c0de15dSLoGin Elf64_Word n_namesz; /* Length of the note's name. */ 1249*5c0de15dSLoGin Elf64_Word n_descsz; /* Length of the note's descriptor. */ 1250*5c0de15dSLoGin Elf64_Word n_type; /* Type of the note. */ 1251*5c0de15dSLoGin } Elf64_Nhdr; 1252*5c0de15dSLoGin 1253*5c0de15dSLoGin /* Known names of notes. */ 1254*5c0de15dSLoGin 1255*5c0de15dSLoGin /* Solaris entries in the note section have this name. */ 1256*5c0de15dSLoGin #define ELF_NOTE_SOLARIS "SUNW Solaris" 1257*5c0de15dSLoGin 1258*5c0de15dSLoGin /* Note entries for GNU systems have this name. */ 1259*5c0de15dSLoGin #define ELF_NOTE_GNU "GNU" 1260*5c0de15dSLoGin 1261*5c0de15dSLoGin /* Note entries for freedesktop.org have this name. */ 1262*5c0de15dSLoGin #define ELF_NOTE_FDO "FDO" 1263*5c0de15dSLoGin 1264*5c0de15dSLoGin /* Defined types of notes for Solaris. */ 1265*5c0de15dSLoGin 1266*5c0de15dSLoGin /* Value of descriptor (one word) is desired pagesize for the binary. */ 1267*5c0de15dSLoGin #define ELF_NOTE_PAGESIZE_HINT 1 1268*5c0de15dSLoGin 1269*5c0de15dSLoGin 1270*5c0de15dSLoGin /* Defined note types for GNU systems. */ 1271*5c0de15dSLoGin 1272*5c0de15dSLoGin /* ABI information. The descriptor consists of words: 1273*5c0de15dSLoGin word 0: OS descriptor 1274*5c0de15dSLoGin word 1: major version of the ABI 1275*5c0de15dSLoGin word 2: minor version of the ABI 1276*5c0de15dSLoGin word 3: subminor version of the ABI 1277*5c0de15dSLoGin */ 1278*5c0de15dSLoGin #define NT_GNU_ABI_TAG 1 1279*5c0de15dSLoGin #define ELF_NOTE_ABI NT_GNU_ABI_TAG /* Old name. */ 1280*5c0de15dSLoGin 1281*5c0de15dSLoGin /* Known OSes. These values can appear in word 0 of an 1282*5c0de15dSLoGin NT_GNU_ABI_TAG note section entry. */ 1283*5c0de15dSLoGin #define ELF_NOTE_OS_LINUX 0 1284*5c0de15dSLoGin #define ELF_NOTE_OS_GNU 1 1285*5c0de15dSLoGin #define ELF_NOTE_OS_SOLARIS2 2 1286*5c0de15dSLoGin #define ELF_NOTE_OS_FREEBSD 3 1287*5c0de15dSLoGin 1288*5c0de15dSLoGin /* Synthetic hwcap information. The descriptor begins with two words: 1289*5c0de15dSLoGin word 0: number of entries 1290*5c0de15dSLoGin word 1: bitmask of enabled entries 1291*5c0de15dSLoGin Then follow variable-length entries, one byte followed by a 1292*5c0de15dSLoGin '\0'-terminated hwcap name string. The byte gives the bit 1293*5c0de15dSLoGin number to test if enabled, (1U << bit) & bitmask. */ 1294*5c0de15dSLoGin #define NT_GNU_HWCAP 2 1295*5c0de15dSLoGin 1296*5c0de15dSLoGin /* Build ID bits as generated by ld --build-id. 1297*5c0de15dSLoGin The descriptor consists of any nonzero number of bytes. */ 1298*5c0de15dSLoGin #define NT_GNU_BUILD_ID 3 1299*5c0de15dSLoGin 1300*5c0de15dSLoGin /* Version note generated by GNU gold containing a version string. */ 1301*5c0de15dSLoGin #define NT_GNU_GOLD_VERSION 4 1302*5c0de15dSLoGin 1303*5c0de15dSLoGin /* Program property. */ 1304*5c0de15dSLoGin #define NT_GNU_PROPERTY_TYPE_0 5 1305*5c0de15dSLoGin 1306*5c0de15dSLoGin /* Packaging metadata as defined on 1307*5c0de15dSLoGin https://systemd.io/COREDUMP_PACKAGE_METADATA/ */ 1308*5c0de15dSLoGin #define NT_FDO_PACKAGING_METADATA 0xcafe1a7e 1309*5c0de15dSLoGin 1310*5c0de15dSLoGin /* Note section name of program property. */ 1311*5c0de15dSLoGin #define NOTE_GNU_PROPERTY_SECTION_NAME ".note.gnu.property" 1312*5c0de15dSLoGin 1313*5c0de15dSLoGin /* Values used in GNU .note.gnu.property notes (NT_GNU_PROPERTY_TYPE_0). */ 1314*5c0de15dSLoGin 1315*5c0de15dSLoGin /* Stack size. */ 1316*5c0de15dSLoGin #define GNU_PROPERTY_STACK_SIZE 1 1317*5c0de15dSLoGin /* No copy relocation on protected data symbol. */ 1318*5c0de15dSLoGin #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2 1319*5c0de15dSLoGin 1320*5c0de15dSLoGin /* A 4-byte unsigned integer property: A bit is set if it is set in all 1321*5c0de15dSLoGin relocatable inputs. */ 1322*5c0de15dSLoGin #define GNU_PROPERTY_UINT32_AND_LO 0xb0000000 1323*5c0de15dSLoGin #define GNU_PROPERTY_UINT32_AND_HI 0xb0007fff 1324*5c0de15dSLoGin 1325*5c0de15dSLoGin /* A 4-byte unsigned integer property: A bit is set if it is set in any 1326*5c0de15dSLoGin relocatable inputs. */ 1327*5c0de15dSLoGin #define GNU_PROPERTY_UINT32_OR_LO 0xb0008000 1328*5c0de15dSLoGin #define GNU_PROPERTY_UINT32_OR_HI 0xb000ffff 1329*5c0de15dSLoGin 1330*5c0de15dSLoGin /* The needed properties by the object file. */ 1331*5c0de15dSLoGin #define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO 1332*5c0de15dSLoGin 1333*5c0de15dSLoGin /* Set if the object file requires canonical function pointers and 1334*5c0de15dSLoGin cannot be used with copy relocation. */ 1335*5c0de15dSLoGin #define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) 1336*5c0de15dSLoGin 1337*5c0de15dSLoGin /* Processor-specific semantics, lo */ 1338*5c0de15dSLoGin #define GNU_PROPERTY_LOPROC 0xc0000000 1339*5c0de15dSLoGin /* Processor-specific semantics, hi */ 1340*5c0de15dSLoGin #define GNU_PROPERTY_HIPROC 0xdfffffff 1341*5c0de15dSLoGin /* Application-specific semantics, lo */ 1342*5c0de15dSLoGin #define GNU_PROPERTY_LOUSER 0xe0000000 1343*5c0de15dSLoGin /* Application-specific semantics, hi */ 1344*5c0de15dSLoGin #define GNU_PROPERTY_HIUSER 0xffffffff 1345*5c0de15dSLoGin 1346*5c0de15dSLoGin /* AArch64 specific GNU properties. */ 1347*5c0de15dSLoGin #define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 1348*5c0de15dSLoGin 1349*5c0de15dSLoGin #define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1U << 0) 1350*5c0de15dSLoGin #define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1) 1351*5c0de15dSLoGin 1352*5c0de15dSLoGin /* The x86 instruction sets indicated by the corresponding bits are 1353*5c0de15dSLoGin used in program. Their support in the hardware is optional. */ 1354*5c0de15dSLoGin #define GNU_PROPERTY_X86_ISA_1_USED 0xc0010002 1355*5c0de15dSLoGin /* The x86 instruction sets indicated by the corresponding bits are 1356*5c0de15dSLoGin used in program and they must be supported by the hardware. */ 1357*5c0de15dSLoGin #define GNU_PROPERTY_X86_ISA_1_NEEDED 0xc0008002 1358*5c0de15dSLoGin /* X86 processor-specific features used in program. */ 1359*5c0de15dSLoGin #define GNU_PROPERTY_X86_FEATURE_1_AND 0xc0000002 1360*5c0de15dSLoGin 1361*5c0de15dSLoGin /* GNU_PROPERTY_X86_ISA_1_BASELINE: CMOV, CX8 (cmpxchg8b), FPU (fld), 1362*5c0de15dSLoGin MMX, OSFXSR (fxsave), SCE (syscall), SSE and SSE2. */ 1363*5c0de15dSLoGin #define GNU_PROPERTY_X86_ISA_1_BASELINE (1U << 0) 1364*5c0de15dSLoGin /* GNU_PROPERTY_X86_ISA_1_V2: GNU_PROPERTY_X86_ISA_1_BASELINE, 1365*5c0de15dSLoGin CMPXCHG16B (cmpxchg16b), LAHF-SAHF (lahf), POPCNT (popcnt), SSE3, 1366*5c0de15dSLoGin SSSE3, SSE4.1 and SSE4.2. */ 1367*5c0de15dSLoGin #define GNU_PROPERTY_X86_ISA_1_V2 (1U << 1) 1368*5c0de15dSLoGin /* GNU_PROPERTY_X86_ISA_1_V3: GNU_PROPERTY_X86_ISA_1_V2, AVX, AVX2, BMI1, 1369*5c0de15dSLoGin BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE. */ 1370*5c0de15dSLoGin #define GNU_PROPERTY_X86_ISA_1_V3 (1U << 2) 1371*5c0de15dSLoGin /* GNU_PROPERTY_X86_ISA_1_V4: GNU_PROPERTY_X86_ISA_1_V3, AVX512F, 1372*5c0de15dSLoGin AVX512BW, AVX512CD, AVX512DQ and AVX512VL. */ 1373*5c0de15dSLoGin #define GNU_PROPERTY_X86_ISA_1_V4 (1U << 3) 1374*5c0de15dSLoGin 1375*5c0de15dSLoGin /* This indicates that all executable sections are compatible with 1376*5c0de15dSLoGin IBT. */ 1377*5c0de15dSLoGin #define GNU_PROPERTY_X86_FEATURE_1_IBT (1U << 0) 1378*5c0de15dSLoGin /* This indicates that all executable sections are compatible with 1379*5c0de15dSLoGin SHSTK. */ 1380*5c0de15dSLoGin #define GNU_PROPERTY_X86_FEATURE_1_SHSTK (1U << 1) 1381*5c0de15dSLoGin 1382*5c0de15dSLoGin /* Move records. */ 1383*5c0de15dSLoGin typedef struct 1384*5c0de15dSLoGin { 1385*5c0de15dSLoGin Elf32_Xword m_value; /* Symbol value. */ 1386*5c0de15dSLoGin Elf32_Word m_info; /* Size and index. */ 1387*5c0de15dSLoGin Elf32_Word m_poffset; /* Symbol offset. */ 1388*5c0de15dSLoGin Elf32_Half m_repeat; /* Repeat count. */ 1389*5c0de15dSLoGin Elf32_Half m_stride; /* Stride info. */ 1390*5c0de15dSLoGin } Elf32_Move; 1391*5c0de15dSLoGin 1392*5c0de15dSLoGin typedef struct 1393*5c0de15dSLoGin { 1394*5c0de15dSLoGin Elf64_Xword m_value; /* Symbol value. */ 1395*5c0de15dSLoGin Elf64_Xword m_info; /* Size and index. */ 1396*5c0de15dSLoGin Elf64_Xword m_poffset; /* Symbol offset. */ 1397*5c0de15dSLoGin Elf64_Half m_repeat; /* Repeat count. */ 1398*5c0de15dSLoGin Elf64_Half m_stride; /* Stride info. */ 1399*5c0de15dSLoGin } Elf64_Move; 1400*5c0de15dSLoGin 1401*5c0de15dSLoGin /* Macro to construct move records. */ 1402*5c0de15dSLoGin #define ELF32_M_SYM(info) ((info) >> 8) 1403*5c0de15dSLoGin #define ELF32_M_SIZE(info) ((unsigned char) (info)) 1404*5c0de15dSLoGin #define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char) (size)) 1405*5c0de15dSLoGin 1406*5c0de15dSLoGin #define ELF64_M_SYM(info) ELF32_M_SYM (info) 1407*5c0de15dSLoGin #define ELF64_M_SIZE(info) ELF32_M_SIZE (info) 1408*5c0de15dSLoGin #define ELF64_M_INFO(sym, size) ELF32_M_INFO (sym, size) 1409*5c0de15dSLoGin 1410*5c0de15dSLoGin 1411*5c0de15dSLoGin /* Motorola 68k specific definitions. */ 1412*5c0de15dSLoGin 1413*5c0de15dSLoGin /* Values for Elf32_Ehdr.e_flags. */ 1414*5c0de15dSLoGin #define EF_CPU32 0x00810000 1415*5c0de15dSLoGin 1416*5c0de15dSLoGin /* m68k relocs. */ 1417*5c0de15dSLoGin 1418*5c0de15dSLoGin #define R_68K_NONE 0 /* No reloc */ 1419*5c0de15dSLoGin #define R_68K_32 1 /* Direct 32 bit */ 1420*5c0de15dSLoGin #define R_68K_16 2 /* Direct 16 bit */ 1421*5c0de15dSLoGin #define R_68K_8 3 /* Direct 8 bit */ 1422*5c0de15dSLoGin #define R_68K_PC32 4 /* PC relative 32 bit */ 1423*5c0de15dSLoGin #define R_68K_PC16 5 /* PC relative 16 bit */ 1424*5c0de15dSLoGin #define R_68K_PC8 6 /* PC relative 8 bit */ 1425*5c0de15dSLoGin #define R_68K_GOT32 7 /* 32 bit PC relative GOT entry */ 1426*5c0de15dSLoGin #define R_68K_GOT16 8 /* 16 bit PC relative GOT entry */ 1427*5c0de15dSLoGin #define R_68K_GOT8 9 /* 8 bit PC relative GOT entry */ 1428*5c0de15dSLoGin #define R_68K_GOT32O 10 /* 32 bit GOT offset */ 1429*5c0de15dSLoGin #define R_68K_GOT16O 11 /* 16 bit GOT offset */ 1430*5c0de15dSLoGin #define R_68K_GOT8O 12 /* 8 bit GOT offset */ 1431*5c0de15dSLoGin #define R_68K_PLT32 13 /* 32 bit PC relative PLT address */ 1432*5c0de15dSLoGin #define R_68K_PLT16 14 /* 16 bit PC relative PLT address */ 1433*5c0de15dSLoGin #define R_68K_PLT8 15 /* 8 bit PC relative PLT address */ 1434*5c0de15dSLoGin #define R_68K_PLT32O 16 /* 32 bit PLT offset */ 1435*5c0de15dSLoGin #define R_68K_PLT16O 17 /* 16 bit PLT offset */ 1436*5c0de15dSLoGin #define R_68K_PLT8O 18 /* 8 bit PLT offset */ 1437*5c0de15dSLoGin #define R_68K_COPY 19 /* Copy symbol at runtime */ 1438*5c0de15dSLoGin #define R_68K_GLOB_DAT 20 /* Create GOT entry */ 1439*5c0de15dSLoGin #define R_68K_JMP_SLOT 21 /* Create PLT entry */ 1440*5c0de15dSLoGin #define R_68K_RELATIVE 22 /* Adjust by program base */ 1441*5c0de15dSLoGin #define R_68K_TLS_GD32 25 /* 32 bit GOT offset for GD */ 1442*5c0de15dSLoGin #define R_68K_TLS_GD16 26 /* 16 bit GOT offset for GD */ 1443*5c0de15dSLoGin #define R_68K_TLS_GD8 27 /* 8 bit GOT offset for GD */ 1444*5c0de15dSLoGin #define R_68K_TLS_LDM32 28 /* 32 bit GOT offset for LDM */ 1445*5c0de15dSLoGin #define R_68K_TLS_LDM16 29 /* 16 bit GOT offset for LDM */ 1446*5c0de15dSLoGin #define R_68K_TLS_LDM8 30 /* 8 bit GOT offset for LDM */ 1447*5c0de15dSLoGin #define R_68K_TLS_LDO32 31 /* 32 bit module-relative offset */ 1448*5c0de15dSLoGin #define R_68K_TLS_LDO16 32 /* 16 bit module-relative offset */ 1449*5c0de15dSLoGin #define R_68K_TLS_LDO8 33 /* 8 bit module-relative offset */ 1450*5c0de15dSLoGin #define R_68K_TLS_IE32 34 /* 32 bit GOT offset for IE */ 1451*5c0de15dSLoGin #define R_68K_TLS_IE16 35 /* 16 bit GOT offset for IE */ 1452*5c0de15dSLoGin #define R_68K_TLS_IE8 36 /* 8 bit GOT offset for IE */ 1453*5c0de15dSLoGin #define R_68K_TLS_LE32 37 /* 32 bit offset relative to 1454*5c0de15dSLoGin static TLS block */ 1455*5c0de15dSLoGin #define R_68K_TLS_LE16 38 /* 16 bit offset relative to 1456*5c0de15dSLoGin static TLS block */ 1457*5c0de15dSLoGin #define R_68K_TLS_LE8 39 /* 8 bit offset relative to 1458*5c0de15dSLoGin static TLS block */ 1459*5c0de15dSLoGin #define R_68K_TLS_DTPMOD32 40 /* 32 bit module number */ 1460*5c0de15dSLoGin #define R_68K_TLS_DTPREL32 41 /* 32 bit module-relative offset */ 1461*5c0de15dSLoGin #define R_68K_TLS_TPREL32 42 /* 32 bit TP-relative offset */ 1462*5c0de15dSLoGin /* Keep this the last entry. */ 1463*5c0de15dSLoGin #define R_68K_NUM 43 1464*5c0de15dSLoGin 1465*5c0de15dSLoGin /* Intel 80386 specific definitions. */ 1466*5c0de15dSLoGin 1467*5c0de15dSLoGin /* i386 relocs. */ 1468*5c0de15dSLoGin 1469*5c0de15dSLoGin #define R_386_NONE 0 /* No reloc */ 1470*5c0de15dSLoGin #define R_386_32 1 /* Direct 32 bit */ 1471*5c0de15dSLoGin #define R_386_PC32 2 /* PC relative 32 bit */ 1472*5c0de15dSLoGin #define R_386_GOT32 3 /* 32 bit GOT entry */ 1473*5c0de15dSLoGin #define R_386_PLT32 4 /* 32 bit PLT address */ 1474*5c0de15dSLoGin #define R_386_COPY 5 /* Copy symbol at runtime */ 1475*5c0de15dSLoGin #define R_386_GLOB_DAT 6 /* Create GOT entry */ 1476*5c0de15dSLoGin #define R_386_JMP_SLOT 7 /* Create PLT entry */ 1477*5c0de15dSLoGin #define R_386_RELATIVE 8 /* Adjust by program base */ 1478*5c0de15dSLoGin #define R_386_GOTOFF 9 /* 32 bit offset to GOT */ 1479*5c0de15dSLoGin #define R_386_GOTPC 10 /* 32 bit PC relative offset to GOT */ 1480*5c0de15dSLoGin #define R_386_32PLT 11 1481*5c0de15dSLoGin #define R_386_TLS_TPOFF 14 /* Offset in static TLS block */ 1482*5c0de15dSLoGin #define R_386_TLS_IE 15 /* Address of GOT entry for static TLS 1483*5c0de15dSLoGin block offset */ 1484*5c0de15dSLoGin #define R_386_TLS_GOTIE 16 /* GOT entry for static TLS block 1485*5c0de15dSLoGin offset */ 1486*5c0de15dSLoGin #define R_386_TLS_LE 17 /* Offset relative to static TLS 1487*5c0de15dSLoGin block */ 1488*5c0de15dSLoGin #define R_386_TLS_GD 18 /* Direct 32 bit for GNU version of 1489*5c0de15dSLoGin general dynamic thread local data */ 1490*5c0de15dSLoGin #define R_386_TLS_LDM 19 /* Direct 32 bit for GNU version of 1491*5c0de15dSLoGin local dynamic thread local data 1492*5c0de15dSLoGin in LE code */ 1493*5c0de15dSLoGin #define R_386_16 20 1494*5c0de15dSLoGin #define R_386_PC16 21 1495*5c0de15dSLoGin #define R_386_8 22 1496*5c0de15dSLoGin #define R_386_PC8 23 1497*5c0de15dSLoGin #define R_386_TLS_GD_32 24 /* Direct 32 bit for general dynamic 1498*5c0de15dSLoGin thread local data */ 1499*5c0de15dSLoGin #define R_386_TLS_GD_PUSH 25 /* Tag for pushl in GD TLS code */ 1500*5c0de15dSLoGin #define R_386_TLS_GD_CALL 26 /* Relocation for call to 1501*5c0de15dSLoGin __tls_get_addr() */ 1502*5c0de15dSLoGin #define R_386_TLS_GD_POP 27 /* Tag for popl in GD TLS code */ 1503*5c0de15dSLoGin #define R_386_TLS_LDM_32 28 /* Direct 32 bit for local dynamic 1504*5c0de15dSLoGin thread local data in LE code */ 1505*5c0de15dSLoGin #define R_386_TLS_LDM_PUSH 29 /* Tag for pushl in LDM TLS code */ 1506*5c0de15dSLoGin #define R_386_TLS_LDM_CALL 30 /* Relocation for call to 1507*5c0de15dSLoGin __tls_get_addr() in LDM code */ 1508*5c0de15dSLoGin #define R_386_TLS_LDM_POP 31 /* Tag for popl in LDM TLS code */ 1509*5c0de15dSLoGin #define R_386_TLS_LDO_32 32 /* Offset relative to TLS block */ 1510*5c0de15dSLoGin #define R_386_TLS_IE_32 33 /* GOT entry for negated static TLS 1511*5c0de15dSLoGin block offset */ 1512*5c0de15dSLoGin #define R_386_TLS_LE_32 34 /* Negated offset relative to static 1513*5c0de15dSLoGin TLS block */ 1514*5c0de15dSLoGin #define R_386_TLS_DTPMOD32 35 /* ID of module containing symbol */ 1515*5c0de15dSLoGin #define R_386_TLS_DTPOFF32 36 /* Offset in TLS block */ 1516*5c0de15dSLoGin #define R_386_TLS_TPOFF32 37 /* Negated offset in static TLS block */ 1517*5c0de15dSLoGin #define R_386_SIZE32 38 /* 32-bit symbol size */ 1518*5c0de15dSLoGin #define R_386_TLS_GOTDESC 39 /* GOT offset for TLS descriptor. */ 1519*5c0de15dSLoGin #define R_386_TLS_DESC_CALL 40 /* Marker of call through TLS 1520*5c0de15dSLoGin descriptor for 1521*5c0de15dSLoGin relaxation. */ 1522*5c0de15dSLoGin #define R_386_TLS_DESC 41 /* TLS descriptor containing 1523*5c0de15dSLoGin pointer to code and to 1524*5c0de15dSLoGin argument, returning the TLS 1525*5c0de15dSLoGin offset for the symbol. */ 1526*5c0de15dSLoGin #define R_386_IRELATIVE 42 /* Adjust indirectly by program base */ 1527*5c0de15dSLoGin #define R_386_GOT32X 43 /* Load from 32 bit GOT entry, 1528*5c0de15dSLoGin relaxable. */ 1529*5c0de15dSLoGin /* Keep this the last entry. */ 1530*5c0de15dSLoGin #define R_386_NUM 44 1531*5c0de15dSLoGin 1532*5c0de15dSLoGin /* SUN SPARC specific definitions. */ 1533*5c0de15dSLoGin 1534*5c0de15dSLoGin /* Legal values for ST_TYPE subfield of st_info (symbol type). */ 1535*5c0de15dSLoGin 1536*5c0de15dSLoGin #define STT_SPARC_REGISTER 13 /* Global register reserved to app. */ 1537*5c0de15dSLoGin 1538*5c0de15dSLoGin /* Values for Elf64_Ehdr.e_flags. */ 1539*5c0de15dSLoGin 1540*5c0de15dSLoGin #define EF_SPARCV9_MM 3 1541*5c0de15dSLoGin #define EF_SPARCV9_TSO 0 1542*5c0de15dSLoGin #define EF_SPARCV9_PSO 1 1543*5c0de15dSLoGin #define EF_SPARCV9_RMO 2 1544*5c0de15dSLoGin #define EF_SPARC_LEDATA 0x800000 /* little endian data */ 1545*5c0de15dSLoGin #define EF_SPARC_EXT_MASK 0xFFFF00 1546*5c0de15dSLoGin #define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */ 1547*5c0de15dSLoGin #define EF_SPARC_SUN_US1 0x000200 /* Sun UltraSPARC1 extensions */ 1548*5c0de15dSLoGin #define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */ 1549*5c0de15dSLoGin #define EF_SPARC_SUN_US3 0x000800 /* Sun UltraSPARCIII extensions */ 1550*5c0de15dSLoGin 1551*5c0de15dSLoGin /* SPARC relocs. */ 1552*5c0de15dSLoGin 1553*5c0de15dSLoGin #define R_SPARC_NONE 0 /* No reloc */ 1554*5c0de15dSLoGin #define R_SPARC_8 1 /* Direct 8 bit */ 1555*5c0de15dSLoGin #define R_SPARC_16 2 /* Direct 16 bit */ 1556*5c0de15dSLoGin #define R_SPARC_32 3 /* Direct 32 bit */ 1557*5c0de15dSLoGin #define R_SPARC_DISP8 4 /* PC relative 8 bit */ 1558*5c0de15dSLoGin #define R_SPARC_DISP16 5 /* PC relative 16 bit */ 1559*5c0de15dSLoGin #define R_SPARC_DISP32 6 /* PC relative 32 bit */ 1560*5c0de15dSLoGin #define R_SPARC_WDISP30 7 /* PC relative 30 bit shifted */ 1561*5c0de15dSLoGin #define R_SPARC_WDISP22 8 /* PC relative 22 bit shifted */ 1562*5c0de15dSLoGin #define R_SPARC_HI22 9 /* High 22 bit */ 1563*5c0de15dSLoGin #define R_SPARC_22 10 /* Direct 22 bit */ 1564*5c0de15dSLoGin #define R_SPARC_13 11 /* Direct 13 bit */ 1565*5c0de15dSLoGin #define R_SPARC_LO10 12 /* Truncated 10 bit */ 1566*5c0de15dSLoGin #define R_SPARC_GOT10 13 /* Truncated 10 bit GOT entry */ 1567*5c0de15dSLoGin #define R_SPARC_GOT13 14 /* 13 bit GOT entry */ 1568*5c0de15dSLoGin #define R_SPARC_GOT22 15 /* 22 bit GOT entry shifted */ 1569*5c0de15dSLoGin #define R_SPARC_PC10 16 /* PC relative 10 bit truncated */ 1570*5c0de15dSLoGin #define R_SPARC_PC22 17 /* PC relative 22 bit shifted */ 1571*5c0de15dSLoGin #define R_SPARC_WPLT30 18 /* 30 bit PC relative PLT address */ 1572*5c0de15dSLoGin #define R_SPARC_COPY 19 /* Copy symbol at runtime */ 1573*5c0de15dSLoGin #define R_SPARC_GLOB_DAT 20 /* Create GOT entry */ 1574*5c0de15dSLoGin #define R_SPARC_JMP_SLOT 21 /* Create PLT entry */ 1575*5c0de15dSLoGin #define R_SPARC_RELATIVE 22 /* Adjust by program base */ 1576*5c0de15dSLoGin #define R_SPARC_UA32 23 /* Direct 32 bit unaligned */ 1577*5c0de15dSLoGin 1578*5c0de15dSLoGin /* Additional Sparc64 relocs. */ 1579*5c0de15dSLoGin 1580*5c0de15dSLoGin #define R_SPARC_PLT32 24 /* Direct 32 bit ref to PLT entry */ 1581*5c0de15dSLoGin #define R_SPARC_HIPLT22 25 /* High 22 bit PLT entry */ 1582*5c0de15dSLoGin #define R_SPARC_LOPLT10 26 /* Truncated 10 bit PLT entry */ 1583*5c0de15dSLoGin #define R_SPARC_PCPLT32 27 /* PC rel 32 bit ref to PLT entry */ 1584*5c0de15dSLoGin #define R_SPARC_PCPLT22 28 /* PC rel high 22 bit PLT entry */ 1585*5c0de15dSLoGin #define R_SPARC_PCPLT10 29 /* PC rel trunc 10 bit PLT entry */ 1586*5c0de15dSLoGin #define R_SPARC_10 30 /* Direct 10 bit */ 1587*5c0de15dSLoGin #define R_SPARC_11 31 /* Direct 11 bit */ 1588*5c0de15dSLoGin #define R_SPARC_64 32 /* Direct 64 bit */ 1589*5c0de15dSLoGin #define R_SPARC_OLO10 33 /* 10bit with secondary 13bit addend */ 1590*5c0de15dSLoGin #define R_SPARC_HH22 34 /* Top 22 bits of direct 64 bit */ 1591*5c0de15dSLoGin #define R_SPARC_HM10 35 /* High middle 10 bits of ... */ 1592*5c0de15dSLoGin #define R_SPARC_LM22 36 /* Low middle 22 bits of ... */ 1593*5c0de15dSLoGin #define R_SPARC_PC_HH22 37 /* Top 22 bits of pc rel 64 bit */ 1594*5c0de15dSLoGin #define R_SPARC_PC_HM10 38 /* High middle 10 bit of ... */ 1595*5c0de15dSLoGin #define R_SPARC_PC_LM22 39 /* Low miggle 22 bits of ... */ 1596*5c0de15dSLoGin #define R_SPARC_WDISP16 40 /* PC relative 16 bit shifted */ 1597*5c0de15dSLoGin #define R_SPARC_WDISP19 41 /* PC relative 19 bit shifted */ 1598*5c0de15dSLoGin #define R_SPARC_GLOB_JMP 42 /* was part of v9 ABI but was removed */ 1599*5c0de15dSLoGin #define R_SPARC_7 43 /* Direct 7 bit */ 1600*5c0de15dSLoGin #define R_SPARC_5 44 /* Direct 5 bit */ 1601*5c0de15dSLoGin #define R_SPARC_6 45 /* Direct 6 bit */ 1602*5c0de15dSLoGin #define R_SPARC_DISP64 46 /* PC relative 64 bit */ 1603*5c0de15dSLoGin #define R_SPARC_PLT64 47 /* Direct 64 bit ref to PLT entry */ 1604*5c0de15dSLoGin #define R_SPARC_HIX22 48 /* High 22 bit complemented */ 1605*5c0de15dSLoGin #define R_SPARC_LOX10 49 /* Truncated 11 bit complemented */ 1606*5c0de15dSLoGin #define R_SPARC_H44 50 /* Direct high 12 of 44 bit */ 1607*5c0de15dSLoGin #define R_SPARC_M44 51 /* Direct mid 22 of 44 bit */ 1608*5c0de15dSLoGin #define R_SPARC_L44 52 /* Direct low 10 of 44 bit */ 1609*5c0de15dSLoGin #define R_SPARC_REGISTER 53 /* Global register usage */ 1610*5c0de15dSLoGin #define R_SPARC_UA64 54 /* Direct 64 bit unaligned */ 1611*5c0de15dSLoGin #define R_SPARC_UA16 55 /* Direct 16 bit unaligned */ 1612*5c0de15dSLoGin #define R_SPARC_TLS_GD_HI22 56 1613*5c0de15dSLoGin #define R_SPARC_TLS_GD_LO10 57 1614*5c0de15dSLoGin #define R_SPARC_TLS_GD_ADD 58 1615*5c0de15dSLoGin #define R_SPARC_TLS_GD_CALL 59 1616*5c0de15dSLoGin #define R_SPARC_TLS_LDM_HI22 60 1617*5c0de15dSLoGin #define R_SPARC_TLS_LDM_LO10 61 1618*5c0de15dSLoGin #define R_SPARC_TLS_LDM_ADD 62 1619*5c0de15dSLoGin #define R_SPARC_TLS_LDM_CALL 63 1620*5c0de15dSLoGin #define R_SPARC_TLS_LDO_HIX22 64 1621*5c0de15dSLoGin #define R_SPARC_TLS_LDO_LOX10 65 1622*5c0de15dSLoGin #define R_SPARC_TLS_LDO_ADD 66 1623*5c0de15dSLoGin #define R_SPARC_TLS_IE_HI22 67 1624*5c0de15dSLoGin #define R_SPARC_TLS_IE_LO10 68 1625*5c0de15dSLoGin #define R_SPARC_TLS_IE_LD 69 1626*5c0de15dSLoGin #define R_SPARC_TLS_IE_LDX 70 1627*5c0de15dSLoGin #define R_SPARC_TLS_IE_ADD 71 1628*5c0de15dSLoGin #define R_SPARC_TLS_LE_HIX22 72 1629*5c0de15dSLoGin #define R_SPARC_TLS_LE_LOX10 73 1630*5c0de15dSLoGin #define R_SPARC_TLS_DTPMOD32 74 1631*5c0de15dSLoGin #define R_SPARC_TLS_DTPMOD64 75 1632*5c0de15dSLoGin #define R_SPARC_TLS_DTPOFF32 76 1633*5c0de15dSLoGin #define R_SPARC_TLS_DTPOFF64 77 1634*5c0de15dSLoGin #define R_SPARC_TLS_TPOFF32 78 1635*5c0de15dSLoGin #define R_SPARC_TLS_TPOFF64 79 1636*5c0de15dSLoGin #define R_SPARC_GOTDATA_HIX22 80 1637*5c0de15dSLoGin #define R_SPARC_GOTDATA_LOX10 81 1638*5c0de15dSLoGin #define R_SPARC_GOTDATA_OP_HIX22 82 1639*5c0de15dSLoGin #define R_SPARC_GOTDATA_OP_LOX10 83 1640*5c0de15dSLoGin #define R_SPARC_GOTDATA_OP 84 1641*5c0de15dSLoGin #define R_SPARC_H34 85 1642*5c0de15dSLoGin #define R_SPARC_SIZE32 86 1643*5c0de15dSLoGin #define R_SPARC_SIZE64 87 1644*5c0de15dSLoGin #define R_SPARC_WDISP10 88 1645*5c0de15dSLoGin #define R_SPARC_JMP_IREL 248 1646*5c0de15dSLoGin #define R_SPARC_IRELATIVE 249 1647*5c0de15dSLoGin #define R_SPARC_GNU_VTINHERIT 250 1648*5c0de15dSLoGin #define R_SPARC_GNU_VTENTRY 251 1649*5c0de15dSLoGin #define R_SPARC_REV32 252 1650*5c0de15dSLoGin /* Keep this the last entry. */ 1651*5c0de15dSLoGin #define R_SPARC_NUM 253 1652*5c0de15dSLoGin 1653*5c0de15dSLoGin /* For Sparc64, legal values for d_tag of Elf64_Dyn. */ 1654*5c0de15dSLoGin 1655*5c0de15dSLoGin #define DT_SPARC_REGISTER 0x70000001 1656*5c0de15dSLoGin #define DT_SPARC_NUM 2 1657*5c0de15dSLoGin 1658*5c0de15dSLoGin /* MIPS R3000 specific definitions. */ 1659*5c0de15dSLoGin 1660*5c0de15dSLoGin /* Legal values for e_flags field of Elf32_Ehdr. */ 1661*5c0de15dSLoGin 1662*5c0de15dSLoGin #define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used. */ 1663*5c0de15dSLoGin #define EF_MIPS_PIC 2 /* Contains PIC code. */ 1664*5c0de15dSLoGin #define EF_MIPS_CPIC 4 /* Uses PIC calling sequence. */ 1665*5c0de15dSLoGin #define EF_MIPS_XGOT 8 1666*5c0de15dSLoGin #define EF_MIPS_64BIT_WHIRL 16 1667*5c0de15dSLoGin #define EF_MIPS_ABI2 32 1668*5c0de15dSLoGin #define EF_MIPS_ABI_ON32 64 1669*5c0de15dSLoGin #define EF_MIPS_FP64 512 /* Uses FP64 (12 callee-saved). */ 1670*5c0de15dSLoGin #define EF_MIPS_NAN2008 1024 /* Uses IEEE 754-2008 NaN encoding. */ 1671*5c0de15dSLoGin #define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level. */ 1672*5c0de15dSLoGin 1673*5c0de15dSLoGin /* Legal values for MIPS architecture level. */ 1674*5c0de15dSLoGin 1675*5c0de15dSLoGin #define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ 1676*5c0de15dSLoGin #define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ 1677*5c0de15dSLoGin #define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ 1678*5c0de15dSLoGin #define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code. */ 1679*5c0de15dSLoGin #define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */ 1680*5c0de15dSLoGin #define EF_MIPS_ARCH_32 0x50000000 /* MIPS32 code. */ 1681*5c0de15dSLoGin #define EF_MIPS_ARCH_64 0x60000000 /* MIPS64 code. */ 1682*5c0de15dSLoGin #define EF_MIPS_ARCH_32R2 0x70000000 /* MIPS32r2 code. */ 1683*5c0de15dSLoGin #define EF_MIPS_ARCH_64R2 0x80000000 /* MIPS64r2 code. */ 1684*5c0de15dSLoGin 1685*5c0de15dSLoGin /* The following are unofficial names and should not be used. */ 1686*5c0de15dSLoGin 1687*5c0de15dSLoGin #define E_MIPS_ARCH_1 EF_MIPS_ARCH_1 1688*5c0de15dSLoGin #define E_MIPS_ARCH_2 EF_MIPS_ARCH_2 1689*5c0de15dSLoGin #define E_MIPS_ARCH_3 EF_MIPS_ARCH_3 1690*5c0de15dSLoGin #define E_MIPS_ARCH_4 EF_MIPS_ARCH_4 1691*5c0de15dSLoGin #define E_MIPS_ARCH_5 EF_MIPS_ARCH_5 1692*5c0de15dSLoGin #define E_MIPS_ARCH_32 EF_MIPS_ARCH_32 1693*5c0de15dSLoGin #define E_MIPS_ARCH_64 EF_MIPS_ARCH_64 1694*5c0de15dSLoGin 1695*5c0de15dSLoGin /* Special section indices. */ 1696*5c0de15dSLoGin 1697*5c0de15dSLoGin #define SHN_MIPS_ACOMMON 0xff00 /* Allocated common symbols. */ 1698*5c0de15dSLoGin #define SHN_MIPS_TEXT 0xff01 /* Allocated test symbols. */ 1699*5c0de15dSLoGin #define SHN_MIPS_DATA 0xff02 /* Allocated data symbols. */ 1700*5c0de15dSLoGin #define SHN_MIPS_SCOMMON 0xff03 /* Small common symbols. */ 1701*5c0de15dSLoGin #define SHN_MIPS_SUNDEFINED 0xff04 /* Small undefined symbols. */ 1702*5c0de15dSLoGin 1703*5c0de15dSLoGin /* Legal values for sh_type field of Elf32_Shdr. */ 1704*5c0de15dSLoGin 1705*5c0de15dSLoGin #define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link. */ 1706*5c0de15dSLoGin #define SHT_MIPS_MSYM 0x70000001 1707*5c0de15dSLoGin #define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols. */ 1708*5c0de15dSLoGin #define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes. */ 1709*5c0de15dSLoGin #define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */ 1710*5c0de15dSLoGin #define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging info. */ 1711*5c0de15dSLoGin #define SHT_MIPS_REGINFO 0x70000006 /* Register usage information. */ 1712*5c0de15dSLoGin #define SHT_MIPS_PACKAGE 0x70000007 1713*5c0de15dSLoGin #define SHT_MIPS_PACKSYM 0x70000008 1714*5c0de15dSLoGin #define SHT_MIPS_RELD 0x70000009 1715*5c0de15dSLoGin #define SHT_MIPS_IFACE 0x7000000b 1716*5c0de15dSLoGin #define SHT_MIPS_CONTENT 0x7000000c 1717*5c0de15dSLoGin #define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */ 1718*5c0de15dSLoGin #define SHT_MIPS_SHDR 0x70000010 1719*5c0de15dSLoGin #define SHT_MIPS_FDESC 0x70000011 1720*5c0de15dSLoGin #define SHT_MIPS_EXTSYM 0x70000012 1721*5c0de15dSLoGin #define SHT_MIPS_DENSE 0x70000013 1722*5c0de15dSLoGin #define SHT_MIPS_PDESC 0x70000014 1723*5c0de15dSLoGin #define SHT_MIPS_LOCSYM 0x70000015 1724*5c0de15dSLoGin #define SHT_MIPS_AUXSYM 0x70000016 1725*5c0de15dSLoGin #define SHT_MIPS_OPTSYM 0x70000017 1726*5c0de15dSLoGin #define SHT_MIPS_LOCSTR 0x70000018 1727*5c0de15dSLoGin #define SHT_MIPS_LINE 0x70000019 1728*5c0de15dSLoGin #define SHT_MIPS_RFDESC 0x7000001a 1729*5c0de15dSLoGin #define SHT_MIPS_DELTASYM 0x7000001b 1730*5c0de15dSLoGin #define SHT_MIPS_DELTAINST 0x7000001c 1731*5c0de15dSLoGin #define SHT_MIPS_DELTACLASS 0x7000001d 1732*5c0de15dSLoGin #define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */ 1733*5c0de15dSLoGin #define SHT_MIPS_DELTADECL 0x7000001f 1734*5c0de15dSLoGin #define SHT_MIPS_SYMBOL_LIB 0x70000020 1735*5c0de15dSLoGin #define SHT_MIPS_EVENTS 0x70000021 /* Event section. */ 1736*5c0de15dSLoGin #define SHT_MIPS_TRANSLATE 0x70000022 1737*5c0de15dSLoGin #define SHT_MIPS_PIXIE 0x70000023 1738*5c0de15dSLoGin #define SHT_MIPS_XLATE 0x70000024 1739*5c0de15dSLoGin #define SHT_MIPS_XLATE_DEBUG 0x70000025 1740*5c0de15dSLoGin #define SHT_MIPS_WHIRL 0x70000026 1741*5c0de15dSLoGin #define SHT_MIPS_EH_REGION 0x70000027 1742*5c0de15dSLoGin #define SHT_MIPS_XLATE_OLD 0x70000028 1743*5c0de15dSLoGin #define SHT_MIPS_PDR_EXCEPTION 0x70000029 1744*5c0de15dSLoGin #define SHT_MIPS_XHASH 0x7000002b 1745*5c0de15dSLoGin 1746*5c0de15dSLoGin /* Legal values for sh_flags field of Elf32_Shdr. */ 1747*5c0de15dSLoGin 1748*5c0de15dSLoGin #define SHF_MIPS_GPREL 0x10000000 /* Must be in global data area. */ 1749*5c0de15dSLoGin #define SHF_MIPS_MERGE 0x20000000 1750*5c0de15dSLoGin #define SHF_MIPS_ADDR 0x40000000 1751*5c0de15dSLoGin #define SHF_MIPS_STRINGS 0x80000000 1752*5c0de15dSLoGin #define SHF_MIPS_NOSTRIP 0x08000000 1753*5c0de15dSLoGin #define SHF_MIPS_LOCAL 0x04000000 1754*5c0de15dSLoGin #define SHF_MIPS_NAMES 0x02000000 1755*5c0de15dSLoGin #define SHF_MIPS_NODUPE 0x01000000 1756*5c0de15dSLoGin 1757*5c0de15dSLoGin 1758*5c0de15dSLoGin /* Symbol tables. */ 1759*5c0de15dSLoGin 1760*5c0de15dSLoGin /* MIPS specific values for `st_other'. */ 1761*5c0de15dSLoGin #define STO_MIPS_DEFAULT 0x0 1762*5c0de15dSLoGin #define STO_MIPS_INTERNAL 0x1 1763*5c0de15dSLoGin #define STO_MIPS_HIDDEN 0x2 1764*5c0de15dSLoGin #define STO_MIPS_PROTECTED 0x3 1765*5c0de15dSLoGin #define STO_MIPS_PLT 0x8 1766*5c0de15dSLoGin #define STO_MIPS_SC_ALIGN_UNUSED 0xff 1767*5c0de15dSLoGin 1768*5c0de15dSLoGin /* MIPS specific values for `st_info'. */ 1769*5c0de15dSLoGin #define STB_MIPS_SPLIT_COMMON 13 1770*5c0de15dSLoGin 1771*5c0de15dSLoGin /* Entries found in sections of type SHT_MIPS_GPTAB. */ 1772*5c0de15dSLoGin 1773*5c0de15dSLoGin typedef union 1774*5c0de15dSLoGin { 1775*5c0de15dSLoGin struct 1776*5c0de15dSLoGin { 1777*5c0de15dSLoGin Elf32_Word gt_current_g_value; /* -G value used for compilation. */ 1778*5c0de15dSLoGin Elf32_Word gt_unused; /* Not used. */ 1779*5c0de15dSLoGin } gt_header; /* First entry in section. */ 1780*5c0de15dSLoGin struct 1781*5c0de15dSLoGin { 1782*5c0de15dSLoGin Elf32_Word gt_g_value; /* If this value were used for -G. */ 1783*5c0de15dSLoGin Elf32_Word gt_bytes; /* This many bytes would be used. */ 1784*5c0de15dSLoGin } gt_entry; /* Subsequent entries in section. */ 1785*5c0de15dSLoGin } Elf32_gptab; 1786*5c0de15dSLoGin 1787*5c0de15dSLoGin /* Entry found in sections of type SHT_MIPS_REGINFO. */ 1788*5c0de15dSLoGin 1789*5c0de15dSLoGin typedef struct 1790*5c0de15dSLoGin { 1791*5c0de15dSLoGin Elf32_Word ri_gprmask; /* General registers used. */ 1792*5c0de15dSLoGin Elf32_Word ri_cprmask[4]; /* Coprocessor registers used. */ 1793*5c0de15dSLoGin Elf32_Sword ri_gp_value; /* $gp register value. */ 1794*5c0de15dSLoGin } Elf32_RegInfo; 1795*5c0de15dSLoGin 1796*5c0de15dSLoGin /* Entries found in sections of type SHT_MIPS_OPTIONS. */ 1797*5c0de15dSLoGin 1798*5c0de15dSLoGin typedef struct 1799*5c0de15dSLoGin { 1800*5c0de15dSLoGin unsigned char kind; /* Determines interpretation of the 1801*5c0de15dSLoGin variable part of descriptor. */ 1802*5c0de15dSLoGin unsigned char size; /* Size of descriptor, including header. */ 1803*5c0de15dSLoGin Elf32_Section section; /* Section header index of section affected, 1804*5c0de15dSLoGin 0 for global options. */ 1805*5c0de15dSLoGin Elf32_Word info; /* Kind-specific information. */ 1806*5c0de15dSLoGin } Elf_Options; 1807*5c0de15dSLoGin 1808*5c0de15dSLoGin /* Values for `kind' field in Elf_Options. */ 1809*5c0de15dSLoGin 1810*5c0de15dSLoGin #define ODK_NULL 0 /* Undefined. */ 1811*5c0de15dSLoGin #define ODK_REGINFO 1 /* Register usage information. */ 1812*5c0de15dSLoGin #define ODK_EXCEPTIONS 2 /* Exception processing options. */ 1813*5c0de15dSLoGin #define ODK_PAD 3 /* Section padding options. */ 1814*5c0de15dSLoGin #define ODK_HWPATCH 4 /* Hardware workarounds performed */ 1815*5c0de15dSLoGin #define ODK_FILL 5 /* record the fill value used by the linker. */ 1816*5c0de15dSLoGin #define ODK_TAGS 6 /* reserve space for desktop tools to write. */ 1817*5c0de15dSLoGin #define ODK_HWAND 7 /* HW workarounds. 'AND' bits when merging. */ 1818*5c0de15dSLoGin #define ODK_HWOR 8 /* HW workarounds. 'OR' bits when merging. */ 1819*5c0de15dSLoGin 1820*5c0de15dSLoGin /* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries. */ 1821*5c0de15dSLoGin 1822*5c0de15dSLoGin #define OEX_FPU_MIN 0x1f /* FPE's which MUST be enabled. */ 1823*5c0de15dSLoGin #define OEX_FPU_MAX 0x1f00 /* FPE's which MAY be enabled. */ 1824*5c0de15dSLoGin #define OEX_PAGE0 0x10000 /* page zero must be mapped. */ 1825*5c0de15dSLoGin #define OEX_SMM 0x20000 /* Force sequential memory mode? */ 1826*5c0de15dSLoGin #define OEX_FPDBUG 0x40000 /* Force floating point debug mode? */ 1827*5c0de15dSLoGin #define OEX_PRECISEFP OEX_FPDBUG 1828*5c0de15dSLoGin #define OEX_DISMISS 0x80000 /* Dismiss invalid address faults? */ 1829*5c0de15dSLoGin 1830*5c0de15dSLoGin #define OEX_FPU_INVAL 0x10 1831*5c0de15dSLoGin #define OEX_FPU_DIV0 0x08 1832*5c0de15dSLoGin #define OEX_FPU_OFLO 0x04 1833*5c0de15dSLoGin #define OEX_FPU_UFLO 0x02 1834*5c0de15dSLoGin #define OEX_FPU_INEX 0x01 1835*5c0de15dSLoGin 1836*5c0de15dSLoGin /* Masks for `info' in Elf_Options for an ODK_HWPATCH entry. */ 1837*5c0de15dSLoGin 1838*5c0de15dSLoGin #define OHW_R4KEOP 0x1 /* R4000 end-of-page patch. */ 1839*5c0de15dSLoGin #define OHW_R8KPFETCH 0x2 /* may need R8000 prefetch patch. */ 1840*5c0de15dSLoGin #define OHW_R5KEOP 0x4 /* R5000 end-of-page patch. */ 1841*5c0de15dSLoGin #define OHW_R5KCVTL 0x8 /* R5000 cvt.[ds].l bug. clean=1. */ 1842*5c0de15dSLoGin 1843*5c0de15dSLoGin #define OPAD_PREFIX 0x1 1844*5c0de15dSLoGin #define OPAD_POSTFIX 0x2 1845*5c0de15dSLoGin #define OPAD_SYMBOL 0x4 1846*5c0de15dSLoGin 1847*5c0de15dSLoGin /* Entry found in `.options' section. */ 1848*5c0de15dSLoGin 1849*5c0de15dSLoGin typedef struct 1850*5c0de15dSLoGin { 1851*5c0de15dSLoGin Elf32_Word hwp_flags1; /* Extra flags. */ 1852*5c0de15dSLoGin Elf32_Word hwp_flags2; /* Extra flags. */ 1853*5c0de15dSLoGin } Elf_Options_Hw; 1854*5c0de15dSLoGin 1855*5c0de15dSLoGin /* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries. */ 1856*5c0de15dSLoGin 1857*5c0de15dSLoGin #define OHWA0_R4KEOP_CHECKED 0x00000001 1858*5c0de15dSLoGin #define OHWA1_R4KEOP_CLEAN 0x00000002 1859*5c0de15dSLoGin 1860*5c0de15dSLoGin /* MIPS relocs. */ 1861*5c0de15dSLoGin 1862*5c0de15dSLoGin #define R_MIPS_NONE 0 /* No reloc */ 1863*5c0de15dSLoGin #define R_MIPS_16 1 /* Direct 16 bit */ 1864*5c0de15dSLoGin #define R_MIPS_32 2 /* Direct 32 bit */ 1865*5c0de15dSLoGin #define R_MIPS_REL32 3 /* PC relative 32 bit */ 1866*5c0de15dSLoGin #define R_MIPS_26 4 /* Direct 26 bit shifted */ 1867*5c0de15dSLoGin #define R_MIPS_HI16 5 /* High 16 bit */ 1868*5c0de15dSLoGin #define R_MIPS_LO16 6 /* Low 16 bit */ 1869*5c0de15dSLoGin #define R_MIPS_GPREL16 7 /* GP relative 16 bit */ 1870*5c0de15dSLoGin #define R_MIPS_LITERAL 8 /* 16 bit literal entry */ 1871*5c0de15dSLoGin #define R_MIPS_GOT16 9 /* 16 bit GOT entry */ 1872*5c0de15dSLoGin #define R_MIPS_PC16 10 /* PC relative 16 bit */ 1873*5c0de15dSLoGin #define R_MIPS_CALL16 11 /* 16 bit GOT entry for function */ 1874*5c0de15dSLoGin #define R_MIPS_GPREL32 12 /* GP relative 32 bit */ 1875*5c0de15dSLoGin 1876*5c0de15dSLoGin #define R_MIPS_SHIFT5 16 1877*5c0de15dSLoGin #define R_MIPS_SHIFT6 17 1878*5c0de15dSLoGin #define R_MIPS_64 18 1879*5c0de15dSLoGin #define R_MIPS_GOT_DISP 19 1880*5c0de15dSLoGin #define R_MIPS_GOT_PAGE 20 1881*5c0de15dSLoGin #define R_MIPS_GOT_OFST 21 1882*5c0de15dSLoGin #define R_MIPS_GOT_HI16 22 1883*5c0de15dSLoGin #define R_MIPS_GOT_LO16 23 1884*5c0de15dSLoGin #define R_MIPS_SUB 24 1885*5c0de15dSLoGin #define R_MIPS_INSERT_A 25 1886*5c0de15dSLoGin #define R_MIPS_INSERT_B 26 1887*5c0de15dSLoGin #define R_MIPS_DELETE 27 1888*5c0de15dSLoGin #define R_MIPS_HIGHER 28 1889*5c0de15dSLoGin #define R_MIPS_HIGHEST 29 1890*5c0de15dSLoGin #define R_MIPS_CALL_HI16 30 1891*5c0de15dSLoGin #define R_MIPS_CALL_LO16 31 1892*5c0de15dSLoGin #define R_MIPS_SCN_DISP 32 1893*5c0de15dSLoGin #define R_MIPS_REL16 33 1894*5c0de15dSLoGin #define R_MIPS_ADD_IMMEDIATE 34 1895*5c0de15dSLoGin #define R_MIPS_PJUMP 35 1896*5c0de15dSLoGin #define R_MIPS_RELGOT 36 1897*5c0de15dSLoGin #define R_MIPS_JALR 37 1898*5c0de15dSLoGin #define R_MIPS_TLS_DTPMOD32 38 /* Module number 32 bit */ 1899*5c0de15dSLoGin #define R_MIPS_TLS_DTPREL32 39 /* Module-relative offset 32 bit */ 1900*5c0de15dSLoGin #define R_MIPS_TLS_DTPMOD64 40 /* Module number 64 bit */ 1901*5c0de15dSLoGin #define R_MIPS_TLS_DTPREL64 41 /* Module-relative offset 64 bit */ 1902*5c0de15dSLoGin #define R_MIPS_TLS_GD 42 /* 16 bit GOT offset for GD */ 1903*5c0de15dSLoGin #define R_MIPS_TLS_LDM 43 /* 16 bit GOT offset for LDM */ 1904*5c0de15dSLoGin #define R_MIPS_TLS_DTPREL_HI16 44 /* Module-relative offset, high 16 bits */ 1905*5c0de15dSLoGin #define R_MIPS_TLS_DTPREL_LO16 45 /* Module-relative offset, low 16 bits */ 1906*5c0de15dSLoGin #define R_MIPS_TLS_GOTTPREL 46 /* 16 bit GOT offset for IE */ 1907*5c0de15dSLoGin #define R_MIPS_TLS_TPREL32 47 /* TP-relative offset, 32 bit */ 1908*5c0de15dSLoGin #define R_MIPS_TLS_TPREL64 48 /* TP-relative offset, 64 bit */ 1909*5c0de15dSLoGin #define R_MIPS_TLS_TPREL_HI16 49 /* TP-relative offset, high 16 bits */ 1910*5c0de15dSLoGin #define R_MIPS_TLS_TPREL_LO16 50 /* TP-relative offset, low 16 bits */ 1911*5c0de15dSLoGin #define R_MIPS_GLOB_DAT 51 1912*5c0de15dSLoGin #define R_MIPS_COPY 126 1913*5c0de15dSLoGin #define R_MIPS_JUMP_SLOT 127 1914*5c0de15dSLoGin /* Keep this the last entry. */ 1915*5c0de15dSLoGin #define R_MIPS_NUM 128 1916*5c0de15dSLoGin 1917*5c0de15dSLoGin /* Legal values for p_type field of Elf32_Phdr. */ 1918*5c0de15dSLoGin 1919*5c0de15dSLoGin #define PT_MIPS_REGINFO 0x70000000 /* Register usage information. */ 1920*5c0de15dSLoGin #define PT_MIPS_RTPROC 0x70000001 /* Runtime procedure table. */ 1921*5c0de15dSLoGin #define PT_MIPS_OPTIONS 0x70000002 1922*5c0de15dSLoGin #define PT_MIPS_ABIFLAGS 0x70000003 /* FP mode requirement. */ 1923*5c0de15dSLoGin 1924*5c0de15dSLoGin /* Special program header types. */ 1925*5c0de15dSLoGin 1926*5c0de15dSLoGin #define PF_MIPS_LOCAL 0x10000000 1927*5c0de15dSLoGin 1928*5c0de15dSLoGin /* Legal values for d_tag field of Elf32_Dyn. */ 1929*5c0de15dSLoGin 1930*5c0de15dSLoGin #define DT_MIPS_RLD_VERSION 0x70000001 /* Runtime linker interface version */ 1931*5c0de15dSLoGin #define DT_MIPS_TIME_STAMP 0x70000002 /* Timestamp */ 1932*5c0de15dSLoGin #define DT_MIPS_ICHECKSUM 0x70000003 /* Checksum */ 1933*5c0de15dSLoGin #define DT_MIPS_IVERSION 0x70000004 /* Version string (string tbl index) */ 1934*5c0de15dSLoGin #define DT_MIPS_FLAGS 0x70000005 /* Flags */ 1935*5c0de15dSLoGin #define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */ 1936*5c0de15dSLoGin #define DT_MIPS_MSYM 0x70000007 1937*5c0de15dSLoGin #define DT_MIPS_CONFLICT 0x70000008 /* Address of CONFLICT section */ 1938*5c0de15dSLoGin #define DT_MIPS_LIBLIST 0x70000009 /* Address of LIBLIST section */ 1939*5c0de15dSLoGin #define DT_MIPS_LOCAL_GOTNO 0x7000000a /* Number of local GOT entries */ 1940*5c0de15dSLoGin #define DT_MIPS_CONFLICTNO 0x7000000b /* Number of CONFLICT entries */ 1941*5c0de15dSLoGin #define DT_MIPS_LIBLISTNO 0x70000010 /* Number of LIBLIST entries */ 1942*5c0de15dSLoGin #define DT_MIPS_SYMTABNO 0x70000011 /* Number of DYNSYM entries */ 1943*5c0de15dSLoGin #define DT_MIPS_UNREFEXTNO 0x70000012 /* First external DYNSYM */ 1944*5c0de15dSLoGin #define DT_MIPS_GOTSYM 0x70000013 /* First GOT entry in DYNSYM */ 1945*5c0de15dSLoGin #define DT_MIPS_HIPAGENO 0x70000014 /* Number of GOT page table entries */ 1946*5c0de15dSLoGin #define DT_MIPS_RLD_MAP 0x70000016 /* Address of run time loader map. */ 1947*5c0de15dSLoGin #define DT_MIPS_DELTA_CLASS 0x70000017 /* Delta C++ class definition. */ 1948*5c0de15dSLoGin #define DT_MIPS_DELTA_CLASS_NO 0x70000018 /* Number of entries in 1949*5c0de15dSLoGin DT_MIPS_DELTA_CLASS. */ 1950*5c0de15dSLoGin #define DT_MIPS_DELTA_INSTANCE 0x70000019 /* Delta C++ class instances. */ 1951*5c0de15dSLoGin #define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in 1952*5c0de15dSLoGin DT_MIPS_DELTA_INSTANCE. */ 1953*5c0de15dSLoGin #define DT_MIPS_DELTA_RELOC 0x7000001b /* Delta relocations. */ 1954*5c0de15dSLoGin #define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in 1955*5c0de15dSLoGin DT_MIPS_DELTA_RELOC. */ 1956*5c0de15dSLoGin #define DT_MIPS_DELTA_SYM 0x7000001d /* Delta symbols that Delta 1957*5c0de15dSLoGin relocations refer to. */ 1958*5c0de15dSLoGin #define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in 1959*5c0de15dSLoGin DT_MIPS_DELTA_SYM. */ 1960*5c0de15dSLoGin #define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the 1961*5c0de15dSLoGin class declaration. */ 1962*5c0de15dSLoGin #define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in 1963*5c0de15dSLoGin DT_MIPS_DELTA_CLASSSYM. */ 1964*5c0de15dSLoGin #define DT_MIPS_CXX_FLAGS 0x70000022 /* Flags indicating for C++ flavor. */ 1965*5c0de15dSLoGin #define DT_MIPS_PIXIE_INIT 0x70000023 1966*5c0de15dSLoGin #define DT_MIPS_SYMBOL_LIB 0x70000024 1967*5c0de15dSLoGin #define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 1968*5c0de15dSLoGin #define DT_MIPS_LOCAL_GOTIDX 0x70000026 1969*5c0de15dSLoGin #define DT_MIPS_HIDDEN_GOTIDX 0x70000027 1970*5c0de15dSLoGin #define DT_MIPS_PROTECTED_GOTIDX 0x70000028 1971*5c0de15dSLoGin #define DT_MIPS_OPTIONS 0x70000029 /* Address of .options. */ 1972*5c0de15dSLoGin #define DT_MIPS_INTERFACE 0x7000002a /* Address of .interface. */ 1973*5c0de15dSLoGin #define DT_MIPS_DYNSTR_ALIGN 0x7000002b 1974*5c0de15dSLoGin #define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */ 1975*5c0de15dSLoGin #define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve 1976*5c0de15dSLoGin function stored in GOT. */ 1977*5c0de15dSLoGin #define DT_MIPS_PERF_SUFFIX 0x7000002e /* Default suffix of dso to be added 1978*5c0de15dSLoGin by rld on dlopen() calls. */ 1979*5c0de15dSLoGin #define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */ 1980*5c0de15dSLoGin #define DT_MIPS_GP_VALUE 0x70000030 /* GP value for aux GOTs. */ 1981*5c0de15dSLoGin #define DT_MIPS_AUX_DYNAMIC 0x70000031 /* Address of aux .dynamic. */ 1982*5c0de15dSLoGin /* The address of .got.plt in an executable using the new non-PIC ABI. */ 1983*5c0de15dSLoGin #define DT_MIPS_PLTGOT 0x70000032 1984*5c0de15dSLoGin /* The base of the PLT in an executable using the new non-PIC ABI if that 1985*5c0de15dSLoGin PLT is writable. For a non-writable PLT, this is omitted or has a zero 1986*5c0de15dSLoGin value. */ 1987*5c0de15dSLoGin #define DT_MIPS_RWPLT 0x70000034 1988*5c0de15dSLoGin /* An alternative description of the classic MIPS RLD_MAP that is usable 1989*5c0de15dSLoGin in a PIE as it stores a relative offset from the address of the tag 1990*5c0de15dSLoGin rather than an absolute address. */ 1991*5c0de15dSLoGin #define DT_MIPS_RLD_MAP_REL 0x70000035 1992*5c0de15dSLoGin /* GNU-style hash table with xlat. */ 1993*5c0de15dSLoGin #define DT_MIPS_XHASH 0x70000036 1994*5c0de15dSLoGin #define DT_MIPS_NUM 0x37 1995*5c0de15dSLoGin 1996*5c0de15dSLoGin /* Legal values for DT_MIPS_FLAGS Elf32_Dyn entry. */ 1997*5c0de15dSLoGin 1998*5c0de15dSLoGin #define RHF_NONE 0 /* No flags */ 1999*5c0de15dSLoGin #define RHF_QUICKSTART (1 << 0) /* Use quickstart */ 2000*5c0de15dSLoGin #define RHF_NOTPOT (1 << 1) /* Hash size not power of 2 */ 2001*5c0de15dSLoGin #define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) /* Ignore LD_LIBRARY_PATH */ 2002*5c0de15dSLoGin #define RHF_NO_MOVE (1 << 3) 2003*5c0de15dSLoGin #define RHF_SGI_ONLY (1 << 4) 2004*5c0de15dSLoGin #define RHF_GUARANTEE_INIT (1 << 5) 2005*5c0de15dSLoGin #define RHF_DELTA_C_PLUS_PLUS (1 << 6) 2006*5c0de15dSLoGin #define RHF_GUARANTEE_START_INIT (1 << 7) 2007*5c0de15dSLoGin #define RHF_PIXIE (1 << 8) 2008*5c0de15dSLoGin #define RHF_DEFAULT_DELAY_LOAD (1 << 9) 2009*5c0de15dSLoGin #define RHF_REQUICKSTART (1 << 10) 2010*5c0de15dSLoGin #define RHF_REQUICKSTARTED (1 << 11) 2011*5c0de15dSLoGin #define RHF_CORD (1 << 12) 2012*5c0de15dSLoGin #define RHF_NO_UNRES_UNDEF (1 << 13) 2013*5c0de15dSLoGin #define RHF_RLD_ORDER_SAFE (1 << 14) 2014*5c0de15dSLoGin 2015*5c0de15dSLoGin /* Entries found in sections of type SHT_MIPS_LIBLIST. */ 2016*5c0de15dSLoGin 2017*5c0de15dSLoGin typedef struct 2018*5c0de15dSLoGin { 2019*5c0de15dSLoGin Elf32_Word l_name; /* Name (string table index) */ 2020*5c0de15dSLoGin Elf32_Word l_time_stamp; /* Timestamp */ 2021*5c0de15dSLoGin Elf32_Word l_checksum; /* Checksum */ 2022*5c0de15dSLoGin Elf32_Word l_version; /* Interface version */ 2023*5c0de15dSLoGin Elf32_Word l_flags; /* Flags */ 2024*5c0de15dSLoGin } Elf32_Lib; 2025*5c0de15dSLoGin 2026*5c0de15dSLoGin typedef struct 2027*5c0de15dSLoGin { 2028*5c0de15dSLoGin Elf64_Word l_name; /* Name (string table index) */ 2029*5c0de15dSLoGin Elf64_Word l_time_stamp; /* Timestamp */ 2030*5c0de15dSLoGin Elf64_Word l_checksum; /* Checksum */ 2031*5c0de15dSLoGin Elf64_Word l_version; /* Interface version */ 2032*5c0de15dSLoGin Elf64_Word l_flags; /* Flags */ 2033*5c0de15dSLoGin } Elf64_Lib; 2034*5c0de15dSLoGin 2035*5c0de15dSLoGin 2036*5c0de15dSLoGin /* Legal values for l_flags. */ 2037*5c0de15dSLoGin 2038*5c0de15dSLoGin #define LL_NONE 0 2039*5c0de15dSLoGin #define LL_EXACT_MATCH (1 << 0) /* Require exact match */ 2040*5c0de15dSLoGin #define LL_IGNORE_INT_VER (1 << 1) /* Ignore interface version */ 2041*5c0de15dSLoGin #define LL_REQUIRE_MINOR (1 << 2) 2042*5c0de15dSLoGin #define LL_EXPORTS (1 << 3) 2043*5c0de15dSLoGin #define LL_DELAY_LOAD (1 << 4) 2044*5c0de15dSLoGin #define LL_DELTA (1 << 5) 2045*5c0de15dSLoGin 2046*5c0de15dSLoGin /* Entries found in sections of type SHT_MIPS_CONFLICT. */ 2047*5c0de15dSLoGin 2048*5c0de15dSLoGin typedef Elf32_Addr Elf32_Conflict; 2049*5c0de15dSLoGin 2050*5c0de15dSLoGin typedef struct 2051*5c0de15dSLoGin { 2052*5c0de15dSLoGin /* Version of flags structure. */ 2053*5c0de15dSLoGin Elf32_Half version; 2054*5c0de15dSLoGin /* The level of the ISA: 1-5, 32, 64. */ 2055*5c0de15dSLoGin unsigned char isa_level; 2056*5c0de15dSLoGin /* The revision of ISA: 0 for MIPS V and below, 1-n otherwise. */ 2057*5c0de15dSLoGin unsigned char isa_rev; 2058*5c0de15dSLoGin /* The size of general purpose registers. */ 2059*5c0de15dSLoGin unsigned char gpr_size; 2060*5c0de15dSLoGin /* The size of co-processor 1 registers. */ 2061*5c0de15dSLoGin unsigned char cpr1_size; 2062*5c0de15dSLoGin /* The size of co-processor 2 registers. */ 2063*5c0de15dSLoGin unsigned char cpr2_size; 2064*5c0de15dSLoGin /* The floating-point ABI. */ 2065*5c0de15dSLoGin unsigned char fp_abi; 2066*5c0de15dSLoGin /* Processor-specific extension. */ 2067*5c0de15dSLoGin Elf32_Word isa_ext; 2068*5c0de15dSLoGin /* Mask of ASEs used. */ 2069*5c0de15dSLoGin Elf32_Word ases; 2070*5c0de15dSLoGin /* Mask of general flags. */ 2071*5c0de15dSLoGin Elf32_Word flags1; 2072*5c0de15dSLoGin Elf32_Word flags2; 2073*5c0de15dSLoGin } Elf_MIPS_ABIFlags_v0; 2074*5c0de15dSLoGin 2075*5c0de15dSLoGin /* Values for the register size bytes of an abi flags structure. */ 2076*5c0de15dSLoGin 2077*5c0de15dSLoGin #define MIPS_AFL_REG_NONE 0x00 /* No registers. */ 2078*5c0de15dSLoGin #define MIPS_AFL_REG_32 0x01 /* 32-bit registers. */ 2079*5c0de15dSLoGin #define MIPS_AFL_REG_64 0x02 /* 64-bit registers. */ 2080*5c0de15dSLoGin #define MIPS_AFL_REG_128 0x03 /* 128-bit registers. */ 2081*5c0de15dSLoGin 2082*5c0de15dSLoGin /* Masks for the ases word of an ABI flags structure. */ 2083*5c0de15dSLoGin 2084*5c0de15dSLoGin #define MIPS_AFL_ASE_DSP 0x00000001 /* DSP ASE. */ 2085*5c0de15dSLoGin #define MIPS_AFL_ASE_DSPR2 0x00000002 /* DSP R2 ASE. */ 2086*5c0de15dSLoGin #define MIPS_AFL_ASE_EVA 0x00000004 /* Enhanced VA Scheme. */ 2087*5c0de15dSLoGin #define MIPS_AFL_ASE_MCU 0x00000008 /* MCU (MicroController) ASE. */ 2088*5c0de15dSLoGin #define MIPS_AFL_ASE_MDMX 0x00000010 /* MDMX ASE. */ 2089*5c0de15dSLoGin #define MIPS_AFL_ASE_MIPS3D 0x00000020 /* MIPS-3D ASE. */ 2090*5c0de15dSLoGin #define MIPS_AFL_ASE_MT 0x00000040 /* MT ASE. */ 2091*5c0de15dSLoGin #define MIPS_AFL_ASE_SMARTMIPS 0x00000080 /* SmartMIPS ASE. */ 2092*5c0de15dSLoGin #define MIPS_AFL_ASE_VIRT 0x00000100 /* VZ ASE. */ 2093*5c0de15dSLoGin #define MIPS_AFL_ASE_MSA 0x00000200 /* MSA ASE. */ 2094*5c0de15dSLoGin #define MIPS_AFL_ASE_MIPS16 0x00000400 /* MIPS16 ASE. */ 2095*5c0de15dSLoGin #define MIPS_AFL_ASE_MICROMIPS 0x00000800 /* MICROMIPS ASE. */ 2096*5c0de15dSLoGin #define MIPS_AFL_ASE_XPA 0x00001000 /* XPA ASE. */ 2097*5c0de15dSLoGin #define MIPS_AFL_ASE_MASK 0x00001fff /* All ASEs. */ 2098*5c0de15dSLoGin 2099*5c0de15dSLoGin /* Values for the isa_ext word of an ABI flags structure. */ 2100*5c0de15dSLoGin 2101*5c0de15dSLoGin #define MIPS_AFL_EXT_XLR 1 /* RMI Xlr instruction. */ 2102*5c0de15dSLoGin #define MIPS_AFL_EXT_OCTEON2 2 /* Cavium Networks Octeon2. */ 2103*5c0de15dSLoGin #define MIPS_AFL_EXT_OCTEONP 3 /* Cavium Networks OcteonP. */ 2104*5c0de15dSLoGin #define MIPS_AFL_EXT_LOONGSON_3A 4 /* Loongson 3A. */ 2105*5c0de15dSLoGin #define MIPS_AFL_EXT_OCTEON 5 /* Cavium Networks Octeon. */ 2106*5c0de15dSLoGin #define MIPS_AFL_EXT_5900 6 /* MIPS R5900 instruction. */ 2107*5c0de15dSLoGin #define MIPS_AFL_EXT_4650 7 /* MIPS R4650 instruction. */ 2108*5c0de15dSLoGin #define MIPS_AFL_EXT_4010 8 /* LSI R4010 instruction. */ 2109*5c0de15dSLoGin #define MIPS_AFL_EXT_4100 9 /* NEC VR4100 instruction. */ 2110*5c0de15dSLoGin #define MIPS_AFL_EXT_3900 10 /* Toshiba R3900 instruction. */ 2111*5c0de15dSLoGin #define MIPS_AFL_EXT_10000 11 /* MIPS R10000 instruction. */ 2112*5c0de15dSLoGin #define MIPS_AFL_EXT_SB1 12 /* Broadcom SB-1 instruction. */ 2113*5c0de15dSLoGin #define MIPS_AFL_EXT_4111 13 /* NEC VR4111/VR4181 instruction. */ 2114*5c0de15dSLoGin #define MIPS_AFL_EXT_4120 14 /* NEC VR4120 instruction. */ 2115*5c0de15dSLoGin #define MIPS_AFL_EXT_5400 15 /* NEC VR5400 instruction. */ 2116*5c0de15dSLoGin #define MIPS_AFL_EXT_5500 16 /* NEC VR5500 instruction. */ 2117*5c0de15dSLoGin #define MIPS_AFL_EXT_LOONGSON_2E 17 /* ST Microelectronics Loongson 2E. */ 2118*5c0de15dSLoGin #define MIPS_AFL_EXT_LOONGSON_2F 18 /* ST Microelectronics Loongson 2F. */ 2119*5c0de15dSLoGin 2120*5c0de15dSLoGin /* Masks for the flags1 word of an ABI flags structure. */ 2121*5c0de15dSLoGin #define MIPS_AFL_FLAGS1_ODDSPREG 1 /* Uses odd single-precision registers. */ 2122*5c0de15dSLoGin 2123*5c0de15dSLoGin /* Object attribute values. */ 2124*5c0de15dSLoGin enum 2125*5c0de15dSLoGin { 2126*5c0de15dSLoGin /* Not tagged or not using any ABIs affected by the differences. */ 2127*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_ANY = 0, 2128*5c0de15dSLoGin /* Using hard-float -mdouble-float. */ 2129*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_DOUBLE = 1, 2130*5c0de15dSLoGin /* Using hard-float -msingle-float. */ 2131*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_SINGLE = 2, 2132*5c0de15dSLoGin /* Using soft-float. */ 2133*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_SOFT = 3, 2134*5c0de15dSLoGin /* Using -mips32r2 -mfp64. */ 2135*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_OLD_64 = 4, 2136*5c0de15dSLoGin /* Using -mfpxx. */ 2137*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_XX = 5, 2138*5c0de15dSLoGin /* Using -mips32r2 -mfp64. */ 2139*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_64 = 6, 2140*5c0de15dSLoGin /* Using -mips32r2 -mfp64 -mno-odd-spreg. */ 2141*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_64A = 7, 2142*5c0de15dSLoGin /* Maximum allocated FP ABI value. */ 2143*5c0de15dSLoGin Val_GNU_MIPS_ABI_FP_MAX = 7 2144*5c0de15dSLoGin }; 2145*5c0de15dSLoGin 2146*5c0de15dSLoGin /* HPPA specific definitions. */ 2147*5c0de15dSLoGin 2148*5c0de15dSLoGin /* Legal values for e_flags field of Elf32_Ehdr. */ 2149*5c0de15dSLoGin 2150*5c0de15dSLoGin #define EF_PARISC_TRAPNIL 0x00010000 /* Trap nil pointer dereference. */ 2151*5c0de15dSLoGin #define EF_PARISC_EXT 0x00020000 /* Program uses arch. extensions. */ 2152*5c0de15dSLoGin #define EF_PARISC_LSB 0x00040000 /* Program expects little endian. */ 2153*5c0de15dSLoGin #define EF_PARISC_WIDE 0x00080000 /* Program expects wide mode. */ 2154*5c0de15dSLoGin #define EF_PARISC_NO_KABP 0x00100000 /* No kernel assisted branch 2155*5c0de15dSLoGin prediction. */ 2156*5c0de15dSLoGin #define EF_PARISC_LAZYSWAP 0x00400000 /* Allow lazy swapping. */ 2157*5c0de15dSLoGin #define EF_PARISC_ARCH 0x0000ffff /* Architecture version. */ 2158*5c0de15dSLoGin 2159*5c0de15dSLoGin /* Defined values for `e_flags & EF_PARISC_ARCH' are: */ 2160*5c0de15dSLoGin 2161*5c0de15dSLoGin #define EFA_PARISC_1_0 0x020b /* PA-RISC 1.0 big-endian. */ 2162*5c0de15dSLoGin #define EFA_PARISC_1_1 0x0210 /* PA-RISC 1.1 big-endian. */ 2163*5c0de15dSLoGin #define EFA_PARISC_2_0 0x0214 /* PA-RISC 2.0 big-endian. */ 2164*5c0de15dSLoGin 2165*5c0de15dSLoGin /* Additional section indices. */ 2166*5c0de15dSLoGin 2167*5c0de15dSLoGin #define SHN_PARISC_ANSI_COMMON 0xff00 /* Section for tentatively declared 2168*5c0de15dSLoGin symbols in ANSI C. */ 2169*5c0de15dSLoGin #define SHN_PARISC_HUGE_COMMON 0xff01 /* Common blocks in huge model. */ 2170*5c0de15dSLoGin 2171*5c0de15dSLoGin /* Legal values for sh_type field of Elf32_Shdr. */ 2172*5c0de15dSLoGin 2173*5c0de15dSLoGin #define SHT_PARISC_EXT 0x70000000 /* Contains product specific ext. */ 2174*5c0de15dSLoGin #define SHT_PARISC_UNWIND 0x70000001 /* Unwind information. */ 2175*5c0de15dSLoGin #define SHT_PARISC_DOC 0x70000002 /* Debug info for optimized code. */ 2176*5c0de15dSLoGin 2177*5c0de15dSLoGin /* Legal values for sh_flags field of Elf32_Shdr. */ 2178*5c0de15dSLoGin 2179*5c0de15dSLoGin #define SHF_PARISC_SHORT 0x20000000 /* Section with short addressing. */ 2180*5c0de15dSLoGin #define SHF_PARISC_HUGE 0x40000000 /* Section far from gp. */ 2181*5c0de15dSLoGin #define SHF_PARISC_SBP 0x80000000 /* Static branch prediction code. */ 2182*5c0de15dSLoGin 2183*5c0de15dSLoGin /* Legal values for ST_TYPE subfield of st_info (symbol type). */ 2184*5c0de15dSLoGin 2185*5c0de15dSLoGin #define STT_PARISC_MILLICODE 13 /* Millicode function entry point. */ 2186*5c0de15dSLoGin 2187*5c0de15dSLoGin #define STT_HP_OPAQUE (STT_LOOS + 0x1) 2188*5c0de15dSLoGin #define STT_HP_STUB (STT_LOOS + 0x2) 2189*5c0de15dSLoGin 2190*5c0de15dSLoGin /* HPPA relocs. */ 2191*5c0de15dSLoGin 2192*5c0de15dSLoGin #define R_PARISC_NONE 0 /* No reloc. */ 2193*5c0de15dSLoGin #define R_PARISC_DIR32 1 /* Direct 32-bit reference. */ 2194*5c0de15dSLoGin #define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */ 2195*5c0de15dSLoGin #define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */ 2196*5c0de15dSLoGin #define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */ 2197*5c0de15dSLoGin #define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */ 2198*5c0de15dSLoGin #define R_PARISC_PCREL32 9 /* 32-bit rel. address. */ 2199*5c0de15dSLoGin #define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */ 2200*5c0de15dSLoGin #define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */ 2201*5c0de15dSLoGin #define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */ 2202*5c0de15dSLoGin #define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */ 2203*5c0de15dSLoGin #define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */ 2204*5c0de15dSLoGin #define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */ 2205*5c0de15dSLoGin #define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */ 2206*5c0de15dSLoGin #define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */ 2207*5c0de15dSLoGin #define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */ 2208*5c0de15dSLoGin #define R_PARISC_LTOFF14R 38 /* LT-relative, right 14 bits. */ 2209*5c0de15dSLoGin #define R_PARISC_SECREL32 41 /* 32 bits section rel. address. */ 2210*5c0de15dSLoGin #define R_PARISC_SEGBASE 48 /* No relocation, set segment base. */ 2211*5c0de15dSLoGin #define R_PARISC_SEGREL32 49 /* 32 bits segment rel. address. */ 2212*5c0de15dSLoGin #define R_PARISC_PLTOFF21L 50 /* PLT rel. address, left 21 bits. */ 2213*5c0de15dSLoGin #define R_PARISC_PLTOFF14R 54 /* PLT rel. address, right 14 bits. */ 2214*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR32 57 /* 32 bits LT-rel. function pointer. */ 2215*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR21L 58 /* LT-rel. fct ptr, left 21 bits. */ 2216*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */ 2217*5c0de15dSLoGin #define R_PARISC_FPTR64 64 /* 64 bits function address. */ 2218*5c0de15dSLoGin #define R_PARISC_PLABEL32 65 /* 32 bits function address. */ 2219*5c0de15dSLoGin #define R_PARISC_PLABEL21L 66 /* Left 21 bits of fdesc address. */ 2220*5c0de15dSLoGin #define R_PARISC_PLABEL14R 70 /* Right 14 bits of fdesc address. */ 2221*5c0de15dSLoGin #define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */ 2222*5c0de15dSLoGin #define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */ 2223*5c0de15dSLoGin #define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */ 2224*5c0de15dSLoGin #define R_PARISC_PCREL14DR 76 /* PC rel. address, right 14 bits. */ 2225*5c0de15dSLoGin #define R_PARISC_PCREL16F 77 /* 16 bits PC-rel. address. */ 2226*5c0de15dSLoGin #define R_PARISC_PCREL16WF 78 /* 16 bits PC-rel. address. */ 2227*5c0de15dSLoGin #define R_PARISC_PCREL16DF 79 /* 16 bits PC-rel. address. */ 2228*5c0de15dSLoGin #define R_PARISC_DIR64 80 /* 64 bits of eff. address. */ 2229*5c0de15dSLoGin #define R_PARISC_DIR14WR 83 /* 14 bits of eff. address. */ 2230*5c0de15dSLoGin #define R_PARISC_DIR14DR 84 /* 14 bits of eff. address. */ 2231*5c0de15dSLoGin #define R_PARISC_DIR16F 85 /* 16 bits of eff. address. */ 2232*5c0de15dSLoGin #define R_PARISC_DIR16WF 86 /* 16 bits of eff. address. */ 2233*5c0de15dSLoGin #define R_PARISC_DIR16DF 87 /* 16 bits of eff. address. */ 2234*5c0de15dSLoGin #define R_PARISC_GPREL64 88 /* 64 bits of GP-rel. address. */ 2235*5c0de15dSLoGin #define R_PARISC_GPREL14WR 91 /* GP-rel. address, right 14 bits. */ 2236*5c0de15dSLoGin #define R_PARISC_GPREL14DR 92 /* GP-rel. address, right 14 bits. */ 2237*5c0de15dSLoGin #define R_PARISC_GPREL16F 93 /* 16 bits GP-rel. address. */ 2238*5c0de15dSLoGin #define R_PARISC_GPREL16WF 94 /* 16 bits GP-rel. address. */ 2239*5c0de15dSLoGin #define R_PARISC_GPREL16DF 95 /* 16 bits GP-rel. address. */ 2240*5c0de15dSLoGin #define R_PARISC_LTOFF64 96 /* 64 bits LT-rel. address. */ 2241*5c0de15dSLoGin #define R_PARISC_LTOFF14WR 99 /* LT-rel. address, right 14 bits. */ 2242*5c0de15dSLoGin #define R_PARISC_LTOFF14DR 100 /* LT-rel. address, right 14 bits. */ 2243*5c0de15dSLoGin #define R_PARISC_LTOFF16F 101 /* 16 bits LT-rel. address. */ 2244*5c0de15dSLoGin #define R_PARISC_LTOFF16WF 102 /* 16 bits LT-rel. address. */ 2245*5c0de15dSLoGin #define R_PARISC_LTOFF16DF 103 /* 16 bits LT-rel. address. */ 2246*5c0de15dSLoGin #define R_PARISC_SECREL64 104 /* 64 bits section rel. address. */ 2247*5c0de15dSLoGin #define R_PARISC_SEGREL64 112 /* 64 bits segment rel. address. */ 2248*5c0de15dSLoGin #define R_PARISC_PLTOFF14WR 115 /* PLT-rel. address, right 14 bits. */ 2249*5c0de15dSLoGin #define R_PARISC_PLTOFF14DR 116 /* PLT-rel. address, right 14 bits. */ 2250*5c0de15dSLoGin #define R_PARISC_PLTOFF16F 117 /* 16 bits LT-rel. address. */ 2251*5c0de15dSLoGin #define R_PARISC_PLTOFF16WF 118 /* 16 bits PLT-rel. address. */ 2252*5c0de15dSLoGin #define R_PARISC_PLTOFF16DF 119 /* 16 bits PLT-rel. address. */ 2253*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR64 120 /* 64 bits LT-rel. function ptr. */ 2254*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR14WR 123 /* LT-rel. fct. ptr., right 14 bits. */ 2255*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR14DR 124 /* LT-rel. fct. ptr., right 14 bits. */ 2256*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR16F 125 /* 16 bits LT-rel. function ptr. */ 2257*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR16WF 126 /* 16 bits LT-rel. function ptr. */ 2258*5c0de15dSLoGin #define R_PARISC_LTOFF_FPTR16DF 127 /* 16 bits LT-rel. function ptr. */ 2259*5c0de15dSLoGin #define R_PARISC_LORESERVE 128 2260*5c0de15dSLoGin #define R_PARISC_COPY 128 /* Copy relocation. */ 2261*5c0de15dSLoGin #define R_PARISC_IPLT 129 /* Dynamic reloc, imported PLT */ 2262*5c0de15dSLoGin #define R_PARISC_EPLT 130 /* Dynamic reloc, exported PLT */ 2263*5c0de15dSLoGin #define R_PARISC_TPREL32 153 /* 32 bits TP-rel. address. */ 2264*5c0de15dSLoGin #define R_PARISC_TPREL21L 154 /* TP-rel. address, left 21 bits. */ 2265*5c0de15dSLoGin #define R_PARISC_TPREL14R 158 /* TP-rel. address, right 14 bits. */ 2266*5c0de15dSLoGin #define R_PARISC_LTOFF_TP21L 162 /* LT-TP-rel. address, left 21 bits. */ 2267*5c0de15dSLoGin #define R_PARISC_LTOFF_TP14R 166 /* LT-TP-rel. address, right 14 bits.*/ 2268*5c0de15dSLoGin #define R_PARISC_LTOFF_TP14F 167 /* 14 bits LT-TP-rel. address. */ 2269*5c0de15dSLoGin #define R_PARISC_TPREL64 216 /* 64 bits TP-rel. address. */ 2270*5c0de15dSLoGin #define R_PARISC_TPREL14WR 219 /* TP-rel. address, right 14 bits. */ 2271*5c0de15dSLoGin #define R_PARISC_TPREL14DR 220 /* TP-rel. address, right 14 bits. */ 2272*5c0de15dSLoGin #define R_PARISC_TPREL16F 221 /* 16 bits TP-rel. address. */ 2273*5c0de15dSLoGin #define R_PARISC_TPREL16WF 222 /* 16 bits TP-rel. address. */ 2274*5c0de15dSLoGin #define R_PARISC_TPREL16DF 223 /* 16 bits TP-rel. address. */ 2275*5c0de15dSLoGin #define R_PARISC_LTOFF_TP64 224 /* 64 bits LT-TP-rel. address. */ 2276*5c0de15dSLoGin #define R_PARISC_LTOFF_TP14WR 227 /* LT-TP-rel. address, right 14 bits.*/ 2277*5c0de15dSLoGin #define R_PARISC_LTOFF_TP14DR 228 /* LT-TP-rel. address, right 14 bits.*/ 2278*5c0de15dSLoGin #define R_PARISC_LTOFF_TP16F 229 /* 16 bits LT-TP-rel. address. */ 2279*5c0de15dSLoGin #define R_PARISC_LTOFF_TP16WF 230 /* 16 bits LT-TP-rel. address. */ 2280*5c0de15dSLoGin #define R_PARISC_LTOFF_TP16DF 231 /* 16 bits LT-TP-rel. address. */ 2281*5c0de15dSLoGin #define R_PARISC_GNU_VTENTRY 232 2282*5c0de15dSLoGin #define R_PARISC_GNU_VTINHERIT 233 2283*5c0de15dSLoGin #define R_PARISC_TLS_GD21L 234 /* GD 21-bit left. */ 2284*5c0de15dSLoGin #define R_PARISC_TLS_GD14R 235 /* GD 14-bit right. */ 2285*5c0de15dSLoGin #define R_PARISC_TLS_GDCALL 236 /* GD call to __t_g_a. */ 2286*5c0de15dSLoGin #define R_PARISC_TLS_LDM21L 237 /* LD module 21-bit left. */ 2287*5c0de15dSLoGin #define R_PARISC_TLS_LDM14R 238 /* LD module 14-bit right. */ 2288*5c0de15dSLoGin #define R_PARISC_TLS_LDMCALL 239 /* LD module call to __t_g_a. */ 2289*5c0de15dSLoGin #define R_PARISC_TLS_LDO21L 240 /* LD offset 21-bit left. */ 2290*5c0de15dSLoGin #define R_PARISC_TLS_LDO14R 241 /* LD offset 14-bit right. */ 2291*5c0de15dSLoGin #define R_PARISC_TLS_DTPMOD32 242 /* DTP module 32-bit. */ 2292*5c0de15dSLoGin #define R_PARISC_TLS_DTPMOD64 243 /* DTP module 64-bit. */ 2293*5c0de15dSLoGin #define R_PARISC_TLS_DTPOFF32 244 /* DTP offset 32-bit. */ 2294*5c0de15dSLoGin #define R_PARISC_TLS_DTPOFF64 245 /* DTP offset 32-bit. */ 2295*5c0de15dSLoGin #define R_PARISC_TLS_LE21L R_PARISC_TPREL21L 2296*5c0de15dSLoGin #define R_PARISC_TLS_LE14R R_PARISC_TPREL14R 2297*5c0de15dSLoGin #define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L 2298*5c0de15dSLoGin #define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R 2299*5c0de15dSLoGin #define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 2300*5c0de15dSLoGin #define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 2301*5c0de15dSLoGin #define R_PARISC_HIRESERVE 255 2302*5c0de15dSLoGin 2303*5c0de15dSLoGin /* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */ 2304*5c0de15dSLoGin 2305*5c0de15dSLoGin #define PT_HP_TLS (PT_LOOS + 0x0) 2306*5c0de15dSLoGin #define PT_HP_CORE_NONE (PT_LOOS + 0x1) 2307*5c0de15dSLoGin #define PT_HP_CORE_VERSION (PT_LOOS + 0x2) 2308*5c0de15dSLoGin #define PT_HP_CORE_KERNEL (PT_LOOS + 0x3) 2309*5c0de15dSLoGin #define PT_HP_CORE_COMM (PT_LOOS + 0x4) 2310*5c0de15dSLoGin #define PT_HP_CORE_PROC (PT_LOOS + 0x5) 2311*5c0de15dSLoGin #define PT_HP_CORE_LOADABLE (PT_LOOS + 0x6) 2312*5c0de15dSLoGin #define PT_HP_CORE_STACK (PT_LOOS + 0x7) 2313*5c0de15dSLoGin #define PT_HP_CORE_SHM (PT_LOOS + 0x8) 2314*5c0de15dSLoGin #define PT_HP_CORE_MMF (PT_LOOS + 0x9) 2315*5c0de15dSLoGin #define PT_HP_PARALLEL (PT_LOOS + 0x10) 2316*5c0de15dSLoGin #define PT_HP_FASTBIND (PT_LOOS + 0x11) 2317*5c0de15dSLoGin #define PT_HP_OPT_ANNOT (PT_LOOS + 0x12) 2318*5c0de15dSLoGin #define PT_HP_HSL_ANNOT (PT_LOOS + 0x13) 2319*5c0de15dSLoGin #define PT_HP_STACK (PT_LOOS + 0x14) 2320*5c0de15dSLoGin 2321*5c0de15dSLoGin #define PT_PARISC_ARCHEXT 0x70000000 2322*5c0de15dSLoGin #define PT_PARISC_UNWIND 0x70000001 2323*5c0de15dSLoGin 2324*5c0de15dSLoGin /* Legal values for p_flags field of Elf32_Phdr/Elf64_Phdr. */ 2325*5c0de15dSLoGin 2326*5c0de15dSLoGin #define PF_PARISC_SBP 0x08000000 2327*5c0de15dSLoGin 2328*5c0de15dSLoGin #define PF_HP_PAGE_SIZE 0x00100000 2329*5c0de15dSLoGin #define PF_HP_FAR_SHARED 0x00200000 2330*5c0de15dSLoGin #define PF_HP_NEAR_SHARED 0x00400000 2331*5c0de15dSLoGin #define PF_HP_CODE 0x01000000 2332*5c0de15dSLoGin #define PF_HP_MODIFY 0x02000000 2333*5c0de15dSLoGin #define PF_HP_LAZYSWAP 0x04000000 2334*5c0de15dSLoGin #define PF_HP_SBP 0x08000000 2335*5c0de15dSLoGin 2336*5c0de15dSLoGin 2337*5c0de15dSLoGin /* Alpha specific definitions. */ 2338*5c0de15dSLoGin 2339*5c0de15dSLoGin /* Legal values for e_flags field of Elf64_Ehdr. */ 2340*5c0de15dSLoGin 2341*5c0de15dSLoGin #define EF_ALPHA_32BIT 1 /* All addresses must be < 2GB. */ 2342*5c0de15dSLoGin #define EF_ALPHA_CANRELAX 2 /* Relocations for relaxing exist. */ 2343*5c0de15dSLoGin 2344*5c0de15dSLoGin /* Legal values for sh_type field of Elf64_Shdr. */ 2345*5c0de15dSLoGin 2346*5c0de15dSLoGin /* These two are primerily concerned with ECOFF debugging info. */ 2347*5c0de15dSLoGin #define SHT_ALPHA_DEBUG 0x70000001 2348*5c0de15dSLoGin #define SHT_ALPHA_REGINFO 0x70000002 2349*5c0de15dSLoGin 2350*5c0de15dSLoGin /* Legal values for sh_flags field of Elf64_Shdr. */ 2351*5c0de15dSLoGin 2352*5c0de15dSLoGin #define SHF_ALPHA_GPREL 0x10000000 2353*5c0de15dSLoGin 2354*5c0de15dSLoGin /* Legal values for st_other field of Elf64_Sym. */ 2355*5c0de15dSLoGin #define STO_ALPHA_NOPV 0x80 /* No PV required. */ 2356*5c0de15dSLoGin #define STO_ALPHA_STD_GPLOAD 0x88 /* PV only used for initial ldgp. */ 2357*5c0de15dSLoGin 2358*5c0de15dSLoGin /* Alpha relocs. */ 2359*5c0de15dSLoGin 2360*5c0de15dSLoGin #define R_ALPHA_NONE 0 /* No reloc */ 2361*5c0de15dSLoGin #define R_ALPHA_REFLONG 1 /* Direct 32 bit */ 2362*5c0de15dSLoGin #define R_ALPHA_REFQUAD 2 /* Direct 64 bit */ 2363*5c0de15dSLoGin #define R_ALPHA_GPREL32 3 /* GP relative 32 bit */ 2364*5c0de15dSLoGin #define R_ALPHA_LITERAL 4 /* GP relative 16 bit w/optimization */ 2365*5c0de15dSLoGin #define R_ALPHA_LITUSE 5 /* Optimization hint for LITERAL */ 2366*5c0de15dSLoGin #define R_ALPHA_GPDISP 6 /* Add displacement to GP */ 2367*5c0de15dSLoGin #define R_ALPHA_BRADDR 7 /* PC+4 relative 23 bit shifted */ 2368*5c0de15dSLoGin #define R_ALPHA_HINT 8 /* PC+4 relative 16 bit shifted */ 2369*5c0de15dSLoGin #define R_ALPHA_SREL16 9 /* PC relative 16 bit */ 2370*5c0de15dSLoGin #define R_ALPHA_SREL32 10 /* PC relative 32 bit */ 2371*5c0de15dSLoGin #define R_ALPHA_SREL64 11 /* PC relative 64 bit */ 2372*5c0de15dSLoGin #define R_ALPHA_GPRELHIGH 17 /* GP relative 32 bit, high 16 bits */ 2373*5c0de15dSLoGin #define R_ALPHA_GPRELLOW 18 /* GP relative 32 bit, low 16 bits */ 2374*5c0de15dSLoGin #define R_ALPHA_GPREL16 19 /* GP relative 16 bit */ 2375*5c0de15dSLoGin #define R_ALPHA_COPY 24 /* Copy symbol at runtime */ 2376*5c0de15dSLoGin #define R_ALPHA_GLOB_DAT 25 /* Create GOT entry */ 2377*5c0de15dSLoGin #define R_ALPHA_JMP_SLOT 26 /* Create PLT entry */ 2378*5c0de15dSLoGin #define R_ALPHA_RELATIVE 27 /* Adjust by program base */ 2379*5c0de15dSLoGin #define R_ALPHA_TLS_GD_HI 28 2380*5c0de15dSLoGin #define R_ALPHA_TLSGD 29 2381*5c0de15dSLoGin #define R_ALPHA_TLS_LDM 30 2382*5c0de15dSLoGin #define R_ALPHA_DTPMOD64 31 2383*5c0de15dSLoGin #define R_ALPHA_GOTDTPREL 32 2384*5c0de15dSLoGin #define R_ALPHA_DTPREL64 33 2385*5c0de15dSLoGin #define R_ALPHA_DTPRELHI 34 2386*5c0de15dSLoGin #define R_ALPHA_DTPRELLO 35 2387*5c0de15dSLoGin #define R_ALPHA_DTPREL16 36 2388*5c0de15dSLoGin #define R_ALPHA_GOTTPREL 37 2389*5c0de15dSLoGin #define R_ALPHA_TPREL64 38 2390*5c0de15dSLoGin #define R_ALPHA_TPRELHI 39 2391*5c0de15dSLoGin #define R_ALPHA_TPRELLO 40 2392*5c0de15dSLoGin #define R_ALPHA_TPREL16 41 2393*5c0de15dSLoGin /* Keep this the last entry. */ 2394*5c0de15dSLoGin #define R_ALPHA_NUM 46 2395*5c0de15dSLoGin 2396*5c0de15dSLoGin /* Magic values of the LITUSE relocation addend. */ 2397*5c0de15dSLoGin #define LITUSE_ALPHA_ADDR 0 2398*5c0de15dSLoGin #define LITUSE_ALPHA_BASE 1 2399*5c0de15dSLoGin #define LITUSE_ALPHA_BYTOFF 2 2400*5c0de15dSLoGin #define LITUSE_ALPHA_JSR 3 2401*5c0de15dSLoGin #define LITUSE_ALPHA_TLS_GD 4 2402*5c0de15dSLoGin #define LITUSE_ALPHA_TLS_LDM 5 2403*5c0de15dSLoGin 2404*5c0de15dSLoGin /* Legal values for d_tag of Elf64_Dyn. */ 2405*5c0de15dSLoGin #define DT_ALPHA_PLTRO (DT_LOPROC + 0) 2406*5c0de15dSLoGin #define DT_ALPHA_NUM 1 2407*5c0de15dSLoGin 2408*5c0de15dSLoGin /* PowerPC specific declarations */ 2409*5c0de15dSLoGin 2410*5c0de15dSLoGin /* Values for Elf32/64_Ehdr.e_flags. */ 2411*5c0de15dSLoGin #define EF_PPC_EMB 0x80000000 /* PowerPC embedded flag */ 2412*5c0de15dSLoGin 2413*5c0de15dSLoGin /* Cygnus local bits below */ 2414*5c0de15dSLoGin #define EF_PPC_RELOCATABLE 0x00010000 /* PowerPC -mrelocatable flag*/ 2415*5c0de15dSLoGin #define EF_PPC_RELOCATABLE_LIB 0x00008000 /* PowerPC -mrelocatable-lib 2416*5c0de15dSLoGin flag */ 2417*5c0de15dSLoGin 2418*5c0de15dSLoGin /* PowerPC relocations defined by the ABIs */ 2419*5c0de15dSLoGin #define R_PPC_NONE 0 2420*5c0de15dSLoGin #define R_PPC_ADDR32 1 /* 32bit absolute address */ 2421*5c0de15dSLoGin #define R_PPC_ADDR24 2 /* 26bit address, 2 bits ignored. */ 2422*5c0de15dSLoGin #define R_PPC_ADDR16 3 /* 16bit absolute address */ 2423*5c0de15dSLoGin #define R_PPC_ADDR16_LO 4 /* lower 16bit of absolute address */ 2424*5c0de15dSLoGin #define R_PPC_ADDR16_HI 5 /* high 16bit of absolute address */ 2425*5c0de15dSLoGin #define R_PPC_ADDR16_HA 6 /* adjusted high 16bit */ 2426*5c0de15dSLoGin #define R_PPC_ADDR14 7 /* 16bit address, 2 bits ignored */ 2427*5c0de15dSLoGin #define R_PPC_ADDR14_BRTAKEN 8 2428*5c0de15dSLoGin #define R_PPC_ADDR14_BRNTAKEN 9 2429*5c0de15dSLoGin #define R_PPC_REL24 10 /* PC relative 26 bit */ 2430*5c0de15dSLoGin #define R_PPC_REL14 11 /* PC relative 16 bit */ 2431*5c0de15dSLoGin #define R_PPC_REL14_BRTAKEN 12 2432*5c0de15dSLoGin #define R_PPC_REL14_BRNTAKEN 13 2433*5c0de15dSLoGin #define R_PPC_GOT16 14 2434*5c0de15dSLoGin #define R_PPC_GOT16_LO 15 2435*5c0de15dSLoGin #define R_PPC_GOT16_HI 16 2436*5c0de15dSLoGin #define R_PPC_GOT16_HA 17 2437*5c0de15dSLoGin #define R_PPC_PLTREL24 18 2438*5c0de15dSLoGin #define R_PPC_COPY 19 2439*5c0de15dSLoGin #define R_PPC_GLOB_DAT 20 2440*5c0de15dSLoGin #define R_PPC_JMP_SLOT 21 2441*5c0de15dSLoGin #define R_PPC_RELATIVE 22 2442*5c0de15dSLoGin #define R_PPC_LOCAL24PC 23 2443*5c0de15dSLoGin #define R_PPC_UADDR32 24 2444*5c0de15dSLoGin #define R_PPC_UADDR16 25 2445*5c0de15dSLoGin #define R_PPC_REL32 26 2446*5c0de15dSLoGin #define R_PPC_PLT32 27 2447*5c0de15dSLoGin #define R_PPC_PLTREL32 28 2448*5c0de15dSLoGin #define R_PPC_PLT16_LO 29 2449*5c0de15dSLoGin #define R_PPC_PLT16_HI 30 2450*5c0de15dSLoGin #define R_PPC_PLT16_HA 31 2451*5c0de15dSLoGin #define R_PPC_SDAREL16 32 2452*5c0de15dSLoGin #define R_PPC_SECTOFF 33 2453*5c0de15dSLoGin #define R_PPC_SECTOFF_LO 34 2454*5c0de15dSLoGin #define R_PPC_SECTOFF_HI 35 2455*5c0de15dSLoGin #define R_PPC_SECTOFF_HA 36 2456*5c0de15dSLoGin 2457*5c0de15dSLoGin /* PowerPC relocations defined for the TLS access ABI. */ 2458*5c0de15dSLoGin #define R_PPC_TLS 67 /* none (sym+add)@tls */ 2459*5c0de15dSLoGin #define R_PPC_DTPMOD32 68 /* word32 (sym+add)@dtpmod */ 2460*5c0de15dSLoGin #define R_PPC_TPREL16 69 /* half16* (sym+add)@tprel */ 2461*5c0de15dSLoGin #define R_PPC_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */ 2462*5c0de15dSLoGin #define R_PPC_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */ 2463*5c0de15dSLoGin #define R_PPC_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */ 2464*5c0de15dSLoGin #define R_PPC_TPREL32 73 /* word32 (sym+add)@tprel */ 2465*5c0de15dSLoGin #define R_PPC_DTPREL16 74 /* half16* (sym+add)@dtprel */ 2466*5c0de15dSLoGin #define R_PPC_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */ 2467*5c0de15dSLoGin #define R_PPC_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */ 2468*5c0de15dSLoGin #define R_PPC_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */ 2469*5c0de15dSLoGin #define R_PPC_DTPREL32 78 /* word32 (sym+add)@dtprel */ 2470*5c0de15dSLoGin #define R_PPC_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */ 2471*5c0de15dSLoGin #define R_PPC_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */ 2472*5c0de15dSLoGin #define R_PPC_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */ 2473*5c0de15dSLoGin #define R_PPC_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */ 2474*5c0de15dSLoGin #define R_PPC_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */ 2475*5c0de15dSLoGin #define R_PPC_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */ 2476*5c0de15dSLoGin #define R_PPC_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */ 2477*5c0de15dSLoGin #define R_PPC_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */ 2478*5c0de15dSLoGin #define R_PPC_GOT_TPREL16 87 /* half16* (sym+add)@got@tprel */ 2479*5c0de15dSLoGin #define R_PPC_GOT_TPREL16_LO 88 /* half16 (sym+add)@got@tprel@l */ 2480*5c0de15dSLoGin #define R_PPC_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */ 2481*5c0de15dSLoGin #define R_PPC_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */ 2482*5c0de15dSLoGin #define R_PPC_GOT_DTPREL16 91 /* half16* (sym+add)@got@dtprel */ 2483*5c0de15dSLoGin #define R_PPC_GOT_DTPREL16_LO 92 /* half16* (sym+add)@got@dtprel@l */ 2484*5c0de15dSLoGin #define R_PPC_GOT_DTPREL16_HI 93 /* half16* (sym+add)@got@dtprel@h */ 2485*5c0de15dSLoGin #define R_PPC_GOT_DTPREL16_HA 94 /* half16* (sym+add)@got@dtprel@ha */ 2486*5c0de15dSLoGin #define R_PPC_TLSGD 95 /* none (sym+add)@tlsgd */ 2487*5c0de15dSLoGin #define R_PPC_TLSLD 96 /* none (sym+add)@tlsld */ 2488*5c0de15dSLoGin 2489*5c0de15dSLoGin /* The remaining relocs are from the Embedded ELF ABI, and are not 2490*5c0de15dSLoGin in the SVR4 ELF ABI. */ 2491*5c0de15dSLoGin #define R_PPC_EMB_NADDR32 101 2492*5c0de15dSLoGin #define R_PPC_EMB_NADDR16 102 2493*5c0de15dSLoGin #define R_PPC_EMB_NADDR16_LO 103 2494*5c0de15dSLoGin #define R_PPC_EMB_NADDR16_HI 104 2495*5c0de15dSLoGin #define R_PPC_EMB_NADDR16_HA 105 2496*5c0de15dSLoGin #define R_PPC_EMB_SDAI16 106 2497*5c0de15dSLoGin #define R_PPC_EMB_SDA2I16 107 2498*5c0de15dSLoGin #define R_PPC_EMB_SDA2REL 108 2499*5c0de15dSLoGin #define R_PPC_EMB_SDA21 109 /* 16 bit offset in SDA */ 2500*5c0de15dSLoGin #define R_PPC_EMB_MRKREF 110 2501*5c0de15dSLoGin #define R_PPC_EMB_RELSEC16 111 2502*5c0de15dSLoGin #define R_PPC_EMB_RELST_LO 112 2503*5c0de15dSLoGin #define R_PPC_EMB_RELST_HI 113 2504*5c0de15dSLoGin #define R_PPC_EMB_RELST_HA 114 2505*5c0de15dSLoGin #define R_PPC_EMB_BIT_FLD 115 2506*5c0de15dSLoGin #define R_PPC_EMB_RELSDA 116 /* 16 bit relative offset in SDA */ 2507*5c0de15dSLoGin 2508*5c0de15dSLoGin /* Diab tool relocations. */ 2509*5c0de15dSLoGin #define R_PPC_DIAB_SDA21_LO 180 /* like EMB_SDA21, but lower 16 bit */ 2510*5c0de15dSLoGin #define R_PPC_DIAB_SDA21_HI 181 /* like EMB_SDA21, but high 16 bit */ 2511*5c0de15dSLoGin #define R_PPC_DIAB_SDA21_HA 182 /* like EMB_SDA21, adjusted high 16 */ 2512*5c0de15dSLoGin #define R_PPC_DIAB_RELSDA_LO 183 /* like EMB_RELSDA, but lower 16 bit */ 2513*5c0de15dSLoGin #define R_PPC_DIAB_RELSDA_HI 184 /* like EMB_RELSDA, but high 16 bit */ 2514*5c0de15dSLoGin #define R_PPC_DIAB_RELSDA_HA 185 /* like EMB_RELSDA, adjusted high 16 */ 2515*5c0de15dSLoGin 2516*5c0de15dSLoGin /* GNU extension to support local ifunc. */ 2517*5c0de15dSLoGin #define R_PPC_IRELATIVE 248 2518*5c0de15dSLoGin 2519*5c0de15dSLoGin /* GNU relocs used in PIC code sequences. */ 2520*5c0de15dSLoGin #define R_PPC_REL16 249 /* half16 (sym+add-.) */ 2521*5c0de15dSLoGin #define R_PPC_REL16_LO 250 /* half16 (sym+add-.)@l */ 2522*5c0de15dSLoGin #define R_PPC_REL16_HI 251 /* half16 (sym+add-.)@h */ 2523*5c0de15dSLoGin #define R_PPC_REL16_HA 252 /* half16 (sym+add-.)@ha */ 2524*5c0de15dSLoGin 2525*5c0de15dSLoGin /* This is a phony reloc to handle any old fashioned TOC16 references 2526*5c0de15dSLoGin that may still be in object files. */ 2527*5c0de15dSLoGin #define R_PPC_TOC16 255 2528*5c0de15dSLoGin 2529*5c0de15dSLoGin /* PowerPC specific values for the Dyn d_tag field. */ 2530*5c0de15dSLoGin #define DT_PPC_GOT (DT_LOPROC + 0) 2531*5c0de15dSLoGin #define DT_PPC_OPT (DT_LOPROC + 1) 2532*5c0de15dSLoGin #define DT_PPC_NUM 2 2533*5c0de15dSLoGin 2534*5c0de15dSLoGin /* PowerPC specific values for the DT_PPC_OPT Dyn entry. */ 2535*5c0de15dSLoGin #define PPC_OPT_TLS 1 2536*5c0de15dSLoGin 2537*5c0de15dSLoGin /* PowerPC64 relocations defined by the ABIs */ 2538*5c0de15dSLoGin #define R_PPC64_NONE R_PPC_NONE 2539*5c0de15dSLoGin #define R_PPC64_ADDR32 R_PPC_ADDR32 /* 32bit absolute address */ 2540*5c0de15dSLoGin #define R_PPC64_ADDR24 R_PPC_ADDR24 /* 26bit address, word aligned */ 2541*5c0de15dSLoGin #define R_PPC64_ADDR16 R_PPC_ADDR16 /* 16bit absolute address */ 2542*5c0de15dSLoGin #define R_PPC64_ADDR16_LO R_PPC_ADDR16_LO /* lower 16bits of address */ 2543*5c0de15dSLoGin #define R_PPC64_ADDR16_HI R_PPC_ADDR16_HI /* high 16bits of address. */ 2544*5c0de15dSLoGin #define R_PPC64_ADDR16_HA R_PPC_ADDR16_HA /* adjusted high 16bits. */ 2545*5c0de15dSLoGin #define R_PPC64_ADDR14 R_PPC_ADDR14 /* 16bit address, word aligned */ 2546*5c0de15dSLoGin #define R_PPC64_ADDR14_BRTAKEN R_PPC_ADDR14_BRTAKEN 2547*5c0de15dSLoGin #define R_PPC64_ADDR14_BRNTAKEN R_PPC_ADDR14_BRNTAKEN 2548*5c0de15dSLoGin #define R_PPC64_REL24 R_PPC_REL24 /* PC-rel. 26 bit, word aligned */ 2549*5c0de15dSLoGin #define R_PPC64_REL14 R_PPC_REL14 /* PC relative 16 bit */ 2550*5c0de15dSLoGin #define R_PPC64_REL14_BRTAKEN R_PPC_REL14_BRTAKEN 2551*5c0de15dSLoGin #define R_PPC64_REL14_BRNTAKEN R_PPC_REL14_BRNTAKEN 2552*5c0de15dSLoGin #define R_PPC64_GOT16 R_PPC_GOT16 2553*5c0de15dSLoGin #define R_PPC64_GOT16_LO R_PPC_GOT16_LO 2554*5c0de15dSLoGin #define R_PPC64_GOT16_HI R_PPC_GOT16_HI 2555*5c0de15dSLoGin #define R_PPC64_GOT16_HA R_PPC_GOT16_HA 2556*5c0de15dSLoGin 2557*5c0de15dSLoGin #define R_PPC64_COPY R_PPC_COPY 2558*5c0de15dSLoGin #define R_PPC64_GLOB_DAT R_PPC_GLOB_DAT 2559*5c0de15dSLoGin #define R_PPC64_JMP_SLOT R_PPC_JMP_SLOT 2560*5c0de15dSLoGin #define R_PPC64_RELATIVE R_PPC_RELATIVE 2561*5c0de15dSLoGin 2562*5c0de15dSLoGin #define R_PPC64_UADDR32 R_PPC_UADDR32 2563*5c0de15dSLoGin #define R_PPC64_UADDR16 R_PPC_UADDR16 2564*5c0de15dSLoGin #define R_PPC64_REL32 R_PPC_REL32 2565*5c0de15dSLoGin #define R_PPC64_PLT32 R_PPC_PLT32 2566*5c0de15dSLoGin #define R_PPC64_PLTREL32 R_PPC_PLTREL32 2567*5c0de15dSLoGin #define R_PPC64_PLT16_LO R_PPC_PLT16_LO 2568*5c0de15dSLoGin #define R_PPC64_PLT16_HI R_PPC_PLT16_HI 2569*5c0de15dSLoGin #define R_PPC64_PLT16_HA R_PPC_PLT16_HA 2570*5c0de15dSLoGin 2571*5c0de15dSLoGin #define R_PPC64_SECTOFF R_PPC_SECTOFF 2572*5c0de15dSLoGin #define R_PPC64_SECTOFF_LO R_PPC_SECTOFF_LO 2573*5c0de15dSLoGin #define R_PPC64_SECTOFF_HI R_PPC_SECTOFF_HI 2574*5c0de15dSLoGin #define R_PPC64_SECTOFF_HA R_PPC_SECTOFF_HA 2575*5c0de15dSLoGin #define R_PPC64_ADDR30 37 /* word30 (S + A - P) >> 2 */ 2576*5c0de15dSLoGin #define R_PPC64_ADDR64 38 /* doubleword64 S + A */ 2577*5c0de15dSLoGin #define R_PPC64_ADDR16_HIGHER 39 /* half16 #higher(S + A) */ 2578*5c0de15dSLoGin #define R_PPC64_ADDR16_HIGHERA 40 /* half16 #highera(S + A) */ 2579*5c0de15dSLoGin #define R_PPC64_ADDR16_HIGHEST 41 /* half16 #highest(S + A) */ 2580*5c0de15dSLoGin #define R_PPC64_ADDR16_HIGHESTA 42 /* half16 #highesta(S + A) */ 2581*5c0de15dSLoGin #define R_PPC64_UADDR64 43 /* doubleword64 S + A */ 2582*5c0de15dSLoGin #define R_PPC64_REL64 44 /* doubleword64 S + A - P */ 2583*5c0de15dSLoGin #define R_PPC64_PLT64 45 /* doubleword64 L + A */ 2584*5c0de15dSLoGin #define R_PPC64_PLTREL64 46 /* doubleword64 L + A - P */ 2585*5c0de15dSLoGin #define R_PPC64_TOC16 47 /* half16* S + A - .TOC */ 2586*5c0de15dSLoGin #define R_PPC64_TOC16_LO 48 /* half16 #lo(S + A - .TOC.) */ 2587*5c0de15dSLoGin #define R_PPC64_TOC16_HI 49 /* half16 #hi(S + A - .TOC.) */ 2588*5c0de15dSLoGin #define R_PPC64_TOC16_HA 50 /* half16 #ha(S + A - .TOC.) */ 2589*5c0de15dSLoGin #define R_PPC64_TOC 51 /* doubleword64 .TOC */ 2590*5c0de15dSLoGin #define R_PPC64_PLTGOT16 52 /* half16* M + A */ 2591*5c0de15dSLoGin #define R_PPC64_PLTGOT16_LO 53 /* half16 #lo(M + A) */ 2592*5c0de15dSLoGin #define R_PPC64_PLTGOT16_HI 54 /* half16 #hi(M + A) */ 2593*5c0de15dSLoGin #define R_PPC64_PLTGOT16_HA 55 /* half16 #ha(M + A) */ 2594*5c0de15dSLoGin 2595*5c0de15dSLoGin #define R_PPC64_ADDR16_DS 56 /* half16ds* (S + A) >> 2 */ 2596*5c0de15dSLoGin #define R_PPC64_ADDR16_LO_DS 57 /* half16ds #lo(S + A) >> 2 */ 2597*5c0de15dSLoGin #define R_PPC64_GOT16_DS 58 /* half16ds* (G + A) >> 2 */ 2598*5c0de15dSLoGin #define R_PPC64_GOT16_LO_DS 59 /* half16ds #lo(G + A) >> 2 */ 2599*5c0de15dSLoGin #define R_PPC64_PLT16_LO_DS 60 /* half16ds #lo(L + A) >> 2 */ 2600*5c0de15dSLoGin #define R_PPC64_SECTOFF_DS 61 /* half16ds* (R + A) >> 2 */ 2601*5c0de15dSLoGin #define R_PPC64_SECTOFF_LO_DS 62 /* half16ds #lo(R + A) >> 2 */ 2602*5c0de15dSLoGin #define R_PPC64_TOC16_DS 63 /* half16ds* (S + A - .TOC.) >> 2 */ 2603*5c0de15dSLoGin #define R_PPC64_TOC16_LO_DS 64 /* half16ds #lo(S + A - .TOC.) >> 2 */ 2604*5c0de15dSLoGin #define R_PPC64_PLTGOT16_DS 65 /* half16ds* (M + A) >> 2 */ 2605*5c0de15dSLoGin #define R_PPC64_PLTGOT16_LO_DS 66 /* half16ds #lo(M + A) >> 2 */ 2606*5c0de15dSLoGin 2607*5c0de15dSLoGin /* PowerPC64 relocations defined for the TLS access ABI. */ 2608*5c0de15dSLoGin #define R_PPC64_TLS 67 /* none (sym+add)@tls */ 2609*5c0de15dSLoGin #define R_PPC64_DTPMOD64 68 /* doubleword64 (sym+add)@dtpmod */ 2610*5c0de15dSLoGin #define R_PPC64_TPREL16 69 /* half16* (sym+add)@tprel */ 2611*5c0de15dSLoGin #define R_PPC64_TPREL16_LO 70 /* half16 (sym+add)@tprel@l */ 2612*5c0de15dSLoGin #define R_PPC64_TPREL16_HI 71 /* half16 (sym+add)@tprel@h */ 2613*5c0de15dSLoGin #define R_PPC64_TPREL16_HA 72 /* half16 (sym+add)@tprel@ha */ 2614*5c0de15dSLoGin #define R_PPC64_TPREL64 73 /* doubleword64 (sym+add)@tprel */ 2615*5c0de15dSLoGin #define R_PPC64_DTPREL16 74 /* half16* (sym+add)@dtprel */ 2616*5c0de15dSLoGin #define R_PPC64_DTPREL16_LO 75 /* half16 (sym+add)@dtprel@l */ 2617*5c0de15dSLoGin #define R_PPC64_DTPREL16_HI 76 /* half16 (sym+add)@dtprel@h */ 2618*5c0de15dSLoGin #define R_PPC64_DTPREL16_HA 77 /* half16 (sym+add)@dtprel@ha */ 2619*5c0de15dSLoGin #define R_PPC64_DTPREL64 78 /* doubleword64 (sym+add)@dtprel */ 2620*5c0de15dSLoGin #define R_PPC64_GOT_TLSGD16 79 /* half16* (sym+add)@got@tlsgd */ 2621*5c0de15dSLoGin #define R_PPC64_GOT_TLSGD16_LO 80 /* half16 (sym+add)@got@tlsgd@l */ 2622*5c0de15dSLoGin #define R_PPC64_GOT_TLSGD16_HI 81 /* half16 (sym+add)@got@tlsgd@h */ 2623*5c0de15dSLoGin #define R_PPC64_GOT_TLSGD16_HA 82 /* half16 (sym+add)@got@tlsgd@ha */ 2624*5c0de15dSLoGin #define R_PPC64_GOT_TLSLD16 83 /* half16* (sym+add)@got@tlsld */ 2625*5c0de15dSLoGin #define R_PPC64_GOT_TLSLD16_LO 84 /* half16 (sym+add)@got@tlsld@l */ 2626*5c0de15dSLoGin #define R_PPC64_GOT_TLSLD16_HI 85 /* half16 (sym+add)@got@tlsld@h */ 2627*5c0de15dSLoGin #define R_PPC64_GOT_TLSLD16_HA 86 /* half16 (sym+add)@got@tlsld@ha */ 2628*5c0de15dSLoGin #define R_PPC64_GOT_TPREL16_DS 87 /* half16ds* (sym+add)@got@tprel */ 2629*5c0de15dSLoGin #define R_PPC64_GOT_TPREL16_LO_DS 88 /* half16ds (sym+add)@got@tprel@l */ 2630*5c0de15dSLoGin #define R_PPC64_GOT_TPREL16_HI 89 /* half16 (sym+add)@got@tprel@h */ 2631*5c0de15dSLoGin #define R_PPC64_GOT_TPREL16_HA 90 /* half16 (sym+add)@got@tprel@ha */ 2632*5c0de15dSLoGin #define R_PPC64_GOT_DTPREL16_DS 91 /* half16ds* (sym+add)@got@dtprel */ 2633*5c0de15dSLoGin #define R_PPC64_GOT_DTPREL16_LO_DS 92 /* half16ds (sym+add)@got@dtprel@l */ 2634*5c0de15dSLoGin #define R_PPC64_GOT_DTPREL16_HI 93 /* half16 (sym+add)@got@dtprel@h */ 2635*5c0de15dSLoGin #define R_PPC64_GOT_DTPREL16_HA 94 /* half16 (sym+add)@got@dtprel@ha */ 2636*5c0de15dSLoGin #define R_PPC64_TPREL16_DS 95 /* half16ds* (sym+add)@tprel */ 2637*5c0de15dSLoGin #define R_PPC64_TPREL16_LO_DS 96 /* half16ds (sym+add)@tprel@l */ 2638*5c0de15dSLoGin #define R_PPC64_TPREL16_HIGHER 97 /* half16 (sym+add)@tprel@higher */ 2639*5c0de15dSLoGin #define R_PPC64_TPREL16_HIGHERA 98 /* half16 (sym+add)@tprel@highera */ 2640*5c0de15dSLoGin #define R_PPC64_TPREL16_HIGHEST 99 /* half16 (sym+add)@tprel@highest */ 2641*5c0de15dSLoGin #define R_PPC64_TPREL16_HIGHESTA 100 /* half16 (sym+add)@tprel@highesta */ 2642*5c0de15dSLoGin #define R_PPC64_DTPREL16_DS 101 /* half16ds* (sym+add)@dtprel */ 2643*5c0de15dSLoGin #define R_PPC64_DTPREL16_LO_DS 102 /* half16ds (sym+add)@dtprel@l */ 2644*5c0de15dSLoGin #define R_PPC64_DTPREL16_HIGHER 103 /* half16 (sym+add)@dtprel@higher */ 2645*5c0de15dSLoGin #define R_PPC64_DTPREL16_HIGHERA 104 /* half16 (sym+add)@dtprel@highera */ 2646*5c0de15dSLoGin #define R_PPC64_DTPREL16_HIGHEST 105 /* half16 (sym+add)@dtprel@highest */ 2647*5c0de15dSLoGin #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16 (sym+add)@dtprel@highesta */ 2648*5c0de15dSLoGin #define R_PPC64_TLSGD 107 /* none (sym+add)@tlsgd */ 2649*5c0de15dSLoGin #define R_PPC64_TLSLD 108 /* none (sym+add)@tlsld */ 2650*5c0de15dSLoGin #define R_PPC64_TOCSAVE 109 /* none */ 2651*5c0de15dSLoGin 2652*5c0de15dSLoGin /* Added when HA and HI relocs were changed to report overflows. */ 2653*5c0de15dSLoGin #define R_PPC64_ADDR16_HIGH 110 2654*5c0de15dSLoGin #define R_PPC64_ADDR16_HIGHA 111 2655*5c0de15dSLoGin #define R_PPC64_TPREL16_HIGH 112 2656*5c0de15dSLoGin #define R_PPC64_TPREL16_HIGHA 113 2657*5c0de15dSLoGin #define R_PPC64_DTPREL16_HIGH 114 2658*5c0de15dSLoGin #define R_PPC64_DTPREL16_HIGHA 115 2659*5c0de15dSLoGin 2660*5c0de15dSLoGin /* GNU extension to support local ifunc. */ 2661*5c0de15dSLoGin #define R_PPC64_JMP_IREL 247 2662*5c0de15dSLoGin #define R_PPC64_IRELATIVE 248 2663*5c0de15dSLoGin #define R_PPC64_REL16 249 /* half16 (sym+add-.) */ 2664*5c0de15dSLoGin #define R_PPC64_REL16_LO 250 /* half16 (sym+add-.)@l */ 2665*5c0de15dSLoGin #define R_PPC64_REL16_HI 251 /* half16 (sym+add-.)@h */ 2666*5c0de15dSLoGin #define R_PPC64_REL16_HA 252 /* half16 (sym+add-.)@ha */ 2667*5c0de15dSLoGin 2668*5c0de15dSLoGin /* e_flags bits specifying ABI. 2669*5c0de15dSLoGin 1 for original function descriptor using ABI, 2670*5c0de15dSLoGin 2 for revised ABI without function descriptors, 2671*5c0de15dSLoGin 0 for unspecified or not using any features affected by the differences. */ 2672*5c0de15dSLoGin #define EF_PPC64_ABI 3 2673*5c0de15dSLoGin 2674*5c0de15dSLoGin /* PowerPC64 specific values for the Dyn d_tag field. */ 2675*5c0de15dSLoGin #define DT_PPC64_GLINK (DT_LOPROC + 0) 2676*5c0de15dSLoGin #define DT_PPC64_OPD (DT_LOPROC + 1) 2677*5c0de15dSLoGin #define DT_PPC64_OPDSZ (DT_LOPROC + 2) 2678*5c0de15dSLoGin #define DT_PPC64_OPT (DT_LOPROC + 3) 2679*5c0de15dSLoGin #define DT_PPC64_NUM 4 2680*5c0de15dSLoGin 2681*5c0de15dSLoGin /* PowerPC64 specific bits in the DT_PPC64_OPT Dyn entry. */ 2682*5c0de15dSLoGin #define PPC64_OPT_TLS 1 2683*5c0de15dSLoGin #define PPC64_OPT_MULTI_TOC 2 2684*5c0de15dSLoGin #define PPC64_OPT_LOCALENTRY 4 2685*5c0de15dSLoGin 2686*5c0de15dSLoGin /* PowerPC64 specific values for the Elf64_Sym st_other field. */ 2687*5c0de15dSLoGin #define STO_PPC64_LOCAL_BIT 5 2688*5c0de15dSLoGin #define STO_PPC64_LOCAL_MASK (7 << STO_PPC64_LOCAL_BIT) 2689*5c0de15dSLoGin #define PPC64_LOCAL_ENTRY_OFFSET(other) \ 2690*5c0de15dSLoGin (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2) 2691*5c0de15dSLoGin 2692*5c0de15dSLoGin 2693*5c0de15dSLoGin /* ARM specific declarations */ 2694*5c0de15dSLoGin 2695*5c0de15dSLoGin /* Processor specific flags for the ELF header e_flags field. */ 2696*5c0de15dSLoGin #define EF_ARM_RELEXEC 0x01 2697*5c0de15dSLoGin #define EF_ARM_HASENTRY 0x02 2698*5c0de15dSLoGin #define EF_ARM_INTERWORK 0x04 2699*5c0de15dSLoGin #define EF_ARM_APCS_26 0x08 2700*5c0de15dSLoGin #define EF_ARM_APCS_FLOAT 0x10 2701*5c0de15dSLoGin #define EF_ARM_PIC 0x20 2702*5c0de15dSLoGin #define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use */ 2703*5c0de15dSLoGin #define EF_ARM_NEW_ABI 0x80 2704*5c0de15dSLoGin #define EF_ARM_OLD_ABI 0x100 2705*5c0de15dSLoGin #define EF_ARM_SOFT_FLOAT 0x200 2706*5c0de15dSLoGin #define EF_ARM_VFP_FLOAT 0x400 2707*5c0de15dSLoGin #define EF_ARM_MAVERICK_FLOAT 0x800 2708*5c0de15dSLoGin 2709*5c0de15dSLoGin #define EF_ARM_ABI_FLOAT_SOFT 0x200 /* NB conflicts with EF_ARM_SOFT_FLOAT */ 2710*5c0de15dSLoGin #define EF_ARM_ABI_FLOAT_HARD 0x400 /* NB conflicts with EF_ARM_VFP_FLOAT */ 2711*5c0de15dSLoGin 2712*5c0de15dSLoGin 2713*5c0de15dSLoGin /* Other constants defined in the ARM ELF spec. version B-01. */ 2714*5c0de15dSLoGin /* NB. These conflict with values defined above. */ 2715*5c0de15dSLoGin #define EF_ARM_SYMSARESORTED 0x04 2716*5c0de15dSLoGin #define EF_ARM_DYNSYMSUSESEGIDX 0x08 2717*5c0de15dSLoGin #define EF_ARM_MAPSYMSFIRST 0x10 2718*5c0de15dSLoGin #define EF_ARM_EABIMASK 0XFF000000 2719*5c0de15dSLoGin 2720*5c0de15dSLoGin /* Constants defined in AAELF. */ 2721*5c0de15dSLoGin #define EF_ARM_BE8 0x00800000 2722*5c0de15dSLoGin #define EF_ARM_LE8 0x00400000 2723*5c0de15dSLoGin 2724*5c0de15dSLoGin #define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) 2725*5c0de15dSLoGin #define EF_ARM_EABI_UNKNOWN 0x00000000 2726*5c0de15dSLoGin #define EF_ARM_EABI_VER1 0x01000000 2727*5c0de15dSLoGin #define EF_ARM_EABI_VER2 0x02000000 2728*5c0de15dSLoGin #define EF_ARM_EABI_VER3 0x03000000 2729*5c0de15dSLoGin #define EF_ARM_EABI_VER4 0x04000000 2730*5c0de15dSLoGin #define EF_ARM_EABI_VER5 0x05000000 2731*5c0de15dSLoGin 2732*5c0de15dSLoGin /* Additional symbol types for Thumb. */ 2733*5c0de15dSLoGin #define STT_ARM_TFUNC STT_LOPROC /* A Thumb function. */ 2734*5c0de15dSLoGin #define STT_ARM_16BIT STT_HIPROC /* A Thumb label. */ 2735*5c0de15dSLoGin 2736*5c0de15dSLoGin /* ARM-specific values for sh_flags */ 2737*5c0de15dSLoGin #define SHF_ARM_ENTRYSECT 0x10000000 /* Section contains an entry point */ 2738*5c0de15dSLoGin #define SHF_ARM_COMDEF 0x80000000 /* Section may be multiply defined 2739*5c0de15dSLoGin in the input to a link step. */ 2740*5c0de15dSLoGin 2741*5c0de15dSLoGin /* ARM-specific program header flags */ 2742*5c0de15dSLoGin #define PF_ARM_SB 0x10000000 /* Segment contains the location 2743*5c0de15dSLoGin addressed by the static base. */ 2744*5c0de15dSLoGin #define PF_ARM_PI 0x20000000 /* Position-independent segment. */ 2745*5c0de15dSLoGin #define PF_ARM_ABS 0x40000000 /* Absolute segment. */ 2746*5c0de15dSLoGin 2747*5c0de15dSLoGin /* Processor specific values for the Phdr p_type field. */ 2748*5c0de15dSLoGin #define PT_ARM_EXIDX (PT_LOPROC + 1) /* ARM unwind segment. */ 2749*5c0de15dSLoGin 2750*5c0de15dSLoGin /* Processor specific values for the Shdr sh_type field. */ 2751*5c0de15dSLoGin #define SHT_ARM_EXIDX (SHT_LOPROC + 1) /* ARM unwind section. */ 2752*5c0de15dSLoGin #define SHT_ARM_PREEMPTMAP (SHT_LOPROC + 2) /* Preemption details. */ 2753*5c0de15dSLoGin #define SHT_ARM_ATTRIBUTES (SHT_LOPROC + 3) /* ARM attributes section. */ 2754*5c0de15dSLoGin 2755*5c0de15dSLoGin 2756*5c0de15dSLoGin /* AArch64 relocs. */ 2757*5c0de15dSLoGin 2758*5c0de15dSLoGin #define R_AARCH64_NONE 0 /* No relocation. */ 2759*5c0de15dSLoGin 2760*5c0de15dSLoGin /* ILP32 AArch64 relocs. */ 2761*5c0de15dSLoGin #define R_AARCH64_P32_ABS32 1 /* Direct 32 bit. */ 2762*5c0de15dSLoGin #define R_AARCH64_P32_COPY 180 /* Copy symbol at runtime. */ 2763*5c0de15dSLoGin #define R_AARCH64_P32_GLOB_DAT 181 /* Create GOT entry. */ 2764*5c0de15dSLoGin #define R_AARCH64_P32_JUMP_SLOT 182 /* Create PLT entry. */ 2765*5c0de15dSLoGin #define R_AARCH64_P32_RELATIVE 183 /* Adjust by program base. */ 2766*5c0de15dSLoGin #define R_AARCH64_P32_TLS_DTPMOD 184 /* Module number, 32 bit. */ 2767*5c0de15dSLoGin #define R_AARCH64_P32_TLS_DTPREL 185 /* Module-relative offset, 32 bit. */ 2768*5c0de15dSLoGin #define R_AARCH64_P32_TLS_TPREL 186 /* TP-relative offset, 32 bit. */ 2769*5c0de15dSLoGin #define R_AARCH64_P32_TLSDESC 187 /* TLS Descriptor. */ 2770*5c0de15dSLoGin #define R_AARCH64_P32_IRELATIVE 188 /* STT_GNU_IFUNC relocation. */ 2771*5c0de15dSLoGin 2772*5c0de15dSLoGin /* LP64 AArch64 relocs. */ 2773*5c0de15dSLoGin #define R_AARCH64_ABS64 257 /* Direct 64 bit. */ 2774*5c0de15dSLoGin #define R_AARCH64_ABS32 258 /* Direct 32 bit. */ 2775*5c0de15dSLoGin #define R_AARCH64_ABS16 259 /* Direct 16-bit. */ 2776*5c0de15dSLoGin #define R_AARCH64_PREL64 260 /* PC-relative 64-bit. */ 2777*5c0de15dSLoGin #define R_AARCH64_PREL32 261 /* PC-relative 32-bit. */ 2778*5c0de15dSLoGin #define R_AARCH64_PREL16 262 /* PC-relative 16-bit. */ 2779*5c0de15dSLoGin #define R_AARCH64_MOVW_UABS_G0 263 /* Dir. MOVZ imm. from bits 15:0. */ 2780*5c0de15dSLoGin #define R_AARCH64_MOVW_UABS_G0_NC 264 /* Likewise for MOVK; no check. */ 2781*5c0de15dSLoGin #define R_AARCH64_MOVW_UABS_G1 265 /* Dir. MOVZ imm. from bits 31:16. */ 2782*5c0de15dSLoGin #define R_AARCH64_MOVW_UABS_G1_NC 266 /* Likewise for MOVK; no check. */ 2783*5c0de15dSLoGin #define R_AARCH64_MOVW_UABS_G2 267 /* Dir. MOVZ imm. from bits 47:32. */ 2784*5c0de15dSLoGin #define R_AARCH64_MOVW_UABS_G2_NC 268 /* Likewise for MOVK; no check. */ 2785*5c0de15dSLoGin #define R_AARCH64_MOVW_UABS_G3 269 /* Dir. MOV{K,Z} imm. from 63:48. */ 2786*5c0de15dSLoGin #define R_AARCH64_MOVW_SABS_G0 270 /* Dir. MOV{N,Z} imm. from 15:0. */ 2787*5c0de15dSLoGin #define R_AARCH64_MOVW_SABS_G1 271 /* Dir. MOV{N,Z} imm. from 31:16. */ 2788*5c0de15dSLoGin #define R_AARCH64_MOVW_SABS_G2 272 /* Dir. MOV{N,Z} imm. from 47:32. */ 2789*5c0de15dSLoGin #define R_AARCH64_LD_PREL_LO19 273 /* PC-rel. LD imm. from bits 20:2. */ 2790*5c0de15dSLoGin #define R_AARCH64_ADR_PREL_LO21 274 /* PC-rel. ADR imm. from bits 20:0. */ 2791*5c0de15dSLoGin #define R_AARCH64_ADR_PREL_PG_HI21 275 /* Page-rel. ADRP imm. from 32:12. */ 2792*5c0de15dSLoGin #define R_AARCH64_ADR_PREL_PG_HI21_NC 276 /* Likewise; no overflow check. */ 2793*5c0de15dSLoGin #define R_AARCH64_ADD_ABS_LO12_NC 277 /* Dir. ADD imm. from bits 11:0. */ 2794*5c0de15dSLoGin #define R_AARCH64_LDST8_ABS_LO12_NC 278 /* Likewise for LD/ST; no check. */ 2795*5c0de15dSLoGin #define R_AARCH64_TSTBR14 279 /* PC-rel. TBZ/TBNZ imm. from 15:2. */ 2796*5c0de15dSLoGin #define R_AARCH64_CONDBR19 280 /* PC-rel. cond. br. imm. from 20:2. */ 2797*5c0de15dSLoGin #define R_AARCH64_JUMP26 282 /* PC-rel. B imm. from bits 27:2. */ 2798*5c0de15dSLoGin #define R_AARCH64_CALL26 283 /* Likewise for CALL. */ 2799*5c0de15dSLoGin #define R_AARCH64_LDST16_ABS_LO12_NC 284 /* Dir. ADD imm. from bits 11:1. */ 2800*5c0de15dSLoGin #define R_AARCH64_LDST32_ABS_LO12_NC 285 /* Likewise for bits 11:2. */ 2801*5c0de15dSLoGin #define R_AARCH64_LDST64_ABS_LO12_NC 286 /* Likewise for bits 11:3. */ 2802*5c0de15dSLoGin #define R_AARCH64_MOVW_PREL_G0 287 /* PC-rel. MOV{N,Z} imm. from 15:0. */ 2803*5c0de15dSLoGin #define R_AARCH64_MOVW_PREL_G0_NC 288 /* Likewise for MOVK; no check. */ 2804*5c0de15dSLoGin #define R_AARCH64_MOVW_PREL_G1 289 /* PC-rel. MOV{N,Z} imm. from 31:16. */ 2805*5c0de15dSLoGin #define R_AARCH64_MOVW_PREL_G1_NC 290 /* Likewise for MOVK; no check. */ 2806*5c0de15dSLoGin #define R_AARCH64_MOVW_PREL_G2 291 /* PC-rel. MOV{N,Z} imm. from 47:32. */ 2807*5c0de15dSLoGin #define R_AARCH64_MOVW_PREL_G2_NC 292 /* Likewise for MOVK; no check. */ 2808*5c0de15dSLoGin #define R_AARCH64_MOVW_PREL_G3 293 /* PC-rel. MOV{N,Z} imm. from 63:48. */ 2809*5c0de15dSLoGin #define R_AARCH64_LDST128_ABS_LO12_NC 299 /* Dir. ADD imm. from bits 11:4. */ 2810*5c0de15dSLoGin #define R_AARCH64_MOVW_GOTOFF_G0 300 /* GOT-rel. off. MOV{N,Z} imm. 15:0. */ 2811*5c0de15dSLoGin #define R_AARCH64_MOVW_GOTOFF_G0_NC 301 /* Likewise for MOVK; no check. */ 2812*5c0de15dSLoGin #define R_AARCH64_MOVW_GOTOFF_G1 302 /* GOT-rel. o. MOV{N,Z} imm. 31:16. */ 2813*5c0de15dSLoGin #define R_AARCH64_MOVW_GOTOFF_G1_NC 303 /* Likewise for MOVK; no check. */ 2814*5c0de15dSLoGin #define R_AARCH64_MOVW_GOTOFF_G2 304 /* GOT-rel. o. MOV{N,Z} imm. 47:32. */ 2815*5c0de15dSLoGin #define R_AARCH64_MOVW_GOTOFF_G2_NC 305 /* Likewise for MOVK; no check. */ 2816*5c0de15dSLoGin #define R_AARCH64_MOVW_GOTOFF_G3 306 /* GOT-rel. o. MOV{N,Z} imm. 63:48. */ 2817*5c0de15dSLoGin #define R_AARCH64_GOTREL64 307 /* GOT-relative 64-bit. */ 2818*5c0de15dSLoGin #define R_AARCH64_GOTREL32 308 /* GOT-relative 32-bit. */ 2819*5c0de15dSLoGin #define R_AARCH64_GOT_LD_PREL19 309 /* PC-rel. GOT off. load imm. 20:2. */ 2820*5c0de15dSLoGin #define R_AARCH64_LD64_GOTOFF_LO15 310 /* GOT-rel. off. LD/ST imm. 14:3. */ 2821*5c0de15dSLoGin #define R_AARCH64_ADR_GOT_PAGE 311 /* P-page-rel. GOT off. ADRP 32:12. */ 2822*5c0de15dSLoGin #define R_AARCH64_LD64_GOT_LO12_NC 312 /* Dir. GOT off. LD/ST imm. 11:3. */ 2823*5c0de15dSLoGin #define R_AARCH64_LD64_GOTPAGE_LO15 313 /* GOT-page-rel. GOT off. LD/ST 14:3 */ 2824*5c0de15dSLoGin #define R_AARCH64_TLSGD_ADR_PREL21 512 /* PC-relative ADR imm. 20:0. */ 2825*5c0de15dSLoGin #define R_AARCH64_TLSGD_ADR_PAGE21 513 /* page-rel. ADRP imm. 32:12. */ 2826*5c0de15dSLoGin #define R_AARCH64_TLSGD_ADD_LO12_NC 514 /* direct ADD imm. from 11:0. */ 2827*5c0de15dSLoGin #define R_AARCH64_TLSGD_MOVW_G1 515 /* GOT-rel. MOV{N,Z} 31:16. */ 2828*5c0de15dSLoGin #define R_AARCH64_TLSGD_MOVW_G0_NC 516 /* GOT-rel. MOVK imm. 15:0. */ 2829*5c0de15dSLoGin #define R_AARCH64_TLSLD_ADR_PREL21 517 /* Like 512; local dynamic model. */ 2830*5c0de15dSLoGin #define R_AARCH64_TLSLD_ADR_PAGE21 518 /* Like 513; local dynamic model. */ 2831*5c0de15dSLoGin #define R_AARCH64_TLSLD_ADD_LO12_NC 519 /* Like 514; local dynamic model. */ 2832*5c0de15dSLoGin #define R_AARCH64_TLSLD_MOVW_G1 520 /* Like 515; local dynamic model. */ 2833*5c0de15dSLoGin #define R_AARCH64_TLSLD_MOVW_G0_NC 521 /* Like 516; local dynamic model. */ 2834*5c0de15dSLoGin #define R_AARCH64_TLSLD_LD_PREL19 522 /* TLS PC-rel. load imm. 20:2. */ 2835*5c0de15dSLoGin #define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 /* TLS DTP-rel. MOV{N,Z} 47:32. */ 2836*5c0de15dSLoGin #define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 /* TLS DTP-rel. MOV{N,Z} 31:16. */ 2837*5c0de15dSLoGin #define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 /* Likewise; MOVK; no check. */ 2838*5c0de15dSLoGin #define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 /* TLS DTP-rel. MOV{N,Z} 15:0. */ 2839*5c0de15dSLoGin #define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 /* Likewise; MOVK; no check. */ 2840*5c0de15dSLoGin #define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 /* DTP-rel. ADD imm. from 23:12. */ 2841*5c0de15dSLoGin #define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 /* DTP-rel. ADD imm. from 11:0. */ 2842*5c0de15dSLoGin #define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 /* Likewise; no ovfl. check. */ 2843*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 /* DTP-rel. LD/ST imm. 11:0. */ 2844*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 /* Likewise; no check. */ 2845*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 /* DTP-rel. LD/ST imm. 11:1. */ 2846*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 /* Likewise; no check. */ 2847*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 /* DTP-rel. LD/ST imm. 11:2. */ 2848*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 /* Likewise; no check. */ 2849*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 /* DTP-rel. LD/ST imm. 11:3. */ 2850*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 /* Likewise; no check. */ 2851*5c0de15dSLoGin #define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 /* GOT-rel. MOV{N,Z} 31:16. */ 2852*5c0de15dSLoGin #define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 /* GOT-rel. MOVK 15:0. */ 2853*5c0de15dSLoGin #define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 /* Page-rel. ADRP 32:12. */ 2854*5c0de15dSLoGin #define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 /* Direct LD off. 11:3. */ 2855*5c0de15dSLoGin #define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 /* PC-rel. load imm. 20:2. */ 2856*5c0de15dSLoGin #define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 /* TLS TP-rel. MOV{N,Z} 47:32. */ 2857*5c0de15dSLoGin #define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 /* TLS TP-rel. MOV{N,Z} 31:16. */ 2858*5c0de15dSLoGin #define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 /* Likewise; MOVK; no check. */ 2859*5c0de15dSLoGin #define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 /* TLS TP-rel. MOV{N,Z} 15:0. */ 2860*5c0de15dSLoGin #define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 /* Likewise; MOVK; no check. */ 2861*5c0de15dSLoGin #define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 /* TP-rel. ADD imm. 23:12. */ 2862*5c0de15dSLoGin #define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 /* TP-rel. ADD imm. 11:0. */ 2863*5c0de15dSLoGin #define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 /* Likewise; no ovfl. check. */ 2864*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 /* TP-rel. LD/ST off. 11:0. */ 2865*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 /* Likewise; no ovfl. check. */ 2866*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 /* TP-rel. LD/ST off. 11:1. */ 2867*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 /* Likewise; no check. */ 2868*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 /* TP-rel. LD/ST off. 11:2. */ 2869*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 /* Likewise; no check. */ 2870*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 /* TP-rel. LD/ST off. 11:3. */ 2871*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 /* Likewise; no check. */ 2872*5c0de15dSLoGin #define R_AARCH64_TLSDESC_LD_PREL19 560 /* PC-rel. load immediate 20:2. */ 2873*5c0de15dSLoGin #define R_AARCH64_TLSDESC_ADR_PREL21 561 /* PC-rel. ADR immediate 20:0. */ 2874*5c0de15dSLoGin #define R_AARCH64_TLSDESC_ADR_PAGE21 562 /* Page-rel. ADRP imm. 32:12. */ 2875*5c0de15dSLoGin #define R_AARCH64_TLSDESC_LD64_LO12 563 /* Direct LD off. from 11:3. */ 2876*5c0de15dSLoGin #define R_AARCH64_TLSDESC_ADD_LO12 564 /* Direct ADD imm. from 11:0. */ 2877*5c0de15dSLoGin #define R_AARCH64_TLSDESC_OFF_G1 565 /* GOT-rel. MOV{N,Z} imm. 31:16. */ 2878*5c0de15dSLoGin #define R_AARCH64_TLSDESC_OFF_G0_NC 566 /* GOT-rel. MOVK imm. 15:0; no ck. */ 2879*5c0de15dSLoGin #define R_AARCH64_TLSDESC_LDR 567 /* Relax LDR. */ 2880*5c0de15dSLoGin #define R_AARCH64_TLSDESC_ADD 568 /* Relax ADD. */ 2881*5c0de15dSLoGin #define R_AARCH64_TLSDESC_CALL 569 /* Relax BLR. */ 2882*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 /* TP-rel. LD/ST off. 11:4. */ 2883*5c0de15dSLoGin #define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 /* Likewise; no check. */ 2884*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 /* DTP-rel. LD/ST imm. 11:4. */ 2885*5c0de15dSLoGin #define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 /* Likewise; no check. */ 2886*5c0de15dSLoGin #define R_AARCH64_COPY 1024 /* Copy symbol at runtime. */ 2887*5c0de15dSLoGin #define R_AARCH64_GLOB_DAT 1025 /* Create GOT entry. */ 2888*5c0de15dSLoGin #define R_AARCH64_JUMP_SLOT 1026 /* Create PLT entry. */ 2889*5c0de15dSLoGin #define R_AARCH64_RELATIVE 1027 /* Adjust by program base. */ 2890*5c0de15dSLoGin #define R_AARCH64_TLS_DTPMOD 1028 /* Module number, 64 bit. */ 2891*5c0de15dSLoGin #define R_AARCH64_TLS_DTPREL 1029 /* Module-relative offset, 64 bit. */ 2892*5c0de15dSLoGin #define R_AARCH64_TLS_TPREL 1030 /* TP-relative offset, 64 bit. */ 2893*5c0de15dSLoGin #define R_AARCH64_TLSDESC 1031 /* TLS Descriptor. */ 2894*5c0de15dSLoGin #define R_AARCH64_IRELATIVE 1032 /* STT_GNU_IFUNC relocation. */ 2895*5c0de15dSLoGin 2896*5c0de15dSLoGin /* AArch64 specific values for the Dyn d_tag field. */ 2897*5c0de15dSLoGin #define DT_AARCH64_BTI_PLT (DT_LOPROC + 1) 2898*5c0de15dSLoGin #define DT_AARCH64_PAC_PLT (DT_LOPROC + 3) 2899*5c0de15dSLoGin #define DT_AARCH64_VARIANT_PCS (DT_LOPROC + 5) 2900*5c0de15dSLoGin #define DT_AARCH64_NUM 6 2901*5c0de15dSLoGin 2902*5c0de15dSLoGin /* AArch64 specific values for the st_other field. */ 2903*5c0de15dSLoGin #define STO_AARCH64_VARIANT_PCS 0x80 2904*5c0de15dSLoGin 2905*5c0de15dSLoGin /* ARM relocs. */ 2906*5c0de15dSLoGin 2907*5c0de15dSLoGin #define R_ARM_NONE 0 /* No reloc */ 2908*5c0de15dSLoGin #define R_ARM_PC24 1 /* Deprecated PC relative 26 2909*5c0de15dSLoGin bit branch. */ 2910*5c0de15dSLoGin #define R_ARM_ABS32 2 /* Direct 32 bit */ 2911*5c0de15dSLoGin #define R_ARM_REL32 3 /* PC relative 32 bit */ 2912*5c0de15dSLoGin #define R_ARM_PC13 4 2913*5c0de15dSLoGin #define R_ARM_ABS16 5 /* Direct 16 bit */ 2914*5c0de15dSLoGin #define R_ARM_ABS12 6 /* Direct 12 bit */ 2915*5c0de15dSLoGin #define R_ARM_THM_ABS5 7 /* Direct & 0x7C (LDR, STR). */ 2916*5c0de15dSLoGin #define R_ARM_ABS8 8 /* Direct 8 bit */ 2917*5c0de15dSLoGin #define R_ARM_SBREL32 9 2918*5c0de15dSLoGin #define R_ARM_THM_PC22 10 /* PC relative 24 bit (Thumb32 BL). */ 2919*5c0de15dSLoGin #define R_ARM_THM_PC8 11 /* PC relative & 0x3FC 2920*5c0de15dSLoGin (Thumb16 LDR, ADD, ADR). */ 2921*5c0de15dSLoGin #define R_ARM_AMP_VCALL9 12 2922*5c0de15dSLoGin #define R_ARM_SWI24 13 /* Obsolete static relocation. */ 2923*5c0de15dSLoGin #define R_ARM_TLS_DESC 13 /* Dynamic relocation. */ 2924*5c0de15dSLoGin #define R_ARM_THM_SWI8 14 /* Reserved. */ 2925*5c0de15dSLoGin #define R_ARM_XPC25 15 /* Reserved. */ 2926*5c0de15dSLoGin #define R_ARM_THM_XPC22 16 /* Reserved. */ 2927*5c0de15dSLoGin #define R_ARM_TLS_DTPMOD32 17 /* ID of module containing symbol */ 2928*5c0de15dSLoGin #define R_ARM_TLS_DTPOFF32 18 /* Offset in TLS block */ 2929*5c0de15dSLoGin #define R_ARM_TLS_TPOFF32 19 /* Offset in static TLS block */ 2930*5c0de15dSLoGin #define R_ARM_COPY 20 /* Copy symbol at runtime */ 2931*5c0de15dSLoGin #define R_ARM_GLOB_DAT 21 /* Create GOT entry */ 2932*5c0de15dSLoGin #define R_ARM_JUMP_SLOT 22 /* Create PLT entry */ 2933*5c0de15dSLoGin #define R_ARM_RELATIVE 23 /* Adjust by program base */ 2934*5c0de15dSLoGin #define R_ARM_GOTOFF 24 /* 32 bit offset to GOT */ 2935*5c0de15dSLoGin #define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */ 2936*5c0de15dSLoGin #define R_ARM_GOT32 26 /* 32 bit GOT entry */ 2937*5c0de15dSLoGin #define R_ARM_PLT32 27 /* Deprecated, 32 bit PLT address. */ 2938*5c0de15dSLoGin #define R_ARM_CALL 28 /* PC relative 24 bit (BL, BLX). */ 2939*5c0de15dSLoGin #define R_ARM_JUMP24 29 /* PC relative 24 bit 2940*5c0de15dSLoGin (B, BL<cond>). */ 2941*5c0de15dSLoGin #define R_ARM_THM_JUMP24 30 /* PC relative 24 bit (Thumb32 B.W). */ 2942*5c0de15dSLoGin #define R_ARM_BASE_ABS 31 /* Adjust by program base. */ 2943*5c0de15dSLoGin #define R_ARM_ALU_PCREL_7_0 32 /* Obsolete. */ 2944*5c0de15dSLoGin #define R_ARM_ALU_PCREL_15_8 33 /* Obsolete. */ 2945*5c0de15dSLoGin #define R_ARM_ALU_PCREL_23_15 34 /* Obsolete. */ 2946*5c0de15dSLoGin #define R_ARM_LDR_SBREL_11_0 35 /* Deprecated, prog. base relative. */ 2947*5c0de15dSLoGin #define R_ARM_ALU_SBREL_19_12 36 /* Deprecated, prog. base relative. */ 2948*5c0de15dSLoGin #define R_ARM_ALU_SBREL_27_20 37 /* Deprecated, prog. base relative. */ 2949*5c0de15dSLoGin #define R_ARM_TARGET1 38 2950*5c0de15dSLoGin #define R_ARM_SBREL31 39 /* Program base relative. */ 2951*5c0de15dSLoGin #define R_ARM_V4BX 40 2952*5c0de15dSLoGin #define R_ARM_TARGET2 41 2953*5c0de15dSLoGin #define R_ARM_PREL31 42 /* 32 bit PC relative. */ 2954*5c0de15dSLoGin #define R_ARM_MOVW_ABS_NC 43 /* Direct 16-bit (MOVW). */ 2955*5c0de15dSLoGin #define R_ARM_MOVT_ABS 44 /* Direct high 16-bit (MOVT). */ 2956*5c0de15dSLoGin #define R_ARM_MOVW_PREL_NC 45 /* PC relative 16-bit (MOVW). */ 2957*5c0de15dSLoGin #define R_ARM_MOVT_PREL 46 /* PC relative (MOVT). */ 2958*5c0de15dSLoGin #define R_ARM_THM_MOVW_ABS_NC 47 /* Direct 16 bit (Thumb32 MOVW). */ 2959*5c0de15dSLoGin #define R_ARM_THM_MOVT_ABS 48 /* Direct high 16 bit 2960*5c0de15dSLoGin (Thumb32 MOVT). */ 2961*5c0de15dSLoGin #define R_ARM_THM_MOVW_PREL_NC 49 /* PC relative 16 bit 2962*5c0de15dSLoGin (Thumb32 MOVW). */ 2963*5c0de15dSLoGin #define R_ARM_THM_MOVT_PREL 50 /* PC relative high 16 bit 2964*5c0de15dSLoGin (Thumb32 MOVT). */ 2965*5c0de15dSLoGin #define R_ARM_THM_JUMP19 51 /* PC relative 20 bit 2966*5c0de15dSLoGin (Thumb32 B<cond>.W). */ 2967*5c0de15dSLoGin #define R_ARM_THM_JUMP6 52 /* PC relative X & 0x7E 2968*5c0de15dSLoGin (Thumb16 CBZ, CBNZ). */ 2969*5c0de15dSLoGin #define R_ARM_THM_ALU_PREL_11_0 53 /* PC relative 12 bit 2970*5c0de15dSLoGin (Thumb32 ADR.W). */ 2971*5c0de15dSLoGin #define R_ARM_THM_PC12 54 /* PC relative 12 bit 2972*5c0de15dSLoGin (Thumb32 LDR{D,SB,H,SH}). */ 2973*5c0de15dSLoGin #define R_ARM_ABS32_NOI 55 /* Direct 32-bit. */ 2974*5c0de15dSLoGin #define R_ARM_REL32_NOI 56 /* PC relative 32-bit. */ 2975*5c0de15dSLoGin #define R_ARM_ALU_PC_G0_NC 57 /* PC relative (ADD, SUB). */ 2976*5c0de15dSLoGin #define R_ARM_ALU_PC_G0 58 /* PC relative (ADD, SUB). */ 2977*5c0de15dSLoGin #define R_ARM_ALU_PC_G1_NC 59 /* PC relative (ADD, SUB). */ 2978*5c0de15dSLoGin #define R_ARM_ALU_PC_G1 60 /* PC relative (ADD, SUB). */ 2979*5c0de15dSLoGin #define R_ARM_ALU_PC_G2 61 /* PC relative (ADD, SUB). */ 2980*5c0de15dSLoGin #define R_ARM_LDR_PC_G1 62 /* PC relative (LDR,STR,LDRB,STRB). */ 2981*5c0de15dSLoGin #define R_ARM_LDR_PC_G2 63 /* PC relative (LDR,STR,LDRB,STRB). */ 2982*5c0de15dSLoGin #define R_ARM_LDRS_PC_G0 64 /* PC relative (STR{D,H}, 2983*5c0de15dSLoGin LDR{D,SB,H,SH}). */ 2984*5c0de15dSLoGin #define R_ARM_LDRS_PC_G1 65 /* PC relative (STR{D,H}, 2985*5c0de15dSLoGin LDR{D,SB,H,SH}). */ 2986*5c0de15dSLoGin #define R_ARM_LDRS_PC_G2 66 /* PC relative (STR{D,H}, 2987*5c0de15dSLoGin LDR{D,SB,H,SH}). */ 2988*5c0de15dSLoGin #define R_ARM_LDC_PC_G0 67 /* PC relative (LDC, STC). */ 2989*5c0de15dSLoGin #define R_ARM_LDC_PC_G1 68 /* PC relative (LDC, STC). */ 2990*5c0de15dSLoGin #define R_ARM_LDC_PC_G2 69 /* PC relative (LDC, STC). */ 2991*5c0de15dSLoGin #define R_ARM_ALU_SB_G0_NC 70 /* Program base relative (ADD,SUB). */ 2992*5c0de15dSLoGin #define R_ARM_ALU_SB_G0 71 /* Program base relative (ADD,SUB). */ 2993*5c0de15dSLoGin #define R_ARM_ALU_SB_G1_NC 72 /* Program base relative (ADD,SUB). */ 2994*5c0de15dSLoGin #define R_ARM_ALU_SB_G1 73 /* Program base relative (ADD,SUB). */ 2995*5c0de15dSLoGin #define R_ARM_ALU_SB_G2 74 /* Program base relative (ADD,SUB). */ 2996*5c0de15dSLoGin #define R_ARM_LDR_SB_G0 75 /* Program base relative (LDR, 2997*5c0de15dSLoGin STR, LDRB, STRB). */ 2998*5c0de15dSLoGin #define R_ARM_LDR_SB_G1 76 /* Program base relative 2999*5c0de15dSLoGin (LDR, STR, LDRB, STRB). */ 3000*5c0de15dSLoGin #define R_ARM_LDR_SB_G2 77 /* Program base relative 3001*5c0de15dSLoGin (LDR, STR, LDRB, STRB). */ 3002*5c0de15dSLoGin #define R_ARM_LDRS_SB_G0 78 /* Program base relative 3003*5c0de15dSLoGin (LDR, STR, LDRB, STRB). */ 3004*5c0de15dSLoGin #define R_ARM_LDRS_SB_G1 79 /* Program base relative 3005*5c0de15dSLoGin (LDR, STR, LDRB, STRB). */ 3006*5c0de15dSLoGin #define R_ARM_LDRS_SB_G2 80 /* Program base relative 3007*5c0de15dSLoGin (LDR, STR, LDRB, STRB). */ 3008*5c0de15dSLoGin #define R_ARM_LDC_SB_G0 81 /* Program base relative (LDC,STC). */ 3009*5c0de15dSLoGin #define R_ARM_LDC_SB_G1 82 /* Program base relative (LDC,STC). */ 3010*5c0de15dSLoGin #define R_ARM_LDC_SB_G2 83 /* Program base relative (LDC,STC). */ 3011*5c0de15dSLoGin #define R_ARM_MOVW_BREL_NC 84 /* Program base relative 16 3012*5c0de15dSLoGin bit (MOVW). */ 3013*5c0de15dSLoGin #define R_ARM_MOVT_BREL 85 /* Program base relative high 3014*5c0de15dSLoGin 16 bit (MOVT). */ 3015*5c0de15dSLoGin #define R_ARM_MOVW_BREL 86 /* Program base relative 16 3016*5c0de15dSLoGin bit (MOVW). */ 3017*5c0de15dSLoGin #define R_ARM_THM_MOVW_BREL_NC 87 /* Program base relative 16 3018*5c0de15dSLoGin bit (Thumb32 MOVW). */ 3019*5c0de15dSLoGin #define R_ARM_THM_MOVT_BREL 88 /* Program base relative high 3020*5c0de15dSLoGin 16 bit (Thumb32 MOVT). */ 3021*5c0de15dSLoGin #define R_ARM_THM_MOVW_BREL 89 /* Program base relative 16 3022*5c0de15dSLoGin bit (Thumb32 MOVW). */ 3023*5c0de15dSLoGin #define R_ARM_TLS_GOTDESC 90 3024*5c0de15dSLoGin #define R_ARM_TLS_CALL 91 3025*5c0de15dSLoGin #define R_ARM_TLS_DESCSEQ 92 /* TLS relaxation. */ 3026*5c0de15dSLoGin #define R_ARM_THM_TLS_CALL 93 3027*5c0de15dSLoGin #define R_ARM_PLT32_ABS 94 3028*5c0de15dSLoGin #define R_ARM_GOT_ABS 95 /* GOT entry. */ 3029*5c0de15dSLoGin #define R_ARM_GOT_PREL 96 /* PC relative GOT entry. */ 3030*5c0de15dSLoGin #define R_ARM_GOT_BREL12 97 /* GOT entry relative to GOT 3031*5c0de15dSLoGin origin (LDR). */ 3032*5c0de15dSLoGin #define R_ARM_GOTOFF12 98 /* 12 bit, GOT entry relative 3033*5c0de15dSLoGin to GOT origin (LDR, STR). */ 3034*5c0de15dSLoGin #define R_ARM_GOTRELAX 99 3035*5c0de15dSLoGin #define R_ARM_GNU_VTENTRY 100 3036*5c0de15dSLoGin #define R_ARM_GNU_VTINHERIT 101 3037*5c0de15dSLoGin #define R_ARM_THM_PC11 102 /* PC relative & 0xFFE (Thumb16 B). */ 3038*5c0de15dSLoGin #define R_ARM_THM_PC9 103 /* PC relative & 0x1FE 3039*5c0de15dSLoGin (Thumb16 B/B<cond>). */ 3040*5c0de15dSLoGin #define R_ARM_TLS_GD32 104 /* PC-rel 32 bit for global dynamic 3041*5c0de15dSLoGin thread local data */ 3042*5c0de15dSLoGin #define R_ARM_TLS_LDM32 105 /* PC-rel 32 bit for local dynamic 3043*5c0de15dSLoGin thread local data */ 3044*5c0de15dSLoGin #define R_ARM_TLS_LDO32 106 /* 32 bit offset relative to TLS 3045*5c0de15dSLoGin block */ 3046*5c0de15dSLoGin #define R_ARM_TLS_IE32 107 /* PC-rel 32 bit for GOT entry of 3047*5c0de15dSLoGin static TLS block offset */ 3048*5c0de15dSLoGin #define R_ARM_TLS_LE32 108 /* 32 bit offset relative to static 3049*5c0de15dSLoGin TLS block */ 3050*5c0de15dSLoGin #define R_ARM_TLS_LDO12 109 /* 12 bit relative to TLS 3051*5c0de15dSLoGin block (LDR, STR). */ 3052*5c0de15dSLoGin #define R_ARM_TLS_LE12 110 /* 12 bit relative to static 3053*5c0de15dSLoGin TLS block (LDR, STR). */ 3054*5c0de15dSLoGin #define R_ARM_TLS_IE12GP 111 /* 12 bit GOT entry relative 3055*5c0de15dSLoGin to GOT origin (LDR). */ 3056*5c0de15dSLoGin #define R_ARM_ME_TOO 128 /* Obsolete. */ 3057*5c0de15dSLoGin #define R_ARM_THM_TLS_DESCSEQ 129 3058*5c0de15dSLoGin #define R_ARM_THM_TLS_DESCSEQ16 129 3059*5c0de15dSLoGin #define R_ARM_THM_TLS_DESCSEQ32 130 3060*5c0de15dSLoGin #define R_ARM_THM_GOT_BREL12 131 /* GOT entry relative to GOT 3061*5c0de15dSLoGin origin, 12 bit (Thumb32 LDR). */ 3062*5c0de15dSLoGin #define R_ARM_IRELATIVE 160 3063*5c0de15dSLoGin #define R_ARM_RXPC25 249 3064*5c0de15dSLoGin #define R_ARM_RSBREL32 250 3065*5c0de15dSLoGin #define R_ARM_THM_RPC22 251 3066*5c0de15dSLoGin #define R_ARM_RREL32 252 3067*5c0de15dSLoGin #define R_ARM_RABS22 253 3068*5c0de15dSLoGin #define R_ARM_RPC24 254 3069*5c0de15dSLoGin #define R_ARM_RBASE 255 3070*5c0de15dSLoGin /* Keep this the last entry. */ 3071*5c0de15dSLoGin #define R_ARM_NUM 256 3072*5c0de15dSLoGin 3073*5c0de15dSLoGin /* C-SKY */ 3074*5c0de15dSLoGin #define R_CKCORE_NONE 0 /* no reloc */ 3075*5c0de15dSLoGin #define R_CKCORE_ADDR32 1 /* direct 32 bit (S + A) */ 3076*5c0de15dSLoGin #define R_CKCORE_PCRELIMM8BY4 2 /* disp ((S + A - P) >> 2) & 0xff */ 3077*5c0de15dSLoGin #define R_CKCORE_PCRELIMM11BY2 3 /* disp ((S + A - P) >> 1) & 0x7ff */ 3078*5c0de15dSLoGin #define R_CKCORE_PCREL32 5 /* 32-bit rel (S + A - P) */ 3079*5c0de15dSLoGin #define R_CKCORE_PCRELJSR_IMM11BY2 6 /* disp ((S + A - P) >>1) & 0x7ff */ 3080*5c0de15dSLoGin #define R_CKCORE_RELATIVE 9 /* 32 bit adjust program base(B + A)*/ 3081*5c0de15dSLoGin #define R_CKCORE_COPY 10 /* 32 bit adjust by program base */ 3082*5c0de15dSLoGin #define R_CKCORE_GLOB_DAT 11 /* off between got and sym (S) */ 3083*5c0de15dSLoGin #define R_CKCORE_JUMP_SLOT 12 /* PLT entry (S) */ 3084*5c0de15dSLoGin #define R_CKCORE_GOTOFF 13 /* offset to GOT (S + A - GOT) */ 3085*5c0de15dSLoGin #define R_CKCORE_GOTPC 14 /* PC offset to GOT (GOT + A - P) */ 3086*5c0de15dSLoGin #define R_CKCORE_GOT32 15 /* 32 bit GOT entry (G) */ 3087*5c0de15dSLoGin #define R_CKCORE_PLT32 16 /* 32 bit PLT entry (G) */ 3088*5c0de15dSLoGin #define R_CKCORE_ADDRGOT 17 /* GOT entry in GLOB_DAT (GOT + G) */ 3089*5c0de15dSLoGin #define R_CKCORE_ADDRPLT 18 /* PLT entry in GLOB_DAT (GOT + G) */ 3090*5c0de15dSLoGin #define R_CKCORE_PCREL_IMM26BY2 19 /* ((S + A - P) >> 1) & 0x3ffffff */ 3091*5c0de15dSLoGin #define R_CKCORE_PCREL_IMM16BY2 20 /* disp ((S + A - P) >> 1) & 0xffff */ 3092*5c0de15dSLoGin #define R_CKCORE_PCREL_IMM16BY4 21 /* disp ((S + A - P) >> 2) & 0xffff */ 3093*5c0de15dSLoGin #define R_CKCORE_PCREL_IMM10BY2 22 /* disp ((S + A - P) >> 1) & 0x3ff */ 3094*5c0de15dSLoGin #define R_CKCORE_PCREL_IMM10BY4 23 /* disp ((S + A - P) >> 2) & 0x3ff */ 3095*5c0de15dSLoGin #define R_CKCORE_ADDR_HI16 24 /* high & low 16 bit ADDR */ 3096*5c0de15dSLoGin /* ((S + A) >> 16) & 0xffff */ 3097*5c0de15dSLoGin #define R_CKCORE_ADDR_LO16 25 /* (S + A) & 0xffff */ 3098*5c0de15dSLoGin #define R_CKCORE_GOTPC_HI16 26 /* high & low 16 bit GOTPC */ 3099*5c0de15dSLoGin /* ((GOT + A - P) >> 16) & 0xffff */ 3100*5c0de15dSLoGin #define R_CKCORE_GOTPC_LO16 27 /* (GOT + A - P) & 0xffff */ 3101*5c0de15dSLoGin #define R_CKCORE_GOTOFF_HI16 28 /* high & low 16 bit GOTOFF */ 3102*5c0de15dSLoGin /* ((S + A - GOT) >> 16) & 0xffff */ 3103*5c0de15dSLoGin #define R_CKCORE_GOTOFF_LO16 29 /* (S + A - GOT) & 0xffff */ 3104*5c0de15dSLoGin #define R_CKCORE_GOT12 30 /* 12 bit disp GOT entry (G) */ 3105*5c0de15dSLoGin #define R_CKCORE_GOT_HI16 31 /* high & low 16 bit GOT */ 3106*5c0de15dSLoGin /* (G >> 16) & 0xffff */ 3107*5c0de15dSLoGin #define R_CKCORE_GOT_LO16 32 /* (G & 0xffff) */ 3108*5c0de15dSLoGin #define R_CKCORE_PLT12 33 /* 12 bit disp PLT entry (G) */ 3109*5c0de15dSLoGin #define R_CKCORE_PLT_HI16 34 /* high & low 16 bit PLT */ 3110*5c0de15dSLoGin /* (G >> 16) & 0xffff */ 3111*5c0de15dSLoGin #define R_CKCORE_PLT_LO16 35 /* G & 0xffff */ 3112*5c0de15dSLoGin #define R_CKCORE_ADDRGOT_HI16 36 /* high & low 16 bit ADDRGOT */ 3113*5c0de15dSLoGin /* (GOT + G * 4) & 0xffff */ 3114*5c0de15dSLoGin #define R_CKCORE_ADDRGOT_LO16 37 /* (GOT + G * 4) & 0xffff */ 3115*5c0de15dSLoGin #define R_CKCORE_ADDRPLT_HI16 38 /* high & low 16 bit ADDRPLT */ 3116*5c0de15dSLoGin /* ((GOT + G * 4) >> 16) & 0xFFFF */ 3117*5c0de15dSLoGin #define R_CKCORE_ADDRPLT_LO16 39 /* (GOT+G*4) & 0xffff */ 3118*5c0de15dSLoGin #define R_CKCORE_PCREL_JSR_IMM26BY2 40 /* disp ((S+A-P) >>1) & x3ffffff */ 3119*5c0de15dSLoGin #define R_CKCORE_TOFFSET_LO16 41 /* (S+A-BTEXT) & 0xffff */ 3120*5c0de15dSLoGin #define R_CKCORE_DOFFSET_LO16 42 /* (S+A-BTEXT) & 0xffff */ 3121*5c0de15dSLoGin #define R_CKCORE_PCREL_IMM18BY2 43 /* disp ((S+A-P) >>1) & 0x3ffff */ 3122*5c0de15dSLoGin #define R_CKCORE_DOFFSET_IMM18 44 /* disp (S+A-BDATA) & 0x3ffff */ 3123*5c0de15dSLoGin #define R_CKCORE_DOFFSET_IMM18BY2 45 /* disp ((S+A-BDATA)>>1) & 0x3ffff */ 3124*5c0de15dSLoGin #define R_CKCORE_DOFFSET_IMM18BY4 46 /* disp ((S+A-BDATA)>>2) & 0x3ffff */ 3125*5c0de15dSLoGin #define R_CKCORE_GOT_IMM18BY4 48 /* disp (G >> 2) */ 3126*5c0de15dSLoGin #define R_CKCORE_PLT_IMM18BY4 49 /* disp (G >> 2) */ 3127*5c0de15dSLoGin #define R_CKCORE_PCREL_IMM7BY4 50 /* disp ((S+A-P) >>2) & 0x7f */ 3128*5c0de15dSLoGin #define R_CKCORE_TLS_LE32 51 /* 32 bit offset to TLS block */ 3129*5c0de15dSLoGin #define R_CKCORE_TLS_IE32 52 3130*5c0de15dSLoGin #define R_CKCORE_TLS_GD32 53 3131*5c0de15dSLoGin #define R_CKCORE_TLS_LDM32 54 3132*5c0de15dSLoGin #define R_CKCORE_TLS_LDO32 55 3133*5c0de15dSLoGin #define R_CKCORE_TLS_DTPMOD32 56 3134*5c0de15dSLoGin #define R_CKCORE_TLS_DTPOFF32 57 3135*5c0de15dSLoGin #define R_CKCORE_TLS_TPOFF32 58 3136*5c0de15dSLoGin 3137*5c0de15dSLoGin /* C-SKY elf header definition. */ 3138*5c0de15dSLoGin #define EF_CSKY_ABIMASK 0XF0000000 3139*5c0de15dSLoGin #define EF_CSKY_OTHER 0X0FFF0000 3140*5c0de15dSLoGin #define EF_CSKY_PROCESSOR 0X0000FFFF 3141*5c0de15dSLoGin 3142*5c0de15dSLoGin #define EF_CSKY_ABIV1 0X10000000 3143*5c0de15dSLoGin #define EF_CSKY_ABIV2 0X20000000 3144*5c0de15dSLoGin 3145*5c0de15dSLoGin /* C-SKY attributes section. */ 3146*5c0de15dSLoGin #define SHT_CSKY_ATTRIBUTES (SHT_LOPROC + 1) 3147*5c0de15dSLoGin 3148*5c0de15dSLoGin /* IA-64 specific declarations. */ 3149*5c0de15dSLoGin 3150*5c0de15dSLoGin /* Processor specific flags for the Ehdr e_flags field. */ 3151*5c0de15dSLoGin #define EF_IA_64_MASKOS 0x0000000f /* os-specific flags */ 3152*5c0de15dSLoGin #define EF_IA_64_ABI64 0x00000010 /* 64-bit ABI */ 3153*5c0de15dSLoGin #define EF_IA_64_ARCH 0xff000000 /* arch. version mask */ 3154*5c0de15dSLoGin 3155*5c0de15dSLoGin /* Processor specific values for the Phdr p_type field. */ 3156*5c0de15dSLoGin #define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* arch extension bits */ 3157*5c0de15dSLoGin #define PT_IA_64_UNWIND (PT_LOPROC + 1) /* ia64 unwind bits */ 3158*5c0de15dSLoGin #define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) 3159*5c0de15dSLoGin #define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) 3160*5c0de15dSLoGin #define PT_IA_64_HP_STACK (PT_LOOS + 0x14) 3161*5c0de15dSLoGin 3162*5c0de15dSLoGin /* Processor specific flags for the Phdr p_flags field. */ 3163*5c0de15dSLoGin #define PF_IA_64_NORECOV 0x80000000 /* spec insns w/o recovery */ 3164*5c0de15dSLoGin 3165*5c0de15dSLoGin /* Processor specific values for the Shdr sh_type field. */ 3166*5c0de15dSLoGin #define SHT_IA_64_EXT (SHT_LOPROC + 0) /* extension bits */ 3167*5c0de15dSLoGin #define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* unwind bits */ 3168*5c0de15dSLoGin 3169*5c0de15dSLoGin /* Processor specific flags for the Shdr sh_flags field. */ 3170*5c0de15dSLoGin #define SHF_IA_64_SHORT 0x10000000 /* section near gp */ 3171*5c0de15dSLoGin #define SHF_IA_64_NORECOV 0x20000000 /* spec insns w/o recovery */ 3172*5c0de15dSLoGin 3173*5c0de15dSLoGin /* Processor specific values for the Dyn d_tag field. */ 3174*5c0de15dSLoGin #define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) 3175*5c0de15dSLoGin #define DT_IA_64_NUM 1 3176*5c0de15dSLoGin 3177*5c0de15dSLoGin /* IA-64 relocations. */ 3178*5c0de15dSLoGin #define R_IA64_NONE 0x00 /* none */ 3179*5c0de15dSLoGin #define R_IA64_IMM14 0x21 /* symbol + addend, add imm14 */ 3180*5c0de15dSLoGin #define R_IA64_IMM22 0x22 /* symbol + addend, add imm22 */ 3181*5c0de15dSLoGin #define R_IA64_IMM64 0x23 /* symbol + addend, mov imm64 */ 3182*5c0de15dSLoGin #define R_IA64_DIR32MSB 0x24 /* symbol + addend, data4 MSB */ 3183*5c0de15dSLoGin #define R_IA64_DIR32LSB 0x25 /* symbol + addend, data4 LSB */ 3184*5c0de15dSLoGin #define R_IA64_DIR64MSB 0x26 /* symbol + addend, data8 MSB */ 3185*5c0de15dSLoGin #define R_IA64_DIR64LSB 0x27 /* symbol + addend, data8 LSB */ 3186*5c0de15dSLoGin #define R_IA64_GPREL22 0x2a /* @gprel(sym + add), add imm22 */ 3187*5c0de15dSLoGin #define R_IA64_GPREL64I 0x2b /* @gprel(sym + add), mov imm64 */ 3188*5c0de15dSLoGin #define R_IA64_GPREL32MSB 0x2c /* @gprel(sym + add), data4 MSB */ 3189*5c0de15dSLoGin #define R_IA64_GPREL32LSB 0x2d /* @gprel(sym + add), data4 LSB */ 3190*5c0de15dSLoGin #define R_IA64_GPREL64MSB 0x2e /* @gprel(sym + add), data8 MSB */ 3191*5c0de15dSLoGin #define R_IA64_GPREL64LSB 0x2f /* @gprel(sym + add), data8 LSB */ 3192*5c0de15dSLoGin #define R_IA64_LTOFF22 0x32 /* @ltoff(sym + add), add imm22 */ 3193*5c0de15dSLoGin #define R_IA64_LTOFF64I 0x33 /* @ltoff(sym + add), mov imm64 */ 3194*5c0de15dSLoGin #define R_IA64_PLTOFF22 0x3a /* @pltoff(sym + add), add imm22 */ 3195*5c0de15dSLoGin #define R_IA64_PLTOFF64I 0x3b /* @pltoff(sym + add), mov imm64 */ 3196*5c0de15dSLoGin #define R_IA64_PLTOFF64MSB 0x3e /* @pltoff(sym + add), data8 MSB */ 3197*5c0de15dSLoGin #define R_IA64_PLTOFF64LSB 0x3f /* @pltoff(sym + add), data8 LSB */ 3198*5c0de15dSLoGin #define R_IA64_FPTR64I 0x43 /* @fptr(sym + add), mov imm64 */ 3199*5c0de15dSLoGin #define R_IA64_FPTR32MSB 0x44 /* @fptr(sym + add), data4 MSB */ 3200*5c0de15dSLoGin #define R_IA64_FPTR32LSB 0x45 /* @fptr(sym + add), data4 LSB */ 3201*5c0de15dSLoGin #define R_IA64_FPTR64MSB 0x46 /* @fptr(sym + add), data8 MSB */ 3202*5c0de15dSLoGin #define R_IA64_FPTR64LSB 0x47 /* @fptr(sym + add), data8 LSB */ 3203*5c0de15dSLoGin #define R_IA64_PCREL60B 0x48 /* @pcrel(sym + add), brl */ 3204*5c0de15dSLoGin #define R_IA64_PCREL21B 0x49 /* @pcrel(sym + add), ptb, call */ 3205*5c0de15dSLoGin #define R_IA64_PCREL21M 0x4a /* @pcrel(sym + add), chk.s */ 3206*5c0de15dSLoGin #define R_IA64_PCREL21F 0x4b /* @pcrel(sym + add), fchkf */ 3207*5c0de15dSLoGin #define R_IA64_PCREL32MSB 0x4c /* @pcrel(sym + add), data4 MSB */ 3208*5c0de15dSLoGin #define R_IA64_PCREL32LSB 0x4d /* @pcrel(sym + add), data4 LSB */ 3209*5c0de15dSLoGin #define R_IA64_PCREL64MSB 0x4e /* @pcrel(sym + add), data8 MSB */ 3210*5c0de15dSLoGin #define R_IA64_PCREL64LSB 0x4f /* @pcrel(sym + add), data8 LSB */ 3211*5c0de15dSLoGin #define R_IA64_LTOFF_FPTR22 0x52 /* @ltoff(@fptr(s+a)), imm22 */ 3212*5c0de15dSLoGin #define R_IA64_LTOFF_FPTR64I 0x53 /* @ltoff(@fptr(s+a)), imm64 */ 3213*5c0de15dSLoGin #define R_IA64_LTOFF_FPTR32MSB 0x54 /* @ltoff(@fptr(s+a)), data4 MSB */ 3214*5c0de15dSLoGin #define R_IA64_LTOFF_FPTR32LSB 0x55 /* @ltoff(@fptr(s+a)), data4 LSB */ 3215*5c0de15dSLoGin #define R_IA64_LTOFF_FPTR64MSB 0x56 /* @ltoff(@fptr(s+a)), data8 MSB */ 3216*5c0de15dSLoGin #define R_IA64_LTOFF_FPTR64LSB 0x57 /* @ltoff(@fptr(s+a)), data8 LSB */ 3217*5c0de15dSLoGin #define R_IA64_SEGREL32MSB 0x5c /* @segrel(sym + add), data4 MSB */ 3218*5c0de15dSLoGin #define R_IA64_SEGREL32LSB 0x5d /* @segrel(sym + add), data4 LSB */ 3219*5c0de15dSLoGin #define R_IA64_SEGREL64MSB 0x5e /* @segrel(sym + add), data8 MSB */ 3220*5c0de15dSLoGin #define R_IA64_SEGREL64LSB 0x5f /* @segrel(sym + add), data8 LSB */ 3221*5c0de15dSLoGin #define R_IA64_SECREL32MSB 0x64 /* @secrel(sym + add), data4 MSB */ 3222*5c0de15dSLoGin #define R_IA64_SECREL32LSB 0x65 /* @secrel(sym + add), data4 LSB */ 3223*5c0de15dSLoGin #define R_IA64_SECREL64MSB 0x66 /* @secrel(sym + add), data8 MSB */ 3224*5c0de15dSLoGin #define R_IA64_SECREL64LSB 0x67 /* @secrel(sym + add), data8 LSB */ 3225*5c0de15dSLoGin #define R_IA64_REL32MSB 0x6c /* data 4 + REL */ 3226*5c0de15dSLoGin #define R_IA64_REL32LSB 0x6d /* data 4 + REL */ 3227*5c0de15dSLoGin #define R_IA64_REL64MSB 0x6e /* data 8 + REL */ 3228*5c0de15dSLoGin #define R_IA64_REL64LSB 0x6f /* data 8 + REL */ 3229*5c0de15dSLoGin #define R_IA64_LTV32MSB 0x74 /* symbol + addend, data4 MSB */ 3230*5c0de15dSLoGin #define R_IA64_LTV32LSB 0x75 /* symbol + addend, data4 LSB */ 3231*5c0de15dSLoGin #define R_IA64_LTV64MSB 0x76 /* symbol + addend, data8 MSB */ 3232*5c0de15dSLoGin #define R_IA64_LTV64LSB 0x77 /* symbol + addend, data8 LSB */ 3233*5c0de15dSLoGin #define R_IA64_PCREL21BI 0x79 /* @pcrel(sym + add), 21bit inst */ 3234*5c0de15dSLoGin #define R_IA64_PCREL22 0x7a /* @pcrel(sym + add), 22bit inst */ 3235*5c0de15dSLoGin #define R_IA64_PCREL64I 0x7b /* @pcrel(sym + add), 64bit inst */ 3236*5c0de15dSLoGin #define R_IA64_IPLTMSB 0x80 /* dynamic reloc, imported PLT, MSB */ 3237*5c0de15dSLoGin #define R_IA64_IPLTLSB 0x81 /* dynamic reloc, imported PLT, LSB */ 3238*5c0de15dSLoGin #define R_IA64_COPY 0x84 /* copy relocation */ 3239*5c0de15dSLoGin #define R_IA64_SUB 0x85 /* Addend and symbol difference */ 3240*5c0de15dSLoGin #define R_IA64_LTOFF22X 0x86 /* LTOFF22, relaxable. */ 3241*5c0de15dSLoGin #define R_IA64_LDXMOV 0x87 /* Use of LTOFF22X. */ 3242*5c0de15dSLoGin #define R_IA64_TPREL14 0x91 /* @tprel(sym + add), imm14 */ 3243*5c0de15dSLoGin #define R_IA64_TPREL22 0x92 /* @tprel(sym + add), imm22 */ 3244*5c0de15dSLoGin #define R_IA64_TPREL64I 0x93 /* @tprel(sym + add), imm64 */ 3245*5c0de15dSLoGin #define R_IA64_TPREL64MSB 0x96 /* @tprel(sym + add), data8 MSB */ 3246*5c0de15dSLoGin #define R_IA64_TPREL64LSB 0x97 /* @tprel(sym + add), data8 LSB */ 3247*5c0de15dSLoGin #define R_IA64_LTOFF_TPREL22 0x9a /* @ltoff(@tprel(s+a)), imm2 */ 3248*5c0de15dSLoGin #define R_IA64_DTPMOD64MSB 0xa6 /* @dtpmod(sym + add), data8 MSB */ 3249*5c0de15dSLoGin #define R_IA64_DTPMOD64LSB 0xa7 /* @dtpmod(sym + add), data8 LSB */ 3250*5c0de15dSLoGin #define R_IA64_LTOFF_DTPMOD22 0xaa /* @ltoff(@dtpmod(sym + add)), imm22 */ 3251*5c0de15dSLoGin #define R_IA64_DTPREL14 0xb1 /* @dtprel(sym + add), imm14 */ 3252*5c0de15dSLoGin #define R_IA64_DTPREL22 0xb2 /* @dtprel(sym + add), imm22 */ 3253*5c0de15dSLoGin #define R_IA64_DTPREL64I 0xb3 /* @dtprel(sym + add), imm64 */ 3254*5c0de15dSLoGin #define R_IA64_DTPREL32MSB 0xb4 /* @dtprel(sym + add), data4 MSB */ 3255*5c0de15dSLoGin #define R_IA64_DTPREL32LSB 0xb5 /* @dtprel(sym + add), data4 LSB */ 3256*5c0de15dSLoGin #define R_IA64_DTPREL64MSB 0xb6 /* @dtprel(sym + add), data8 MSB */ 3257*5c0de15dSLoGin #define R_IA64_DTPREL64LSB 0xb7 /* @dtprel(sym + add), data8 LSB */ 3258*5c0de15dSLoGin #define R_IA64_LTOFF_DTPREL22 0xba /* @ltoff(@dtprel(s+a)), imm22 */ 3259*5c0de15dSLoGin 3260*5c0de15dSLoGin /* SH specific declarations */ 3261*5c0de15dSLoGin 3262*5c0de15dSLoGin /* Processor specific flags for the ELF header e_flags field. */ 3263*5c0de15dSLoGin #define EF_SH_MACH_MASK 0x1f 3264*5c0de15dSLoGin #define EF_SH_UNKNOWN 0x0 3265*5c0de15dSLoGin #define EF_SH1 0x1 3266*5c0de15dSLoGin #define EF_SH2 0x2 3267*5c0de15dSLoGin #define EF_SH3 0x3 3268*5c0de15dSLoGin #define EF_SH_DSP 0x4 3269*5c0de15dSLoGin #define EF_SH3_DSP 0x5 3270*5c0de15dSLoGin #define EF_SH4AL_DSP 0x6 3271*5c0de15dSLoGin #define EF_SH3E 0x8 3272*5c0de15dSLoGin #define EF_SH4 0x9 3273*5c0de15dSLoGin #define EF_SH2E 0xb 3274*5c0de15dSLoGin #define EF_SH4A 0xc 3275*5c0de15dSLoGin #define EF_SH2A 0xd 3276*5c0de15dSLoGin #define EF_SH4_NOFPU 0x10 3277*5c0de15dSLoGin #define EF_SH4A_NOFPU 0x11 3278*5c0de15dSLoGin #define EF_SH4_NOMMU_NOFPU 0x12 3279*5c0de15dSLoGin #define EF_SH2A_NOFPU 0x13 3280*5c0de15dSLoGin #define EF_SH3_NOMMU 0x14 3281*5c0de15dSLoGin #define EF_SH2A_SH4_NOFPU 0x15 3282*5c0de15dSLoGin #define EF_SH2A_SH3_NOFPU 0x16 3283*5c0de15dSLoGin #define EF_SH2A_SH4 0x17 3284*5c0de15dSLoGin #define EF_SH2A_SH3E 0x18 3285*5c0de15dSLoGin 3286*5c0de15dSLoGin /* SH relocs. */ 3287*5c0de15dSLoGin #define R_SH_NONE 0 3288*5c0de15dSLoGin #define R_SH_DIR32 1 3289*5c0de15dSLoGin #define R_SH_REL32 2 3290*5c0de15dSLoGin #define R_SH_DIR8WPN 3 3291*5c0de15dSLoGin #define R_SH_IND12W 4 3292*5c0de15dSLoGin #define R_SH_DIR8WPL 5 3293*5c0de15dSLoGin #define R_SH_DIR8WPZ 6 3294*5c0de15dSLoGin #define R_SH_DIR8BP 7 3295*5c0de15dSLoGin #define R_SH_DIR8W 8 3296*5c0de15dSLoGin #define R_SH_DIR8L 9 3297*5c0de15dSLoGin #define R_SH_SWITCH16 25 3298*5c0de15dSLoGin #define R_SH_SWITCH32 26 3299*5c0de15dSLoGin #define R_SH_USES 27 3300*5c0de15dSLoGin #define R_SH_COUNT 28 3301*5c0de15dSLoGin #define R_SH_ALIGN 29 3302*5c0de15dSLoGin #define R_SH_CODE 30 3303*5c0de15dSLoGin #define R_SH_DATA 31 3304*5c0de15dSLoGin #define R_SH_LABEL 32 3305*5c0de15dSLoGin #define R_SH_SWITCH8 33 3306*5c0de15dSLoGin #define R_SH_GNU_VTINHERIT 34 3307*5c0de15dSLoGin #define R_SH_GNU_VTENTRY 35 3308*5c0de15dSLoGin #define R_SH_TLS_GD_32 144 3309*5c0de15dSLoGin #define R_SH_TLS_LD_32 145 3310*5c0de15dSLoGin #define R_SH_TLS_LDO_32 146 3311*5c0de15dSLoGin #define R_SH_TLS_IE_32 147 3312*5c0de15dSLoGin #define R_SH_TLS_LE_32 148 3313*5c0de15dSLoGin #define R_SH_TLS_DTPMOD32 149 3314*5c0de15dSLoGin #define R_SH_TLS_DTPOFF32 150 3315*5c0de15dSLoGin #define R_SH_TLS_TPOFF32 151 3316*5c0de15dSLoGin #define R_SH_GOT32 160 3317*5c0de15dSLoGin #define R_SH_PLT32 161 3318*5c0de15dSLoGin #define R_SH_COPY 162 3319*5c0de15dSLoGin #define R_SH_GLOB_DAT 163 3320*5c0de15dSLoGin #define R_SH_JMP_SLOT 164 3321*5c0de15dSLoGin #define R_SH_RELATIVE 165 3322*5c0de15dSLoGin #define R_SH_GOTOFF 166 3323*5c0de15dSLoGin #define R_SH_GOTPC 167 3324*5c0de15dSLoGin /* Keep this the last entry. */ 3325*5c0de15dSLoGin #define R_SH_NUM 256 3326*5c0de15dSLoGin 3327*5c0de15dSLoGin /* S/390 specific definitions. */ 3328*5c0de15dSLoGin 3329*5c0de15dSLoGin /* Valid values for the e_flags field. */ 3330*5c0de15dSLoGin 3331*5c0de15dSLoGin #define EF_S390_HIGH_GPRS 0x00000001 /* High GPRs kernel facility needed. */ 3332*5c0de15dSLoGin 3333*5c0de15dSLoGin /* Additional s390 relocs */ 3334*5c0de15dSLoGin 3335*5c0de15dSLoGin #define R_390_NONE 0 /* No reloc. */ 3336*5c0de15dSLoGin #define R_390_8 1 /* Direct 8 bit. */ 3337*5c0de15dSLoGin #define R_390_12 2 /* Direct 12 bit. */ 3338*5c0de15dSLoGin #define R_390_16 3 /* Direct 16 bit. */ 3339*5c0de15dSLoGin #define R_390_32 4 /* Direct 32 bit. */ 3340*5c0de15dSLoGin #define R_390_PC32 5 /* PC relative 32 bit. */ 3341*5c0de15dSLoGin #define R_390_GOT12 6 /* 12 bit GOT offset. */ 3342*5c0de15dSLoGin #define R_390_GOT32 7 /* 32 bit GOT offset. */ 3343*5c0de15dSLoGin #define R_390_PLT32 8 /* 32 bit PC relative PLT address. */ 3344*5c0de15dSLoGin #define R_390_COPY 9 /* Copy symbol at runtime. */ 3345*5c0de15dSLoGin #define R_390_GLOB_DAT 10 /* Create GOT entry. */ 3346*5c0de15dSLoGin #define R_390_JMP_SLOT 11 /* Create PLT entry. */ 3347*5c0de15dSLoGin #define R_390_RELATIVE 12 /* Adjust by program base. */ 3348*5c0de15dSLoGin #define R_390_GOTOFF32 13 /* 32 bit offset to GOT. */ 3349*5c0de15dSLoGin #define R_390_GOTPC 14 /* 32 bit PC relative offset to GOT. */ 3350*5c0de15dSLoGin #define R_390_GOT16 15 /* 16 bit GOT offset. */ 3351*5c0de15dSLoGin #define R_390_PC16 16 /* PC relative 16 bit. */ 3352*5c0de15dSLoGin #define R_390_PC16DBL 17 /* PC relative 16 bit shifted by 1. */ 3353*5c0de15dSLoGin #define R_390_PLT16DBL 18 /* 16 bit PC rel. PLT shifted by 1. */ 3354*5c0de15dSLoGin #define R_390_PC32DBL 19 /* PC relative 32 bit shifted by 1. */ 3355*5c0de15dSLoGin #define R_390_PLT32DBL 20 /* 32 bit PC rel. PLT shifted by 1. */ 3356*5c0de15dSLoGin #define R_390_GOTPCDBL 21 /* 32 bit PC rel. GOT shifted by 1. */ 3357*5c0de15dSLoGin #define R_390_64 22 /* Direct 64 bit. */ 3358*5c0de15dSLoGin #define R_390_PC64 23 /* PC relative 64 bit. */ 3359*5c0de15dSLoGin #define R_390_GOT64 24 /* 64 bit GOT offset. */ 3360*5c0de15dSLoGin #define R_390_PLT64 25 /* 64 bit PC relative PLT address. */ 3361*5c0de15dSLoGin #define R_390_GOTENT 26 /* 32 bit PC rel. to GOT entry >> 1. */ 3362*5c0de15dSLoGin #define R_390_GOTOFF16 27 /* 16 bit offset to GOT. */ 3363*5c0de15dSLoGin #define R_390_GOTOFF64 28 /* 64 bit offset to GOT. */ 3364*5c0de15dSLoGin #define R_390_GOTPLT12 29 /* 12 bit offset to jump slot. */ 3365*5c0de15dSLoGin #define R_390_GOTPLT16 30 /* 16 bit offset to jump slot. */ 3366*5c0de15dSLoGin #define R_390_GOTPLT32 31 /* 32 bit offset to jump slot. */ 3367*5c0de15dSLoGin #define R_390_GOTPLT64 32 /* 64 bit offset to jump slot. */ 3368*5c0de15dSLoGin #define R_390_GOTPLTENT 33 /* 32 bit rel. offset to jump slot. */ 3369*5c0de15dSLoGin #define R_390_PLTOFF16 34 /* 16 bit offset from GOT to PLT. */ 3370*5c0de15dSLoGin #define R_390_PLTOFF32 35 /* 32 bit offset from GOT to PLT. */ 3371*5c0de15dSLoGin #define R_390_PLTOFF64 36 /* 16 bit offset from GOT to PLT. */ 3372*5c0de15dSLoGin #define R_390_TLS_LOAD 37 /* Tag for load insn in TLS code. */ 3373*5c0de15dSLoGin #define R_390_TLS_GDCALL 38 /* Tag for function call in general 3374*5c0de15dSLoGin dynamic TLS code. */ 3375*5c0de15dSLoGin #define R_390_TLS_LDCALL 39 /* Tag for function call in local 3376*5c0de15dSLoGin dynamic TLS code. */ 3377*5c0de15dSLoGin #define R_390_TLS_GD32 40 /* Direct 32 bit for general dynamic 3378*5c0de15dSLoGin thread local data. */ 3379*5c0de15dSLoGin #define R_390_TLS_GD64 41 /* Direct 64 bit for general dynamic 3380*5c0de15dSLoGin thread local data. */ 3381*5c0de15dSLoGin #define R_390_TLS_GOTIE12 42 /* 12 bit GOT offset for static TLS 3382*5c0de15dSLoGin block offset. */ 3383*5c0de15dSLoGin #define R_390_TLS_GOTIE32 43 /* 32 bit GOT offset for static TLS 3384*5c0de15dSLoGin block offset. */ 3385*5c0de15dSLoGin #define R_390_TLS_GOTIE64 44 /* 64 bit GOT offset for static TLS 3386*5c0de15dSLoGin block offset. */ 3387*5c0de15dSLoGin #define R_390_TLS_LDM32 45 /* Direct 32 bit for local dynamic 3388*5c0de15dSLoGin thread local data in LE code. */ 3389*5c0de15dSLoGin #define R_390_TLS_LDM64 46 /* Direct 64 bit for local dynamic 3390*5c0de15dSLoGin thread local data in LE code. */ 3391*5c0de15dSLoGin #define R_390_TLS_IE32 47 /* 32 bit address of GOT entry for 3392*5c0de15dSLoGin negated static TLS block offset. */ 3393*5c0de15dSLoGin #define R_390_TLS_IE64 48 /* 64 bit address of GOT entry for 3394*5c0de15dSLoGin negated static TLS block offset. */ 3395*5c0de15dSLoGin #define R_390_TLS_IEENT 49 /* 32 bit rel. offset to GOT entry for 3396*5c0de15dSLoGin negated static TLS block offset. */ 3397*5c0de15dSLoGin #define R_390_TLS_LE32 50 /* 32 bit negated offset relative to 3398*5c0de15dSLoGin static TLS block. */ 3399*5c0de15dSLoGin #define R_390_TLS_LE64 51 /* 64 bit negated offset relative to 3400*5c0de15dSLoGin static TLS block. */ 3401*5c0de15dSLoGin #define R_390_TLS_LDO32 52 /* 32 bit offset relative to TLS 3402*5c0de15dSLoGin block. */ 3403*5c0de15dSLoGin #define R_390_TLS_LDO64 53 /* 64 bit offset relative to TLS 3404*5c0de15dSLoGin block. */ 3405*5c0de15dSLoGin #define R_390_TLS_DTPMOD 54 /* ID of module containing symbol. */ 3406*5c0de15dSLoGin #define R_390_TLS_DTPOFF 55 /* Offset in TLS block. */ 3407*5c0de15dSLoGin #define R_390_TLS_TPOFF 56 /* Negated offset in static TLS 3408*5c0de15dSLoGin block. */ 3409*5c0de15dSLoGin #define R_390_20 57 /* Direct 20 bit. */ 3410*5c0de15dSLoGin #define R_390_GOT20 58 /* 20 bit GOT offset. */ 3411*5c0de15dSLoGin #define R_390_GOTPLT20 59 /* 20 bit offset to jump slot. */ 3412*5c0de15dSLoGin #define R_390_TLS_GOTIE20 60 /* 20 bit GOT offset for static TLS 3413*5c0de15dSLoGin block offset. */ 3414*5c0de15dSLoGin #define R_390_IRELATIVE 61 /* STT_GNU_IFUNC relocation. */ 3415*5c0de15dSLoGin /* Keep this the last entry. */ 3416*5c0de15dSLoGin #define R_390_NUM 62 3417*5c0de15dSLoGin 3418*5c0de15dSLoGin 3419*5c0de15dSLoGin /* CRIS relocations. */ 3420*5c0de15dSLoGin #define R_CRIS_NONE 0 3421*5c0de15dSLoGin #define R_CRIS_8 1 3422*5c0de15dSLoGin #define R_CRIS_16 2 3423*5c0de15dSLoGin #define R_CRIS_32 3 3424*5c0de15dSLoGin #define R_CRIS_8_PCREL 4 3425*5c0de15dSLoGin #define R_CRIS_16_PCREL 5 3426*5c0de15dSLoGin #define R_CRIS_32_PCREL 6 3427*5c0de15dSLoGin #define R_CRIS_GNU_VTINHERIT 7 3428*5c0de15dSLoGin #define R_CRIS_GNU_VTENTRY 8 3429*5c0de15dSLoGin #define R_CRIS_COPY 9 3430*5c0de15dSLoGin #define R_CRIS_GLOB_DAT 10 3431*5c0de15dSLoGin #define R_CRIS_JUMP_SLOT 11 3432*5c0de15dSLoGin #define R_CRIS_RELATIVE 12 3433*5c0de15dSLoGin #define R_CRIS_16_GOT 13 3434*5c0de15dSLoGin #define R_CRIS_32_GOT 14 3435*5c0de15dSLoGin #define R_CRIS_16_GOTPLT 15 3436*5c0de15dSLoGin #define R_CRIS_32_GOTPLT 16 3437*5c0de15dSLoGin #define R_CRIS_32_GOTREL 17 3438*5c0de15dSLoGin #define R_CRIS_32_PLT_GOTREL 18 3439*5c0de15dSLoGin #define R_CRIS_32_PLT_PCREL 19 3440*5c0de15dSLoGin 3441*5c0de15dSLoGin #define R_CRIS_NUM 20 3442*5c0de15dSLoGin 3443*5c0de15dSLoGin 3444*5c0de15dSLoGin /* AMD x86-64 relocations. */ 3445*5c0de15dSLoGin #define R_X86_64_NONE 0 /* No reloc */ 3446*5c0de15dSLoGin #define R_X86_64_64 1 /* Direct 64 bit */ 3447*5c0de15dSLoGin #define R_X86_64_PC32 2 /* PC relative 32 bit signed */ 3448*5c0de15dSLoGin #define R_X86_64_GOT32 3 /* 32 bit GOT entry */ 3449*5c0de15dSLoGin #define R_X86_64_PLT32 4 /* 32 bit PLT address */ 3450*5c0de15dSLoGin #define R_X86_64_COPY 5 /* Copy symbol at runtime */ 3451*5c0de15dSLoGin #define R_X86_64_GLOB_DAT 6 /* Create GOT entry */ 3452*5c0de15dSLoGin #define R_X86_64_JUMP_SLOT 7 /* Create PLT entry */ 3453*5c0de15dSLoGin #define R_X86_64_RELATIVE 8 /* Adjust by program base */ 3454*5c0de15dSLoGin #define R_X86_64_GOTPCREL 9 /* 32 bit signed PC relative 3455*5c0de15dSLoGin offset to GOT */ 3456*5c0de15dSLoGin #define R_X86_64_32 10 /* Direct 32 bit zero extended */ 3457*5c0de15dSLoGin #define R_X86_64_32S 11 /* Direct 32 bit sign extended */ 3458*5c0de15dSLoGin #define R_X86_64_16 12 /* Direct 16 bit zero extended */ 3459*5c0de15dSLoGin #define R_X86_64_PC16 13 /* 16 bit sign extended pc relative */ 3460*5c0de15dSLoGin #define R_X86_64_8 14 /* Direct 8 bit sign extended */ 3461*5c0de15dSLoGin #define R_X86_64_PC8 15 /* 8 bit sign extended pc relative */ 3462*5c0de15dSLoGin #define R_X86_64_DTPMOD64 16 /* ID of module containing symbol */ 3463*5c0de15dSLoGin #define R_X86_64_DTPOFF64 17 /* Offset in module's TLS block */ 3464*5c0de15dSLoGin #define R_X86_64_TPOFF64 18 /* Offset in initial TLS block */ 3465*5c0de15dSLoGin #define R_X86_64_TLSGD 19 /* 32 bit signed PC relative offset 3466*5c0de15dSLoGin to two GOT entries for GD symbol */ 3467*5c0de15dSLoGin #define R_X86_64_TLSLD 20 /* 32 bit signed PC relative offset 3468*5c0de15dSLoGin to two GOT entries for LD symbol */ 3469*5c0de15dSLoGin #define R_X86_64_DTPOFF32 21 /* Offset in TLS block */ 3470*5c0de15dSLoGin #define R_X86_64_GOTTPOFF 22 /* 32 bit signed PC relative offset 3471*5c0de15dSLoGin to GOT entry for IE symbol */ 3472*5c0de15dSLoGin #define R_X86_64_TPOFF32 23 /* Offset in initial TLS block */ 3473*5c0de15dSLoGin #define R_X86_64_PC64 24 /* PC relative 64 bit */ 3474*5c0de15dSLoGin #define R_X86_64_GOTOFF64 25 /* 64 bit offset to GOT */ 3475*5c0de15dSLoGin #define R_X86_64_GOTPC32 26 /* 32 bit signed pc relative 3476*5c0de15dSLoGin offset to GOT */ 3477*5c0de15dSLoGin #define R_X86_64_GOT64 27 /* 64-bit GOT entry offset */ 3478*5c0de15dSLoGin #define R_X86_64_GOTPCREL64 28 /* 64-bit PC relative offset 3479*5c0de15dSLoGin to GOT entry */ 3480*5c0de15dSLoGin #define R_X86_64_GOTPC64 29 /* 64-bit PC relative offset to GOT */ 3481*5c0de15dSLoGin #define R_X86_64_GOTPLT64 30 /* like GOT64, says PLT entry needed */ 3482*5c0de15dSLoGin #define R_X86_64_PLTOFF64 31 /* 64-bit GOT relative offset 3483*5c0de15dSLoGin to PLT entry */ 3484*5c0de15dSLoGin #define R_X86_64_SIZE32 32 /* Size of symbol plus 32-bit addend */ 3485*5c0de15dSLoGin #define R_X86_64_SIZE64 33 /* Size of symbol plus 64-bit addend */ 3486*5c0de15dSLoGin #define R_X86_64_GOTPC32_TLSDESC 34 /* GOT offset for TLS descriptor. */ 3487*5c0de15dSLoGin #define R_X86_64_TLSDESC_CALL 35 /* Marker for call through TLS 3488*5c0de15dSLoGin descriptor. */ 3489*5c0de15dSLoGin #define R_X86_64_TLSDESC 36 /* TLS descriptor. */ 3490*5c0de15dSLoGin #define R_X86_64_IRELATIVE 37 /* Adjust indirectly by program base */ 3491*5c0de15dSLoGin #define R_X86_64_RELATIVE64 38 /* 64-bit adjust by program base */ 3492*5c0de15dSLoGin /* 39 Reserved was R_X86_64_PC32_BND */ 3493*5c0de15dSLoGin /* 40 Reserved was R_X86_64_PLT32_BND */ 3494*5c0de15dSLoGin #define R_X86_64_GOTPCRELX 41 /* Load from 32 bit signed pc relative 3495*5c0de15dSLoGin offset to GOT entry without REX 3496*5c0de15dSLoGin prefix, relaxable. */ 3497*5c0de15dSLoGin #define R_X86_64_REX_GOTPCRELX 42 /* Load from 32 bit signed pc relative 3498*5c0de15dSLoGin offset to GOT entry with REX prefix, 3499*5c0de15dSLoGin relaxable. */ 3500*5c0de15dSLoGin #define R_X86_64_NUM 43 3501*5c0de15dSLoGin 3502*5c0de15dSLoGin /* x86-64 sh_type values. */ 3503*5c0de15dSLoGin #define SHT_X86_64_UNWIND 0x70000001 /* Unwind information. */ 3504*5c0de15dSLoGin 3505*5c0de15dSLoGin 3506*5c0de15dSLoGin /* AM33 relocations. */ 3507*5c0de15dSLoGin #define R_MN10300_NONE 0 /* No reloc. */ 3508*5c0de15dSLoGin #define R_MN10300_32 1 /* Direct 32 bit. */ 3509*5c0de15dSLoGin #define R_MN10300_16 2 /* Direct 16 bit. */ 3510*5c0de15dSLoGin #define R_MN10300_8 3 /* Direct 8 bit. */ 3511*5c0de15dSLoGin #define R_MN10300_PCREL32 4 /* PC-relative 32-bit. */ 3512*5c0de15dSLoGin #define R_MN10300_PCREL16 5 /* PC-relative 16-bit signed. */ 3513*5c0de15dSLoGin #define R_MN10300_PCREL8 6 /* PC-relative 8-bit signed. */ 3514*5c0de15dSLoGin #define R_MN10300_GNU_VTINHERIT 7 /* Ancient C++ vtable garbage... */ 3515*5c0de15dSLoGin #define R_MN10300_GNU_VTENTRY 8 /* ... collection annotation. */ 3516*5c0de15dSLoGin #define R_MN10300_24 9 /* Direct 24 bit. */ 3517*5c0de15dSLoGin #define R_MN10300_GOTPC32 10 /* 32-bit PCrel offset to GOT. */ 3518*5c0de15dSLoGin #define R_MN10300_GOTPC16 11 /* 16-bit PCrel offset to GOT. */ 3519*5c0de15dSLoGin #define R_MN10300_GOTOFF32 12 /* 32-bit offset from GOT. */ 3520*5c0de15dSLoGin #define R_MN10300_GOTOFF24 13 /* 24-bit offset from GOT. */ 3521*5c0de15dSLoGin #define R_MN10300_GOTOFF16 14 /* 16-bit offset from GOT. */ 3522*5c0de15dSLoGin #define R_MN10300_PLT32 15 /* 32-bit PCrel to PLT entry. */ 3523*5c0de15dSLoGin #define R_MN10300_PLT16 16 /* 16-bit PCrel to PLT entry. */ 3524*5c0de15dSLoGin #define R_MN10300_GOT32 17 /* 32-bit offset to GOT entry. */ 3525*5c0de15dSLoGin #define R_MN10300_GOT24 18 /* 24-bit offset to GOT entry. */ 3526*5c0de15dSLoGin #define R_MN10300_GOT16 19 /* 16-bit offset to GOT entry. */ 3527*5c0de15dSLoGin #define R_MN10300_COPY 20 /* Copy symbol at runtime. */ 3528*5c0de15dSLoGin #define R_MN10300_GLOB_DAT 21 /* Create GOT entry. */ 3529*5c0de15dSLoGin #define R_MN10300_JMP_SLOT 22 /* Create PLT entry. */ 3530*5c0de15dSLoGin #define R_MN10300_RELATIVE 23 /* Adjust by program base. */ 3531*5c0de15dSLoGin #define R_MN10300_TLS_GD 24 /* 32-bit offset for global dynamic. */ 3532*5c0de15dSLoGin #define R_MN10300_TLS_LD 25 /* 32-bit offset for local dynamic. */ 3533*5c0de15dSLoGin #define R_MN10300_TLS_LDO 26 /* Module-relative offset. */ 3534*5c0de15dSLoGin #define R_MN10300_TLS_GOTIE 27 /* GOT offset for static TLS block 3535*5c0de15dSLoGin offset. */ 3536*5c0de15dSLoGin #define R_MN10300_TLS_IE 28 /* GOT address for static TLS block 3537*5c0de15dSLoGin offset. */ 3538*5c0de15dSLoGin #define R_MN10300_TLS_LE 29 /* Offset relative to static TLS 3539*5c0de15dSLoGin block. */ 3540*5c0de15dSLoGin #define R_MN10300_TLS_DTPMOD 30 /* ID of module containing symbol. */ 3541*5c0de15dSLoGin #define R_MN10300_TLS_DTPOFF 31 /* Offset in module TLS block. */ 3542*5c0de15dSLoGin #define R_MN10300_TLS_TPOFF 32 /* Offset in static TLS block. */ 3543*5c0de15dSLoGin #define R_MN10300_SYM_DIFF 33 /* Adjustment for next reloc as needed 3544*5c0de15dSLoGin by linker relaxation. */ 3545*5c0de15dSLoGin #define R_MN10300_ALIGN 34 /* Alignment requirement for linker 3546*5c0de15dSLoGin relaxation. */ 3547*5c0de15dSLoGin #define R_MN10300_NUM 35 3548*5c0de15dSLoGin 3549*5c0de15dSLoGin 3550*5c0de15dSLoGin /* M32R relocs. */ 3551*5c0de15dSLoGin #define R_M32R_NONE 0 /* No reloc. */ 3552*5c0de15dSLoGin #define R_M32R_16 1 /* Direct 16 bit. */ 3553*5c0de15dSLoGin #define R_M32R_32 2 /* Direct 32 bit. */ 3554*5c0de15dSLoGin #define R_M32R_24 3 /* Direct 24 bit. */ 3555*5c0de15dSLoGin #define R_M32R_10_PCREL 4 /* PC relative 10 bit shifted. */ 3556*5c0de15dSLoGin #define R_M32R_18_PCREL 5 /* PC relative 18 bit shifted. */ 3557*5c0de15dSLoGin #define R_M32R_26_PCREL 6 /* PC relative 26 bit shifted. */ 3558*5c0de15dSLoGin #define R_M32R_HI16_ULO 7 /* High 16 bit with unsigned low. */ 3559*5c0de15dSLoGin #define R_M32R_HI16_SLO 8 /* High 16 bit with signed low. */ 3560*5c0de15dSLoGin #define R_M32R_LO16 9 /* Low 16 bit. */ 3561*5c0de15dSLoGin #define R_M32R_SDA16 10 /* 16 bit offset in SDA. */ 3562*5c0de15dSLoGin #define R_M32R_GNU_VTINHERIT 11 3563*5c0de15dSLoGin #define R_M32R_GNU_VTENTRY 12 3564*5c0de15dSLoGin /* M32R relocs use SHT_RELA. */ 3565*5c0de15dSLoGin #define R_M32R_16_RELA 33 /* Direct 16 bit. */ 3566*5c0de15dSLoGin #define R_M32R_32_RELA 34 /* Direct 32 bit. */ 3567*5c0de15dSLoGin #define R_M32R_24_RELA 35 /* Direct 24 bit. */ 3568*5c0de15dSLoGin #define R_M32R_10_PCREL_RELA 36 /* PC relative 10 bit shifted. */ 3569*5c0de15dSLoGin #define R_M32R_18_PCREL_RELA 37 /* PC relative 18 bit shifted. */ 3570*5c0de15dSLoGin #define R_M32R_26_PCREL_RELA 38 /* PC relative 26 bit shifted. */ 3571*5c0de15dSLoGin #define R_M32R_HI16_ULO_RELA 39 /* High 16 bit with unsigned low */ 3572*5c0de15dSLoGin #define R_M32R_HI16_SLO_RELA 40 /* High 16 bit with signed low */ 3573*5c0de15dSLoGin #define R_M32R_LO16_RELA 41 /* Low 16 bit */ 3574*5c0de15dSLoGin #define R_M32R_SDA16_RELA 42 /* 16 bit offset in SDA */ 3575*5c0de15dSLoGin #define R_M32R_RELA_GNU_VTINHERIT 43 3576*5c0de15dSLoGin #define R_M32R_RELA_GNU_VTENTRY 44 3577*5c0de15dSLoGin #define R_M32R_REL32 45 /* PC relative 32 bit. */ 3578*5c0de15dSLoGin 3579*5c0de15dSLoGin #define R_M32R_GOT24 48 /* 24 bit GOT entry */ 3580*5c0de15dSLoGin #define R_M32R_26_PLTREL 49 /* 26 bit PC relative to PLT shifted */ 3581*5c0de15dSLoGin #define R_M32R_COPY 50 /* Copy symbol at runtime */ 3582*5c0de15dSLoGin #define R_M32R_GLOB_DAT 51 /* Create GOT entry */ 3583*5c0de15dSLoGin #define R_M32R_JMP_SLOT 52 /* Create PLT entry */ 3584*5c0de15dSLoGin #define R_M32R_RELATIVE 53 /* Adjust by program base */ 3585*5c0de15dSLoGin #define R_M32R_GOTOFF 54 /* 24 bit offset to GOT */ 3586*5c0de15dSLoGin #define R_M32R_GOTPC24 55 /* 24 bit PC relative offset to GOT */ 3587*5c0de15dSLoGin #define R_M32R_GOT16_HI_ULO 56 /* High 16 bit GOT entry with unsigned 3588*5c0de15dSLoGin low */ 3589*5c0de15dSLoGin #define R_M32R_GOT16_HI_SLO 57 /* High 16 bit GOT entry with signed 3590*5c0de15dSLoGin low */ 3591*5c0de15dSLoGin #define R_M32R_GOT16_LO 58 /* Low 16 bit GOT entry */ 3592*5c0de15dSLoGin #define R_M32R_GOTPC_HI_ULO 59 /* High 16 bit PC relative offset to 3593*5c0de15dSLoGin GOT with unsigned low */ 3594*5c0de15dSLoGin #define R_M32R_GOTPC_HI_SLO 60 /* High 16 bit PC relative offset to 3595*5c0de15dSLoGin GOT with signed low */ 3596*5c0de15dSLoGin #define R_M32R_GOTPC_LO 61 /* Low 16 bit PC relative offset to 3597*5c0de15dSLoGin GOT */ 3598*5c0de15dSLoGin #define R_M32R_GOTOFF_HI_ULO 62 /* High 16 bit offset to GOT 3599*5c0de15dSLoGin with unsigned low */ 3600*5c0de15dSLoGin #define R_M32R_GOTOFF_HI_SLO 63 /* High 16 bit offset to GOT 3601*5c0de15dSLoGin with signed low */ 3602*5c0de15dSLoGin #define R_M32R_GOTOFF_LO 64 /* Low 16 bit offset to GOT */ 3603*5c0de15dSLoGin #define R_M32R_NUM 256 /* Keep this the last entry. */ 3604*5c0de15dSLoGin 3605*5c0de15dSLoGin /* MicroBlaze relocations */ 3606*5c0de15dSLoGin #define R_MICROBLAZE_NONE 0 /* No reloc. */ 3607*5c0de15dSLoGin #define R_MICROBLAZE_32 1 /* Direct 32 bit. */ 3608*5c0de15dSLoGin #define R_MICROBLAZE_32_PCREL 2 /* PC relative 32 bit. */ 3609*5c0de15dSLoGin #define R_MICROBLAZE_64_PCREL 3 /* PC relative 64 bit. */ 3610*5c0de15dSLoGin #define R_MICROBLAZE_32_PCREL_LO 4 /* Low 16 bits of PCREL32. */ 3611*5c0de15dSLoGin #define R_MICROBLAZE_64 5 /* Direct 64 bit. */ 3612*5c0de15dSLoGin #define R_MICROBLAZE_32_LO 6 /* Low 16 bit. */ 3613*5c0de15dSLoGin #define R_MICROBLAZE_SRO32 7 /* Read-only small data area. */ 3614*5c0de15dSLoGin #define R_MICROBLAZE_SRW32 8 /* Read-write small data area. */ 3615*5c0de15dSLoGin #define R_MICROBLAZE_64_NONE 9 /* No reloc. */ 3616*5c0de15dSLoGin #define R_MICROBLAZE_32_SYM_OP_SYM 10 /* Symbol Op Symbol relocation. */ 3617*5c0de15dSLoGin #define R_MICROBLAZE_GNU_VTINHERIT 11 /* GNU C++ vtable hierarchy. */ 3618*5c0de15dSLoGin #define R_MICROBLAZE_GNU_VTENTRY 12 /* GNU C++ vtable member usage. */ 3619*5c0de15dSLoGin #define R_MICROBLAZE_GOTPC_64 13 /* PC-relative GOT offset. */ 3620*5c0de15dSLoGin #define R_MICROBLAZE_GOT_64 14 /* GOT entry offset. */ 3621*5c0de15dSLoGin #define R_MICROBLAZE_PLT_64 15 /* PLT offset (PC-relative). */ 3622*5c0de15dSLoGin #define R_MICROBLAZE_REL 16 /* Adjust by program base. */ 3623*5c0de15dSLoGin #define R_MICROBLAZE_JUMP_SLOT 17 /* Create PLT entry. */ 3624*5c0de15dSLoGin #define R_MICROBLAZE_GLOB_DAT 18 /* Create GOT entry. */ 3625*5c0de15dSLoGin #define R_MICROBLAZE_GOTOFF_64 19 /* 64 bit offset to GOT. */ 3626*5c0de15dSLoGin #define R_MICROBLAZE_GOTOFF_32 20 /* 32 bit offset to GOT. */ 3627*5c0de15dSLoGin #define R_MICROBLAZE_COPY 21 /* Runtime copy. */ 3628*5c0de15dSLoGin #define R_MICROBLAZE_TLS 22 /* TLS Reloc. */ 3629*5c0de15dSLoGin #define R_MICROBLAZE_TLSGD 23 /* TLS General Dynamic. */ 3630*5c0de15dSLoGin #define R_MICROBLAZE_TLSLD 24 /* TLS Local Dynamic. */ 3631*5c0de15dSLoGin #define R_MICROBLAZE_TLSDTPMOD32 25 /* TLS Module ID. */ 3632*5c0de15dSLoGin #define R_MICROBLAZE_TLSDTPREL32 26 /* TLS Offset Within TLS Block. */ 3633*5c0de15dSLoGin #define R_MICROBLAZE_TLSDTPREL64 27 /* TLS Offset Within TLS Block. */ 3634*5c0de15dSLoGin #define R_MICROBLAZE_TLSGOTTPREL32 28 /* TLS Offset From Thread Pointer. */ 3635*5c0de15dSLoGin #define R_MICROBLAZE_TLSTPREL32 29 /* TLS Offset From Thread Pointer. */ 3636*5c0de15dSLoGin 3637*5c0de15dSLoGin /* Legal values for d_tag (dynamic entry type). */ 3638*5c0de15dSLoGin #define DT_NIOS2_GP 0x70000002 /* Address of _gp. */ 3639*5c0de15dSLoGin 3640*5c0de15dSLoGin /* Nios II relocations. */ 3641*5c0de15dSLoGin #define R_NIOS2_NONE 0 /* No reloc. */ 3642*5c0de15dSLoGin #define R_NIOS2_S16 1 /* Direct signed 16 bit. */ 3643*5c0de15dSLoGin #define R_NIOS2_U16 2 /* Direct unsigned 16 bit. */ 3644*5c0de15dSLoGin #define R_NIOS2_PCREL16 3 /* PC relative 16 bit. */ 3645*5c0de15dSLoGin #define R_NIOS2_CALL26 4 /* Direct call. */ 3646*5c0de15dSLoGin #define R_NIOS2_IMM5 5 /* 5 bit constant expression. */ 3647*5c0de15dSLoGin #define R_NIOS2_CACHE_OPX 6 /* 5 bit expression, shift 22. */ 3648*5c0de15dSLoGin #define R_NIOS2_IMM6 7 /* 6 bit constant expression. */ 3649*5c0de15dSLoGin #define R_NIOS2_IMM8 8 /* 8 bit constant expression. */ 3650*5c0de15dSLoGin #define R_NIOS2_HI16 9 /* High 16 bit. */ 3651*5c0de15dSLoGin #define R_NIOS2_LO16 10 /* Low 16 bit. */ 3652*5c0de15dSLoGin #define R_NIOS2_HIADJ16 11 /* High 16 bit, adjusted. */ 3653*5c0de15dSLoGin #define R_NIOS2_BFD_RELOC_32 12 /* 32 bit symbol value + addend. */ 3654*5c0de15dSLoGin #define R_NIOS2_BFD_RELOC_16 13 /* 16 bit symbol value + addend. */ 3655*5c0de15dSLoGin #define R_NIOS2_BFD_RELOC_8 14 /* 8 bit symbol value + addend. */ 3656*5c0de15dSLoGin #define R_NIOS2_GPREL 15 /* 16 bit GP pointer offset. */ 3657*5c0de15dSLoGin #define R_NIOS2_GNU_VTINHERIT 16 /* GNU C++ vtable hierarchy. */ 3658*5c0de15dSLoGin #define R_NIOS2_GNU_VTENTRY 17 /* GNU C++ vtable member usage. */ 3659*5c0de15dSLoGin #define R_NIOS2_UJMP 18 /* Unconditional branch. */ 3660*5c0de15dSLoGin #define R_NIOS2_CJMP 19 /* Conditional branch. */ 3661*5c0de15dSLoGin #define R_NIOS2_CALLR 20 /* Indirect call through register. */ 3662*5c0de15dSLoGin #define R_NIOS2_ALIGN 21 /* Alignment requirement for 3663*5c0de15dSLoGin linker relaxation. */ 3664*5c0de15dSLoGin #define R_NIOS2_GOT16 22 /* 16 bit GOT entry. */ 3665*5c0de15dSLoGin #define R_NIOS2_CALL16 23 /* 16 bit GOT entry for function. */ 3666*5c0de15dSLoGin #define R_NIOS2_GOTOFF_LO 24 /* %lo of offset to GOT pointer. */ 3667*5c0de15dSLoGin #define R_NIOS2_GOTOFF_HA 25 /* %hiadj of offset to GOT pointer. */ 3668*5c0de15dSLoGin #define R_NIOS2_PCREL_LO 26 /* %lo of PC relative offset. */ 3669*5c0de15dSLoGin #define R_NIOS2_PCREL_HA 27 /* %hiadj of PC relative offset. */ 3670*5c0de15dSLoGin #define R_NIOS2_TLS_GD16 28 /* 16 bit GOT offset for TLS GD. */ 3671*5c0de15dSLoGin #define R_NIOS2_TLS_LDM16 29 /* 16 bit GOT offset for TLS LDM. */ 3672*5c0de15dSLoGin #define R_NIOS2_TLS_LDO16 30 /* 16 bit module relative offset. */ 3673*5c0de15dSLoGin #define R_NIOS2_TLS_IE16 31 /* 16 bit GOT offset for TLS IE. */ 3674*5c0de15dSLoGin #define R_NIOS2_TLS_LE16 32 /* 16 bit LE TP-relative offset. */ 3675*5c0de15dSLoGin #define R_NIOS2_TLS_DTPMOD 33 /* Module number. */ 3676*5c0de15dSLoGin #define R_NIOS2_TLS_DTPREL 34 /* Module-relative offset. */ 3677*5c0de15dSLoGin #define R_NIOS2_TLS_TPREL 35 /* TP-relative offset. */ 3678*5c0de15dSLoGin #define R_NIOS2_COPY 36 /* Copy symbol at runtime. */ 3679*5c0de15dSLoGin #define R_NIOS2_GLOB_DAT 37 /* Create GOT entry. */ 3680*5c0de15dSLoGin #define R_NIOS2_JUMP_SLOT 38 /* Create PLT entry. */ 3681*5c0de15dSLoGin #define R_NIOS2_RELATIVE 39 /* Adjust by program base. */ 3682*5c0de15dSLoGin #define R_NIOS2_GOTOFF 40 /* 16 bit offset to GOT pointer. */ 3683*5c0de15dSLoGin #define R_NIOS2_CALL26_NOAT 41 /* Direct call in .noat section. */ 3684*5c0de15dSLoGin #define R_NIOS2_GOT_LO 42 /* %lo() of GOT entry. */ 3685*5c0de15dSLoGin #define R_NIOS2_GOT_HA 43 /* %hiadj() of GOT entry. */ 3686*5c0de15dSLoGin #define R_NIOS2_CALL_LO 44 /* %lo() of function GOT entry. */ 3687*5c0de15dSLoGin #define R_NIOS2_CALL_HA 45 /* %hiadj() of function GOT entry. */ 3688*5c0de15dSLoGin 3689*5c0de15dSLoGin /* TILEPro relocations. */ 3690*5c0de15dSLoGin #define R_TILEPRO_NONE 0 /* No reloc */ 3691*5c0de15dSLoGin #define R_TILEPRO_32 1 /* Direct 32 bit */ 3692*5c0de15dSLoGin #define R_TILEPRO_16 2 /* Direct 16 bit */ 3693*5c0de15dSLoGin #define R_TILEPRO_8 3 /* Direct 8 bit */ 3694*5c0de15dSLoGin #define R_TILEPRO_32_PCREL 4 /* PC relative 32 bit */ 3695*5c0de15dSLoGin #define R_TILEPRO_16_PCREL 5 /* PC relative 16 bit */ 3696*5c0de15dSLoGin #define R_TILEPRO_8_PCREL 6 /* PC relative 8 bit */ 3697*5c0de15dSLoGin #define R_TILEPRO_LO16 7 /* Low 16 bit */ 3698*5c0de15dSLoGin #define R_TILEPRO_HI16 8 /* High 16 bit */ 3699*5c0de15dSLoGin #define R_TILEPRO_HA16 9 /* High 16 bit, adjusted */ 3700*5c0de15dSLoGin #define R_TILEPRO_COPY 10 /* Copy relocation */ 3701*5c0de15dSLoGin #define R_TILEPRO_GLOB_DAT 11 /* Create GOT entry */ 3702*5c0de15dSLoGin #define R_TILEPRO_JMP_SLOT 12 /* Create PLT entry */ 3703*5c0de15dSLoGin #define R_TILEPRO_RELATIVE 13 /* Adjust by program base */ 3704*5c0de15dSLoGin #define R_TILEPRO_BROFF_X1 14 /* X1 pipe branch offset */ 3705*5c0de15dSLoGin #define R_TILEPRO_JOFFLONG_X1 15 /* X1 pipe jump offset */ 3706*5c0de15dSLoGin #define R_TILEPRO_JOFFLONG_X1_PLT 16 /* X1 pipe jump offset to PLT */ 3707*5c0de15dSLoGin #define R_TILEPRO_IMM8_X0 17 /* X0 pipe 8-bit */ 3708*5c0de15dSLoGin #define R_TILEPRO_IMM8_Y0 18 /* Y0 pipe 8-bit */ 3709*5c0de15dSLoGin #define R_TILEPRO_IMM8_X1 19 /* X1 pipe 8-bit */ 3710*5c0de15dSLoGin #define R_TILEPRO_IMM8_Y1 20 /* Y1 pipe 8-bit */ 3711*5c0de15dSLoGin #define R_TILEPRO_MT_IMM15_X1 21 /* X1 pipe mtspr */ 3712*5c0de15dSLoGin #define R_TILEPRO_MF_IMM15_X1 22 /* X1 pipe mfspr */ 3713*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0 23 /* X0 pipe 16-bit */ 3714*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1 24 /* X1 pipe 16-bit */ 3715*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_LO 25 /* X0 pipe low 16-bit */ 3716*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_LO 26 /* X1 pipe low 16-bit */ 3717*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_HI 27 /* X0 pipe high 16-bit */ 3718*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_HI 28 /* X1 pipe high 16-bit */ 3719*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_HA 29 /* X0 pipe high 16-bit, adjusted */ 3720*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_HA 30 /* X1 pipe high 16-bit, adjusted */ 3721*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_PCREL 31 /* X0 pipe PC relative 16 bit */ 3722*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_PCREL 32 /* X1 pipe PC relative 16 bit */ 3723*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_LO_PCREL 33 /* X0 pipe PC relative low 16 bit */ 3724*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_LO_PCREL 34 /* X1 pipe PC relative low 16 bit */ 3725*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_HI_PCREL 35 /* X0 pipe PC relative high 16 bit */ 3726*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_HI_PCREL 36 /* X1 pipe PC relative high 16 bit */ 3727*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_HA_PCREL 37 /* X0 pipe PC relative ha() 16 bit */ 3728*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_HA_PCREL 38 /* X1 pipe PC relative ha() 16 bit */ 3729*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_GOT 39 /* X0 pipe 16-bit GOT offset */ 3730*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_GOT 40 /* X1 pipe 16-bit GOT offset */ 3731*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_GOT_LO 41 /* X0 pipe low 16-bit GOT offset */ 3732*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_GOT_LO 42 /* X1 pipe low 16-bit GOT offset */ 3733*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_GOT_HI 43 /* X0 pipe high 16-bit GOT offset */ 3734*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_GOT_HI 44 /* X1 pipe high 16-bit GOT offset */ 3735*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_GOT_HA 45 /* X0 pipe ha() 16-bit GOT offset */ 3736*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_GOT_HA 46 /* X1 pipe ha() 16-bit GOT offset */ 3737*5c0de15dSLoGin #define R_TILEPRO_MMSTART_X0 47 /* X0 pipe mm "start" */ 3738*5c0de15dSLoGin #define R_TILEPRO_MMEND_X0 48 /* X0 pipe mm "end" */ 3739*5c0de15dSLoGin #define R_TILEPRO_MMSTART_X1 49 /* X1 pipe mm "start" */ 3740*5c0de15dSLoGin #define R_TILEPRO_MMEND_X1 50 /* X1 pipe mm "end" */ 3741*5c0de15dSLoGin #define R_TILEPRO_SHAMT_X0 51 /* X0 pipe shift amount */ 3742*5c0de15dSLoGin #define R_TILEPRO_SHAMT_X1 52 /* X1 pipe shift amount */ 3743*5c0de15dSLoGin #define R_TILEPRO_SHAMT_Y0 53 /* Y0 pipe shift amount */ 3744*5c0de15dSLoGin #define R_TILEPRO_SHAMT_Y1 54 /* Y1 pipe shift amount */ 3745*5c0de15dSLoGin #define R_TILEPRO_DEST_IMM8_X1 55 /* X1 pipe destination 8-bit */ 3746*5c0de15dSLoGin /* Relocs 56-59 are currently not defined. */ 3747*5c0de15dSLoGin #define R_TILEPRO_TLS_GD_CALL 60 /* "jal" for TLS GD */ 3748*5c0de15dSLoGin #define R_TILEPRO_IMM8_X0_TLS_GD_ADD 61 /* X0 pipe "addi" for TLS GD */ 3749*5c0de15dSLoGin #define R_TILEPRO_IMM8_X1_TLS_GD_ADD 62 /* X1 pipe "addi" for TLS GD */ 3750*5c0de15dSLoGin #define R_TILEPRO_IMM8_Y0_TLS_GD_ADD 63 /* Y0 pipe "addi" for TLS GD */ 3751*5c0de15dSLoGin #define R_TILEPRO_IMM8_Y1_TLS_GD_ADD 64 /* Y1 pipe "addi" for TLS GD */ 3752*5c0de15dSLoGin #define R_TILEPRO_TLS_IE_LOAD 65 /* "lw_tls" for TLS IE */ 3753*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_GD 66 /* X0 pipe 16-bit TLS GD offset */ 3754*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_GD 67 /* X1 pipe 16-bit TLS GD offset */ 3755*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_GD_LO 68 /* X0 pipe low 16-bit TLS GD offset */ 3756*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_GD_LO 69 /* X1 pipe low 16-bit TLS GD offset */ 3757*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_GD_HI 70 /* X0 pipe high 16-bit TLS GD offset */ 3758*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_GD_HI 71 /* X1 pipe high 16-bit TLS GD offset */ 3759*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_GD_HA 72 /* X0 pipe ha() 16-bit TLS GD offset */ 3760*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_GD_HA 73 /* X1 pipe ha() 16-bit TLS GD offset */ 3761*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_IE 74 /* X0 pipe 16-bit TLS IE offset */ 3762*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_IE 75 /* X1 pipe 16-bit TLS IE offset */ 3763*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_IE_LO 76 /* X0 pipe low 16-bit TLS IE offset */ 3764*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_IE_LO 77 /* X1 pipe low 16-bit TLS IE offset */ 3765*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_IE_HI 78 /* X0 pipe high 16-bit TLS IE offset */ 3766*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_IE_HI 79 /* X1 pipe high 16-bit TLS IE offset */ 3767*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_IE_HA 80 /* X0 pipe ha() 16-bit TLS IE offset */ 3768*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_IE_HA 81 /* X1 pipe ha() 16-bit TLS IE offset */ 3769*5c0de15dSLoGin #define R_TILEPRO_TLS_DTPMOD32 82 /* ID of module containing symbol */ 3770*5c0de15dSLoGin #define R_TILEPRO_TLS_DTPOFF32 83 /* Offset in TLS block */ 3771*5c0de15dSLoGin #define R_TILEPRO_TLS_TPOFF32 84 /* Offset in static TLS block */ 3772*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_LE 85 /* X0 pipe 16-bit TLS LE offset */ 3773*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_LE 86 /* X1 pipe 16-bit TLS LE offset */ 3774*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_LE_LO 87 /* X0 pipe low 16-bit TLS LE offset */ 3775*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_LE_LO 88 /* X1 pipe low 16-bit TLS LE offset */ 3776*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_LE_HI 89 /* X0 pipe high 16-bit TLS LE offset */ 3777*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_LE_HI 90 /* X1 pipe high 16-bit TLS LE offset */ 3778*5c0de15dSLoGin #define R_TILEPRO_IMM16_X0_TLS_LE_HA 91 /* X0 pipe ha() 16-bit TLS LE offset */ 3779*5c0de15dSLoGin #define R_TILEPRO_IMM16_X1_TLS_LE_HA 92 /* X1 pipe ha() 16-bit TLS LE offset */ 3780*5c0de15dSLoGin 3781*5c0de15dSLoGin #define R_TILEPRO_GNU_VTINHERIT 128 /* GNU C++ vtable hierarchy */ 3782*5c0de15dSLoGin #define R_TILEPRO_GNU_VTENTRY 129 /* GNU C++ vtable member usage */ 3783*5c0de15dSLoGin 3784*5c0de15dSLoGin #define R_TILEPRO_NUM 130 3785*5c0de15dSLoGin 3786*5c0de15dSLoGin 3787*5c0de15dSLoGin /* TILE-Gx relocations. */ 3788*5c0de15dSLoGin #define R_TILEGX_NONE 0 /* No reloc */ 3789*5c0de15dSLoGin #define R_TILEGX_64 1 /* Direct 64 bit */ 3790*5c0de15dSLoGin #define R_TILEGX_32 2 /* Direct 32 bit */ 3791*5c0de15dSLoGin #define R_TILEGX_16 3 /* Direct 16 bit */ 3792*5c0de15dSLoGin #define R_TILEGX_8 4 /* Direct 8 bit */ 3793*5c0de15dSLoGin #define R_TILEGX_64_PCREL 5 /* PC relative 64 bit */ 3794*5c0de15dSLoGin #define R_TILEGX_32_PCREL 6 /* PC relative 32 bit */ 3795*5c0de15dSLoGin #define R_TILEGX_16_PCREL 7 /* PC relative 16 bit */ 3796*5c0de15dSLoGin #define R_TILEGX_8_PCREL 8 /* PC relative 8 bit */ 3797*5c0de15dSLoGin #define R_TILEGX_HW0 9 /* hword 0 16-bit */ 3798*5c0de15dSLoGin #define R_TILEGX_HW1 10 /* hword 1 16-bit */ 3799*5c0de15dSLoGin #define R_TILEGX_HW2 11 /* hword 2 16-bit */ 3800*5c0de15dSLoGin #define R_TILEGX_HW3 12 /* hword 3 16-bit */ 3801*5c0de15dSLoGin #define R_TILEGX_HW0_LAST 13 /* last hword 0 16-bit */ 3802*5c0de15dSLoGin #define R_TILEGX_HW1_LAST 14 /* last hword 1 16-bit */ 3803*5c0de15dSLoGin #define R_TILEGX_HW2_LAST 15 /* last hword 2 16-bit */ 3804*5c0de15dSLoGin #define R_TILEGX_COPY 16 /* Copy relocation */ 3805*5c0de15dSLoGin #define R_TILEGX_GLOB_DAT 17 /* Create GOT entry */ 3806*5c0de15dSLoGin #define R_TILEGX_JMP_SLOT 18 /* Create PLT entry */ 3807*5c0de15dSLoGin #define R_TILEGX_RELATIVE 19 /* Adjust by program base */ 3808*5c0de15dSLoGin #define R_TILEGX_BROFF_X1 20 /* X1 pipe branch offset */ 3809*5c0de15dSLoGin #define R_TILEGX_JUMPOFF_X1 21 /* X1 pipe jump offset */ 3810*5c0de15dSLoGin #define R_TILEGX_JUMPOFF_X1_PLT 22 /* X1 pipe jump offset to PLT */ 3811*5c0de15dSLoGin #define R_TILEGX_IMM8_X0 23 /* X0 pipe 8-bit */ 3812*5c0de15dSLoGin #define R_TILEGX_IMM8_Y0 24 /* Y0 pipe 8-bit */ 3813*5c0de15dSLoGin #define R_TILEGX_IMM8_X1 25 /* X1 pipe 8-bit */ 3814*5c0de15dSLoGin #define R_TILEGX_IMM8_Y1 26 /* Y1 pipe 8-bit */ 3815*5c0de15dSLoGin #define R_TILEGX_DEST_IMM8_X1 27 /* X1 pipe destination 8-bit */ 3816*5c0de15dSLoGin #define R_TILEGX_MT_IMM14_X1 28 /* X1 pipe mtspr */ 3817*5c0de15dSLoGin #define R_TILEGX_MF_IMM14_X1 29 /* X1 pipe mfspr */ 3818*5c0de15dSLoGin #define R_TILEGX_MMSTART_X0 30 /* X0 pipe mm "start" */ 3819*5c0de15dSLoGin #define R_TILEGX_MMEND_X0 31 /* X0 pipe mm "end" */ 3820*5c0de15dSLoGin #define R_TILEGX_SHAMT_X0 32 /* X0 pipe shift amount */ 3821*5c0de15dSLoGin #define R_TILEGX_SHAMT_X1 33 /* X1 pipe shift amount */ 3822*5c0de15dSLoGin #define R_TILEGX_SHAMT_Y0 34 /* Y0 pipe shift amount */ 3823*5c0de15dSLoGin #define R_TILEGX_SHAMT_Y1 35 /* Y1 pipe shift amount */ 3824*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0 36 /* X0 pipe hword 0 */ 3825*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0 37 /* X1 pipe hword 0 */ 3826*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1 38 /* X0 pipe hword 1 */ 3827*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1 39 /* X1 pipe hword 1 */ 3828*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW2 40 /* X0 pipe hword 2 */ 3829*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW2 41 /* X1 pipe hword 2 */ 3830*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW3 42 /* X0 pipe hword 3 */ 3831*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW3 43 /* X1 pipe hword 3 */ 3832*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_LAST 44 /* X0 pipe last hword 0 */ 3833*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_LAST 45 /* X1 pipe last hword 0 */ 3834*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_LAST 46 /* X0 pipe last hword 1 */ 3835*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_LAST 47 /* X1 pipe last hword 1 */ 3836*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW2_LAST 48 /* X0 pipe last hword 2 */ 3837*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW2_LAST 49 /* X1 pipe last hword 2 */ 3838*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_PCREL 50 /* X0 pipe PC relative hword 0 */ 3839*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_PCREL 51 /* X1 pipe PC relative hword 0 */ 3840*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_PCREL 52 /* X0 pipe PC relative hword 1 */ 3841*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_PCREL 53 /* X1 pipe PC relative hword 1 */ 3842*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW2_PCREL 54 /* X0 pipe PC relative hword 2 */ 3843*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW2_PCREL 55 /* X1 pipe PC relative hword 2 */ 3844*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW3_PCREL 56 /* X0 pipe PC relative hword 3 */ 3845*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW3_PCREL 57 /* X1 pipe PC relative hword 3 */ 3846*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_LAST_PCREL 58 /* X0 pipe PC-rel last hword 0 */ 3847*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_LAST_PCREL 59 /* X1 pipe PC-rel last hword 0 */ 3848*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_LAST_PCREL 60 /* X0 pipe PC-rel last hword 1 */ 3849*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_LAST_PCREL 61 /* X1 pipe PC-rel last hword 1 */ 3850*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW2_LAST_PCREL 62 /* X0 pipe PC-rel last hword 2 */ 3851*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW2_LAST_PCREL 63 /* X1 pipe PC-rel last hword 2 */ 3852*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_GOT 64 /* X0 pipe hword 0 GOT offset */ 3853*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_GOT 65 /* X1 pipe hword 0 GOT offset */ 3854*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_PLT_PCREL 66 /* X0 pipe PC-rel PLT hword 0 */ 3855*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_PLT_PCREL 67 /* X1 pipe PC-rel PLT hword 0 */ 3856*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_PLT_PCREL 68 /* X0 pipe PC-rel PLT hword 1 */ 3857*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_PLT_PCREL 69 /* X1 pipe PC-rel PLT hword 1 */ 3858*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW2_PLT_PCREL 70 /* X0 pipe PC-rel PLT hword 2 */ 3859*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW2_PLT_PCREL 71 /* X1 pipe PC-rel PLT hword 2 */ 3860*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_LAST_GOT 72 /* X0 pipe last hword 0 GOT offset */ 3861*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_LAST_GOT 73 /* X1 pipe last hword 0 GOT offset */ 3862*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_LAST_GOT 74 /* X0 pipe last hword 1 GOT offset */ 3863*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_LAST_GOT 75 /* X1 pipe last hword 1 GOT offset */ 3864*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW3_PLT_PCREL 76 /* X0 pipe PC-rel PLT hword 3 */ 3865*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW3_PLT_PCREL 77 /* X1 pipe PC-rel PLT hword 3 */ 3866*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_TLS_GD 78 /* X0 pipe hword 0 TLS GD offset */ 3867*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_TLS_GD 79 /* X1 pipe hword 0 TLS GD offset */ 3868*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_TLS_LE 80 /* X0 pipe hword 0 TLS LE offset */ 3869*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_TLS_LE 81 /* X1 pipe hword 0 TLS LE offset */ 3870*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_LAST_TLS_LE 82 /* X0 pipe last hword 0 LE off */ 3871*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE 83 /* X1 pipe last hword 0 LE off */ 3872*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE 84 /* X0 pipe last hword 1 LE off */ 3873*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE 85 /* X1 pipe last hword 1 LE off */ 3874*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_LAST_TLS_GD 86 /* X0 pipe last hword 0 GD off */ 3875*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_LAST_TLS_GD 87 /* X1 pipe last hword 0 GD off */ 3876*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_LAST_TLS_GD 88 /* X0 pipe last hword 1 GD off */ 3877*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_LAST_TLS_GD 89 /* X1 pipe last hword 1 GD off */ 3878*5c0de15dSLoGin /* Relocs 90-91 are currently not defined. */ 3879*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_TLS_IE 92 /* X0 pipe hword 0 TLS IE offset */ 3880*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_TLS_IE 93 /* X1 pipe hword 0 TLS IE offset */ 3881*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL 94 /* X0 pipe PC-rel PLT last hword 0 */ 3882*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL 95 /* X1 pipe PC-rel PLT last hword 0 */ 3883*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL 96 /* X0 pipe PC-rel PLT last hword 1 */ 3884*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL 97 /* X1 pipe PC-rel PLT last hword 1 */ 3885*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL 98 /* X0 pipe PC-rel PLT last hword 2 */ 3886*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL 99 /* X1 pipe PC-rel PLT last hword 2 */ 3887*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW0_LAST_TLS_IE 100 /* X0 pipe last hword 0 IE off */ 3888*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW0_LAST_TLS_IE 101 /* X1 pipe last hword 0 IE off */ 3889*5c0de15dSLoGin #define R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE 102 /* X0 pipe last hword 1 IE off */ 3890*5c0de15dSLoGin #define R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE 103 /* X1 pipe last hword 1 IE off */ 3891*5c0de15dSLoGin /* Relocs 104-105 are currently not defined. */ 3892*5c0de15dSLoGin #define R_TILEGX_TLS_DTPMOD64 106 /* 64-bit ID of symbol's module */ 3893*5c0de15dSLoGin #define R_TILEGX_TLS_DTPOFF64 107 /* 64-bit offset in TLS block */ 3894*5c0de15dSLoGin #define R_TILEGX_TLS_TPOFF64 108 /* 64-bit offset in static TLS block */ 3895*5c0de15dSLoGin #define R_TILEGX_TLS_DTPMOD32 109 /* 32-bit ID of symbol's module */ 3896*5c0de15dSLoGin #define R_TILEGX_TLS_DTPOFF32 110 /* 32-bit offset in TLS block */ 3897*5c0de15dSLoGin #define R_TILEGX_TLS_TPOFF32 111 /* 32-bit offset in static TLS block */ 3898*5c0de15dSLoGin #define R_TILEGX_TLS_GD_CALL 112 /* "jal" for TLS GD */ 3899*5c0de15dSLoGin #define R_TILEGX_IMM8_X0_TLS_GD_ADD 113 /* X0 pipe "addi" for TLS GD */ 3900*5c0de15dSLoGin #define R_TILEGX_IMM8_X1_TLS_GD_ADD 114 /* X1 pipe "addi" for TLS GD */ 3901*5c0de15dSLoGin #define R_TILEGX_IMM8_Y0_TLS_GD_ADD 115 /* Y0 pipe "addi" for TLS GD */ 3902*5c0de15dSLoGin #define R_TILEGX_IMM8_Y1_TLS_GD_ADD 116 /* Y1 pipe "addi" for TLS GD */ 3903*5c0de15dSLoGin #define R_TILEGX_TLS_IE_LOAD 117 /* "ld_tls" for TLS IE */ 3904*5c0de15dSLoGin #define R_TILEGX_IMM8_X0_TLS_ADD 118 /* X0 pipe "addi" for TLS GD/IE */ 3905*5c0de15dSLoGin #define R_TILEGX_IMM8_X1_TLS_ADD 119 /* X1 pipe "addi" for TLS GD/IE */ 3906*5c0de15dSLoGin #define R_TILEGX_IMM8_Y0_TLS_ADD 120 /* Y0 pipe "addi" for TLS GD/IE */ 3907*5c0de15dSLoGin #define R_TILEGX_IMM8_Y1_TLS_ADD 121 /* Y1 pipe "addi" for TLS GD/IE */ 3908*5c0de15dSLoGin 3909*5c0de15dSLoGin #define R_TILEGX_GNU_VTINHERIT 128 /* GNU C++ vtable hierarchy */ 3910*5c0de15dSLoGin #define R_TILEGX_GNU_VTENTRY 129 /* GNU C++ vtable member usage */ 3911*5c0de15dSLoGin 3912*5c0de15dSLoGin #define R_TILEGX_NUM 130 3913*5c0de15dSLoGin 3914*5c0de15dSLoGin /* RISC-V ELF Flags */ 3915*5c0de15dSLoGin #define EF_RISCV_RVC 0x0001 3916*5c0de15dSLoGin #define EF_RISCV_FLOAT_ABI 0x0006 3917*5c0de15dSLoGin #define EF_RISCV_FLOAT_ABI_SOFT 0x0000 3918*5c0de15dSLoGin #define EF_RISCV_FLOAT_ABI_SINGLE 0x0002 3919*5c0de15dSLoGin #define EF_RISCV_FLOAT_ABI_DOUBLE 0x0004 3920*5c0de15dSLoGin #define EF_RISCV_FLOAT_ABI_QUAD 0x0006 3921*5c0de15dSLoGin 3922*5c0de15dSLoGin /* RISC-V relocations. */ 3923*5c0de15dSLoGin #define R_RISCV_NONE 0 3924*5c0de15dSLoGin #define R_RISCV_32 1 3925*5c0de15dSLoGin #define R_RISCV_64 2 3926*5c0de15dSLoGin #define R_RISCV_RELATIVE 3 3927*5c0de15dSLoGin #define R_RISCV_COPY 4 3928*5c0de15dSLoGin #define R_RISCV_JUMP_SLOT 5 3929*5c0de15dSLoGin #define R_RISCV_TLS_DTPMOD32 6 3930*5c0de15dSLoGin #define R_RISCV_TLS_DTPMOD64 7 3931*5c0de15dSLoGin #define R_RISCV_TLS_DTPREL32 8 3932*5c0de15dSLoGin #define R_RISCV_TLS_DTPREL64 9 3933*5c0de15dSLoGin #define R_RISCV_TLS_TPREL32 10 3934*5c0de15dSLoGin #define R_RISCV_TLS_TPREL64 11 3935*5c0de15dSLoGin #define R_RISCV_BRANCH 16 3936*5c0de15dSLoGin #define R_RISCV_JAL 17 3937*5c0de15dSLoGin #define R_RISCV_CALL 18 3938*5c0de15dSLoGin #define R_RISCV_CALL_PLT 19 3939*5c0de15dSLoGin #define R_RISCV_GOT_HI20 20 3940*5c0de15dSLoGin #define R_RISCV_TLS_GOT_HI20 21 3941*5c0de15dSLoGin #define R_RISCV_TLS_GD_HI20 22 3942*5c0de15dSLoGin #define R_RISCV_PCREL_HI20 23 3943*5c0de15dSLoGin #define R_RISCV_PCREL_LO12_I 24 3944*5c0de15dSLoGin #define R_RISCV_PCREL_LO12_S 25 3945*5c0de15dSLoGin #define R_RISCV_HI20 26 3946*5c0de15dSLoGin #define R_RISCV_LO12_I 27 3947*5c0de15dSLoGin #define R_RISCV_LO12_S 28 3948*5c0de15dSLoGin #define R_RISCV_TPREL_HI20 29 3949*5c0de15dSLoGin #define R_RISCV_TPREL_LO12_I 30 3950*5c0de15dSLoGin #define R_RISCV_TPREL_LO12_S 31 3951*5c0de15dSLoGin #define R_RISCV_TPREL_ADD 32 3952*5c0de15dSLoGin #define R_RISCV_ADD8 33 3953*5c0de15dSLoGin #define R_RISCV_ADD16 34 3954*5c0de15dSLoGin #define R_RISCV_ADD32 35 3955*5c0de15dSLoGin #define R_RISCV_ADD64 36 3956*5c0de15dSLoGin #define R_RISCV_SUB8 37 3957*5c0de15dSLoGin #define R_RISCV_SUB16 38 3958*5c0de15dSLoGin #define R_RISCV_SUB32 39 3959*5c0de15dSLoGin #define R_RISCV_SUB64 40 3960*5c0de15dSLoGin #define R_RISCV_GNU_VTINHERIT 41 3961*5c0de15dSLoGin #define R_RISCV_GNU_VTENTRY 42 3962*5c0de15dSLoGin #define R_RISCV_ALIGN 43 3963*5c0de15dSLoGin #define R_RISCV_RVC_BRANCH 44 3964*5c0de15dSLoGin #define R_RISCV_RVC_JUMP 45 3965*5c0de15dSLoGin #define R_RISCV_RVC_LUI 46 3966*5c0de15dSLoGin #define R_RISCV_GPREL_I 47 3967*5c0de15dSLoGin #define R_RISCV_GPREL_S 48 3968*5c0de15dSLoGin #define R_RISCV_TPREL_I 49 3969*5c0de15dSLoGin #define R_RISCV_TPREL_S 50 3970*5c0de15dSLoGin #define R_RISCV_RELAX 51 3971*5c0de15dSLoGin #define R_RISCV_SUB6 52 3972*5c0de15dSLoGin #define R_RISCV_SET6 53 3973*5c0de15dSLoGin #define R_RISCV_SET8 54 3974*5c0de15dSLoGin #define R_RISCV_SET16 55 3975*5c0de15dSLoGin #define R_RISCV_SET32 56 3976*5c0de15dSLoGin #define R_RISCV_32_PCREL 57 3977*5c0de15dSLoGin #define R_RISCV_IRELATIVE 58 3978*5c0de15dSLoGin 3979*5c0de15dSLoGin #define R_RISCV_NUM 59 3980*5c0de15dSLoGin 3981*5c0de15dSLoGin /* BPF specific declarations. */ 3982*5c0de15dSLoGin 3983*5c0de15dSLoGin #define R_BPF_NONE 0 /* No reloc */ 3984*5c0de15dSLoGin #define R_BPF_64_64 1 3985*5c0de15dSLoGin #define R_BPF_64_32 10 3986*5c0de15dSLoGin 3987*5c0de15dSLoGin /* Imagination Meta specific relocations. */ 3988*5c0de15dSLoGin 3989*5c0de15dSLoGin #define R_METAG_HIADDR16 0 3990*5c0de15dSLoGin #define R_METAG_LOADDR16 1 3991*5c0de15dSLoGin #define R_METAG_ADDR32 2 /* 32bit absolute address */ 3992*5c0de15dSLoGin #define R_METAG_NONE 3 /* No reloc */ 3993*5c0de15dSLoGin #define R_METAG_RELBRANCH 4 3994*5c0de15dSLoGin #define R_METAG_GETSETOFF 5 3995*5c0de15dSLoGin 3996*5c0de15dSLoGin /* Backward compatibility */ 3997*5c0de15dSLoGin #define R_METAG_REG32OP1 6 3998*5c0de15dSLoGin #define R_METAG_REG32OP2 7 3999*5c0de15dSLoGin #define R_METAG_REG32OP3 8 4000*5c0de15dSLoGin #define R_METAG_REG16OP1 9 4001*5c0de15dSLoGin #define R_METAG_REG16OP2 10 4002*5c0de15dSLoGin #define R_METAG_REG16OP3 11 4003*5c0de15dSLoGin #define R_METAG_REG32OP4 12 4004*5c0de15dSLoGin 4005*5c0de15dSLoGin #define R_METAG_HIOG 13 4006*5c0de15dSLoGin #define R_METAG_LOOG 14 4007*5c0de15dSLoGin 4008*5c0de15dSLoGin #define R_METAG_REL8 15 4009*5c0de15dSLoGin #define R_METAG_REL16 16 4010*5c0de15dSLoGin 4011*5c0de15dSLoGin /* GNU */ 4012*5c0de15dSLoGin #define R_METAG_GNU_VTINHERIT 30 4013*5c0de15dSLoGin #define R_METAG_GNU_VTENTRY 31 4014*5c0de15dSLoGin 4015*5c0de15dSLoGin /* PIC relocations */ 4016*5c0de15dSLoGin #define R_METAG_HI16_GOTOFF 32 4017*5c0de15dSLoGin #define R_METAG_LO16_GOTOFF 33 4018*5c0de15dSLoGin #define R_METAG_GETSET_GOTOFF 34 4019*5c0de15dSLoGin #define R_METAG_GETSET_GOT 35 4020*5c0de15dSLoGin #define R_METAG_HI16_GOTPC 36 4021*5c0de15dSLoGin #define R_METAG_LO16_GOTPC 37 4022*5c0de15dSLoGin #define R_METAG_HI16_PLT 38 4023*5c0de15dSLoGin #define R_METAG_LO16_PLT 39 4024*5c0de15dSLoGin #define R_METAG_RELBRANCH_PLT 40 4025*5c0de15dSLoGin #define R_METAG_GOTOFF 41 4026*5c0de15dSLoGin #define R_METAG_PLT 42 4027*5c0de15dSLoGin #define R_METAG_COPY 43 4028*5c0de15dSLoGin #define R_METAG_JMP_SLOT 44 4029*5c0de15dSLoGin #define R_METAG_RELATIVE 45 4030*5c0de15dSLoGin #define R_METAG_GLOB_DAT 46 4031*5c0de15dSLoGin 4032*5c0de15dSLoGin /* TLS relocations */ 4033*5c0de15dSLoGin #define R_METAG_TLS_GD 47 4034*5c0de15dSLoGin #define R_METAG_TLS_LDM 48 4035*5c0de15dSLoGin #define R_METAG_TLS_LDO_HI16 49 4036*5c0de15dSLoGin #define R_METAG_TLS_LDO_LO16 50 4037*5c0de15dSLoGin #define R_METAG_TLS_LDO 51 4038*5c0de15dSLoGin #define R_METAG_TLS_IE 52 4039*5c0de15dSLoGin #define R_METAG_TLS_IENONPIC 53 4040*5c0de15dSLoGin #define R_METAG_TLS_IENONPIC_HI16 54 4041*5c0de15dSLoGin #define R_METAG_TLS_IENONPIC_LO16 55 4042*5c0de15dSLoGin #define R_METAG_TLS_TPOFF 56 4043*5c0de15dSLoGin #define R_METAG_TLS_DTPMOD 57 4044*5c0de15dSLoGin #define R_METAG_TLS_DTPOFF 58 4045*5c0de15dSLoGin #define R_METAG_TLS_LE 59 4046*5c0de15dSLoGin #define R_METAG_TLS_LE_HI16 60 4047*5c0de15dSLoGin #define R_METAG_TLS_LE_LO16 61 4048*5c0de15dSLoGin 4049*5c0de15dSLoGin /* NDS32 relocations. */ 4050*5c0de15dSLoGin #define R_NDS32_NONE 0 4051*5c0de15dSLoGin #define R_NDS32_32_RELA 20 4052*5c0de15dSLoGin #define R_NDS32_COPY 39 4053*5c0de15dSLoGin #define R_NDS32_GLOB_DAT 40 4054*5c0de15dSLoGin #define R_NDS32_JMP_SLOT 41 4055*5c0de15dSLoGin #define R_NDS32_RELATIVE 42 4056*5c0de15dSLoGin #define R_NDS32_TLS_TPOFF 102 4057*5c0de15dSLoGin #define R_NDS32_TLS_DESC 119 4058*5c0de15dSLoGin 4059*5c0de15dSLoGin /* ARCompact/ARCv2 specific relocs. */ 4060*5c0de15dSLoGin #define R_ARC_NONE 0x0 4061*5c0de15dSLoGin #define R_ARC_8 0x1 4062*5c0de15dSLoGin #define R_ARC_16 0x2 4063*5c0de15dSLoGin #define R_ARC_24 0x3 4064*5c0de15dSLoGin #define R_ARC_32 0x4 4065*5c0de15dSLoGin #define R_ARC_B26 0x5 4066*5c0de15dSLoGin #define R_ARC_B22_PCREL 0x6 4067*5c0de15dSLoGin #define R_ARC_H30 0x7 4068*5c0de15dSLoGin #define R_ARC_N8 0x8 4069*5c0de15dSLoGin #define R_ARC_N16 0x9 4070*5c0de15dSLoGin #define R_ARC_N24 0xA 4071*5c0de15dSLoGin #define R_ARC_N32 0xB 4072*5c0de15dSLoGin #define R_ARC_SDA 0xC 4073*5c0de15dSLoGin #define R_ARC_SECTOFF 0xD 4074*5c0de15dSLoGin #define R_ARC_S21H_PCREL 0xE 4075*5c0de15dSLoGin #define R_ARC_S21W_PCREL 0xF 4076*5c0de15dSLoGin #define R_ARC_S25H_PCREL 0x10 4077*5c0de15dSLoGin #define R_ARC_S25W_PCREL 0x11 4078*5c0de15dSLoGin #define R_ARC_SDA32 0x12 4079*5c0de15dSLoGin #define R_ARC_SDA_LDST 0x13 4080*5c0de15dSLoGin #define R_ARC_SDA_LDST1 0x14 4081*5c0de15dSLoGin #define R_ARC_SDA_LDST2 0x15 4082*5c0de15dSLoGin #define R_ARC_SDA16_LD 0x16 4083*5c0de15dSLoGin #define R_ARC_SDA16_LD1 0x17 4084*5c0de15dSLoGin #define R_ARC_SDA16_LD2 0x18 4085*5c0de15dSLoGin #define R_ARC_S13_PCREL 0x19 4086*5c0de15dSLoGin #define R_ARC_W 0x1A 4087*5c0de15dSLoGin #define R_ARC_32_ME 0x1B 4088*5c0de15dSLoGin #define R_ARC_N32_ME 0x1C 4089*5c0de15dSLoGin #define R_ARC_SECTOFF_ME 0x1D 4090*5c0de15dSLoGin #define R_ARC_SDA32_ME 0x1E 4091*5c0de15dSLoGin #define R_ARC_W_ME 0x1F 4092*5c0de15dSLoGin #define R_ARC_H30_ME 0x20 4093*5c0de15dSLoGin #define R_ARC_SECTOFF_U8 0x21 4094*5c0de15dSLoGin #define R_ARC_SECTOFF_S9 0x22 4095*5c0de15dSLoGin #define R_AC_SECTOFF_U8 0x23 4096*5c0de15dSLoGin #define R_AC_SECTOFF_U8_1 0x24 4097*5c0de15dSLoGin #define R_AC_SECTOFF_U8_2 0x25 4098*5c0de15dSLoGin #define R_AC_SECTOFF_S9 0x26 4099*5c0de15dSLoGin #define R_AC_SECTOFF_S9_1 0x27 4100*5c0de15dSLoGin #define R_AC_SECTOFF_S9_2 0x28 4101*5c0de15dSLoGin #define R_ARC_SECTOFF_ME_1 0x29 4102*5c0de15dSLoGin #define R_ARC_SECTOFF_ME_2 0x2A 4103*5c0de15dSLoGin #define R_ARC_SECTOFF_1 0x2B 4104*5c0de15dSLoGin #define R_ARC_SECTOFF_2 0x2C 4105*5c0de15dSLoGin #define R_ARC_PC32 0x32 4106*5c0de15dSLoGin #define R_ARC_GOTPC32 0x33 4107*5c0de15dSLoGin #define R_ARC_PLT32 0x34 4108*5c0de15dSLoGin #define R_ARC_COPY 0x35 4109*5c0de15dSLoGin #define R_ARC_GLOB_DAT 0x36 4110*5c0de15dSLoGin #define R_ARC_JUMP_SLOT 0x37 4111*5c0de15dSLoGin #define R_ARC_RELATIVE 0x38 4112*5c0de15dSLoGin #define R_ARC_GOTOFF 0x39 4113*5c0de15dSLoGin #define R_ARC_GOTPC 0x3A 4114*5c0de15dSLoGin #define R_ARC_GOT32 0x3B 4115*5c0de15dSLoGin 4116*5c0de15dSLoGin #define R_ARC_TLS_DTPMOD 0x42 4117*5c0de15dSLoGin #define R_ARC_TLS_DTPOFF 0x43 4118*5c0de15dSLoGin #define R_ARC_TLS_TPOFF 0x44 4119*5c0de15dSLoGin #define R_ARC_TLS_GD_GOT 0x45 4120*5c0de15dSLoGin #define R_ARC_TLS_GD_LD 0x46 4121*5c0de15dSLoGin #define R_ARC_TLS_GD_CALL 0x47 4122*5c0de15dSLoGin #define R_ARC_TLS_IE_GOT 0x48 4123*5c0de15dSLoGin #define R_ARC_TLS_DTPOFF_S9 0x4a 4124*5c0de15dSLoGin #define R_ARC_TLS_LE_S9 0x4a 4125*5c0de15dSLoGin #define R_ARC_TLS_LE_32 0x4b 4126*5c0de15dSLoGin 4127*5c0de15dSLoGin /* OpenRISC 1000 specific relocs. */ 4128*5c0de15dSLoGin #define R_OR1K_NONE 0 4129*5c0de15dSLoGin #define R_OR1K_32 1 4130*5c0de15dSLoGin #define R_OR1K_16 2 4131*5c0de15dSLoGin #define R_OR1K_8 3 4132*5c0de15dSLoGin #define R_OR1K_LO_16_IN_INSN 4 4133*5c0de15dSLoGin #define R_OR1K_HI_16_IN_INSN 5 4134*5c0de15dSLoGin #define R_OR1K_INSN_REL_26 6 4135*5c0de15dSLoGin #define R_OR1K_GNU_VTENTRY 7 4136*5c0de15dSLoGin #define R_OR1K_GNU_VTINHERIT 8 4137*5c0de15dSLoGin #define R_OR1K_32_PCREL 9 4138*5c0de15dSLoGin #define R_OR1K_16_PCREL 10 4139*5c0de15dSLoGin #define R_OR1K_8_PCREL 11 4140*5c0de15dSLoGin #define R_OR1K_GOTPC_HI16 12 4141*5c0de15dSLoGin #define R_OR1K_GOTPC_LO16 13 4142*5c0de15dSLoGin #define R_OR1K_GOT16 14 4143*5c0de15dSLoGin #define R_OR1K_PLT26 15 4144*5c0de15dSLoGin #define R_OR1K_GOTOFF_HI16 16 4145*5c0de15dSLoGin #define R_OR1K_GOTOFF_LO16 17 4146*5c0de15dSLoGin #define R_OR1K_COPY 18 4147*5c0de15dSLoGin #define R_OR1K_GLOB_DAT 19 4148*5c0de15dSLoGin #define R_OR1K_JMP_SLOT 20 4149*5c0de15dSLoGin #define R_OR1K_RELATIVE 21 4150*5c0de15dSLoGin #define R_OR1K_TLS_GD_HI16 22 4151*5c0de15dSLoGin #define R_OR1K_TLS_GD_LO16 23 4152*5c0de15dSLoGin #define R_OR1K_TLS_LDM_HI16 24 4153*5c0de15dSLoGin #define R_OR1K_TLS_LDM_LO16 25 4154*5c0de15dSLoGin #define R_OR1K_TLS_LDO_HI16 26 4155*5c0de15dSLoGin #define R_OR1K_TLS_LDO_LO16 27 4156*5c0de15dSLoGin #define R_OR1K_TLS_IE_HI16 28 4157*5c0de15dSLoGin #define R_OR1K_TLS_IE_LO16 29 4158*5c0de15dSLoGin #define R_OR1K_TLS_LE_HI16 30 4159*5c0de15dSLoGin #define R_OR1K_TLS_LE_LO16 31 4160*5c0de15dSLoGin #define R_OR1K_TLS_TPOFF 32 4161*5c0de15dSLoGin #define R_OR1K_TLS_DTPOFF 33 4162*5c0de15dSLoGin #define R_OR1K_TLS_DTPMOD 34 4163*5c0de15dSLoGin 4164*5c0de15dSLoGin #endif /* elf.h */ 4165