160484Sobrien/* BFD PowerPC CPU definition 2218822Sdim Copyright 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2007 391041Sobrien Free Software Foundation, Inc. 460484Sobrien Contributed by Ian Lance Taylor, Cygnus Support. 560484Sobrien 660484SobrienThis file is part of BFD, the Binary File Descriptor library. 760484Sobrien 860484SobrienThis program is free software; you can redistribute it and/or modify 960484Sobrienit under the terms of the GNU General Public License as published by 1060484Sobrienthe Free Software Foundation; either version 2 of the License, or 1160484Sobrien(at your option) any later version. 1260484Sobrien 1360484SobrienThis program is distributed in the hope that it will be useful, 1460484Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of 1560484SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1660484SobrienGNU General Public License for more details. 1760484Sobrien 1860484SobrienYou should have received a copy of the GNU General Public License 1960484Sobrienalong with this program; if not, write to the Free Software 20218822SdimFoundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 2160484Sobrien 22218822Sdim#include "sysdep.h" 2360484Sobrien#include "bfd.h" 2460484Sobrien#include "libbfd.h" 2560484Sobrien 2660484Sobrien/* The common PowerPC architecture is compatible with the RS/6000. */ 2760484Sobrien 2860484Sobrienstatic const bfd_arch_info_type *powerpc_compatible 2960484Sobrien PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *)); 3060484Sobrien 3160484Sobrienstatic const bfd_arch_info_type * 3260484Sobrienpowerpc_compatible (a,b) 3360484Sobrien const bfd_arch_info_type *a; 3460484Sobrien const bfd_arch_info_type *b; 3560484Sobrien{ 3660484Sobrien BFD_ASSERT (a->arch == bfd_arch_powerpc); 3760484Sobrien switch (b->arch) 3860484Sobrien { 3960484Sobrien default: 4060484Sobrien return NULL; 4160484Sobrien case bfd_arch_powerpc: 4260484Sobrien return bfd_default_compatible (a, b); 4360484Sobrien case bfd_arch_rs6000: 44130561Sobrien if (b->mach == bfd_mach_rs6k) 4560484Sobrien return a; 4660484Sobrien return NULL; 4760484Sobrien } 4860484Sobrien /*NOTREACHED*/ 4960484Sobrien} 5060484Sobrien 5191041Sobrienconst bfd_arch_info_type bfd_powerpc_archs[] = 5260484Sobrien{ 53104834Sobrien#if BFD_DEFAULT_TARGET_SIZE == 64 54104834Sobrien /* Default arch must come first. */ 5560484Sobrien { 5699461Sobrien 64, /* 64 bits in a word */ 5799461Sobrien 64, /* 64 bits in an address */ 5899461Sobrien 8, /* 8 bits in a byte */ 5999461Sobrien bfd_arch_powerpc, 6099461Sobrien bfd_mach_ppc64, 6199461Sobrien "powerpc", 6299461Sobrien "powerpc:common64", 6399461Sobrien 3, 64130561Sobrien TRUE, /* default for 64 bit target */ 6599461Sobrien powerpc_compatible, 6699461Sobrien bfd_default_scan, 6799461Sobrien &bfd_powerpc_archs[1] 6899461Sobrien }, 69104834Sobrien /* elf32-ppc:ppc_elf_object_p relies on the default 32 bit arch 70104834Sobrien being immediately after the 64 bit default. */ 7199461Sobrien { 7260484Sobrien 32, /* 32 bits in a word */ 7360484Sobrien 32, /* 32 bits in an address */ 7460484Sobrien 8, /* 8 bits in a byte */ 7560484Sobrien bfd_arch_powerpc, 7699461Sobrien bfd_mach_ppc, /* for the POWER/PowerPC common architecture */ 7799461Sobrien "powerpc", 7899461Sobrien "powerpc:common", 7999461Sobrien 3, 80130561Sobrien FALSE, 8199461Sobrien powerpc_compatible, 8299461Sobrien bfd_default_scan, 8399461Sobrien &bfd_powerpc_archs[2], 8499461Sobrien }, 8599461Sobrien#else 86104834Sobrien /* Default arch must come first. */ 8799461Sobrien { 8899461Sobrien 32, /* 32 bits in a word */ 8999461Sobrien 32, /* 32 bits in an address */ 9099461Sobrien 8, /* 8 bits in a byte */ 9199461Sobrien bfd_arch_powerpc, 9299461Sobrien bfd_mach_ppc, /* for the POWER/PowerPC common architecture */ 9399461Sobrien "powerpc", 9499461Sobrien "powerpc:common", 9599461Sobrien 3, 96130561Sobrien TRUE, /* default for 32 bit target */ 9799461Sobrien powerpc_compatible, 9899461Sobrien bfd_default_scan, 9999461Sobrien &bfd_powerpc_archs[1], 10099461Sobrien }, 101104834Sobrien /* elf64-ppc:ppc64_elf_object_p relies on the default 64 bit arch 102104834Sobrien being immediately after the 32 bit default. */ 10399461Sobrien { 10499461Sobrien 64, /* 64 bits in a word */ 10599461Sobrien 64, /* 64 bits in an address */ 10699461Sobrien 8, /* 8 bits in a byte */ 10799461Sobrien bfd_arch_powerpc, 10899461Sobrien bfd_mach_ppc64, 10999461Sobrien "powerpc", 11099461Sobrien "powerpc:common64", 11199461Sobrien 3, 112130561Sobrien FALSE, 11399461Sobrien powerpc_compatible, 11499461Sobrien bfd_default_scan, 11599461Sobrien &bfd_powerpc_archs[2] 11699461Sobrien }, 11799461Sobrien#endif 11899461Sobrien { 11999461Sobrien 32, /* 32 bits in a word */ 12099461Sobrien 32, /* 32 bits in an address */ 12199461Sobrien 8, /* 8 bits in a byte */ 12299461Sobrien bfd_arch_powerpc, 12377298Sobrien bfd_mach_ppc_603, 12460484Sobrien "powerpc", 12560484Sobrien "powerpc:603", 12660484Sobrien 3, 127130561Sobrien FALSE, /* not the default */ 12877298Sobrien powerpc_compatible, 12960484Sobrien bfd_default_scan, 13099461Sobrien &bfd_powerpc_archs[3] 13160484Sobrien }, 13260484Sobrien { 13360484Sobrien 32, /* 32 bits in a word */ 13460484Sobrien 32, /* 32 bits in an address */ 13560484Sobrien 8, /* 8 bits in a byte */ 13660484Sobrien bfd_arch_powerpc, 13777298Sobrien bfd_mach_ppc_ec603e, 13860484Sobrien "powerpc", 13977298Sobrien "powerpc:EC603e", 14060484Sobrien 3, 141130561Sobrien FALSE, /* not the default */ 14277298Sobrien powerpc_compatible, 14360484Sobrien bfd_default_scan, 14499461Sobrien &bfd_powerpc_archs[4] 14560484Sobrien }, 14660484Sobrien { 14760484Sobrien 32, /* 32 bits in a word */ 14860484Sobrien 32, /* 32 bits in an address */ 14960484Sobrien 8, /* 8 bits in a byte */ 15060484Sobrien bfd_arch_powerpc, 15177298Sobrien bfd_mach_ppc_604, 15260484Sobrien "powerpc", 15377298Sobrien "powerpc:604", 15460484Sobrien 3, 155130561Sobrien FALSE, /* not the default */ 15677298Sobrien powerpc_compatible, 15760484Sobrien bfd_default_scan, 15899461Sobrien &bfd_powerpc_archs[5] 15960484Sobrien }, 16060484Sobrien { 16160484Sobrien 32, /* 32 bits in a word */ 16260484Sobrien 32, /* 32 bits in an address */ 16360484Sobrien 8, /* 8 bits in a byte */ 16460484Sobrien bfd_arch_powerpc, 16577298Sobrien bfd_mach_ppc_403, 16660484Sobrien "powerpc", 16777298Sobrien "powerpc:403", 16877298Sobrien 3, 169130561Sobrien FALSE, /* not the default */ 17077298Sobrien powerpc_compatible, 17177298Sobrien bfd_default_scan, 17299461Sobrien &bfd_powerpc_archs[6] 17377298Sobrien }, 17477298Sobrien { 17577298Sobrien 32, /* 32 bits in a word */ 17677298Sobrien 32, /* 32 bits in an address */ 17777298Sobrien 8, /* 8 bits in a byte */ 17877298Sobrien bfd_arch_powerpc, 17977298Sobrien bfd_mach_ppc_601, 18077298Sobrien "powerpc", 18160484Sobrien "powerpc:601", 18260484Sobrien 3, 183130561Sobrien FALSE, /* not the default */ 18477298Sobrien powerpc_compatible, 18560484Sobrien bfd_default_scan, 18699461Sobrien &bfd_powerpc_archs[7] 18777298Sobrien }, 18877298Sobrien { 18977298Sobrien 64, /* 64 bits in a word */ 19077298Sobrien 64, /* 64 bits in an address */ 19177298Sobrien 8, /* 8 bits in a byte */ 19277298Sobrien bfd_arch_powerpc, 19377298Sobrien bfd_mach_ppc_620, 19477298Sobrien "powerpc", 19577298Sobrien "powerpc:620", 19677298Sobrien 3, 197130561Sobrien FALSE, /* not the default */ 19877298Sobrien powerpc_compatible, 19977298Sobrien bfd_default_scan, 20099461Sobrien &bfd_powerpc_archs[8] 20177298Sobrien }, 20277298Sobrien { 20377298Sobrien 64, /* 64 bits in a word */ 20477298Sobrien 64, /* 64 bits in an address */ 20577298Sobrien 8, /* 8 bits in a byte */ 20677298Sobrien bfd_arch_powerpc, 20777298Sobrien bfd_mach_ppc_630, 20877298Sobrien "powerpc", 20977298Sobrien "powerpc:630", 21077298Sobrien 3, 211130561Sobrien FALSE, /* not the default */ 21277298Sobrien powerpc_compatible, 21377298Sobrien bfd_default_scan, 21499461Sobrien &bfd_powerpc_archs[9] 21577298Sobrien }, 21677298Sobrien { 21777298Sobrien 64, /* 64 bits in a word */ 21877298Sobrien 64, /* 64 bits in an address */ 21977298Sobrien 8, /* 8 bits in a byte */ 22077298Sobrien bfd_arch_powerpc, 22177298Sobrien bfd_mach_ppc_a35, 22277298Sobrien "powerpc", 22377298Sobrien "powerpc:a35", 22477298Sobrien 3, 225130561Sobrien FALSE, /* not the default */ 22677298Sobrien powerpc_compatible, 22777298Sobrien bfd_default_scan, 22899461Sobrien &bfd_powerpc_archs[10] 22977298Sobrien }, 23077298Sobrien { 23177298Sobrien 64, /* 64 bits in a word */ 23277298Sobrien 64, /* 64 bits in an address */ 23377298Sobrien 8, /* 8 bits in a byte */ 23477298Sobrien bfd_arch_powerpc, 23577298Sobrien bfd_mach_ppc_rs64ii, 23677298Sobrien "powerpc", 23777298Sobrien "powerpc:rs64ii", 23877298Sobrien 3, 239130561Sobrien FALSE, /* not the default */ 24077298Sobrien powerpc_compatible, 24177298Sobrien bfd_default_scan, 24299461Sobrien &bfd_powerpc_archs[11] 24377298Sobrien }, 24477298Sobrien { 24577298Sobrien 64, /* 64 bits in a word */ 24677298Sobrien 64, /* 64 bits in an address */ 24777298Sobrien 8, /* 8 bits in a byte */ 24877298Sobrien bfd_arch_powerpc, 24977298Sobrien bfd_mach_ppc_rs64iii, 25077298Sobrien "powerpc", 25177298Sobrien "powerpc:rs64iii", 25277298Sobrien 3, 253130561Sobrien FALSE, /* not the default */ 25477298Sobrien powerpc_compatible, 25577298Sobrien bfd_default_scan, 25699461Sobrien &bfd_powerpc_archs[12] 25777298Sobrien }, 25877298Sobrien { 25977298Sobrien 32, /* 32 bits in a word */ 26077298Sobrien 32, /* 32 bits in an address */ 26177298Sobrien 8, /* 8 bits in a byte */ 26277298Sobrien bfd_arch_powerpc, 26377298Sobrien bfd_mach_ppc_7400, 26477298Sobrien "powerpc", 26577298Sobrien "powerpc:7400", 26677298Sobrien 3, 267130561Sobrien FALSE, /* not the default */ 26877298Sobrien powerpc_compatible, 26977298Sobrien bfd_default_scan, 27099461Sobrien &bfd_powerpc_archs[13] 27177298Sobrien }, 27277298Sobrien { 273130561Sobrien 32, /* 32 bits in a word */ 274130561Sobrien 32, /* 32 bits in an address */ 275130561Sobrien 8, /* 8 bits in a byte */ 276130561Sobrien bfd_arch_powerpc, 277130561Sobrien bfd_mach_ppc_e500, 278130561Sobrien "powerpc", 279130561Sobrien "powerpc:e500", 280130561Sobrien 3, 281130561Sobrien FALSE, 282130561Sobrien powerpc_compatible, 283130561Sobrien bfd_default_scan, 284130561Sobrien &bfd_powerpc_archs[14] 285130561Sobrien }, 286130561Sobrien { 28777298Sobrien 32, /* 32 bits in a word */ 28877298Sobrien 32, /* 32 bits in an address */ 28977298Sobrien 8, /* 8 bits in a byte */ 29077298Sobrien bfd_arch_powerpc, 29177298Sobrien bfd_mach_ppc_860, 29277298Sobrien "powerpc", 29377298Sobrien "powerpc:MPC8XX", 29477298Sobrien 3, 295130561Sobrien FALSE, /* not the default */ 29677298Sobrien powerpc_compatible, 29777298Sobrien bfd_default_scan, 298218822Sdim &bfd_powerpc_archs[15] 299218822Sdim }, 300218822Sdim { 301218822Sdim 32, /* 32 bits in a word */ 302218822Sdim 32, /* 32 bits in an address */ 303218822Sdim 8, /* 8 bits in a byte */ 304218822Sdim bfd_arch_powerpc, 305218822Sdim bfd_mach_ppc_750, 306218822Sdim "powerpc", 307218822Sdim "powerpc:750", 308218822Sdim 3, 309218822Sdim FALSE, /* not the default */ 310218822Sdim powerpc_compatible, 311218822Sdim bfd_default_scan, 31291041Sobrien 0 31391041Sobrien } 31491041Sobrien}; 315