1/* BFD PowerPC CPU definition 2 Copyright 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2010 3 Free Software Foundation, Inc. 4 Contributed by Ian Lance Taylor, Cygnus Support. 5 6 This file is part of BFD, the Binary File Descriptor library. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 21 MA 02110-1301, USA. */ 22 23#include "sysdep.h" 24#include "bfd.h" 25#include "libbfd.h" 26 27/* The common PowerPC architecture is compatible with the RS/6000. */ 28 29static const bfd_arch_info_type *powerpc_compatible 30 PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *)); 31 32static const bfd_arch_info_type * 33powerpc_compatible (a,b) 34 const bfd_arch_info_type *a; 35 const bfd_arch_info_type *b; 36{ 37 BFD_ASSERT (a->arch == bfd_arch_powerpc); 38 switch (b->arch) 39 { 40 default: 41 return NULL; 42 case bfd_arch_powerpc: 43 return bfd_default_compatible (a, b); 44 case bfd_arch_rs6000: 45 if (b->mach == bfd_mach_rs6k) 46 return a; 47 return NULL; 48 } 49 /*NOTREACHED*/ 50} 51 52const bfd_arch_info_type bfd_powerpc_archs[] = 53{ 54#if BFD_DEFAULT_TARGET_SIZE == 64 55 /* Default arch must come first. */ 56 { 57 64, /* 64 bits in a word */ 58 64, /* 64 bits in an address */ 59 8, /* 8 bits in a byte */ 60 bfd_arch_powerpc, 61 bfd_mach_ppc64, 62 "powerpc", 63 "powerpc:common64", 64 3, 65 TRUE, /* default for 64 bit target */ 66 powerpc_compatible, 67 bfd_default_scan, 68 &bfd_powerpc_archs[1] 69 }, 70 /* elf32-ppc:ppc_elf_object_p relies on the default 32 bit arch 71 being immediately after the 64 bit default. */ 72 { 73 32, /* 32 bits in a word */ 74 32, /* 32 bits in an address */ 75 8, /* 8 bits in a byte */ 76 bfd_arch_powerpc, 77 bfd_mach_ppc, /* for the POWER/PowerPC common architecture */ 78 "powerpc", 79 "powerpc:common", 80 3, 81 FALSE, 82 powerpc_compatible, 83 bfd_default_scan, 84 &bfd_powerpc_archs[2], 85 }, 86#else 87 /* Default arch must come first. */ 88 { 89 32, /* 32 bits in a word */ 90 32, /* 32 bits in an address */ 91 8, /* 8 bits in a byte */ 92 bfd_arch_powerpc, 93 bfd_mach_ppc, /* for the POWER/PowerPC common architecture */ 94 "powerpc", 95 "powerpc:common", 96 3, 97 TRUE, /* default for 32 bit target */ 98 powerpc_compatible, 99 bfd_default_scan, 100 &bfd_powerpc_archs[1], 101 }, 102 /* elf64-ppc:ppc64_elf_object_p relies on the default 64 bit arch 103 being immediately after the 32 bit default. */ 104 { 105 64, /* 64 bits in a word */ 106 64, /* 64 bits in an address */ 107 8, /* 8 bits in a byte */ 108 bfd_arch_powerpc, 109 bfd_mach_ppc64, 110 "powerpc", 111 "powerpc:common64", 112 3, 113 FALSE, 114 powerpc_compatible, 115 bfd_default_scan, 116 &bfd_powerpc_archs[2] 117 }, 118#endif 119 { 120 32, /* 32 bits in a word */ 121 32, /* 32 bits in an address */ 122 8, /* 8 bits in a byte */ 123 bfd_arch_powerpc, 124 bfd_mach_ppc_603, 125 "powerpc", 126 "powerpc:603", 127 3, 128 FALSE, /* not the default */ 129 powerpc_compatible, 130 bfd_default_scan, 131 &bfd_powerpc_archs[3] 132 }, 133 { 134 32, /* 32 bits in a word */ 135 32, /* 32 bits in an address */ 136 8, /* 8 bits in a byte */ 137 bfd_arch_powerpc, 138 bfd_mach_ppc_ec603e, 139 "powerpc", 140 "powerpc:EC603e", 141 3, 142 FALSE, /* not the default */ 143 powerpc_compatible, 144 bfd_default_scan, 145 &bfd_powerpc_archs[4] 146 }, 147 { 148 32, /* 32 bits in a word */ 149 32, /* 32 bits in an address */ 150 8, /* 8 bits in a byte */ 151 bfd_arch_powerpc, 152 bfd_mach_ppc_604, 153 "powerpc", 154 "powerpc:604", 155 3, 156 FALSE, /* not the default */ 157 powerpc_compatible, 158 bfd_default_scan, 159 &bfd_powerpc_archs[5] 160 }, 161 { 162 32, /* 32 bits in a word */ 163 32, /* 32 bits in an address */ 164 8, /* 8 bits in a byte */ 165 bfd_arch_powerpc, 166 bfd_mach_ppc_403, 167 "powerpc", 168 "powerpc:403", 169 3, 170 FALSE, /* not the default */ 171 powerpc_compatible, 172 bfd_default_scan, 173 &bfd_powerpc_archs[6] 174 }, 175 { 176 32, /* 32 bits in a word */ 177 32, /* 32 bits in an address */ 178 8, /* 8 bits in a byte */ 179 bfd_arch_powerpc, 180 bfd_mach_ppc_601, 181 "powerpc", 182 "powerpc:601", 183 3, 184 FALSE, /* not the default */ 185 powerpc_compatible, 186 bfd_default_scan, 187 &bfd_powerpc_archs[7] 188 }, 189 { 190 64, /* 64 bits in a word */ 191 64, /* 64 bits in an address */ 192 8, /* 8 bits in a byte */ 193 bfd_arch_powerpc, 194 bfd_mach_ppc_620, 195 "powerpc", 196 "powerpc:620", 197 3, 198 FALSE, /* not the default */ 199 powerpc_compatible, 200 bfd_default_scan, 201 &bfd_powerpc_archs[8] 202 }, 203 { 204 64, /* 64 bits in a word */ 205 64, /* 64 bits in an address */ 206 8, /* 8 bits in a byte */ 207 bfd_arch_powerpc, 208 bfd_mach_ppc_630, 209 "powerpc", 210 "powerpc:630", 211 3, 212 FALSE, /* not the default */ 213 powerpc_compatible, 214 bfd_default_scan, 215 &bfd_powerpc_archs[9] 216 }, 217 { 218 64, /* 64 bits in a word */ 219 64, /* 64 bits in an address */ 220 8, /* 8 bits in a byte */ 221 bfd_arch_powerpc, 222 bfd_mach_ppc_a35, 223 "powerpc", 224 "powerpc:a35", 225 3, 226 FALSE, /* not the default */ 227 powerpc_compatible, 228 bfd_default_scan, 229 &bfd_powerpc_archs[10] 230 }, 231 { 232 64, /* 64 bits in a word */ 233 64, /* 64 bits in an address */ 234 8, /* 8 bits in a byte */ 235 bfd_arch_powerpc, 236 bfd_mach_ppc_rs64ii, 237 "powerpc", 238 "powerpc:rs64ii", 239 3, 240 FALSE, /* not the default */ 241 powerpc_compatible, 242 bfd_default_scan, 243 &bfd_powerpc_archs[11] 244 }, 245 { 246 64, /* 64 bits in a word */ 247 64, /* 64 bits in an address */ 248 8, /* 8 bits in a byte */ 249 bfd_arch_powerpc, 250 bfd_mach_ppc_rs64iii, 251 "powerpc", 252 "powerpc:rs64iii", 253 3, 254 FALSE, /* not the default */ 255 powerpc_compatible, 256 bfd_default_scan, 257 &bfd_powerpc_archs[12] 258 }, 259 { 260 32, /* 32 bits in a word */ 261 32, /* 32 bits in an address */ 262 8, /* 8 bits in a byte */ 263 bfd_arch_powerpc, 264 bfd_mach_ppc_7400, 265 "powerpc", 266 "powerpc:7400", 267 3, 268 FALSE, /* not the default */ 269 powerpc_compatible, 270 bfd_default_scan, 271 &bfd_powerpc_archs[13] 272 }, 273 { 274 32, /* 32 bits in a word */ 275 32, /* 32 bits in an address */ 276 8, /* 8 bits in a byte */ 277 bfd_arch_powerpc, 278 bfd_mach_ppc_e500, 279 "powerpc", 280 "powerpc:e500", 281 3, 282 FALSE, 283 powerpc_compatible, 284 bfd_default_scan, 285 &bfd_powerpc_archs[14] 286 }, 287 { 288 32, /* 32 bits in a word */ 289 32, /* 32 bits in an address */ 290 8, /* 8 bits in a byte */ 291 bfd_arch_powerpc, 292 bfd_mach_ppc_e500mc, 293 "powerpc", 294 "powerpc:e500mc", 295 3, 296 FALSE, /* not the default */ 297 powerpc_compatible, 298 bfd_default_scan, 299 &bfd_powerpc_archs[15] 300 }, 301 { 302 64, /* 64 bits in a word */ 303 64, /* 64 bits in an address */ 304 8, /* 8 bits in a byte */ 305 bfd_arch_powerpc, 306 bfd_mach_ppc_e500mc64, 307 "powerpc", 308 "powerpc:e500mc64", 309 3, 310 FALSE, /* not the default */ 311 powerpc_compatible, 312 bfd_default_scan, 313 &bfd_powerpc_archs[16] 314 }, 315 { 316 32, /* 32 bits in a word */ 317 32, /* 32 bits in an address */ 318 8, /* 8 bits in a byte */ 319 bfd_arch_powerpc, 320 bfd_mach_ppc_860, 321 "powerpc", 322 "powerpc:MPC8XX", 323 3, 324 FALSE, /* not the default */ 325 powerpc_compatible, 326 bfd_default_scan, 327 &bfd_powerpc_archs[17] 328 }, 329 { 330 32, /* 32 bits in a word */ 331 32, /* 32 bits in an address */ 332 8, /* 8 bits in a byte */ 333 bfd_arch_powerpc, 334 bfd_mach_ppc_750, 335 "powerpc", 336 "powerpc:750", 337 3, 338 FALSE, /* not the default */ 339 powerpc_compatible, 340 bfd_default_scan, 341 &bfd_powerpc_archs[18] 342 }, 343 { 344 32, /* 32 bits in a word */ 345 32, /* 32 bits in an address */ 346 8, /* 8 bits in a byte */ 347 bfd_arch_powerpc, 348 bfd_mach_ppc_titan, 349 "powerpc", 350 "powerpc:titan", 351 3, 352 FALSE, /* not the default */ 353 powerpc_compatible, 354 bfd_default_scan, 355 0 356 } 357}; 358