This commit was generated by cvs2svn to track changes on a CVS vendor
[external/binutils.git] / bfd / cpu-powerpc.c
1 /* BFD PowerPC CPU definition
2    Copyright 1994, 1995, 1996, 2000, 2001, 2002, 2003
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 2 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, MA 02110-1301, USA.  */
21
22 #include "bfd.h"
23 #include "sysdep.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 *powerpc_compatible
29   PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
30
31 static const bfd_arch_info_type *
32 powerpc_compatible (a,b)
33      const bfd_arch_info_type *a;
34      const bfd_arch_info_type *b;
35 {
36   BFD_ASSERT (a->arch == bfd_arch_powerpc);
37   switch (b->arch)
38     {
39     default:
40       return NULL;
41     case bfd_arch_powerpc:
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
51 const 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_powerpc_archs[1]
68   },
69   /* elf32-ppc:ppc_elf_object_p relies on the default 32 bit arch
70      being immediately after the 64 bit default.  */
71   {
72     32, /* 32 bits in a word */
73     32, /* 32 bits in an address */
74     8,  /* 8 bits in a byte */
75     bfd_arch_powerpc,
76     bfd_mach_ppc, /* for the POWER/PowerPC common architecture */
77     "powerpc",
78     "powerpc:common",
79     3,
80     FALSE,
81     powerpc_compatible,
82     bfd_default_scan,
83     &bfd_powerpc_archs[2],
84   },
85 #else
86   /* Default arch must come first.  */
87   {
88     32, /* 32 bits in a word */
89     32, /* 32 bits in an address */
90     8,  /* 8 bits in a byte */
91     bfd_arch_powerpc,
92     bfd_mach_ppc, /* for the POWER/PowerPC common architecture */
93     "powerpc",
94     "powerpc:common",
95     3,
96     TRUE, /* default for 32 bit target */
97     powerpc_compatible,
98     bfd_default_scan,
99     &bfd_powerpc_archs[1],
100   },
101   /* elf64-ppc:ppc64_elf_object_p relies on the default 64 bit arch
102      being immediately after the 32 bit default.  */
103   {
104     64, /* 64 bits in a word */
105     64, /* 64 bits in an address */
106     8,  /* 8 bits in a byte */
107     bfd_arch_powerpc,
108     bfd_mach_ppc64,
109     "powerpc",
110     "powerpc:common64",
111     3,
112     FALSE,
113     powerpc_compatible,
114     bfd_default_scan,
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_powerpc_archs[3]
131   },
132   {
133     32, /* 32 bits in a word */
134     32, /* 32 bits in an address */
135     8,  /* 8 bits in a byte */
136     bfd_arch_powerpc,
137     bfd_mach_ppc_ec603e,
138     "powerpc",
139     "powerpc:EC603e",
140     3,
141     FALSE, /* not the default */
142     powerpc_compatible,
143     bfd_default_scan,
144     &bfd_powerpc_archs[4]
145   },
146   {
147     32, /* 32 bits in a word */
148     32, /* 32 bits in an address */
149     8,  /* 8 bits in a byte */
150     bfd_arch_powerpc,
151     bfd_mach_ppc_604,
152     "powerpc",
153     "powerpc:604",
154     3,
155     FALSE, /* not the default */
156     powerpc_compatible,
157     bfd_default_scan,
158     &bfd_powerpc_archs[5]
159   },
160   {
161     32, /* 32 bits in a word */
162     32, /* 32 bits in an address */
163     8,  /* 8 bits in a byte */
164     bfd_arch_powerpc,
165     bfd_mach_ppc_403,
166     "powerpc",
167     "powerpc:403",
168     3,
169     FALSE, /* not the default */
170     powerpc_compatible,
171     bfd_default_scan,
172     &bfd_powerpc_archs[6]
173   },
174   {
175     32, /* 32 bits in a word */
176     32, /* 32 bits in an address */
177     8,  /* 8 bits in a byte */
178     bfd_arch_powerpc,
179     bfd_mach_ppc_601,
180     "powerpc",
181     "powerpc:601",
182     3,
183     FALSE, /* not the default */
184     powerpc_compatible,
185     bfd_default_scan,
186     &bfd_powerpc_archs[7]
187   },
188   {
189     64, /* 64 bits in a word */
190     64, /* 64 bits in an address */
191     8,  /* 8 bits in a byte */
192     bfd_arch_powerpc,
193     bfd_mach_ppc_620,
194     "powerpc",
195     "powerpc:620",
196     3,
197     FALSE, /* not the default */
198     powerpc_compatible,
199     bfd_default_scan,
200     &bfd_powerpc_archs[8]
201   },
202   {
203     64, /* 64 bits in a word */
204     64, /* 64 bits in an address */
205     8,  /* 8 bits in a byte */
206     bfd_arch_powerpc,
207     bfd_mach_ppc_630,
208     "powerpc",
209     "powerpc:630",
210     3,
211     FALSE, /* not the default */
212     powerpc_compatible,
213     bfd_default_scan,
214     &bfd_powerpc_archs[9]
215   },
216   {
217     64, /* 64 bits in a word */
218     64, /* 64 bits in an address */
219     8,  /* 8 bits in a byte */
220     bfd_arch_powerpc,
221     bfd_mach_ppc_a35,
222     "powerpc",
223     "powerpc:a35",
224     3,
225     FALSE, /* not the default */
226     powerpc_compatible,
227     bfd_default_scan,
228     &bfd_powerpc_archs[10]
229   },
230   {
231     64, /* 64 bits in a word */
232     64, /* 64 bits in an address */
233     8,  /* 8 bits in a byte */
234     bfd_arch_powerpc,
235     bfd_mach_ppc_rs64ii,
236     "powerpc",
237     "powerpc:rs64ii",
238     3,
239     FALSE, /* not the default */
240     powerpc_compatible,
241     bfd_default_scan,
242     &bfd_powerpc_archs[11]
243   },
244   {
245     64, /* 64 bits in a word */
246     64, /* 64 bits in an address */
247     8,  /* 8 bits in a byte */
248     bfd_arch_powerpc,
249     bfd_mach_ppc_rs64iii,
250     "powerpc",
251     "powerpc:rs64iii",
252     3,
253     FALSE, /* not the default */
254     powerpc_compatible,
255     bfd_default_scan,
256     &bfd_powerpc_archs[12]
257   },
258   {
259     32, /* 32 bits in a word */
260     32, /* 32 bits in an address */
261     8,  /* 8 bits in a byte */
262     bfd_arch_powerpc,
263     bfd_mach_ppc_7400,
264     "powerpc",
265     "powerpc:7400",
266     3,
267     FALSE, /* not the default */
268     powerpc_compatible,
269     bfd_default_scan,
270     &bfd_powerpc_archs[13]
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_e500,
278     "powerpc",
279     "powerpc:e500",
280     3,
281     FALSE,
282     powerpc_compatible,
283     bfd_default_scan,
284     &bfd_powerpc_archs[14]
285   },
286   {
287     32,       /* 32 bits in a word */
288     32,       /* 32 bits in an address */
289     8,        /* 8 bits in a byte */
290     bfd_arch_powerpc,
291     bfd_mach_ppc_860,
292     "powerpc",
293     "powerpc:MPC8XX",
294     3,
295     FALSE, /* not the default */
296     powerpc_compatible,
297     bfd_default_scan,
298     &bfd_powerpc_archs[15]
299   },
300   {
301     32, /* 32 bits in a word */
302     32, /* 32 bits in an address */
303     8,  /* 8 bits in a byte */
304     bfd_arch_powerpc,
305     bfd_mach_ppc_750,
306     "powerpc",
307     "powerpc:750",
308     3,
309     FALSE, /* not the default */
310     powerpc_compatible,
311     bfd_default_scan,
312     0
313   }
314 };