xref: /openbsd-src/gnu/usr.bin/binutils/bfd/cpu-powerpc.c (revision 007c2a4539b8b8aaa95c5e73e77620090abe113b)
12159047fSniklas /* BFD PowerPC CPU definition
2c074d1c9Sdrahn    Copyright 1994, 1995, 1996, 2000, 2001, 2002
3c074d1c9Sdrahn    Free Software Foundation, Inc.
42159047fSniklas    Contributed by Ian Lance Taylor, Cygnus Support.
52159047fSniklas 
62159047fSniklas This file is part of BFD, the Binary File Descriptor library.
72159047fSniklas 
82159047fSniklas This program is free software; you can redistribute it and/or modify
92159047fSniklas it under the terms of the GNU General Public License as published by
102159047fSniklas the Free Software Foundation; either version 2 of the License, or
112159047fSniklas (at your option) any later version.
122159047fSniklas 
132159047fSniklas This program is distributed in the hope that it will be useful,
142159047fSniklas but WITHOUT ANY WARRANTY; without even the implied warranty of
152159047fSniklas MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
162159047fSniklas GNU General Public License for more details.
172159047fSniklas 
182159047fSniklas You should have received a copy of the GNU General Public License
192159047fSniklas along with this program; if not, write to the Free Software
202159047fSniklas Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
212159047fSniklas 
222159047fSniklas #include "bfd.h"
232159047fSniklas #include "sysdep.h"
242159047fSniklas #include "libbfd.h"
252159047fSniklas 
262159047fSniklas /* The common PowerPC architecture is compatible with the RS/6000.  */
272159047fSniklas 
282159047fSniklas static const bfd_arch_info_type *powerpc_compatible
292159047fSniklas   PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
302159047fSniklas 
312159047fSniklas static const bfd_arch_info_type *
powerpc_compatible(a,b)322159047fSniklas powerpc_compatible (a,b)
332159047fSniklas      const bfd_arch_info_type *a;
342159047fSniklas      const bfd_arch_info_type *b;
352159047fSniklas {
362159047fSniklas   BFD_ASSERT (a->arch == bfd_arch_powerpc);
372159047fSniklas   switch (b->arch)
382159047fSniklas     {
392159047fSniklas     default:
402159047fSniklas       return NULL;
412159047fSniklas     case bfd_arch_powerpc:
422159047fSniklas       return bfd_default_compatible (a, b);
432159047fSniklas     case bfd_arch_rs6000:
44*007c2a45Smiod       if (b->mach == bfd_mach_rs6k)
452159047fSniklas 	return a;
462159047fSniklas       return NULL;
472159047fSniklas     }
482159047fSniklas   /*NOTREACHED*/
492159047fSniklas }
502159047fSniklas 
51c074d1c9Sdrahn const bfd_arch_info_type bfd_powerpc_archs[] =
522159047fSniklas {
53c074d1c9Sdrahn #if BFD_DEFAULT_TARGET_SIZE == 64
54c074d1c9Sdrahn   /* Default arch must come first.  */
55c074d1c9Sdrahn   {
56c074d1c9Sdrahn     64,	/* 64 bits in a word */
57c074d1c9Sdrahn     64,	/* 64 bits in an address */
58c074d1c9Sdrahn     8,	/* 8 bits in a byte */
59c074d1c9Sdrahn     bfd_arch_powerpc,
60c074d1c9Sdrahn     bfd_mach_ppc64,
61c074d1c9Sdrahn     "powerpc",
62c074d1c9Sdrahn     "powerpc:common64",
63c074d1c9Sdrahn     3,
64c074d1c9Sdrahn     TRUE, /* default for 64 bit target */
65c074d1c9Sdrahn     powerpc_compatible,
66c074d1c9Sdrahn     bfd_default_scan,
67c074d1c9Sdrahn     &bfd_powerpc_archs[1]
68c074d1c9Sdrahn   },
69c074d1c9Sdrahn   /* elf32-ppc:ppc_elf_object_p relies on the default 32 bit arch
70c074d1c9Sdrahn      being immediately after the 64 bit default.  */
71c074d1c9Sdrahn   {
72c074d1c9Sdrahn     32,	/* 32 bits in a word */
73c074d1c9Sdrahn     32,	/* 32 bits in an address */
74c074d1c9Sdrahn     8,	/* 8 bits in a byte */
75c074d1c9Sdrahn     bfd_arch_powerpc,
76c074d1c9Sdrahn     bfd_mach_ppc, /* for the POWER/PowerPC common architecture */
77c074d1c9Sdrahn     "powerpc",
78c074d1c9Sdrahn     "powerpc:common",
79c074d1c9Sdrahn     3,
80c074d1c9Sdrahn     FALSE,
81c074d1c9Sdrahn     powerpc_compatible,
82c074d1c9Sdrahn     bfd_default_scan,
83c074d1c9Sdrahn     &bfd_powerpc_archs[2],
84c074d1c9Sdrahn   },
85c074d1c9Sdrahn #else
86c074d1c9Sdrahn   /* Default arch must come first.  */
87c074d1c9Sdrahn   {
88c074d1c9Sdrahn     32,	/* 32 bits in a word */
89c074d1c9Sdrahn     32,	/* 32 bits in an address */
90c074d1c9Sdrahn     8,	/* 8 bits in a byte */
91c074d1c9Sdrahn     bfd_arch_powerpc,
92c074d1c9Sdrahn     bfd_mach_ppc, /* for the POWER/PowerPC common architecture */
93c074d1c9Sdrahn     "powerpc",
94c074d1c9Sdrahn     "powerpc:common",
95c074d1c9Sdrahn     3,
96c074d1c9Sdrahn     TRUE, /* default for 32 bit target */
97c074d1c9Sdrahn     powerpc_compatible,
98c074d1c9Sdrahn     bfd_default_scan,
99c074d1c9Sdrahn     &bfd_powerpc_archs[1],
100c074d1c9Sdrahn   },
101c074d1c9Sdrahn   /* elf64-ppc:ppc64_elf_object_p relies on the default 64 bit arch
102c074d1c9Sdrahn      being immediately after the 32 bit default.  */
103c074d1c9Sdrahn   {
104c074d1c9Sdrahn     64,	/* 64 bits in a word */
105c074d1c9Sdrahn     64,	/* 64 bits in an address */
106c074d1c9Sdrahn     8,	/* 8 bits in a byte */
107c074d1c9Sdrahn     bfd_arch_powerpc,
108c074d1c9Sdrahn     bfd_mach_ppc64,
109c074d1c9Sdrahn     "powerpc",
110c074d1c9Sdrahn     "powerpc:common64",
111c074d1c9Sdrahn     3,
112c074d1c9Sdrahn     FALSE,
113c074d1c9Sdrahn     powerpc_compatible,
114c074d1c9Sdrahn     bfd_default_scan,
115c074d1c9Sdrahn     &bfd_powerpc_archs[2]
116c074d1c9Sdrahn   },
117c074d1c9Sdrahn #endif
1182159047fSniklas   {
1192159047fSniklas     32,	/* 32 bits in a word */
1202159047fSniklas     32,	/* 32 bits in an address */
1212159047fSniklas     8,	/* 8 bits in a byte */
1222159047fSniklas     bfd_arch_powerpc,
123b55d4692Sfgsch     bfd_mach_ppc_603,
1242159047fSniklas     "powerpc",
1252159047fSniklas     "powerpc:603",
1262159047fSniklas     3,
127c074d1c9Sdrahn     FALSE, /* not the default */
1282159047fSniklas     powerpc_compatible,
1292159047fSniklas     bfd_default_scan,
130c074d1c9Sdrahn     &bfd_powerpc_archs[3]
1312159047fSniklas   },
1322159047fSniklas   {
1332159047fSniklas     32,	/* 32 bits in a word */
1342159047fSniklas     32,	/* 32 bits in an address */
1352159047fSniklas     8,	/* 8 bits in a byte */
1362159047fSniklas     bfd_arch_powerpc,
137b55d4692Sfgsch     bfd_mach_ppc_ec603e,
1382159047fSniklas     "powerpc",
139b55d4692Sfgsch     "powerpc:EC603e",
1402159047fSniklas     3,
141c074d1c9Sdrahn     FALSE, /* not the default */
1422159047fSniklas     powerpc_compatible,
1432159047fSniklas     bfd_default_scan,
144c074d1c9Sdrahn     &bfd_powerpc_archs[4]
1452159047fSniklas   },
1462159047fSniklas   {
1472159047fSniklas     32,	/* 32 bits in a word */
1482159047fSniklas     32,	/* 32 bits in an address */
1492159047fSniklas     8,	/* 8 bits in a byte */
1502159047fSniklas     bfd_arch_powerpc,
151b55d4692Sfgsch     bfd_mach_ppc_604,
1522159047fSniklas     "powerpc",
153b55d4692Sfgsch     "powerpc:604",
1542159047fSniklas     3,
155c074d1c9Sdrahn     FALSE, /* not the default */
1562159047fSniklas     powerpc_compatible,
1572159047fSniklas     bfd_default_scan,
158c074d1c9Sdrahn     &bfd_powerpc_archs[5]
1592159047fSniklas   },
1602159047fSniklas   {
1612159047fSniklas     32,	/* 32 bits in a word */
1622159047fSniklas     32,	/* 32 bits in an address */
1632159047fSniklas     8,	/* 8 bits in a byte */
1642159047fSniklas     bfd_arch_powerpc,
165b55d4692Sfgsch     bfd_mach_ppc_403,
166b55d4692Sfgsch     "powerpc",
167b55d4692Sfgsch     "powerpc:403",
168b55d4692Sfgsch     3,
169c074d1c9Sdrahn     FALSE, /* not the default */
170b55d4692Sfgsch     powerpc_compatible,
171b55d4692Sfgsch     bfd_default_scan,
172c074d1c9Sdrahn     &bfd_powerpc_archs[6]
173b55d4692Sfgsch   },
174b55d4692Sfgsch   {
175b55d4692Sfgsch     32,	/* 32 bits in a word */
176b55d4692Sfgsch     32,	/* 32 bits in an address */
177b55d4692Sfgsch     8,	/* 8 bits in a byte */
178b55d4692Sfgsch     bfd_arch_powerpc,
179b55d4692Sfgsch     bfd_mach_ppc_601,
1802159047fSniklas     "powerpc",
1812159047fSniklas     "powerpc:601",
1822159047fSniklas     3,
183c074d1c9Sdrahn     FALSE, /* not the default */
1842159047fSniklas     powerpc_compatible,
1852159047fSniklas     bfd_default_scan,
186c074d1c9Sdrahn     &bfd_powerpc_archs[7]
187b55d4692Sfgsch   },
188b55d4692Sfgsch   {
189b55d4692Sfgsch     64,	/* 64 bits in a word */
190b55d4692Sfgsch     64,	/* 64 bits in an address */
191b55d4692Sfgsch     8,	/* 8 bits in a byte */
192b55d4692Sfgsch     bfd_arch_powerpc,
193b55d4692Sfgsch     bfd_mach_ppc_620,
194b55d4692Sfgsch     "powerpc",
195b55d4692Sfgsch     "powerpc:620",
196b55d4692Sfgsch     3,
197c074d1c9Sdrahn     FALSE, /* not the default */
198b55d4692Sfgsch     powerpc_compatible,
199b55d4692Sfgsch     bfd_default_scan,
200c074d1c9Sdrahn     &bfd_powerpc_archs[8]
201b55d4692Sfgsch   },
202b55d4692Sfgsch   {
203b55d4692Sfgsch     64,	/* 64 bits in a word */
204b55d4692Sfgsch     64,	/* 64 bits in an address */
205b55d4692Sfgsch     8,	/* 8 bits in a byte */
206b55d4692Sfgsch     bfd_arch_powerpc,
207b55d4692Sfgsch     bfd_mach_ppc_630,
208b55d4692Sfgsch     "powerpc",
209b55d4692Sfgsch     "powerpc:630",
210b55d4692Sfgsch     3,
211c074d1c9Sdrahn     FALSE, /* not the default */
212b55d4692Sfgsch     powerpc_compatible,
213b55d4692Sfgsch     bfd_default_scan,
214c074d1c9Sdrahn     &bfd_powerpc_archs[9]
215b55d4692Sfgsch   },
216b55d4692Sfgsch   {
217b55d4692Sfgsch     64,	/* 64 bits in a word */
218b55d4692Sfgsch     64,	/* 64 bits in an address */
219b55d4692Sfgsch     8,	/* 8 bits in a byte */
220b55d4692Sfgsch     bfd_arch_powerpc,
221b55d4692Sfgsch     bfd_mach_ppc_a35,
222b55d4692Sfgsch     "powerpc",
223b55d4692Sfgsch     "powerpc:a35",
224b55d4692Sfgsch     3,
225c074d1c9Sdrahn     FALSE, /* not the default */
226b55d4692Sfgsch     powerpc_compatible,
227b55d4692Sfgsch     bfd_default_scan,
228c074d1c9Sdrahn     &bfd_powerpc_archs[10]
229b55d4692Sfgsch   },
230b55d4692Sfgsch   {
231b55d4692Sfgsch     64,	/* 64 bits in a word */
232b55d4692Sfgsch     64,	/* 64 bits in an address */
233b55d4692Sfgsch     8,	/* 8 bits in a byte */
234b55d4692Sfgsch     bfd_arch_powerpc,
235b55d4692Sfgsch     bfd_mach_ppc_rs64ii,
236b55d4692Sfgsch     "powerpc",
237b55d4692Sfgsch     "powerpc:rs64ii",
238b55d4692Sfgsch     3,
239c074d1c9Sdrahn     FALSE, /* not the default */
240b55d4692Sfgsch     powerpc_compatible,
241b55d4692Sfgsch     bfd_default_scan,
242c074d1c9Sdrahn     &bfd_powerpc_archs[11]
243b55d4692Sfgsch   },
244b55d4692Sfgsch   {
245b55d4692Sfgsch     64,	/* 64 bits in a word */
246b55d4692Sfgsch     64,	/* 64 bits in an address */
247b55d4692Sfgsch     8,	/* 8 bits in a byte */
248b55d4692Sfgsch     bfd_arch_powerpc,
249b55d4692Sfgsch     bfd_mach_ppc_rs64iii,
250b55d4692Sfgsch     "powerpc",
251b55d4692Sfgsch     "powerpc:rs64iii",
252b55d4692Sfgsch     3,
253c074d1c9Sdrahn     FALSE, /* not the default */
254b55d4692Sfgsch     powerpc_compatible,
255b55d4692Sfgsch     bfd_default_scan,
256c074d1c9Sdrahn     &bfd_powerpc_archs[12]
257b55d4692Sfgsch   },
258b55d4692Sfgsch   {
259b55d4692Sfgsch     32,	/* 32 bits in a word */
260b55d4692Sfgsch     32,	/* 32 bits in an address */
261b55d4692Sfgsch     8,	/* 8 bits in a byte */
262b55d4692Sfgsch     bfd_arch_powerpc,
263b55d4692Sfgsch     bfd_mach_ppc_7400,
264b55d4692Sfgsch     "powerpc",
265b55d4692Sfgsch     "powerpc:7400",
266b55d4692Sfgsch     3,
267c074d1c9Sdrahn     FALSE, /* not the default */
268b55d4692Sfgsch     powerpc_compatible,
269b55d4692Sfgsch     bfd_default_scan,
270c074d1c9Sdrahn     &bfd_powerpc_archs[13]
271c074d1c9Sdrahn   },
272c074d1c9Sdrahn   {
273c074d1c9Sdrahn     32, /* 32 bits in a word */
274c074d1c9Sdrahn     32, /* 32 bits in an address */
275c074d1c9Sdrahn     8,  /* 8 bits in a byte */
276c074d1c9Sdrahn     bfd_arch_powerpc,
277c074d1c9Sdrahn     bfd_mach_ppc_e500,
278c074d1c9Sdrahn     "powerpc",
279c074d1c9Sdrahn     "powerpc:e500",
280c074d1c9Sdrahn     3,
281c074d1c9Sdrahn     FALSE,
282c074d1c9Sdrahn     powerpc_compatible,
283c074d1c9Sdrahn     bfd_default_scan,
284c074d1c9Sdrahn     &bfd_powerpc_archs[14]
285b55d4692Sfgsch   },
286b55d4692Sfgsch   {
287b55d4692Sfgsch     32,       /* 32 bits in a word */
288b55d4692Sfgsch     32,       /* 32 bits in an address */
289b55d4692Sfgsch     8,        /* 8 bits in a byte */
290b55d4692Sfgsch     bfd_arch_powerpc,
291b55d4692Sfgsch     bfd_mach_ppc_860,
292b55d4692Sfgsch     "powerpc",
293b55d4692Sfgsch     "powerpc:MPC8XX",
294b55d4692Sfgsch     3,
295c074d1c9Sdrahn     FALSE, /* not the default */
296b55d4692Sfgsch     powerpc_compatible,
297b55d4692Sfgsch     bfd_default_scan,
298c88b1d6cSniklas     0
2992159047fSniklas   }
3002159047fSniklas };
301