bfd/
[deliverable/binutils-gdb.git] / bfd / archures.c
CommitLineData
252b5132 1/* BFD library support routines for architectures.
7898deda 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
0dc93057 3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
d4845d57 4 Free Software Foundation, Inc.
252b5132
RH
5 Hacked by John Gilmore and Steve Chamberlain of Cygnus Support.
6
3af9a47b 7 This file is part of BFD, the Binary File Descriptor library.
252b5132 8
3af9a47b
NC
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
cd123cb7 11 the Free Software Foundation; either version 3 of the License, or
3af9a47b 12 (at your option) any later version.
252b5132 13
3af9a47b
NC
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
252b5132 18
3af9a47b
NC
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
cd123cb7
NC
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
252b5132 23
252b5132 24#include "sysdep.h"
3db64b00 25#include "bfd.h"
252b5132 26#include "libbfd.h"
3882b010 27#include "safe-ctype.h"
252b5132
RH
28
29/*
30
31SECTION
32 Architectures
33
34 BFD keeps one atom in a BFD describing the
35 architecture of the data attached to the BFD: a pointer to a
0ef5a5bd 36 <<bfd_arch_info_type>>.
252b5132
RH
37
38 Pointers to structures can be requested independently of a BFD
39 so that an architecture's information can be interrogated
40 without access to an open BFD.
41
42 The architecture information is provided by each architecture package.
43 The set of default architectures is selected by the macro
44 <<SELECT_ARCHITECTURES>>. This is normally set up in the
45 @file{config/@var{target}.mt} file of your choice. If the name is not
0ef5a5bd 46 defined, then all the architectures supported are included.
252b5132
RH
47
48 When BFD starts up, all the architectures are called with an
49 initialize method. It is up to the architecture back end to
50 insert as many items into the list of architectures as it wants to;
51 generally this would be one for each machine and one for the
0ef5a5bd 52 default case (an item with a machine field of 0).
252b5132
RH
53
54 BFD's idea of an architecture is implemented in @file{archures.c}.
55*/
56
57/*
58
59SUBSECTION
60 bfd_architecture
61
62DESCRIPTION
63 This enum gives the object file's CPU architecture, in a
64 global sense---i.e., what processor family does it belong to?
65 Another field indicates which processor within
66 the family is in use. The machine gives a number which
67 distinguishes different versions of the architecture,
68 containing, for example, 2 and 3 for Intel i960 KA and i960 KB,
0ef5a5bd 69 and 68020 and 68030 for Motorola 68020 and 68030.
252b5132 70
0ef5a5bd 71.enum bfd_architecture
252b5132 72.{
c312a6a4
NC
73. bfd_arch_unknown, {* File arch not known. *}
74. bfd_arch_obscure, {* Arch known, not one of these. *}
252b5132
RH
75. bfd_arch_m68k, {* Motorola 68xxx *}
76.#define bfd_mach_m68000 1
77.#define bfd_mach_m68008 2
78.#define bfd_mach_m68010 3
79.#define bfd_mach_m68020 4
80.#define bfd_mach_m68030 5
81.#define bfd_mach_m68040 6
82.#define bfd_mach_m68060 7
83.#define bfd_mach_cpu32 8
3bdcfdf4 84.#define bfd_mach_fido 9
9840d27e
KH
85.#define bfd_mach_mcf_isa_a_nodiv 10
86.#define bfd_mach_mcf_isa_a 11
87.#define bfd_mach_mcf_isa_a_mac 12
88.#define bfd_mach_mcf_isa_a_emac 13
89.#define bfd_mach_mcf_isa_aplus 14
90.#define bfd_mach_mcf_isa_aplus_mac 15
91.#define bfd_mach_mcf_isa_aplus_emac 16
92.#define bfd_mach_mcf_isa_b_nousp 17
93.#define bfd_mach_mcf_isa_b_nousp_mac 18
94.#define bfd_mach_mcf_isa_b_nousp_emac 19
95.#define bfd_mach_mcf_isa_b 20
96.#define bfd_mach_mcf_isa_b_mac 21
97.#define bfd_mach_mcf_isa_b_emac 22
98.#define bfd_mach_mcf_isa_b_float 23
99.#define bfd_mach_mcf_isa_b_float_mac 24
100.#define bfd_mach_mcf_isa_b_float_emac 25
9a2e615a
NS
101.#define bfd_mach_mcf_isa_c 26
102.#define bfd_mach_mcf_isa_c_mac 27
103.#define bfd_mach_mcf_isa_c_emac 28
8d100c32
KH
104.#define bfd_mach_mcf_isa_c_nodiv 29
105.#define bfd_mach_mcf_isa_c_nodiv_mac 30
106.#define bfd_mach_mcf_isa_c_nodiv_emac 31
0ef5a5bd 107. bfd_arch_vax, {* DEC Vax *}
252b5132
RH
108. bfd_arch_i960, {* Intel 960 *}
109. {* The order of the following is important.
0ef5a5bd 110. lower number indicates a machine type that
252b5132
RH
111. only accepts a subset of the instructions
112. available to machines with higher numbers.
113. The exception is the "ca", which is
0ef5a5bd 114. incompatible with all other machines except
c312a6a4 115. "core". *}
252b5132
RH
116.
117.#define bfd_mach_i960_core 1
118.#define bfd_mach_i960_ka_sa 2
119.#define bfd_mach_i960_kb_sb 3
120.#define bfd_mach_i960_mc 4
121.#define bfd_mach_i960_xa 5
122.#define bfd_mach_i960_ca 6
123.#define bfd_mach_i960_jx 7
124.#define bfd_mach_i960_hx 8
125.
3b16e843
NC
126. bfd_arch_or32, {* OpenRISC 32 *}
127.
252b5132
RH
128. bfd_arch_sparc, {* SPARC *}
129.#define bfd_mach_sparc 1
130.{* The difference between v8plus and v9 is that v9 is a true 64 bit env. *}
131.#define bfd_mach_sparc_sparclet 2
132.#define bfd_mach_sparc_sparclite 3
133.#define bfd_mach_sparc_v8plus 4
c312a6a4 134.#define bfd_mach_sparc_v8plusa 5 {* with ultrasparc add'ns. *}
252b5132
RH
135.#define bfd_mach_sparc_sparclite_le 6
136.#define bfd_mach_sparc_v9 7
c312a6a4
NC
137.#define bfd_mach_sparc_v9a 8 {* with ultrasparc add'ns. *}
138.#define bfd_mach_sparc_v8plusb 9 {* with cheetah add'ns. *}
139.#define bfd_mach_sparc_v9b 10 {* with cheetah add'ns. *}
252b5132
RH
140.{* Nonzero if MACH has the v9 instruction set. *}
141.#define bfd_mach_sparc_v9_p(mach) \
19f7b010
JJ
142. ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9b \
143. && (mach) != bfd_mach_sparc_sparclite_le)
7946e94a
JJ
144.{* Nonzero if MACH is a 64 bit sparc architecture. *}
145.#define bfd_mach_sparc_64bit_p(mach) \
146. ((mach) >= bfd_mach_sparc_v9 && (mach) != bfd_mach_sparc_v8plusb)
e9f53129
AM
147. bfd_arch_spu, {* PowerPC SPU *}
148.#define bfd_mach_spu 256
252b5132
RH
149. bfd_arch_mips, {* MIPS Rxxxx *}
150.#define bfd_mach_mips3000 3000
151.#define bfd_mach_mips3900 3900
152.#define bfd_mach_mips4000 4000
153.#define bfd_mach_mips4010 4010
154.#define bfd_mach_mips4100 4100
155.#define bfd_mach_mips4111 4111
00707a0e 156.#define bfd_mach_mips4120 4120
252b5132
RH
157.#define bfd_mach_mips4300 4300
158.#define bfd_mach_mips4400 4400
159.#define bfd_mach_mips4600 4600
160.#define bfd_mach_mips4650 4650
161.#define bfd_mach_mips5000 5000
00707a0e
RS
162.#define bfd_mach_mips5400 5400
163.#define bfd_mach_mips5500 5500
252b5132 164.#define bfd_mach_mips6000 6000
5a7ea749 165.#define bfd_mach_mips7000 7000
252b5132 166.#define bfd_mach_mips8000 8000
0d2e43ed 167.#define bfd_mach_mips9000 9000
252b5132 168.#define bfd_mach_mips10000 10000
d1cf510e 169.#define bfd_mach_mips12000 12000
3aa3176b
TS
170.#define bfd_mach_mips14000 14000
171.#define bfd_mach_mips16000 16000
252b5132 172.#define bfd_mach_mips16 16
84ea6cf2 173.#define bfd_mach_mips5 5
350cc38d
MS
174.#define bfd_mach_mips_loongson_2e 3001
175.#define bfd_mach_mips_loongson_2f 3002
fd503541 176.#define bfd_mach_mips_loongson_3a 3003
c6c98b38 177.#define bfd_mach_mips_sb1 12310201 {* octal 'SB', 01 *}
6f179bd0 178.#define bfd_mach_mips_octeon 6501
52b6b6b9 179.#define bfd_mach_mips_xlr 887682 {* decimal 'XLR' *}
a1cd6a8f 180.#define bfd_mach_mipsisa32 32
af7ee8bf 181.#define bfd_mach_mipsisa32r2 33
a1cd6a8f 182.#define bfd_mach_mipsisa64 64
5f74bc13 183.#define bfd_mach_mipsisa64r2 65
252b5132 184. bfd_arch_i386, {* Intel 386 *}
686e4055
AM
185.#define bfd_mach_i386_i386 1
186.#define bfd_mach_i386_i8086 2
187.#define bfd_mach_i386_i386_intel_syntax 3
188.#define bfd_mach_x86_64 64
189.#define bfd_mach_x86_64_intel_syntax 65
8a9036a4
L
190. bfd_arch_l1om, {* Intel L1OM *}
191.#define bfd_mach_l1om 66
192.#define bfd_mach_l1om_intel_syntax 67
252b5132
RH
193. bfd_arch_we32k, {* AT&T WE32xxx *}
194. bfd_arch_tahoe, {* CCI/Harris Tahoe *}
195. bfd_arch_i860, {* Intel 860 *}
5b93d8bb 196. bfd_arch_i370, {* IBM 360/370 Mainframes *}
252b5132 197. bfd_arch_romp, {* IBM ROMP PC/RT *}
252b5132
RH
198. bfd_arch_convex, {* Convex *}
199. bfd_arch_m88k, {* Motorola 88xxx *}
3af9a47b 200. bfd_arch_m98k, {* Motorola 98xxx *}
252b5132 201. bfd_arch_pyramid, {* Pyramid Technology *}
c2dcd04e 202. bfd_arch_h8300, {* Renesas H8/300 (formerly Hitachi H8/300) *}
8d9cd6b1
NC
203.#define bfd_mach_h8300 1
204.#define bfd_mach_h8300h 2
205.#define bfd_mach_h8300s 3
206.#define bfd_mach_h8300hn 4
207.#define bfd_mach_h8300sn 5
5d1db417 208.#define bfd_mach_h8300sx 6
f4984206 209.#define bfd_mach_h8300sxn 7
e135f41b 210. bfd_arch_pdp11, {* DEC PDP-11 *}
ce3c775b 211. bfd_arch_plugin,
252b5132 212. bfd_arch_powerpc, {* PowerPC *}
686e4055
AM
213.#define bfd_mach_ppc 32
214.#define bfd_mach_ppc64 64
87f33987
ND
215.#define bfd_mach_ppc_403 403
216.#define bfd_mach_ppc_403gc 4030
305f7588 217.#define bfd_mach_ppc_405 405
87f33987
ND
218.#define bfd_mach_ppc_505 505
219.#define bfd_mach_ppc_601 601
220.#define bfd_mach_ppc_602 602
221.#define bfd_mach_ppc_603 603
222.#define bfd_mach_ppc_ec603e 6031
223.#define bfd_mach_ppc_604 604
224.#define bfd_mach_ppc_620 620
225.#define bfd_mach_ppc_630 630
226.#define bfd_mach_ppc_750 750
227.#define bfd_mach_ppc_860 860
228.#define bfd_mach_ppc_a35 35
229.#define bfd_mach_ppc_rs64ii 642
230.#define bfd_mach_ppc_rs64iii 643
231.#define bfd_mach_ppc_7400 7400
d62b1198 232.#define bfd_mach_ppc_e500 500
19a6653c 233.#define bfd_mach_ppc_e500mc 5001
ce3d2015
AM
234.#define bfd_mach_ppc_e500mc64 5005
235.#define bfd_mach_ppc_titan 83
252b5132 236. bfd_arch_rs6000, {* IBM RS/6000 *}
686e4055 237.#define bfd_mach_rs6k 6000
87f33987
ND
238.#define bfd_mach_rs6k_rs1 6001
239.#define bfd_mach_rs6k_rsc 6003
240.#define bfd_mach_rs6k_rs2 6002
252b5132 241. bfd_arch_hppa, {* HP PA RISC *}
42acdc7c
JB
242.#define bfd_mach_hppa10 10
243.#define bfd_mach_hppa11 11
244.#define bfd_mach_hppa20 20
245.#define bfd_mach_hppa20w 25
252b5132 246. bfd_arch_d10v, {* Mitsubishi D10V *}
686e4055 247.#define bfd_mach_d10v 1
7af8cca9
MM
248.#define bfd_mach_d10v_ts2 2
249.#define bfd_mach_d10v_ts3 3
252b5132 250. bfd_arch_d30v, {* Mitsubishi D30V *}
d172d4ba 251. bfd_arch_dlx, {* DLX *}
60bcf0fa
NC
252. bfd_arch_m68hc11, {* Motorola 68HC11 *}
253. bfd_arch_m68hc12, {* Motorola 68HC12 *}
bc7c6a90
SC
254.#define bfd_mach_m6812_default 0
255.#define bfd_mach_m6812 1
256.#define bfd_mach_m6812s 2
252b5132
RH
257. bfd_arch_z8k, {* Zilog Z8000 *}
258.#define bfd_mach_z8001 1
259.#define bfd_mach_z8002 2
c2dcd04e 260. bfd_arch_h8500, {* Renesas H8/500 (formerly Hitachi H8/500) *}
ef230218 261. bfd_arch_sh, {* Renesas / SuperH SH (formerly Hitachi SH) *}
686e4055 262.#define bfd_mach_sh 1
d4845d57
JR
263.#define bfd_mach_sh2 0x20
264.#define bfd_mach_sh_dsp 0x2d
1d70c7fb
AO
265.#define bfd_mach_sh2a 0x2a
266.#define bfd_mach_sh2a_nofpu 0x2b
e38bc3b5
NC
267.#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
268.#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
269.#define bfd_mach_sh2a_or_sh4 0x2a3
270.#define bfd_mach_sh2a_or_sh3e 0x2a4
5177500f 271.#define bfd_mach_sh2e 0x2e
252b5132 272.#define bfd_mach_sh3 0x30
f6f9408f 273.#define bfd_mach_sh3_nommu 0x31
d4845d57 274.#define bfd_mach_sh3_dsp 0x3d
252b5132 275.#define bfd_mach_sh3e 0x3e
d4845d57 276.#define bfd_mach_sh4 0x40
af9ba621 277.#define bfd_mach_sh4_nofpu 0x41
ae51a426 278.#define bfd_mach_sh4_nommu_nofpu 0x42
af9ba621
CV
279.#define bfd_mach_sh4a 0x4a
280.#define bfd_mach_sh4a_nofpu 0x4b
281.#define bfd_mach_sh4al_dsp 0x4d
fbca6ad9 282.#define bfd_mach_sh5 0x50
252b5132
RH
283. bfd_arch_alpha, {* Dec Alpha *}
284.#define bfd_mach_alpha_ev4 0x10
285.#define bfd_mach_alpha_ev5 0x20
286.#define bfd_mach_alpha_ev6 0x30
c312a6a4 287. bfd_arch_arm, {* Advanced Risc Machines ARM. *}
5a6c6817 288.#define bfd_mach_arm_unknown 0
252b5132 289.#define bfd_mach_arm_2 1
478d07d6 290.#define bfd_mach_arm_2a 2
252b5132
RH
291.#define bfd_mach_arm_3 3
292.#define bfd_mach_arm_3M 4
478d07d6 293.#define bfd_mach_arm_4 5
252b5132 294.#define bfd_mach_arm_4T 6
478d07d6
NC
295.#define bfd_mach_arm_5 7
296.#define bfd_mach_arm_5T 8
077b8428
NC
297.#define bfd_mach_arm_5TE 9
298.#define bfd_mach_arm_XScale 10
fde78edd 299.#define bfd_mach_arm_ep9312 11
e16bb312 300.#define bfd_mach_arm_iWMMXt 12
2d447fca 301.#define bfd_mach_arm_iWMMXt2 13
252b5132
RH
302. bfd_arch_ns32k, {* National Semiconductors ns32000 *}
303. bfd_arch_w65, {* WDC 65816 *}
304. bfd_arch_tic30, {* Texas Instruments TMS320C30 *}
026df7c5 305. bfd_arch_tic4x, {* Texas Instruments TMS320C3X/4X *}
be33c5dd
SS
306.#define bfd_mach_tic3x 30
307.#define bfd_mach_tic4x 40
81635ce4 308. bfd_arch_tic54x, {* Texas Instruments TMS320C54X *}
40b36596 309. bfd_arch_tic6x, {* Texas Instruments TMS320C6X *}
252b5132
RH
310. bfd_arch_tic80, {* TI TMS320c80 (MVP) *}
311. bfd_arch_v850, {* NEC V850 *}
686e4055 312.#define bfd_mach_v850 1
252b5132 313.#define bfd_mach_v850e 'E'
1cd986c5
NC
314.#define bfd_mach_v850e1 '1'
315.#define bfd_mach_v850e2 0x4532
316.#define bfd_mach_v850e2v3 0x45325633
0d2bcfaf 317. bfd_arch_arc, {* ARC Cores *}
686e4055
AM
318.#define bfd_mach_arc_5 5
319.#define bfd_mach_arc_6 6
320.#define bfd_mach_arc_7 7
321.#define bfd_mach_arc_8 8
49f58d10
JB
322. bfd_arch_m32c, {* Renesas M16C/M32C. *}
323.#define bfd_mach_m16c 0x75
324.#define bfd_mach_m32c 0x78
26597c86 325. bfd_arch_m32r, {* Renesas M32R (formerly Mitsubishi M32R/D) *}
686e4055 326.#define bfd_mach_m32r 1 {* For backwards compatibility. *}
a23ef39f 327.#define bfd_mach_m32rx 'x'
88845958 328.#define bfd_mach_m32r2 '2'
252b5132
RH
329. bfd_arch_mn10200, {* Matsushita MN10200 *}
330. bfd_arch_mn10300, {* Matsushita MN10300 *}
331.#define bfd_mach_mn10300 300
31f8dc8f 332.#define bfd_mach_am33 330
b08fa4d3 333.#define bfd_mach_am33_2 332
252b5132
RH
334. bfd_arch_fr30,
335.#define bfd_mach_fr30 0x46523330
4e5ba5b7 336. bfd_arch_frv,
686e4055
AM
337.#define bfd_mach_frv 1
338.#define bfd_mach_frvsimple 2
4e5ba5b7
DB
339.#define bfd_mach_fr300 300
340.#define bfd_mach_fr400 400
676a64f4 341.#define bfd_mach_fr450 450
4e5ba5b7
DB
342.#define bfd_mach_frvtomcat 499 {* fr500 prototype *}
343.#define bfd_mach_fr500 500
9c8ee639 344.#define bfd_mach_fr550 550
20135e4c
NC
345. bfd_arch_moxie, {* The moxie processor *}
346.#define bfd_mach_moxie 1
252b5132 347. bfd_arch_mcore,
d9352518
DB
348. bfd_arch_mep,
349.#define bfd_mach_mep 1
350.#define bfd_mach_mep_h1 0x6831
4d28413b 351.#define bfd_mach_mep_c5 0x6335
800eeca4 352. bfd_arch_ia64, {* HP/Intel ia64 *}
686e4055
AM
353.#define bfd_mach_ia64_elf64 64
354.#define bfd_mach_ia64_elf32 32
cf88bb9f 355. bfd_arch_ip2k, {* Ubicom IP2K microcontrollers. *}
686e4055
AM
356.#define bfd_mach_ip2022 1
357.#define bfd_mach_ip2022ext 2
a75473eb
SC
358. bfd_arch_iq2000, {* Vitesse IQ2000. *}
359.#define bfd_mach_iq2000 1
360.#define bfd_mach_iq10 2
d031aafb 361. bfd_arch_mt,
de33e640
AH
362.#define bfd_mach_ms1 1
363.#define bfd_mach_mrisc2 2
6f84a2a6 364.#define bfd_mach_ms2 3
0bcb993b 365. bfd_arch_pj,
c312a6a4 366. bfd_arch_avr, {* Atmel AVR microcontrollers. *}
adde6300
AM
367.#define bfd_mach_avr1 1
368.#define bfd_mach_avr2 2
7b21ac3f 369.#define bfd_mach_avr25 25
adde6300 370.#define bfd_mach_avr3 3
7b21ac3f
EW
371.#define bfd_mach_avr31 31
372.#define bfd_mach_avr35 35
adde6300 373.#define bfd_mach_avr4 4
65aa24b6 374.#define bfd_mach_avr5 5
7b21ac3f 375.#define bfd_mach_avr51 51
28c9d252 376.#define bfd_mach_avr6 6
0f64bb02
CM
377. bfd_arch_bfin, {* ADI Blackfin *}
378.#define bfd_mach_bfin 1
3d3d428f
NC
379. bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
380.#define bfd_mach_cr16 1
0949843d
NC
381. bfd_arch_cr16c, {* National Semiconductor CompactRISC. *}
382.#define bfd_mach_cr16c 1
1fe1f39c
NC
383. bfd_arch_crx, {* National Semiconductor CRX. *}
384.#define bfd_mach_crx 1
06c15ad7 385. bfd_arch_cris, {* Axis CRIS *}
bac23f82
HPN
386.#define bfd_mach_cris_v0_v10 255
387.#define bfd_mach_cris_v32 32
388.#define bfd_mach_cris_v10_v32 1032
c7927a3c
NC
389. bfd_arch_rx, {* Renesas RX. *}
390.#define bfd_mach_rx 0x75
a85d7ed0 391. bfd_arch_s390, {* IBM s390 *}
686e4055
AM
392.#define bfd_mach_s390_31 31
393.#define bfd_mach_s390_64 64
1c0d3aa6 394. bfd_arch_score, {* Sunplus score *}
c3b7224a
NC
395.#define bfd_mach_score3 3
396.#define bfd_mach_score7 7
b3baf5d0 397. bfd_arch_openrisc, {* OpenRISC *}
c312a6a4 398. bfd_arch_mmix, {* Donald Knuth's educational processor. *}
93fbbb04 399. bfd_arch_xstormy16,
686e4055 400.#define bfd_mach_xstormy16 1
2469cfa2 401. bfd_arch_msp430, {* Texas Instruments MSP430 architecture. *}
2469cfa2 402.#define bfd_mach_msp11 11
3b260895 403.#define bfd_mach_msp110 110
2469cfa2
NC
404.#define bfd_mach_msp12 12
405.#define bfd_mach_msp13 13
406.#define bfd_mach_msp14 14
3b260895 407.#define bfd_mach_msp15 15
d70c5fc7 408.#define bfd_mach_msp16 16
44c86e8c 409.#define bfd_mach_msp21 21
2469cfa2
NC
410.#define bfd_mach_msp31 31
411.#define bfd_mach_msp32 32
412.#define bfd_mach_msp33 33
3b260895
NC
413.#define bfd_mach_msp41 41
414.#define bfd_mach_msp42 42
2469cfa2
NC
415.#define bfd_mach_msp43 43
416.#define bfd_mach_msp44 44
d70c5fc7
NC
417. bfd_arch_xc16x, {* Infineon's XC16X Series. *}
418.#define bfd_mach_xc16x 1
419.#define bfd_mach_xc16xl 2
420.#define bfd_mach_xc16xs 3
e0001a05
NC
421. bfd_arch_xtensa, {* Tensilica's Xtensa cores. *}
422.#define bfd_mach_xtensa 1
3c9b82ba
NC
423. bfd_arch_z80,
424.#define bfd_mach_z80strict 1 {* No undocumented opcodes. *}
425.#define bfd_mach_z80 3 {* With ixl, ixh, iyl, and iyh. *}
426.#define bfd_mach_z80full 7 {* All undocumented instructions. *}
427.#define bfd_mach_r800 11 {* R800: successor with multiplication. *}
84e94c90
NC
428. bfd_arch_lm32, {* Lattice Mico32 *}
429.#define bfd_mach_lm32 1
7ba29e2a 430. bfd_arch_microblaze,{* Xilinx MicroBlaze. *}
252b5132
RH
431. bfd_arch_last
432. };
252b5132
RH
433*/
434
435/*
252b5132
RH
436SUBSECTION
437 bfd_arch_info
438
439DESCRIPTION
440 This structure contains information on architectures for use
441 within BFD.
442
443.
0ef5a5bd 444.typedef struct bfd_arch_info
252b5132
RH
445.{
446. int bits_per_word;
447. int bits_per_address;
448. int bits_per_byte;
449. enum bfd_architecture arch;
450. unsigned long mach;
451. const char *arch_name;
452. const char *printable_name;
453. unsigned int section_align_power;
b34976b6 454. {* TRUE if this is the default machine for the architecture.
aa3d5824
AM
455. The default arch should be the first entry for an arch so that
456. all the entries for that arch can be accessed via <<next>>. *}
b34976b6 457. bfd_boolean the_default;
252b5132 458. const struct bfd_arch_info * (*compatible)
c58b9523 459. (const struct bfd_arch_info *a, const struct bfd_arch_info *b);
252b5132 460.
c58b9523 461. bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
252b5132
RH
462.
463. const struct bfd_arch_info *next;
3b16e843
NC
464.}
465.bfd_arch_info_type;
466.
252b5132
RH
467*/
468
252b5132
RH
469extern const bfd_arch_info_type bfd_alpha_arch;
470extern const bfd_arch_info_type bfd_arc_arch;
471extern const bfd_arch_info_type bfd_arm_arch;
3b16e843 472extern const bfd_arch_info_type bfd_avr_arch;
0f64bb02 473extern const bfd_arch_info_type bfd_bfin_arch;
3d3d428f 474extern const bfd_arch_info_type bfd_cr16_arch;
0949843d 475extern const bfd_arch_info_type bfd_cr16c_arch;
06c15ad7 476extern const bfd_arch_info_type bfd_cris_arch;
1fe1f39c 477extern const bfd_arch_info_type bfd_crx_arch;
252b5132
RH
478extern const bfd_arch_info_type bfd_d10v_arch;
479extern const bfd_arch_info_type bfd_d30v_arch;
d172d4ba 480extern const bfd_arch_info_type bfd_dlx_arch;
3b16e843 481extern const bfd_arch_info_type bfd_fr30_arch;
4e5ba5b7 482extern const bfd_arch_info_type bfd_frv_arch;
252b5132
RH
483extern const bfd_arch_info_type bfd_h8300_arch;
484extern const bfd_arch_info_type bfd_h8500_arch;
485extern const bfd_arch_info_type bfd_hppa_arch;
5b93d8bb 486extern const bfd_arch_info_type bfd_i370_arch;
252b5132
RH
487extern const bfd_arch_info_type bfd_i386_arch;
488extern const bfd_arch_info_type bfd_i860_arch;
489extern const bfd_arch_info_type bfd_i960_arch;
3b16e843 490extern const bfd_arch_info_type bfd_ia64_arch;
cf88bb9f 491extern const bfd_arch_info_type bfd_ip2k_arch;
a75473eb 492extern const bfd_arch_info_type bfd_iq2000_arch;
9e675548 493extern const bfd_arch_info_type bfd_l1om_arch;
84e94c90 494extern const bfd_arch_info_type bfd_lm32_arch;
49f58d10 495extern const bfd_arch_info_type bfd_m32c_arch;
252b5132 496extern const bfd_arch_info_type bfd_m32r_arch;
60bcf0fa
NC
497extern const bfd_arch_info_type bfd_m68hc11_arch;
498extern const bfd_arch_info_type bfd_m68hc12_arch;
252b5132
RH
499extern const bfd_arch_info_type bfd_m68k_arch;
500extern const bfd_arch_info_type bfd_m88k_arch;
3b16e843 501extern const bfd_arch_info_type bfd_mcore_arch;
d9352518 502extern const bfd_arch_info_type bfd_mep_arch;
252b5132 503extern const bfd_arch_info_type bfd_mips_arch;
7ba29e2a 504extern const bfd_arch_info_type bfd_microblaze_arch;
3b16e843 505extern const bfd_arch_info_type bfd_mmix_arch;
252b5132
RH
506extern const bfd_arch_info_type bfd_mn10200_arch;
507extern const bfd_arch_info_type bfd_mn10300_arch;
9e675548 508extern const bfd_arch_info_type bfd_moxie_arch;
2469cfa2 509extern const bfd_arch_info_type bfd_msp430_arch;
d031aafb 510extern const bfd_arch_info_type bfd_mt_arch;
3b16e843
NC
511extern const bfd_arch_info_type bfd_ns32k_arch;
512extern const bfd_arch_info_type bfd_openrisc_arch;
513extern const bfd_arch_info_type bfd_or32_arch;
e135f41b 514extern const bfd_arch_info_type bfd_pdp11_arch;
3b16e843 515extern const bfd_arch_info_type bfd_pj_arch;
ce3c775b 516extern const bfd_arch_info_type bfd_plugin_arch;
899f54f5
AM
517extern const bfd_arch_info_type bfd_powerpc_archs[];
518#define bfd_powerpc_arch bfd_powerpc_archs[0]
252b5132 519extern const bfd_arch_info_type bfd_rs6000_arch;
c7927a3c 520extern const bfd_arch_info_type bfd_rx_arch;
3b16e843 521extern const bfd_arch_info_type bfd_s390_arch;
1c0d3aa6 522extern const bfd_arch_info_type bfd_score_arch;
252b5132
RH
523extern const bfd_arch_info_type bfd_sh_arch;
524extern const bfd_arch_info_type bfd_sparc_arch;
e9f53129 525extern const bfd_arch_info_type bfd_spu_arch;
252b5132 526extern const bfd_arch_info_type bfd_tic30_arch;
026df7c5 527extern const bfd_arch_info_type bfd_tic4x_arch;
81635ce4 528extern const bfd_arch_info_type bfd_tic54x_arch;
40b36596 529extern const bfd_arch_info_type bfd_tic6x_arch;
252b5132 530extern const bfd_arch_info_type bfd_tic80_arch;
3b16e843 531extern const bfd_arch_info_type bfd_v850_arch;
252b5132 532extern const bfd_arch_info_type bfd_vax_arch;
252b5132 533extern const bfd_arch_info_type bfd_w65_arch;
9e675548 534extern const bfd_arch_info_type bfd_we32k_arch;
93fbbb04 535extern const bfd_arch_info_type bfd_xstormy16_arch;
e0001a05 536extern const bfd_arch_info_type bfd_xtensa_arch;
d70c5fc7 537extern const bfd_arch_info_type bfd_xc16x_arch;
3c9b82ba 538extern const bfd_arch_info_type bfd_z80_arch;
3b16e843 539extern const bfd_arch_info_type bfd_z8k_arch;
252b5132 540
3b16e843
NC
541static const bfd_arch_info_type * const bfd_archures_list[] =
542 {
252b5132 543#ifdef SELECT_ARCHITECTURES
3b16e843 544 SELECT_ARCHITECTURES,
252b5132 545#else
3b16e843
NC
546 &bfd_alpha_arch,
547 &bfd_arc_arch,
548 &bfd_arm_arch,
549 &bfd_avr_arch,
0f64bb02 550 &bfd_bfin_arch,
3d3d428f 551 &bfd_cr16_arch,
0949843d 552 &bfd_cr16c_arch,
3b16e843 553 &bfd_cris_arch,
1fe1f39c 554 &bfd_crx_arch,
3b16e843
NC
555 &bfd_d10v_arch,
556 &bfd_d30v_arch,
d172d4ba 557 &bfd_dlx_arch,
3b16e843 558 &bfd_fr30_arch,
4e5ba5b7 559 &bfd_frv_arch,
3b16e843
NC
560 &bfd_h8300_arch,
561 &bfd_h8500_arch,
562 &bfd_hppa_arch,
563 &bfd_i370_arch,
564 &bfd_i386_arch,
565 &bfd_i860_arch,
566 &bfd_i960_arch,
567 &bfd_ia64_arch,
cf88bb9f 568 &bfd_ip2k_arch,
a75473eb 569 &bfd_iq2000_arch,
9e675548 570 &bfd_l1om_arch,
84e94c90 571 &bfd_lm32_arch,
e729279b 572 &bfd_m32c_arch,
3b16e843
NC
573 &bfd_m32r_arch,
574 &bfd_m68hc11_arch,
575 &bfd_m68hc12_arch,
576 &bfd_m68k_arch,
577 &bfd_m88k_arch,
578 &bfd_mcore_arch,
d9352518 579 &bfd_mep_arch,
7ba29e2a 580 &bfd_microblaze_arch,
3b16e843
NC
581 &bfd_mips_arch,
582 &bfd_mmix_arch,
583 &bfd_mn10200_arch,
584 &bfd_mn10300_arch,
9e675548 585 &bfd_moxie_arch,
2469cfa2 586 &bfd_msp430_arch,
9e675548 587 &bfd_mt_arch,
3b16e843
NC
588 &bfd_ns32k_arch,
589 &bfd_openrisc_arch,
590 &bfd_or32_arch,
591 &bfd_pdp11_arch,
592 &bfd_powerpc_arch,
593 &bfd_rs6000_arch,
c7927a3c 594 &bfd_rx_arch,
3b16e843 595 &bfd_s390_arch,
1c0d3aa6 596 &bfd_score_arch,
3b16e843
NC
597 &bfd_sh_arch,
598 &bfd_sparc_arch,
e9f53129 599 &bfd_spu_arch,
3b16e843 600 &bfd_tic30_arch,
026df7c5 601 &bfd_tic4x_arch,
3b16e843 602 &bfd_tic54x_arch,
40b36596 603 &bfd_tic6x_arch,
3b16e843
NC
604 &bfd_tic80_arch,
605 &bfd_v850_arch,
606 &bfd_vax_arch,
607 &bfd_w65_arch,
608 &bfd_we32k_arch,
609 &bfd_xstormy16_arch,
e0001a05 610 &bfd_xtensa_arch,
d70c5fc7 611 &bfd_xc16x_arch,
3c9b82ba 612 &bfd_z80_arch,
3b16e843 613 &bfd_z8k_arch,
252b5132
RH
614#endif
615 0
616};
617
618/*
619FUNCTION
620 bfd_printable_name
621
622SYNOPSIS
c58b9523 623 const char *bfd_printable_name (bfd *abfd);
252b5132
RH
624
625DESCRIPTION
626 Return a printable string representing the architecture and machine
627 from the pointer to the architecture info structure.
628
629*/
630
631const char *
c58b9523 632bfd_printable_name (bfd *abfd)
252b5132
RH
633{
634 return abfd->arch_info->printable_name;
635}
636
252b5132
RH
637/*
638FUNCTION
639 bfd_scan_arch
640
641SYNOPSIS
c58b9523 642 const bfd_arch_info_type *bfd_scan_arch (const char *string);
252b5132
RH
643
644DESCRIPTION
645 Figure out if BFD supports any cpu which could be described with
646 the name @var{string}. Return a pointer to an <<arch_info>>
647 structure if a machine is found, otherwise NULL.
252b5132
RH
648*/
649
650const bfd_arch_info_type *
c58b9523 651bfd_scan_arch (const char *string)
252b5132
RH
652{
653 const bfd_arch_info_type * const *app, *ap;
654
047066e1 655 /* Look through all the installed architectures. */
252b5132
RH
656 for (app = bfd_archures_list; *app != NULL; app++)
657 {
658 for (ap = *app; ap != NULL; ap = ap->next)
659 {
660 if (ap->scan (ap, string))
661 return ap;
662 }
663 }
664
665 return NULL;
666}
667
252b5132
RH
668/*
669FUNCTION
670 bfd_arch_list
671
672SYNOPSIS
c58b9523 673 const char **bfd_arch_list (void);
252b5132
RH
674
675DESCRIPTION
676 Return a freshly malloced NULL-terminated vector of the names
677 of all the valid BFD architectures. Do not modify the names.
252b5132
RH
678*/
679
680const char **
c58b9523 681bfd_arch_list (void)
252b5132
RH
682{
683 int vec_length = 0;
684 const char **name_ptr;
685 const char **name_list;
686 const bfd_arch_info_type * const *app;
dc810e39 687 bfd_size_type amt;
252b5132 688
047066e1 689 /* Determine the number of architectures. */
252b5132
RH
690 vec_length = 0;
691 for (app = bfd_archures_list; *app != NULL; app++)
692 {
693 const bfd_arch_info_type *ap;
694 for (ap = *app; ap != NULL; ap = ap->next)
695 {
696 vec_length++;
697 }
698 }
699
dc810e39 700 amt = (vec_length + 1) * sizeof (char **);
a50b1753 701 name_list = (const char **) bfd_malloc (amt);
252b5132
RH
702 if (name_list == NULL)
703 return NULL;
704
047066e1 705 /* Point the list at each of the names. */
252b5132
RH
706 name_ptr = name_list;
707 for (app = bfd_archures_list; *app != NULL; app++)
708 {
709 const bfd_arch_info_type *ap;
710 for (ap = *app; ap != NULL; ap = ap->next)
711 {
712 *name_ptr = ap->printable_name;
713 name_ptr++;
714 }
715 }
716 *name_ptr = NULL;
717
718 return name_list;
719}
720
252b5132
RH
721/*
722FUNCTION
723 bfd_arch_get_compatible
724
725SYNOPSIS
c58b9523
AM
726 const bfd_arch_info_type *bfd_arch_get_compatible
727 (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
252b5132
RH
728
729DESCRIPTION
312b768e
NC
730 Determine whether two BFDs' architectures and machine types
731 are compatible. Calculates the lowest common denominator
732 between the two architectures and machine types implied by
733 the BFDs and returns a pointer to an <<arch_info>> structure
734 describing the compatible machine.
252b5132
RH
735*/
736
737const bfd_arch_info_type *
c58b9523
AM
738bfd_arch_get_compatible (const bfd *abfd,
739 const bfd *bbfd,
740 bfd_boolean accept_unknowns)
252b5132 741{
312b768e
NC
742 const bfd * ubfd = NULL;
743
744 /* Look for an unknown architecture. */
745 if (((ubfd = abfd) && ubfd->arch_info->arch == bfd_arch_unknown)
746 || ((ubfd = bbfd) && ubfd->arch_info->arch == bfd_arch_unknown))
747 {
748 /* We can allow an unknown architecture if accept_unknowns
749 is true, or if the target is the "binary" format, which
750 has an unknown architecture. Since the binary format can
751 only be set by explicit request from the user, it is safe
752 to assume that they know what they are doing. */
753 if (accept_unknowns
754 || strcmp (bfd_get_target (ubfd), "binary") == 0)
755 return ubfd->arch_info;
756 return NULL;
757 }
252b5132
RH
758
759 /* Otherwise architecture-specific code has to decide. */
760 return abfd->arch_info->compatible (abfd->arch_info, bbfd->arch_info);
761}
762
252b5132
RH
763/*
764INTERNAL_DEFINITION
765 bfd_default_arch_struct
766
767DESCRIPTION
768 The <<bfd_default_arch_struct>> is an item of
769 <<bfd_arch_info_type>> which has been initialized to a fairly
770 generic state. A BFD starts life by pointing to this
771 structure, until the correct back end has determined the real
772 architecture of the file.
773
774.extern const bfd_arch_info_type bfd_default_arch_struct;
252b5132
RH
775*/
776
047066e1 777const bfd_arch_info_type bfd_default_arch_struct = {
b34976b6 778 32, 32, 8, bfd_arch_unknown, 0, "unknown", "unknown", 2, TRUE,
047066e1
KH
779 bfd_default_compatible,
780 bfd_default_scan,
781 0,
252b5132
RH
782};
783
784/*
785FUNCTION
786 bfd_set_arch_info
787
788SYNOPSIS
c58b9523 789 void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
252b5132
RH
790
791DESCRIPTION
792 Set the architecture info of @var{abfd} to @var{arg}.
793*/
794
795void
c58b9523 796bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg)
252b5132
RH
797{
798 abfd->arch_info = arg;
799}
800
801/*
802INTERNAL_FUNCTION
803 bfd_default_set_arch_mach
804
805SYNOPSIS
c58b9523
AM
806 bfd_boolean bfd_default_set_arch_mach
807 (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
252b5132
RH
808
809DESCRIPTION
810 Set the architecture and machine type in BFD @var{abfd}
811 to @var{arch} and @var{mach}. Find the correct
812 pointer to a structure and insert it into the <<arch_info>>
0ef5a5bd 813 pointer.
252b5132
RH
814*/
815
b34976b6 816bfd_boolean
c58b9523
AM
817bfd_default_set_arch_mach (bfd *abfd,
818 enum bfd_architecture arch,
819 unsigned long mach)
252b5132 820{
99dc0092
AM
821 abfd->arch_info = bfd_lookup_arch (arch, mach);
822 if (abfd->arch_info != NULL)
b34976b6 823 return TRUE;
252b5132
RH
824
825 abfd->arch_info = &bfd_default_arch_struct;
826 bfd_set_error (bfd_error_bad_value);
b34976b6 827 return FALSE;
252b5132
RH
828}
829
252b5132
RH
830/*
831FUNCTION
832 bfd_get_arch
833
834SYNOPSIS
c58b9523 835 enum bfd_architecture bfd_get_arch (bfd *abfd);
252b5132
RH
836
837DESCRIPTION
838 Return the enumerated type which describes the BFD @var{abfd}'s
839 architecture.
252b5132
RH
840*/
841
842enum bfd_architecture
c58b9523 843bfd_get_arch (bfd *abfd)
252b5132 844{
047066e1 845 return abfd->arch_info->arch;
252b5132
RH
846}
847
848/*
849FUNCTION
850 bfd_get_mach
851
852SYNOPSIS
c58b9523 853 unsigned long bfd_get_mach (bfd *abfd);
252b5132
RH
854
855DESCRIPTION
856 Return the long type which describes the BFD @var{abfd}'s
857 machine.
858*/
859
0ef5a5bd 860unsigned long
c58b9523 861bfd_get_mach (bfd *abfd)
252b5132 862{
047066e1 863 return abfd->arch_info->mach;
252b5132
RH
864}
865
866/*
867FUNCTION
868 bfd_arch_bits_per_byte
869
870SYNOPSIS
c58b9523 871 unsigned int bfd_arch_bits_per_byte (bfd *abfd);
252b5132
RH
872
873DESCRIPTION
874 Return the number of bits in one of the BFD @var{abfd}'s
875 architecture's bytes.
252b5132
RH
876*/
877
878unsigned int
c58b9523 879bfd_arch_bits_per_byte (bfd *abfd)
252b5132
RH
880{
881 return abfd->arch_info->bits_per_byte;
882}
883
884/*
885FUNCTION
886 bfd_arch_bits_per_address
887
888SYNOPSIS
c58b9523 889 unsigned int bfd_arch_bits_per_address (bfd *abfd);
252b5132
RH
890
891DESCRIPTION
892 Return the number of bits in one of the BFD @var{abfd}'s
893 architecture's addresses.
894*/
895
896unsigned int
c58b9523 897bfd_arch_bits_per_address (bfd *abfd)
252b5132
RH
898{
899 return abfd->arch_info->bits_per_address;
900}
901
252b5132 902/*
0ef5a5bd 903INTERNAL_FUNCTION
252b5132
RH
904 bfd_default_compatible
905
906SYNOPSIS
907 const bfd_arch_info_type *bfd_default_compatible
c58b9523 908 (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
252b5132
RH
909
910DESCRIPTION
911 The default function for testing for compatibility.
912*/
913
914const bfd_arch_info_type *
c58b9523
AM
915bfd_default_compatible (const bfd_arch_info_type *a,
916 const bfd_arch_info_type *b)
252b5132
RH
917{
918 if (a->arch != b->arch)
919 return NULL;
920
b74fa2cd
AM
921 if (a->bits_per_word != b->bits_per_word)
922 return NULL;
923
252b5132
RH
924 if (a->mach > b->mach)
925 return a;
926
927 if (b->mach > a->mach)
928 return b;
929
930 return a;
931}
932
252b5132
RH
933/*
934INTERNAL_FUNCTION
935 bfd_default_scan
936
937SYNOPSIS
c58b9523
AM
938 bfd_boolean bfd_default_scan
939 (const struct bfd_arch_info *info, const char *string);
252b5132
RH
940
941DESCRIPTION
942 The default function for working out whether this is an
943 architecture hit and a machine hit.
944*/
945
b34976b6 946bfd_boolean
c58b9523 947bfd_default_scan (const bfd_arch_info_type *info, const char *string)
252b5132
RH
948{
949 const char *ptr_src;
950 const char *ptr_tst;
951 unsigned long number;
952 enum bfd_architecture arch;
953 const char *printable_name_colon;
954
955 /* Exact match of the architecture name (ARCH_NAME) and also the
047066e1 956 default architecture? */
252b5132
RH
957 if (strcasecmp (string, info->arch_name) == 0
958 && info->the_default)
b34976b6 959 return TRUE;
252b5132 960
047066e1 961 /* Exact match of the machine name (PRINTABLE_NAME)? */
252b5132 962 if (strcasecmp (string, info->printable_name) == 0)
b34976b6 963 return TRUE;
0ef5a5bd 964
252b5132 965 /* Given that printable_name contains no colon, attempt to match:
047066e1 966 ARCH_NAME [ ":" ] PRINTABLE_NAME? */
252b5132
RH
967 printable_name_colon = strchr (info->printable_name, ':');
968 if (printable_name_colon == NULL)
969 {
dc810e39 970 size_t strlen_arch_name = strlen (info->arch_name);
252b5132
RH
971 if (strncasecmp (string, info->arch_name, strlen_arch_name) == 0)
972 {
973 if (string[strlen_arch_name] == ':')
974 {
975 if (strcasecmp (string + strlen_arch_name + 1,
976 info->printable_name) == 0)
b34976b6 977 return TRUE;
252b5132
RH
978 }
979 else
980 {
981 if (strcasecmp (string + strlen_arch_name,
982 info->printable_name) == 0)
b34976b6 983 return TRUE;
252b5132
RH
984 }
985 }
986 }
987
988 /* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>;
047066e1 989 Attempt to match: <arch> <mach>? */
252b5132
RH
990 if (printable_name_colon != NULL)
991 {
dc810e39 992 size_t colon_index = printable_name_colon - info->printable_name;
252b5132
RH
993 if (strncasecmp (string, info->printable_name, colon_index) == 0
994 && strcasecmp (string + colon_index,
995 info->printable_name + colon_index + 1) == 0)
b34976b6 996 return TRUE;
252b5132
RH
997 }
998
999 /* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>; Do not
5c4491d3 1000 attempt to match just <mach>, it could be ambiguous. This test
0ef5a5bd 1001 is left until later. */
252b5132 1002
047066e1
KH
1003 /* NOTE: The below is retained for compatibility only. Please do
1004 not add to this code. */
252b5132
RH
1005
1006 /* See how much of the supplied string matches with the
1007 architecture, eg the string m68k:68020 would match the 68k entry
047066e1 1008 up to the :, then we get left with the machine number. */
252b5132 1009
0ef5a5bd 1010 for (ptr_src = string, ptr_tst = info->arch_name;
252b5132 1011 *ptr_src && *ptr_tst;
0ef5a5bd 1012 ptr_src++, ptr_tst++)
252b5132 1013 {
047066e1
KH
1014 if (*ptr_src != *ptr_tst)
1015 break;
252b5132
RH
1016 }
1017
1018 /* Chewed up as much of the architecture as will match, skip any
047066e1 1019 colons. */
252b5132
RH
1020 if (*ptr_src == ':')
1021 ptr_src++;
0ef5a5bd 1022
252b5132
RH
1023 if (*ptr_src == 0)
1024 {
047066e1
KH
1025 /* Nothing more, then only keep this one if it is the default
1026 machine for this architecture. */
252b5132
RH
1027 return info->the_default;
1028 }
1029
1030 number = 0;
3882b010 1031 while (ISDIGIT (*ptr_src))
252b5132 1032 {
047066e1 1033 number = number * 10 + *ptr_src - '0';
252b5132
RH
1034 ptr_src++;
1035 }
1036
1037 /* NOTE: The below is retained for compatibility only.
0ef5a5bd 1038 PLEASE DO NOT ADD TO THIS CODE. */
252b5132 1039
0ef5a5bd 1040 switch (number)
252b5132
RH
1041 {
1042 /* FIXME: These are needed to parse IEEE objects. */
83ea41ad
NC
1043 /* The following seven case's are here only for compatibility with
1044 older binutils (at least IEEE objects from binutils 2.9.1 require
1045 them). */
1046 case bfd_mach_m68000:
1047 case bfd_mach_m68010:
1048 case bfd_mach_m68020:
1049 case bfd_mach_m68030:
1050 case bfd_mach_m68040:
1051 case bfd_mach_m68060:
1052 case bfd_mach_cpu32:
1053 arch = bfd_arch_m68k;
1054 break;
0ef5a5bd 1055 case 68000:
252b5132
RH
1056 arch = bfd_arch_m68k;
1057 number = bfd_mach_m68000;
1058 break;
1059 case 68010:
1060 arch = bfd_arch_m68k;
1061 number = bfd_mach_m68010;
1062 break;
1063 case 68020:
1064 arch = bfd_arch_m68k;
1065 number = bfd_mach_m68020;
1066 break;
1067 case 68030:
1068 arch = bfd_arch_m68k;
1069 number = bfd_mach_m68030;
1070 break;
1071 case 68040:
1072 arch = bfd_arch_m68k;
1073 number = bfd_mach_m68040;
1074 break;
1075 case 68060:
1076 arch = bfd_arch_m68k;
1077 number = bfd_mach_m68060;
1078 break;
1079 case 68332:
1080 arch = bfd_arch_m68k;
1081 number = bfd_mach_cpu32;
1082 break;
3cac17ae
NC
1083 case 5200:
1084 arch = bfd_arch_m68k;
0b2e31dc 1085 number = bfd_mach_mcf_isa_a_nodiv;
3cac17ae
NC
1086 break;
1087 case 5206:
1088 arch = bfd_arch_m68k;
0b2e31dc 1089 number = bfd_mach_mcf_isa_a_mac;
3cac17ae
NC
1090 break;
1091 case 5307:
1092 arch = bfd_arch_m68k;
0b2e31dc 1093 number = bfd_mach_mcf_isa_a_mac;
3cac17ae
NC
1094 break;
1095 case 5407:
1096 arch = bfd_arch_m68k;
0b2e31dc 1097 number = bfd_mach_mcf_isa_b_nousp_mac;
3cac17ae 1098 break;
3e602632
NC
1099 case 5282:
1100 arch = bfd_arch_m68k;
0b2e31dc 1101 number = bfd_mach_mcf_isa_aplus_emac;
3e602632 1102 break;
252b5132
RH
1103
1104 case 32000:
1105 arch = bfd_arch_we32k;
1106 break;
1107
1108 case 3000:
1109 arch = bfd_arch_mips;
1110 number = bfd_mach_mips3000;
1111 break;
1112
1113 case 4000:
1114 arch = bfd_arch_mips;
1115 number = bfd_mach_mips4000;
1116 break;
1117
1118 case 6000:
1119 arch = bfd_arch_rs6000;
1120 break;
1121
d4845d57
JR
1122 case 7410:
1123 arch = bfd_arch_sh;
1124 number = bfd_mach_sh_dsp;
1125 break;
1126
1127 case 7708:
1128 arch = bfd_arch_sh;
1129 number = bfd_mach_sh3;
1130 break;
1131
1132 case 7729:
1133 arch = bfd_arch_sh;
1134 number = bfd_mach_sh3_dsp;
1135 break;
1136
1137 case 7750:
1138 arch = bfd_arch_sh;
1139 number = bfd_mach_sh4;
1140 break;
1141
0ef5a5bd 1142 default:
b34976b6 1143 return FALSE;
252b5132
RH
1144 }
1145
0ef5a5bd 1146 if (arch != info->arch)
b34976b6 1147 return FALSE;
252b5132
RH
1148
1149 if (number != info->mach)
b34976b6 1150 return FALSE;
252b5132 1151
b34976b6 1152 return TRUE;
252b5132
RH
1153}
1154
252b5132
RH
1155/*
1156FUNCTION
1157 bfd_get_arch_info
1158
1159SYNOPSIS
c58b9523 1160 const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
252b5132
RH
1161
1162DESCRIPTION
1163 Return the architecture info struct in @var{abfd}.
1164*/
1165
1166const bfd_arch_info_type *
c58b9523 1167bfd_get_arch_info (bfd *abfd)
252b5132
RH
1168{
1169 return abfd->arch_info;
1170}
1171
252b5132
RH
1172/*
1173FUNCTION
1174 bfd_lookup_arch
1175
1176SYNOPSIS
1177 const bfd_arch_info_type *bfd_lookup_arch
c58b9523 1178 (enum bfd_architecture arch, unsigned long machine);
252b5132
RH
1179
1180DESCRIPTION
5c4491d3 1181 Look for the architecture info structure which matches the
252b5132
RH
1182 arguments @var{arch} and @var{machine}. A machine of 0 matches the
1183 machine/architecture structure which marks itself as the
aa3d5824 1184 default.
252b5132
RH
1185*/
1186
0ef5a5bd 1187const bfd_arch_info_type *
c58b9523 1188bfd_lookup_arch (enum bfd_architecture arch, unsigned long machine)
252b5132
RH
1189{
1190 const bfd_arch_info_type * const *app, *ap;
1191
1192 for (app = bfd_archures_list; *app != NULL; app++)
1193 {
1194 for (ap = *app; ap != NULL; ap = ap->next)
1195 {
1196 if (ap->arch == arch
1197 && (ap->mach == machine
1198 || (machine == 0 && ap->the_default)))
1199 return ap;
1200 }
1201 }
1202
1203 return NULL;
1204}
1205
252b5132
RH
1206/*
1207FUNCTION
1208 bfd_printable_arch_mach
1209
1210SYNOPSIS
1211 const char *bfd_printable_arch_mach
c58b9523 1212 (enum bfd_architecture arch, unsigned long machine);
252b5132
RH
1213
1214DESCRIPTION
1215 Return a printable string representing the architecture and
0ef5a5bd 1216 machine type.
252b5132
RH
1217
1218 This routine is depreciated.
1219*/
1220
1221const char *
c58b9523 1222bfd_printable_arch_mach (enum bfd_architecture arch, unsigned long machine)
252b5132 1223{
047066e1 1224 const bfd_arch_info_type *ap = bfd_lookup_arch (arch, machine);
252b5132 1225
047066e1
KH
1226 if (ap)
1227 return ap->printable_name;
1228 return "UNKNOWN!";
252b5132 1229}
9a968f43
NC
1230
1231/*
1232FUNCTION
1233 bfd_octets_per_byte
1234
1235SYNOPSIS
c58b9523 1236 unsigned int bfd_octets_per_byte (bfd *abfd);
9a968f43
NC
1237
1238DESCRIPTION
1239 Return the number of octets (8-bit quantities) per target byte
1240 (minimum addressable unit). In most cases, this will be one, but some
1241 DSP targets have 16, 32, or even 48 bits per byte.
9a968f43
NC
1242*/
1243
f6af82bd 1244unsigned int
c58b9523 1245bfd_octets_per_byte (bfd *abfd)
9a968f43 1246{
047066e1
KH
1247 return bfd_arch_mach_octets_per_byte (bfd_get_arch (abfd),
1248 bfd_get_mach (abfd));
9a968f43
NC
1249}
1250
1251/*
1252FUNCTION
1253 bfd_arch_mach_octets_per_byte
1254
1255SYNOPSIS
c58b9523
AM
1256 unsigned int bfd_arch_mach_octets_per_byte
1257 (enum bfd_architecture arch, unsigned long machine);
9a968f43
NC
1258
1259DESCRIPTION
1260 See bfd_octets_per_byte.
0ef5a5bd 1261
9a968f43
NC
1262 This routine is provided for those cases where a bfd * is not
1263 available
1264*/
1265
f6af82bd 1266unsigned int
c58b9523
AM
1267bfd_arch_mach_octets_per_byte (enum bfd_architecture arch,
1268 unsigned long mach)
9a968f43 1269{
047066e1 1270 const bfd_arch_info_type *ap = bfd_lookup_arch (arch, mach);
0ef5a5bd 1271
047066e1
KH
1272 if (ap)
1273 return ap->bits_per_byte / 8;
1274 return 1;
9a968f43 1275}
This page took 0.557744 seconds and 4 git commands to generate.