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