| 1 | /* PPC64 ELF support for BFD. | 
|---|
| 2 | Copyright 2003 Free Software Foundation, Inc. | 
|---|
| 3 |  | 
|---|
| 4 | This file is part of BFD, the Binary File Descriptor library. | 
|---|
| 5 |  | 
|---|
| 6 | This program is free software; you can redistribute it and/or modify | 
|---|
| 7 | it under the terms of the GNU General Public License as published by | 
|---|
| 8 | the Free Software Foundation; either version 2 of the License, or | 
|---|
| 9 | (at your option) any later version. | 
|---|
| 10 |  | 
|---|
| 11 | This program is distributed in the hope that it will be useful, | 
|---|
| 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|---|
| 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|---|
| 14 | GNU General Public License for more details. | 
|---|
| 15 |  | 
|---|
| 16 | You should have received a copy of the GNU General Public License | 
|---|
| 17 | along with this program; if not, write to the Free Software | 
|---|
| 18 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */ | 
|---|
| 19 |  | 
|---|
| 20 | #ifndef _ELF_PPC64_H | 
|---|
| 21 | #define _ELF_PPC64_H | 
|---|
| 22 |  | 
|---|
| 23 | #include "elf/reloc-macros.h" | 
|---|
| 24 |  | 
|---|
| 25 | /* Relocations.  */ | 
|---|
| 26 | START_RELOC_NUMBERS (elf_ppc64_reloc_type) | 
|---|
| 27 | RELOC_NUMBER (R_PPC64_NONE,                0) | 
|---|
| 28 | RELOC_NUMBER (R_PPC64_ADDR32,              1) | 
|---|
| 29 | RELOC_NUMBER (R_PPC64_ADDR24,              2) | 
|---|
| 30 | RELOC_NUMBER (R_PPC64_ADDR16,              3) | 
|---|
| 31 | RELOC_NUMBER (R_PPC64_ADDR16_LO,           4) | 
|---|
| 32 | RELOC_NUMBER (R_PPC64_ADDR16_HI,           5) | 
|---|
| 33 | RELOC_NUMBER (R_PPC64_ADDR16_HA,           6) | 
|---|
| 34 | RELOC_NUMBER (R_PPC64_ADDR14,              7) | 
|---|
| 35 | RELOC_NUMBER (R_PPC64_ADDR14_BRTAKEN,      8) | 
|---|
| 36 | RELOC_NUMBER (R_PPC64_ADDR14_BRNTAKEN,     9) | 
|---|
| 37 | RELOC_NUMBER (R_PPC64_REL24,              10) | 
|---|
| 38 | RELOC_NUMBER (R_PPC64_REL14,              11) | 
|---|
| 39 | RELOC_NUMBER (R_PPC64_REL14_BRTAKEN,      12) | 
|---|
| 40 | RELOC_NUMBER (R_PPC64_REL14_BRNTAKEN,     13) | 
|---|
| 41 | RELOC_NUMBER (R_PPC64_GOT16,              14) | 
|---|
| 42 | RELOC_NUMBER (R_PPC64_GOT16_LO,           15) | 
|---|
| 43 | RELOC_NUMBER (R_PPC64_GOT16_HI,           16) | 
|---|
| 44 | RELOC_NUMBER (R_PPC64_GOT16_HA,           17) | 
|---|
| 45 | /* 18 unused.  32-bit reloc is R_PPC_PLTREL24.  */ | 
|---|
| 46 | RELOC_NUMBER (R_PPC64_COPY,               19) | 
|---|
| 47 | RELOC_NUMBER (R_PPC64_GLOB_DAT,           20) | 
|---|
| 48 | RELOC_NUMBER (R_PPC64_JMP_SLOT,           21) | 
|---|
| 49 | RELOC_NUMBER (R_PPC64_RELATIVE,           22) | 
|---|
| 50 | /* 23 unused.  32-bit reloc is R_PPC_LOCAL24PC.  */ | 
|---|
| 51 | RELOC_NUMBER (R_PPC64_UADDR32,            24) | 
|---|
| 52 | RELOC_NUMBER (R_PPC64_UADDR16,            25) | 
|---|
| 53 | RELOC_NUMBER (R_PPC64_REL32,              26) | 
|---|
| 54 | RELOC_NUMBER (R_PPC64_PLT32,              27) | 
|---|
| 55 | RELOC_NUMBER (R_PPC64_PLTREL32,           28) | 
|---|
| 56 | RELOC_NUMBER (R_PPC64_PLT16_LO,           29) | 
|---|
| 57 | RELOC_NUMBER (R_PPC64_PLT16_HI,           30) | 
|---|
| 58 | RELOC_NUMBER (R_PPC64_PLT16_HA,           31) | 
|---|
| 59 | /* 32 unused.  32-bit reloc is R_PPC_SDAREL16.  */ | 
|---|
| 60 | RELOC_NUMBER (R_PPC64_SECTOFF,            33) | 
|---|
| 61 | RELOC_NUMBER (R_PPC64_SECTOFF_LO,         34) | 
|---|
| 62 | RELOC_NUMBER (R_PPC64_SECTOFF_HI,         35) | 
|---|
| 63 | RELOC_NUMBER (R_PPC64_SECTOFF_HA,         36) | 
|---|
| 64 | RELOC_NUMBER (R_PPC64_REL30,              37) | 
|---|
| 65 | RELOC_NUMBER (R_PPC64_ADDR64,             38) | 
|---|
| 66 | RELOC_NUMBER (R_PPC64_ADDR16_HIGHER,      39) | 
|---|
| 67 | RELOC_NUMBER (R_PPC64_ADDR16_HIGHERA,     40) | 
|---|
| 68 | RELOC_NUMBER (R_PPC64_ADDR16_HIGHEST,     41) | 
|---|
| 69 | RELOC_NUMBER (R_PPC64_ADDR16_HIGHESTA,    42) | 
|---|
| 70 | RELOC_NUMBER (R_PPC64_UADDR64,            43) | 
|---|
| 71 | RELOC_NUMBER (R_PPC64_REL64,              44) | 
|---|
| 72 | RELOC_NUMBER (R_PPC64_PLT64,              45) | 
|---|
| 73 | RELOC_NUMBER (R_PPC64_PLTREL64,           46) | 
|---|
| 74 | RELOC_NUMBER (R_PPC64_TOC16,              47) | 
|---|
| 75 | RELOC_NUMBER (R_PPC64_TOC16_LO,           48) | 
|---|
| 76 | RELOC_NUMBER (R_PPC64_TOC16_HI,           49) | 
|---|
| 77 | RELOC_NUMBER (R_PPC64_TOC16_HA,           50) | 
|---|
| 78 | RELOC_NUMBER (R_PPC64_TOC,                51) | 
|---|
| 79 | RELOC_NUMBER (R_PPC64_PLTGOT16,           52) | 
|---|
| 80 | RELOC_NUMBER (R_PPC64_PLTGOT16_LO,        53) | 
|---|
| 81 | RELOC_NUMBER (R_PPC64_PLTGOT16_HI,        54) | 
|---|
| 82 | RELOC_NUMBER (R_PPC64_PLTGOT16_HA,        55) | 
|---|
| 83 |  | 
|---|
| 84 | /* The following relocs were added in the 64-bit PowerPC ELF ABI | 
|---|
| 85 | revision 1.2. */ | 
|---|
| 86 | RELOC_NUMBER (R_PPC64_ADDR16_DS,          56) | 
|---|
| 87 | RELOC_NUMBER (R_PPC64_ADDR16_LO_DS,       57) | 
|---|
| 88 | RELOC_NUMBER (R_PPC64_GOT16_DS,           58) | 
|---|
| 89 | RELOC_NUMBER (R_PPC64_GOT16_LO_DS,        59) | 
|---|
| 90 | RELOC_NUMBER (R_PPC64_PLT16_LO_DS,        60) | 
|---|
| 91 | RELOC_NUMBER (R_PPC64_SECTOFF_DS,         61) | 
|---|
| 92 | RELOC_NUMBER (R_PPC64_SECTOFF_LO_DS,      62) | 
|---|
| 93 | RELOC_NUMBER (R_PPC64_TOC16_DS,           63) | 
|---|
| 94 | RELOC_NUMBER (R_PPC64_TOC16_LO_DS,        64) | 
|---|
| 95 | RELOC_NUMBER (R_PPC64_PLTGOT16_DS,        65) | 
|---|
| 96 | RELOC_NUMBER (R_PPC64_PLTGOT16_LO_DS,     66) | 
|---|
| 97 |  | 
|---|
| 98 | /* Relocs added to support TLS.  PowerPC64 ELF ABI revision 1.5.  */ | 
|---|
| 99 | RELOC_NUMBER (R_PPC64_TLS,                67) | 
|---|
| 100 | RELOC_NUMBER (R_PPC64_DTPMOD64,           68) | 
|---|
| 101 | RELOC_NUMBER (R_PPC64_TPREL16,            69) | 
|---|
| 102 | RELOC_NUMBER (R_PPC64_TPREL16_LO,         70) | 
|---|
| 103 | RELOC_NUMBER (R_PPC64_TPREL16_HI,         71) | 
|---|
| 104 | RELOC_NUMBER (R_PPC64_TPREL16_HA,         72) | 
|---|
| 105 | RELOC_NUMBER (R_PPC64_TPREL64,            73) | 
|---|
| 106 | RELOC_NUMBER (R_PPC64_DTPREL16,           74) | 
|---|
| 107 | RELOC_NUMBER (R_PPC64_DTPREL16_LO,        75) | 
|---|
| 108 | RELOC_NUMBER (R_PPC64_DTPREL16_HI,        76) | 
|---|
| 109 | RELOC_NUMBER (R_PPC64_DTPREL16_HA,        77) | 
|---|
| 110 | RELOC_NUMBER (R_PPC64_DTPREL64,           78) | 
|---|
| 111 | RELOC_NUMBER (R_PPC64_GOT_TLSGD16,        79) | 
|---|
| 112 | RELOC_NUMBER (R_PPC64_GOT_TLSGD16_LO,     80) | 
|---|
| 113 | RELOC_NUMBER (R_PPC64_GOT_TLSGD16_HI,     81) | 
|---|
| 114 | RELOC_NUMBER (R_PPC64_GOT_TLSGD16_HA,     82) | 
|---|
| 115 | RELOC_NUMBER (R_PPC64_GOT_TLSLD16,        83) | 
|---|
| 116 | RELOC_NUMBER (R_PPC64_GOT_TLSLD16_LO,     84) | 
|---|
| 117 | RELOC_NUMBER (R_PPC64_GOT_TLSLD16_HI,     85) | 
|---|
| 118 | RELOC_NUMBER (R_PPC64_GOT_TLSLD16_HA,     86) | 
|---|
| 119 | RELOC_NUMBER (R_PPC64_GOT_TPREL16_DS,     87) | 
|---|
| 120 | RELOC_NUMBER (R_PPC64_GOT_TPREL16_LO_DS,  88) | 
|---|
| 121 | RELOC_NUMBER (R_PPC64_GOT_TPREL16_HI,     89) | 
|---|
| 122 | RELOC_NUMBER (R_PPC64_GOT_TPREL16_HA,     90) | 
|---|
| 123 | RELOC_NUMBER (R_PPC64_GOT_DTPREL16_DS,    91) | 
|---|
| 124 | RELOC_NUMBER (R_PPC64_GOT_DTPREL16_LO_DS, 92) | 
|---|
| 125 | RELOC_NUMBER (R_PPC64_GOT_DTPREL16_HI,    93) | 
|---|
| 126 | RELOC_NUMBER (R_PPC64_GOT_DTPREL16_HA,    94) | 
|---|
| 127 | RELOC_NUMBER (R_PPC64_TPREL16_DS,         95) | 
|---|
| 128 | RELOC_NUMBER (R_PPC64_TPREL16_LO_DS,      96) | 
|---|
| 129 | RELOC_NUMBER (R_PPC64_TPREL16_HIGHER,     97) | 
|---|
| 130 | RELOC_NUMBER (R_PPC64_TPREL16_HIGHERA,    98) | 
|---|
| 131 | RELOC_NUMBER (R_PPC64_TPREL16_HIGHEST,    99) | 
|---|
| 132 | RELOC_NUMBER (R_PPC64_TPREL16_HIGHESTA,  100) | 
|---|
| 133 | RELOC_NUMBER (R_PPC64_DTPREL16_DS,       101) | 
|---|
| 134 | RELOC_NUMBER (R_PPC64_DTPREL16_LO_DS,    102) | 
|---|
| 135 | RELOC_NUMBER (R_PPC64_DTPREL16_HIGHER,   103) | 
|---|
| 136 | RELOC_NUMBER (R_PPC64_DTPREL16_HIGHERA,  104) | 
|---|
| 137 | RELOC_NUMBER (R_PPC64_DTPREL16_HIGHEST,  105) | 
|---|
| 138 | RELOC_NUMBER (R_PPC64_DTPREL16_HIGHESTA, 106) | 
|---|
| 139 |  | 
|---|
| 140 | /* These are GNU extensions to enable C++ vtable garbage collection.  */ | 
|---|
| 141 | RELOC_NUMBER (R_PPC64_GNU_VTINHERIT,     253) | 
|---|
| 142 | RELOC_NUMBER (R_PPC64_GNU_VTENTRY,       254) | 
|---|
| 143 |  | 
|---|
| 144 | END_RELOC_NUMBERS (R_PPC64_max) | 
|---|
| 145 |  | 
|---|
| 146 | #define IS_PPC64_TLS_RELOC(R) \ | 
|---|
| 147 | ((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA) | 
|---|
| 148 |  | 
|---|
| 149 | /* Specify the start of the .glink section.  */ | 
|---|
| 150 | #define DT_PPC64_GLINK          DT_LOPROC | 
|---|
| 151 |  | 
|---|
| 152 | /* Specify the start and size of the .opd section.  */ | 
|---|
| 153 | #define DT_PPC64_OPD            (DT_LOPROC + 1) | 
|---|
| 154 | #define DT_PPC64_OPDSZ          (DT_LOPROC + 2) | 
|---|
| 155 |  | 
|---|
| 156 | #endif /* _ELF_PPC64_H */ | 
|---|