1 // powerpc.h -- ELF definitions specific to EM_PPC and EM_PPC64 -*- C++ -*- 2 3 // Copyright 2008, 2010 Free Software Foundation, Inc. 4 // Written by David S. Miller <davem@davemloft.net>. 5 6 // This file is part of elfcpp. 7 8 // This program is free software; you can redistribute it and/or 9 // modify it under the terms of the GNU Library General Public License 10 // as published by the Free Software Foundation; either version 2, or 11 // (at your option) any later version. 12 13 // In addition to the permissions in the GNU Library General Public 14 // License, the Free Software Foundation gives you unlimited 15 // permission to link the compiled version of this file into 16 // combinations with other programs, and to distribute those 17 // combinations without any restriction coming from the use of this 18 // file. (The Library Public License restrictions do apply in other 19 // respects; for example, they cover modification of the file, and 20 /// distribution when not linked into a combined executable.) 21 22 // This program is distributed in the hope that it will be useful, but 23 // WITHOUT ANY WARRANTY; without even the implied warranty of 24 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 25 // Library General Public License for more details. 26 27 // You should have received a copy of the GNU Library General Public 28 // License along with this program; if not, write to the Free Software 29 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 30 // 02110-1301, USA. 31 32 #ifndef ELFCPP_POWERPC_H 33 #define ELFCPP_POWERPC_H 34 35 namespace elfcpp 36 { 37 38 // The relocation numbers for 32-bit and 64-bit powerpc are nearly 39 // identical. Therefore I've adopted the convention of using 40 // R_POWERPC_foo for values which are the same in R_PPC_* and R_PPC64_*. 41 // For relocations which are specific to the word size I will use 42 // R_PPC_foo or R_PPC64_foo. 43 enum 44 { 45 R_POWERPC_NONE = 0, 46 R_POWERPC_ADDR32 = 1, 47 R_POWERPC_ADDR24 = 2, 48 R_POWERPC_ADDR16 = 3, 49 R_POWERPC_ADDR16_LO = 4, 50 R_POWERPC_ADDR16_HI = 5, 51 R_POWERPC_ADDR16_HA = 6, 52 R_POWERPC_ADDR14 = 7, 53 R_POWERPC_ADDR14_BRTAKEN = 8, 54 R_POWERPC_ADDR14_BRNTAKEN = 9, 55 R_POWERPC_REL24 = 10, 56 R_POWERPC_REL14 = 11, 57 R_POWERPC_REL14_BRTAKEN = 12, 58 R_POWERPC_REL14_BRNTAKEN = 13, 59 R_POWERPC_GOT16 = 14, 60 R_POWERPC_GOT16_LO = 15, 61 R_POWERPC_GOT16_HI = 16, 62 R_POWERPC_GOT16_HA = 17, 63 R_PPC_PLTREL24 = 18, 64 R_POWERPC_COPY = 19, 65 R_POWERPC_GLOB_DAT = 20, 66 R_POWERPC_JMP_SLOT = 21, 67 R_POWERPC_RELATIVE = 22, 68 R_PPC_LOCAL24PC = 23, 69 R_POWERPC_UADDR32 = 24, 70 R_POWERPC_UADDR16 = 25, 71 R_POWERPC_REL32 = 26, 72 R_POWERPC_PLT32 = 27, 73 R_POWERPC_PLTREL32 = 28, 74 R_POWERPC_PLT16_LO = 29, 75 R_POWERPC_PLT16_HI = 30, 76 R_POWERPC_PLT16_HA = 31, 77 R_PPC_SDAREL16 = 32, 78 R_POWERPC_SECTOFF = 33, 79 R_POWERPC_SECTOFF_LO = 34, 80 R_POWERPC_SECTOFF_HI = 35, 81 R_POWERPC_SECTOFF_HA = 36, 82 R_POWERPC_ADDR30 = 37, 83 R_PPC64_ADDR64 = 38, 84 R_PPC64_ADDR16_HIGHER = 39, 85 R_PPC64_ADDR16_HIGHERA = 40, 86 R_PPC64_ADDR16_HIGHEST = 41, 87 R_PPC64_ADDR16_HIGHESTA = 42, 88 R_PPC64_UADDR64 = 43, 89 R_PPC64_REL64 = 44, 90 R_PPC64_PLT64 = 45, 91 R_PPC64_PLTREL64 = 46, 92 R_PPC64_TOC16 = 47, 93 R_PPC64_TOC16_LO = 48, 94 R_PPC64_TOC16_HI = 49, 95 R_PPC64_TOC16_HA = 50, 96 R_PPC64_TOC = 51, 97 R_PPC64_PLTGOT16 = 52, 98 R_PPC64_PLTGOT16_LO = 53, 99 R_PPC64_PLTGOT16_HI = 54, 100 R_PPC64_PLTGOT16_HA = 55, 101 R_PPC64_ADDR16_DS = 56, 102 R_PPC64_ADDR16_LO_DS = 57, 103 R_PPC64_GOT16_DS = 58, 104 R_PPC64_GOT16_LO_DS = 59, 105 R_PPC64_PLT16_LO_DS = 60, 106 R_PPC64_SECTOFF_DS = 61, 107 R_PPC64_SECTOFF_LO_DS = 62, 108 R_PPC64_TOC16_DS = 63, 109 R_PPC64_TOC16_LO_DS = 64, 110 R_PPC64_PLTGOT16_DS = 65, 111 R_PPC64_PLTGOT16_LO_DS = 66, 112 R_POWERPC_TLS = 67, 113 R_POWERPC_DTPMOD = 68, 114 R_POWERPC_TPREL16 = 69, 115 R_POWERPC_TPREL16_LO = 70, 116 R_POWERPC_TPREL16_HI = 71, 117 R_POWERPC_TPREL16_HA = 72, 118 R_POWERPC_TPREL = 73, 119 R_POWERPC_DTPREL16 = 74, 120 R_POWERPC_DTPREL16_LO = 75, 121 R_POWERPC_DTPREL16_HI = 76, 122 R_POWERPC_DTPREL16_HA = 77, 123 R_POWERPC_DTPREL = 78, 124 R_POWERPC_GOT_TLSGD16 = 79, 125 R_POWERPC_GOT_TLSGD16_LO = 80, 126 R_POWERPC_GOT_TLSGD16_HI = 81, 127 R_POWERPC_GOT_TLSGD16_HA = 82, 128 R_POWERPC_GOT_TLSLD16 = 83, 129 R_POWERPC_GOT_TLSLD16_LO = 84, 130 R_POWERPC_GOT_TLSLD16_HI = 85, 131 R_POWERPC_GOT_TLSLD16_HA = 86, 132 R_POWERPC_GOT_TPREL16 = 87, 133 R_POWERPC_GOT_TPREL16_LO = 88, 134 R_POWERPC_GOT_TPREL16_HI = 89, 135 R_POWERPC_GOT_TPREL16_HA = 90, 136 R_POWERPC_GOT_DTPREL16 = 91, 137 R_POWERPC_GOT_DTPREL16_LO = 92, 138 R_POWERPC_GOT_DTPREL16_HI = 93, 139 R_POWERPC_GOT_DTPREL16_HA = 94, 140 R_PPC64_TPREL16_DS = 95, 141 R_PPC64_TPREL16_LO_DS = 96, 142 R_PPC64_TPREL16_HIGHER = 97, 143 R_PPC64_TPREL16_HIGHERA = 98, 144 R_PPC64_TPREL16_HIGHEST = 99, 145 R_PPC64_TPREL16_HIGHESTA = 100, 146 R_PPC64_DTPREL16_DS = 101, 147 R_PPC64_DTPREL16_LO_DS = 102, 148 R_PPC64_DTPREL16_HIGHER = 103, 149 R_PPC64_DTPREL16_HIGHERA = 104, 150 R_PPC64_DTPREL16_HIGHEST = 105, 151 R_PPC64_DTPREL16_HIGHESTA = 106, 152 R_PPC_EMB_NADDR32 = 101, 153 R_PPC_EMB_NADDR16 = 102, 154 R_PPC_EMB_NADDR16_LO = 103, 155 R_PPC_EMB_NADDR16_HI = 104, 156 R_PPC_EMB_NADDR16_HA = 105, 157 R_PPC_EMB_SDAI16 = 106, 158 R_PPC_EMB_SDA2I16 = 107, 159 R_PPC_EMB_SDA2REL = 108, 160 R_PPC_EMB_SDA21 = 109, 161 R_PPC_EMB_MRKREF = 110, 162 R_PPC_EMB_RELSEC16 = 111, 163 R_PPC_EMB_RELST_LO = 112, 164 R_PPC_EMB_RELST_HI = 113, 165 R_PPC_EMB_RELST_HA = 114, 166 R_PPC_EMB_BIT_FLD = 115, 167 R_PPC_EMB_RELSDA = 116, 168 169 R_POWERPC_IRELATIVE = 248, 170 R_PPC_REL16 = 249, 171 R_PPC_REL16_LO = 250, 172 R_PPC_REL16_HI = 251, 173 R_PPC_REL16_HA = 252, 174 R_POWERPC_GNU_VTINHERIT = 253, 175 R_POWERPC_GNU_VTENTRY = 254, 176 R_PPC_TOC16 = 255, 177 }; 178 179 // e_flags values defined for powerpc 180 enum 181 { 182 EF_PPC_EMB = 0x80000000, // PowerPC embedded flag. 183 EF_PPC_RELOCATABLE = 0x00010000, // PowerPC -mrelocatable flag. */ 184 EF_PPC_RELOCATABLE_LIB = 0x00008000, // PowerPC -mrelocatable-lib flag. */ 185 }; 186 187 } // End namespace elfcpp. 188 189 #endif // !defined(ELFCPP_POWERPC_H) 190