constify some cli-utils stuff
[external/binutils.git] / bfd / cpu-powerpc.c
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 };