1 /* BFD PowerPC CPU definition 2 Copyright (C) 1994-2014 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 28 static const bfd_arch_info_type * 29 powerpc_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 return bfd_default_compatible (a, b); 39 case bfd_arch_rs6000: 40 if (b->mach == bfd_mach_rs6k) 41 return a; 42 return NULL; 43 } 44 /*NOTREACHED*/ 45 } 46 47 const bfd_arch_info_type bfd_powerpc_archs[] = 48 { 49 #if BFD_DEFAULT_TARGET_SIZE == 64 50 /* Default arch must come first. */ 51 { 52 64, /* 64 bits in a word */ 53 64, /* 64 bits in an address */ 54 8, /* 8 bits in a byte */ 55 bfd_arch_powerpc, 56 bfd_mach_ppc64, 57 "powerpc", 58 "powerpc:common64", 59 3, 60 TRUE, /* default for 64 bit target */ 61 powerpc_compatible, 62 bfd_default_scan, 63 bfd_arch_default_fill, 64 &bfd_powerpc_archs[1] 65 }, 66 /* elf32-ppc:ppc_elf_object_p relies on the default 32 bit arch 67 being immediately after the 64 bit default. */ 68 { 69 32, /* 32 bits in a word */ 70 32, /* 32 bits in an address */ 71 8, /* 8 bits in a byte */ 72 bfd_arch_powerpc, 73 bfd_mach_ppc, /* for the POWER/PowerPC common architecture */ 74 "powerpc", 75 "powerpc:common", 76 3, 77 FALSE, 78 powerpc_compatible, 79 bfd_default_scan, 80 bfd_arch_default_fill, 81 &bfd_powerpc_archs[2], 82 }, 83 #else 84 /* Default arch must come first. */ 85 { 86 32, /* 32 bits in a word */ 87 32, /* 32 bits in an address */ 88 8, /* 8 bits in a byte */ 89 bfd_arch_powerpc, 90 bfd_mach_ppc, /* for the POWER/PowerPC common architecture */ 91 "powerpc", 92 "powerpc:common", 93 3, 94 TRUE, /* default for 32 bit target */ 95 powerpc_compatible, 96 bfd_default_scan, 97 bfd_arch_default_fill, 98 &bfd_powerpc_archs[1], 99 }, 100 /* elf64-ppc:ppc64_elf_object_p relies on the default 64 bit arch 101 being immediately after the 32 bit default. */ 102 { 103 64, /* 64 bits in a word */ 104 64, /* 64 bits in an address */ 105 8, /* 8 bits in a byte */ 106 bfd_arch_powerpc, 107 bfd_mach_ppc64, 108 "powerpc", 109 "powerpc:common64", 110 3, 111 FALSE, 112 powerpc_compatible, 113 bfd_default_scan, 114 bfd_arch_default_fill, 115 &bfd_powerpc_archs[2] 116 }, 117 #endif 118 { 119 32, /* 32 bits in a word */ 120 32, /* 32 bits in an address */ 121 8, /* 8 bits in a byte */ 122 bfd_arch_powerpc, 123 bfd_mach_ppc_603, 124 "powerpc", 125 "powerpc:603", 126 3, 127 FALSE, /* not the default */ 128 powerpc_compatible, 129 bfd_default_scan, 130 bfd_arch_default_fill, 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_arch_default_fill, 146 &bfd_powerpc_archs[4] 147 }, 148 { 149 32, /* 32 bits in a word */ 150 32, /* 32 bits in an address */ 151 8, /* 8 bits in a byte */ 152 bfd_arch_powerpc, 153 bfd_mach_ppc_604, 154 "powerpc", 155 "powerpc:604", 156 3, 157 FALSE, /* not the default */ 158 powerpc_compatible, 159 bfd_default_scan, 160 bfd_arch_default_fill, 161 &bfd_powerpc_archs[5] 162 }, 163 { 164 32, /* 32 bits in a word */ 165 32, /* 32 bits in an address */ 166 8, /* 8 bits in a byte */ 167 bfd_arch_powerpc, 168 bfd_mach_ppc_403, 169 "powerpc", 170 "powerpc:403", 171 3, 172 FALSE, /* not the default */ 173 powerpc_compatible, 174 bfd_default_scan, 175 bfd_arch_default_fill, 176 &bfd_powerpc_archs[6] 177 }, 178 { 179 32, /* 32 bits in a word */ 180 32, /* 32 bits in an address */ 181 8, /* 8 bits in a byte */ 182 bfd_arch_powerpc, 183 bfd_mach_ppc_601, 184 "powerpc", 185 "powerpc:601", 186 3, 187 FALSE, /* not the default */ 188 powerpc_compatible, 189 bfd_default_scan, 190 bfd_arch_default_fill, 191 &bfd_powerpc_archs[7] 192 }, 193 { 194 64, /* 64 bits in a word */ 195 64, /* 64 bits in an address */ 196 8, /* 8 bits in a byte */ 197 bfd_arch_powerpc, 198 bfd_mach_ppc_620, 199 "powerpc", 200 "powerpc:620", 201 3, 202 FALSE, /* not the default */ 203 powerpc_compatible, 204 bfd_default_scan, 205 bfd_arch_default_fill, 206 &bfd_powerpc_archs[8] 207 }, 208 { 209 64, /* 64 bits in a word */ 210 64, /* 64 bits in an address */ 211 8, /* 8 bits in a byte */ 212 bfd_arch_powerpc, 213 bfd_mach_ppc_630, 214 "powerpc", 215 "powerpc:630", 216 3, 217 FALSE, /* not the default */ 218 powerpc_compatible, 219 bfd_default_scan, 220 bfd_arch_default_fill, 221 &bfd_powerpc_archs[9] 222 }, 223 { 224 64, /* 64 bits in a word */ 225 64, /* 64 bits in an address */ 226 8, /* 8 bits in a byte */ 227 bfd_arch_powerpc, 228 bfd_mach_ppc_a35, 229 "powerpc", 230 "powerpc:a35", 231 3, 232 FALSE, /* not the default */ 233 powerpc_compatible, 234 bfd_default_scan, 235 bfd_arch_default_fill, 236 &bfd_powerpc_archs[10] 237 }, 238 { 239 64, /* 64 bits in a word */ 240 64, /* 64 bits in an address */ 241 8, /* 8 bits in a byte */ 242 bfd_arch_powerpc, 243 bfd_mach_ppc_rs64ii, 244 "powerpc", 245 "powerpc:rs64ii", 246 3, 247 FALSE, /* not the default */ 248 powerpc_compatible, 249 bfd_default_scan, 250 bfd_arch_default_fill, 251 &bfd_powerpc_archs[11] 252 }, 253 { 254 64, /* 64 bits in a word */ 255 64, /* 64 bits in an address */ 256 8, /* 8 bits in a byte */ 257 bfd_arch_powerpc, 258 bfd_mach_ppc_rs64iii, 259 "powerpc", 260 "powerpc:rs64iii", 261 3, 262 FALSE, /* not the default */ 263 powerpc_compatible, 264 bfd_default_scan, 265 bfd_arch_default_fill, 266 &bfd_powerpc_archs[12] 267 }, 268 { 269 32, /* 32 bits in a word */ 270 32, /* 32 bits in an address */ 271 8, /* 8 bits in a byte */ 272 bfd_arch_powerpc, 273 bfd_mach_ppc_7400, 274 "powerpc", 275 "powerpc:7400", 276 3, 277 FALSE, /* not the default */ 278 powerpc_compatible, 279 bfd_default_scan, 280 bfd_arch_default_fill, 281 &bfd_powerpc_archs[13] 282 }, 283 { 284 32, /* 32 bits in a word */ 285 32, /* 32 bits in an address */ 286 8, /* 8 bits in a byte */ 287 bfd_arch_powerpc, 288 bfd_mach_ppc_e500, 289 "powerpc", 290 "powerpc:e500", 291 3, 292 FALSE, 293 powerpc_compatible, 294 bfd_default_scan, 295 bfd_arch_default_fill, 296 &bfd_powerpc_archs[14] 297 }, 298 { 299 32, /* 32 bits in a word */ 300 32, /* 32 bits in an address */ 301 8, /* 8 bits in a byte */ 302 bfd_arch_powerpc, 303 bfd_mach_ppc_e500mc, 304 "powerpc", 305 "powerpc:e500mc", 306 3, 307 FALSE, /* not the default */ 308 powerpc_compatible, 309 bfd_default_scan, 310 bfd_arch_default_fill, 311 &bfd_powerpc_archs[15] 312 }, 313 { 314 64, /* 64 bits in a word */ 315 64, /* 64 bits in an address */ 316 8, /* 8 bits in a byte */ 317 bfd_arch_powerpc, 318 bfd_mach_ppc_e500mc64, 319 "powerpc", 320 "powerpc:e500mc64", 321 3, 322 FALSE, /* not the default */ 323 powerpc_compatible, 324 bfd_default_scan, 325 bfd_arch_default_fill, 326 &bfd_powerpc_archs[16] 327 }, 328 { 329 32, /* 32 bits in a word */ 330 32, /* 32 bits in an address */ 331 8, /* 8 bits in a byte */ 332 bfd_arch_powerpc, 333 bfd_mach_ppc_860, 334 "powerpc", 335 "powerpc:MPC8XX", 336 3, 337 FALSE, /* not the default */ 338 powerpc_compatible, 339 bfd_default_scan, 340 bfd_arch_default_fill, 341 &bfd_powerpc_archs[17] 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_750, 349 "powerpc", 350 "powerpc:750", 351 3, 352 FALSE, /* not the default */ 353 powerpc_compatible, 354 bfd_default_scan, 355 bfd_arch_default_fill, 356 &bfd_powerpc_archs[18] 357 }, 358 { 359 32, /* 32 bits in a word */ 360 32, /* 32 bits in an address */ 361 8, /* 8 bits in a byte */ 362 bfd_arch_powerpc, 363 bfd_mach_ppc_titan, 364 "powerpc", 365 "powerpc:titan", 366 3, 367 FALSE, /* not the default */ 368 powerpc_compatible, 369 bfd_default_scan, 370 bfd_arch_default_fill, 371 &bfd_powerpc_archs[19] 372 }, 373 { 374 16, /* 16 or 32 bits in a word */ 375 32, /* 32 bits in an address */ 376 8, /* 8 bits in a byte */ 377 bfd_arch_powerpc, 378 bfd_mach_ppc_vle, 379 "powerpc", 380 "powerpc:vle", 381 3, 382 FALSE, /* not the default */ 383 powerpc_compatible, 384 bfd_default_scan, 385 bfd_arch_default_fill, 386 &bfd_powerpc_archs[20] 387 }, 388 { 389 64, /* 64 bits in a word */ 390 64, /* 64 bits in an address */ 391 8, /* 8 bits in a byte */ 392 bfd_arch_powerpc, 393 bfd_mach_ppc_e5500, 394 "powerpc", 395 "powerpc:e5500", 396 3, 397 FALSE, /* not the default */ 398 powerpc_compatible, 399 bfd_default_scan, 400 bfd_arch_default_fill, 401 &bfd_powerpc_archs[21] 402 }, 403 { 404 64, /* 64 bits in a word */ 405 64, /* 64 bits in an address */ 406 8, /* 8 bits in a byte */ 407 bfd_arch_powerpc, 408 bfd_mach_ppc_e6500, 409 "powerpc", 410 "powerpc:e6500", 411 3, 412 FALSE, /* not the default */ 413 powerpc_compatible, 414 bfd_default_scan, 415 bfd_arch_default_fill, 416 0 417 } 418 }; 419