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,
3db64b00 3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
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
252b5132 170.#define bfd_mach_mips16 16
84ea6cf2 171.#define bfd_mach_mips5 5
350cc38d
MS
172.#define bfd_mach_mips_loongson_2e 3001
173.#define bfd_mach_mips_loongson_2f 3002
c6c98b38 174.#define bfd_mach_mips_sb1 12310201 {* octal 'SB', 01 *}
a1cd6a8f 175.#define bfd_mach_mipsisa32 32
af7ee8bf 176.#define bfd_mach_mipsisa32r2 33
a1cd6a8f 177.#define bfd_mach_mipsisa64 64
5f74bc13 178.#define bfd_mach_mipsisa64r2 65
252b5132 179. bfd_arch_i386, {* Intel 386 *}
686e4055
AM
180.#define bfd_mach_i386_i386 1
181.#define bfd_mach_i386_i8086 2
182.#define bfd_mach_i386_i386_intel_syntax 3
183.#define bfd_mach_x86_64 64
184.#define bfd_mach_x86_64_intel_syntax 65
252b5132
RH
185. bfd_arch_we32k, {* AT&T WE32xxx *}
186. bfd_arch_tahoe, {* CCI/Harris Tahoe *}
187. bfd_arch_i860, {* Intel 860 *}
5b93d8bb 188. bfd_arch_i370, {* IBM 360/370 Mainframes *}
252b5132 189. bfd_arch_romp, {* IBM ROMP PC/RT *}
252b5132
RH
190. bfd_arch_convex, {* Convex *}
191. bfd_arch_m88k, {* Motorola 88xxx *}
3af9a47b 192. bfd_arch_m98k, {* Motorola 98xxx *}
252b5132 193. bfd_arch_pyramid, {* Pyramid Technology *}
c2dcd04e 194. bfd_arch_h8300, {* Renesas H8/300 (formerly Hitachi H8/300) *}
8d9cd6b1
NC
195.#define bfd_mach_h8300 1
196.#define bfd_mach_h8300h 2
197.#define bfd_mach_h8300s 3
198.#define bfd_mach_h8300hn 4
199.#define bfd_mach_h8300sn 5
5d1db417 200.#define bfd_mach_h8300sx 6
f4984206 201.#define bfd_mach_h8300sxn 7
e135f41b 202. bfd_arch_pdp11, {* DEC PDP-11 *}
252b5132 203. bfd_arch_powerpc, {* PowerPC *}
686e4055
AM
204.#define bfd_mach_ppc 32
205.#define bfd_mach_ppc64 64
87f33987
ND
206.#define bfd_mach_ppc_403 403
207.#define bfd_mach_ppc_403gc 4030
208.#define bfd_mach_ppc_505 505
209.#define bfd_mach_ppc_601 601
210.#define bfd_mach_ppc_602 602
211.#define bfd_mach_ppc_603 603
212.#define bfd_mach_ppc_ec603e 6031
213.#define bfd_mach_ppc_604 604
214.#define bfd_mach_ppc_620 620
215.#define bfd_mach_ppc_630 630
216.#define bfd_mach_ppc_750 750
217.#define bfd_mach_ppc_860 860
218.#define bfd_mach_ppc_a35 35
219.#define bfd_mach_ppc_rs64ii 642
220.#define bfd_mach_ppc_rs64iii 643
221.#define bfd_mach_ppc_7400 7400
d62b1198 222.#define bfd_mach_ppc_e500 500
252b5132 223. bfd_arch_rs6000, {* IBM RS/6000 *}
686e4055 224.#define bfd_mach_rs6k 6000
87f33987
ND
225.#define bfd_mach_rs6k_rs1 6001
226.#define bfd_mach_rs6k_rsc 6003
227.#define bfd_mach_rs6k_rs2 6002
252b5132 228. bfd_arch_hppa, {* HP PA RISC *}
42acdc7c
JB
229.#define bfd_mach_hppa10 10
230.#define bfd_mach_hppa11 11
231.#define bfd_mach_hppa20 20
232.#define bfd_mach_hppa20w 25
252b5132 233. bfd_arch_d10v, {* Mitsubishi D10V *}
686e4055 234.#define bfd_mach_d10v 1
7af8cca9
MM
235.#define bfd_mach_d10v_ts2 2
236.#define bfd_mach_d10v_ts3 3
252b5132 237. bfd_arch_d30v, {* Mitsubishi D30V *}
d172d4ba 238. bfd_arch_dlx, {* DLX *}
60bcf0fa
NC
239. bfd_arch_m68hc11, {* Motorola 68HC11 *}
240. bfd_arch_m68hc12, {* Motorola 68HC12 *}
bc7c6a90
SC
241.#define bfd_mach_m6812_default 0
242.#define bfd_mach_m6812 1
243.#define bfd_mach_m6812s 2
252b5132
RH
244. bfd_arch_z8k, {* Zilog Z8000 *}
245.#define bfd_mach_z8001 1
246.#define bfd_mach_z8002 2
c2dcd04e 247. bfd_arch_h8500, {* Renesas H8/500 (formerly Hitachi H8/500) *}
ef230218 248. bfd_arch_sh, {* Renesas / SuperH SH (formerly Hitachi SH) *}
686e4055 249.#define bfd_mach_sh 1
d4845d57
JR
250.#define bfd_mach_sh2 0x20
251.#define bfd_mach_sh_dsp 0x2d
1d70c7fb
AO
252.#define bfd_mach_sh2a 0x2a
253.#define bfd_mach_sh2a_nofpu 0x2b
e38bc3b5
NC
254.#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
255.#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
256.#define bfd_mach_sh2a_or_sh4 0x2a3
257.#define bfd_mach_sh2a_or_sh3e 0x2a4
5177500f 258.#define bfd_mach_sh2e 0x2e
252b5132 259.#define bfd_mach_sh3 0x30
f6f9408f 260.#define bfd_mach_sh3_nommu 0x31
d4845d57 261.#define bfd_mach_sh3_dsp 0x3d
252b5132 262.#define bfd_mach_sh3e 0x3e
d4845d57 263.#define bfd_mach_sh4 0x40
af9ba621 264.#define bfd_mach_sh4_nofpu 0x41
ae51a426 265.#define bfd_mach_sh4_nommu_nofpu 0x42
af9ba621
CV
266.#define bfd_mach_sh4a 0x4a
267.#define bfd_mach_sh4a_nofpu 0x4b
268.#define bfd_mach_sh4al_dsp 0x4d
fbca6ad9 269.#define bfd_mach_sh5 0x50
252b5132
RH
270. bfd_arch_alpha, {* Dec Alpha *}
271.#define bfd_mach_alpha_ev4 0x10
272.#define bfd_mach_alpha_ev5 0x20
273.#define bfd_mach_alpha_ev6 0x30
c312a6a4 274. bfd_arch_arm, {* Advanced Risc Machines ARM. *}
5a6c6817 275.#define bfd_mach_arm_unknown 0
252b5132 276.#define bfd_mach_arm_2 1
478d07d6 277.#define bfd_mach_arm_2a 2
252b5132
RH
278.#define bfd_mach_arm_3 3
279.#define bfd_mach_arm_3M 4
478d07d6 280.#define bfd_mach_arm_4 5
252b5132 281.#define bfd_mach_arm_4T 6
478d07d6
NC
282.#define bfd_mach_arm_5 7
283.#define bfd_mach_arm_5T 8
077b8428
NC
284.#define bfd_mach_arm_5TE 9
285.#define bfd_mach_arm_XScale 10
fde78edd 286.#define bfd_mach_arm_ep9312 11
e16bb312 287.#define bfd_mach_arm_iWMMXt 12
2d447fca 288.#define bfd_mach_arm_iWMMXt2 13
252b5132
RH
289. bfd_arch_ns32k, {* National Semiconductors ns32000 *}
290. bfd_arch_w65, {* WDC 65816 *}
291. bfd_arch_tic30, {* Texas Instruments TMS320C30 *}
026df7c5 292. bfd_arch_tic4x, {* Texas Instruments TMS320C3X/4X *}
be33c5dd
SS
293.#define bfd_mach_tic3x 30
294.#define bfd_mach_tic4x 40
81635ce4 295. bfd_arch_tic54x, {* Texas Instruments TMS320C54X *}
252b5132
RH
296. bfd_arch_tic80, {* TI TMS320c80 (MVP) *}
297. bfd_arch_v850, {* NEC V850 *}
686e4055 298.#define bfd_mach_v850 1
252b5132 299.#define bfd_mach_v850e 'E'
8ad30312 300.#define bfd_mach_v850e1 '1'
0d2bcfaf 301. bfd_arch_arc, {* ARC Cores *}
686e4055
AM
302.#define bfd_mach_arc_5 5
303.#define bfd_mach_arc_6 6
304.#define bfd_mach_arc_7 7
305.#define bfd_mach_arc_8 8
49f58d10
JB
306. bfd_arch_m32c, {* Renesas M16C/M32C. *}
307.#define bfd_mach_m16c 0x75
308.#define bfd_mach_m32c 0x78
26597c86 309. bfd_arch_m32r, {* Renesas M32R (formerly Mitsubishi M32R/D) *}
686e4055 310.#define bfd_mach_m32r 1 {* For backwards compatibility. *}
a23ef39f 311.#define bfd_mach_m32rx 'x'
88845958 312.#define bfd_mach_m32r2 '2'
252b5132
RH
313. bfd_arch_mn10200, {* Matsushita MN10200 *}
314. bfd_arch_mn10300, {* Matsushita MN10300 *}
315.#define bfd_mach_mn10300 300
31f8dc8f 316.#define bfd_mach_am33 330
b08fa4d3 317.#define bfd_mach_am33_2 332
252b5132
RH
318. bfd_arch_fr30,
319.#define bfd_mach_fr30 0x46523330
4e5ba5b7 320. bfd_arch_frv,
686e4055
AM
321.#define bfd_mach_frv 1
322.#define bfd_mach_frvsimple 2
4e5ba5b7
DB
323.#define bfd_mach_fr300 300
324.#define bfd_mach_fr400 400
676a64f4 325.#define bfd_mach_fr450 450
4e5ba5b7
DB
326.#define bfd_mach_frvtomcat 499 {* fr500 prototype *}
327.#define bfd_mach_fr500 500
9c8ee639 328.#define bfd_mach_fr550 550
252b5132 329. bfd_arch_mcore,
d9352518
DB
330. bfd_arch_mep,
331.#define bfd_mach_mep 1
332.#define bfd_mach_mep_h1 0x6831
800eeca4 333. bfd_arch_ia64, {* HP/Intel ia64 *}
686e4055
AM
334.#define bfd_mach_ia64_elf64 64
335.#define bfd_mach_ia64_elf32 32
cf88bb9f 336. bfd_arch_ip2k, {* Ubicom IP2K microcontrollers. *}
686e4055
AM
337.#define bfd_mach_ip2022 1
338.#define bfd_mach_ip2022ext 2
a75473eb
SC
339. bfd_arch_iq2000, {* Vitesse IQ2000. *}
340.#define bfd_mach_iq2000 1
341.#define bfd_mach_iq10 2
d031aafb 342. bfd_arch_mt,
de33e640
AH
343.#define bfd_mach_ms1 1
344.#define bfd_mach_mrisc2 2
6f84a2a6 345.#define bfd_mach_ms2 3
0bcb993b 346. bfd_arch_pj,
c312a6a4 347. bfd_arch_avr, {* Atmel AVR microcontrollers. *}
adde6300
AM
348.#define bfd_mach_avr1 1
349.#define bfd_mach_avr2 2
350.#define bfd_mach_avr3 3
351.#define bfd_mach_avr4 4
65aa24b6 352.#define bfd_mach_avr5 5
28c9d252 353.#define bfd_mach_avr6 6
0f64bb02
CM
354. bfd_arch_bfin, {* ADI Blackfin *}
355.#define bfd_mach_bfin 1
3d3d428f
NC
356. bfd_arch_cr16, {* National Semiconductor CompactRISC (ie CR16). *}
357.#define bfd_mach_cr16 1
0949843d
NC
358. bfd_arch_cr16c, {* National Semiconductor CompactRISC. *}
359.#define bfd_mach_cr16c 1
1fe1f39c
NC
360. bfd_arch_crx, {* National Semiconductor CRX. *}
361.#define bfd_mach_crx 1
06c15ad7 362. bfd_arch_cris, {* Axis CRIS *}
bac23f82
HPN
363.#define bfd_mach_cris_v0_v10 255
364.#define bfd_mach_cris_v32 32
365.#define bfd_mach_cris_v10_v32 1032
a85d7ed0 366. bfd_arch_s390, {* IBM s390 *}
686e4055
AM
367.#define bfd_mach_s390_31 31
368.#define bfd_mach_s390_64 64
1c0d3aa6 369. bfd_arch_score, {* Sunplus score *}
b3baf5d0 370. bfd_arch_openrisc, {* OpenRISC *}
c312a6a4 371. bfd_arch_mmix, {* Donald Knuth's educational processor. *}
93fbbb04 372. bfd_arch_xstormy16,
686e4055 373.#define bfd_mach_xstormy16 1
2469cfa2 374. bfd_arch_msp430, {* Texas Instruments MSP430 architecture. *}
2469cfa2 375.#define bfd_mach_msp11 11
3b260895 376.#define bfd_mach_msp110 110
2469cfa2
NC
377.#define bfd_mach_msp12 12
378.#define bfd_mach_msp13 13
379.#define bfd_mach_msp14 14
3b260895 380.#define bfd_mach_msp15 15
d70c5fc7 381.#define bfd_mach_msp16 16
44c86e8c 382.#define bfd_mach_msp21 21
2469cfa2
NC
383.#define bfd_mach_msp31 31
384.#define bfd_mach_msp32 32
385.#define bfd_mach_msp33 33
3b260895
NC
386.#define bfd_mach_msp41 41
387.#define bfd_mach_msp42 42
2469cfa2
NC
388.#define bfd_mach_msp43 43
389.#define bfd_mach_msp44 44
d70c5fc7
NC
390. bfd_arch_xc16x, {* Infineon's XC16X Series. *}
391.#define bfd_mach_xc16x 1
392.#define bfd_mach_xc16xl 2
393.#define bfd_mach_xc16xs 3
e0001a05
NC
394. bfd_arch_xtensa, {* Tensilica's Xtensa cores. *}
395.#define bfd_mach_xtensa 1
7499d566 396. bfd_arch_maxq, {* Dallas MAXQ 10/20 *}
5c4504f7
NC
397.#define bfd_mach_maxq10 10
398.#define bfd_mach_maxq20 20
3c9b82ba
NC
399. bfd_arch_z80,
400.#define bfd_mach_z80strict 1 {* No undocumented opcodes. *}
401.#define bfd_mach_z80 3 {* With ixl, ixh, iyl, and iyh. *}
402.#define bfd_mach_z80full 7 {* All undocumented instructions. *}
403.#define bfd_mach_r800 11 {* R800: successor with multiplication. *}
252b5132
RH
404. bfd_arch_last
405. };
252b5132
RH
406*/
407
408/*
252b5132
RH
409SUBSECTION
410 bfd_arch_info
411
412DESCRIPTION
413 This structure contains information on architectures for use
414 within BFD.
415
416.
0ef5a5bd 417.typedef struct bfd_arch_info
252b5132
RH
418.{
419. int bits_per_word;
420. int bits_per_address;
421. int bits_per_byte;
422. enum bfd_architecture arch;
423. unsigned long mach;
424. const char *arch_name;
425. const char *printable_name;
426. unsigned int section_align_power;
b34976b6 427. {* TRUE if this is the default machine for the architecture.
aa3d5824
AM
428. The default arch should be the first entry for an arch so that
429. all the entries for that arch can be accessed via <<next>>. *}
b34976b6 430. bfd_boolean the_default;
252b5132 431. const struct bfd_arch_info * (*compatible)
c58b9523 432. (const struct bfd_arch_info *a, const struct bfd_arch_info *b);
252b5132 433.
c58b9523 434. bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
252b5132
RH
435.
436. const struct bfd_arch_info *next;
3b16e843
NC
437.}
438.bfd_arch_info_type;
439.
252b5132
RH
440*/
441
252b5132
RH
442extern const bfd_arch_info_type bfd_alpha_arch;
443extern const bfd_arch_info_type bfd_arc_arch;
444extern const bfd_arch_info_type bfd_arm_arch;
3b16e843 445extern const bfd_arch_info_type bfd_avr_arch;
0f64bb02 446extern const bfd_arch_info_type bfd_bfin_arch;
3d3d428f 447extern const bfd_arch_info_type bfd_cr16_arch;
0949843d 448extern const bfd_arch_info_type bfd_cr16c_arch;
06c15ad7 449extern const bfd_arch_info_type bfd_cris_arch;
1fe1f39c 450extern const bfd_arch_info_type bfd_crx_arch;
252b5132
RH
451extern const bfd_arch_info_type bfd_d10v_arch;
452extern const bfd_arch_info_type bfd_d30v_arch;
d172d4ba 453extern const bfd_arch_info_type bfd_dlx_arch;
3b16e843 454extern const bfd_arch_info_type bfd_fr30_arch;
4e5ba5b7 455extern const bfd_arch_info_type bfd_frv_arch;
252b5132
RH
456extern const bfd_arch_info_type bfd_h8300_arch;
457extern const bfd_arch_info_type bfd_h8500_arch;
458extern const bfd_arch_info_type bfd_hppa_arch;
5b93d8bb 459extern const bfd_arch_info_type bfd_i370_arch;
252b5132
RH
460extern const bfd_arch_info_type bfd_i386_arch;
461extern const bfd_arch_info_type bfd_i860_arch;
462extern const bfd_arch_info_type bfd_i960_arch;
3b16e843 463extern const bfd_arch_info_type bfd_ia64_arch;
cf88bb9f 464extern const bfd_arch_info_type bfd_ip2k_arch;
a75473eb 465extern const bfd_arch_info_type bfd_iq2000_arch;
49f58d10 466extern const bfd_arch_info_type bfd_m32c_arch;
252b5132 467extern const bfd_arch_info_type bfd_m32r_arch;
60bcf0fa
NC
468extern const bfd_arch_info_type bfd_m68hc11_arch;
469extern const bfd_arch_info_type bfd_m68hc12_arch;
252b5132
RH
470extern const bfd_arch_info_type bfd_m68k_arch;
471extern const bfd_arch_info_type bfd_m88k_arch;
7499d566 472extern const bfd_arch_info_type bfd_maxq_arch;
3b16e843 473extern const bfd_arch_info_type bfd_mcore_arch;
d9352518 474extern const bfd_arch_info_type bfd_mep_arch;
252b5132 475extern const bfd_arch_info_type bfd_mips_arch;
3b16e843 476extern const bfd_arch_info_type bfd_mmix_arch;
252b5132
RH
477extern const bfd_arch_info_type bfd_mn10200_arch;
478extern const bfd_arch_info_type bfd_mn10300_arch;
2469cfa2 479extern const bfd_arch_info_type bfd_msp430_arch;
d031aafb 480extern const bfd_arch_info_type bfd_mt_arch;
3b16e843
NC
481extern const bfd_arch_info_type bfd_ns32k_arch;
482extern const bfd_arch_info_type bfd_openrisc_arch;
483extern const bfd_arch_info_type bfd_or32_arch;
e135f41b 484extern const bfd_arch_info_type bfd_pdp11_arch;
3b16e843 485extern const bfd_arch_info_type bfd_pj_arch;
899f54f5
AM
486extern const bfd_arch_info_type bfd_powerpc_archs[];
487#define bfd_powerpc_arch bfd_powerpc_archs[0]
252b5132 488extern const bfd_arch_info_type bfd_rs6000_arch;
3b16e843 489extern const bfd_arch_info_type bfd_s390_arch;
1c0d3aa6 490extern const bfd_arch_info_type bfd_score_arch;
252b5132
RH
491extern const bfd_arch_info_type bfd_sh_arch;
492extern const bfd_arch_info_type bfd_sparc_arch;
e9f53129 493extern const bfd_arch_info_type bfd_spu_arch;
252b5132 494extern const bfd_arch_info_type bfd_tic30_arch;
026df7c5 495extern const bfd_arch_info_type bfd_tic4x_arch;
81635ce4 496extern const bfd_arch_info_type bfd_tic54x_arch;
252b5132 497extern const bfd_arch_info_type bfd_tic80_arch;
3b16e843 498extern const bfd_arch_info_type bfd_v850_arch;
252b5132
RH
499extern const bfd_arch_info_type bfd_vax_arch;
500extern const bfd_arch_info_type bfd_we32k_arch;
252b5132 501extern const bfd_arch_info_type bfd_w65_arch;
93fbbb04 502extern const bfd_arch_info_type bfd_xstormy16_arch;
e0001a05 503extern const bfd_arch_info_type bfd_xtensa_arch;
d70c5fc7 504extern const bfd_arch_info_type bfd_xc16x_arch;
3c9b82ba 505extern const bfd_arch_info_type bfd_z80_arch;
3b16e843 506extern const bfd_arch_info_type bfd_z8k_arch;
252b5132 507
3b16e843
NC
508static const bfd_arch_info_type * const bfd_archures_list[] =
509 {
252b5132 510#ifdef SELECT_ARCHITECTURES
3b16e843 511 SELECT_ARCHITECTURES,
252b5132 512#else
3b16e843
NC
513 &bfd_alpha_arch,
514 &bfd_arc_arch,
515 &bfd_arm_arch,
516 &bfd_avr_arch,
0f64bb02 517 &bfd_bfin_arch,
3d3d428f 518 &bfd_cr16_arch,
0949843d 519 &bfd_cr16c_arch,
3b16e843 520 &bfd_cris_arch,
1fe1f39c 521 &bfd_crx_arch,
3b16e843
NC
522 &bfd_d10v_arch,
523 &bfd_d30v_arch,
d172d4ba 524 &bfd_dlx_arch,
3b16e843 525 &bfd_fr30_arch,
4e5ba5b7 526 &bfd_frv_arch,
3b16e843
NC
527 &bfd_h8300_arch,
528 &bfd_h8500_arch,
529 &bfd_hppa_arch,
530 &bfd_i370_arch,
531 &bfd_i386_arch,
532 &bfd_i860_arch,
533 &bfd_i960_arch,
534 &bfd_ia64_arch,
cf88bb9f 535 &bfd_ip2k_arch,
a75473eb 536 &bfd_iq2000_arch,
e729279b 537 &bfd_m32c_arch,
3b16e843
NC
538 &bfd_m32r_arch,
539 &bfd_m68hc11_arch,
540 &bfd_m68hc12_arch,
541 &bfd_m68k_arch,
542 &bfd_m88k_arch,
7499d566 543 &bfd_maxq_arch,
3b16e843 544 &bfd_mcore_arch,
d9352518 545 &bfd_mep_arch,
3b16e843
NC
546 &bfd_mips_arch,
547 &bfd_mmix_arch,
548 &bfd_mn10200_arch,
549 &bfd_mn10300_arch,
d031aafb 550 &bfd_mt_arch,
2469cfa2 551 &bfd_msp430_arch,
3b16e843
NC
552 &bfd_ns32k_arch,
553 &bfd_openrisc_arch,
554 &bfd_or32_arch,
555 &bfd_pdp11_arch,
556 &bfd_powerpc_arch,
557 &bfd_rs6000_arch,
558 &bfd_s390_arch,
1c0d3aa6 559 &bfd_score_arch,
3b16e843
NC
560 &bfd_sh_arch,
561 &bfd_sparc_arch,
e9f53129 562 &bfd_spu_arch,
3b16e843 563 &bfd_tic30_arch,
026df7c5 564 &bfd_tic4x_arch,
3b16e843
NC
565 &bfd_tic54x_arch,
566 &bfd_tic80_arch,
567 &bfd_v850_arch,
568 &bfd_vax_arch,
569 &bfd_w65_arch,
570 &bfd_we32k_arch,
571 &bfd_xstormy16_arch,
e0001a05 572 &bfd_xtensa_arch,
d70c5fc7 573 &bfd_xc16x_arch,
3c9b82ba 574 &bfd_z80_arch,
3b16e843 575 &bfd_z8k_arch,
252b5132
RH
576#endif
577 0
578};
579
580/*
581FUNCTION
582 bfd_printable_name
583
584SYNOPSIS
c58b9523 585 const char *bfd_printable_name (bfd *abfd);
252b5132
RH
586
587DESCRIPTION
588 Return a printable string representing the architecture and machine
589 from the pointer to the architecture info structure.
590
591*/
592
593const char *
c58b9523 594bfd_printable_name (bfd *abfd)
252b5132
RH
595{
596 return abfd->arch_info->printable_name;
597}
598
252b5132
RH
599/*
600FUNCTION
601 bfd_scan_arch
602
603SYNOPSIS
c58b9523 604 const bfd_arch_info_type *bfd_scan_arch (const char *string);
252b5132
RH
605
606DESCRIPTION
607 Figure out if BFD supports any cpu which could be described with
608 the name @var{string}. Return a pointer to an <<arch_info>>
609 structure if a machine is found, otherwise NULL.
252b5132
RH
610*/
611
612const bfd_arch_info_type *
c58b9523 613bfd_scan_arch (const char *string)
252b5132
RH
614{
615 const bfd_arch_info_type * const *app, *ap;
616
047066e1 617 /* Look through all the installed architectures. */
252b5132
RH
618 for (app = bfd_archures_list; *app != NULL; app++)
619 {
620 for (ap = *app; ap != NULL; ap = ap->next)
621 {
622 if (ap->scan (ap, string))
623 return ap;
624 }
625 }
626
627 return NULL;
628}
629
252b5132
RH
630/*
631FUNCTION
632 bfd_arch_list
633
634SYNOPSIS
c58b9523 635 const char **bfd_arch_list (void);
252b5132
RH
636
637DESCRIPTION
638 Return a freshly malloced NULL-terminated vector of the names
639 of all the valid BFD architectures. Do not modify the names.
252b5132
RH
640*/
641
642const char **
c58b9523 643bfd_arch_list (void)
252b5132
RH
644{
645 int vec_length = 0;
646 const char **name_ptr;
647 const char **name_list;
648 const bfd_arch_info_type * const *app;
dc810e39 649 bfd_size_type amt;
252b5132 650
047066e1 651 /* Determine the number of architectures. */
252b5132
RH
652 vec_length = 0;
653 for (app = bfd_archures_list; *app != NULL; app++)
654 {
655 const bfd_arch_info_type *ap;
656 for (ap = *app; ap != NULL; ap = ap->next)
657 {
658 vec_length++;
659 }
660 }
661
dc810e39 662 amt = (vec_length + 1) * sizeof (char **);
c58b9523 663 name_list = bfd_malloc (amt);
252b5132
RH
664 if (name_list == NULL)
665 return NULL;
666
047066e1 667 /* Point the list at each of the names. */
252b5132
RH
668 name_ptr = name_list;
669 for (app = bfd_archures_list; *app != NULL; app++)
670 {
671 const bfd_arch_info_type *ap;
672 for (ap = *app; ap != NULL; ap = ap->next)
673 {
674 *name_ptr = ap->printable_name;
675 name_ptr++;
676 }
677 }
678 *name_ptr = NULL;
679
680 return name_list;
681}
682
252b5132
RH
683/*
684FUNCTION
685 bfd_arch_get_compatible
686
687SYNOPSIS
c58b9523
AM
688 const bfd_arch_info_type *bfd_arch_get_compatible
689 (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
252b5132
RH
690
691DESCRIPTION
312b768e
NC
692 Determine whether two BFDs' architectures and machine types
693 are compatible. Calculates the lowest common denominator
694 between the two architectures and machine types implied by
695 the BFDs and returns a pointer to an <<arch_info>> structure
696 describing the compatible machine.
252b5132
RH
697*/
698
699const bfd_arch_info_type *
c58b9523
AM
700bfd_arch_get_compatible (const bfd *abfd,
701 const bfd *bbfd,
702 bfd_boolean accept_unknowns)
252b5132 703{
312b768e
NC
704 const bfd * ubfd = NULL;
705
706 /* Look for an unknown architecture. */
707 if (((ubfd = abfd) && ubfd->arch_info->arch == bfd_arch_unknown)
708 || ((ubfd = bbfd) && ubfd->arch_info->arch == bfd_arch_unknown))
709 {
710 /* We can allow an unknown architecture if accept_unknowns
711 is true, or if the target is the "binary" format, which
712 has an unknown architecture. Since the binary format can
713 only be set by explicit request from the user, it is safe
714 to assume that they know what they are doing. */
715 if (accept_unknowns
716 || strcmp (bfd_get_target (ubfd), "binary") == 0)
717 return ubfd->arch_info;
718 return NULL;
719 }
252b5132
RH
720
721 /* Otherwise architecture-specific code has to decide. */
722 return abfd->arch_info->compatible (abfd->arch_info, bbfd->arch_info);
723}
724
252b5132
RH
725/*
726INTERNAL_DEFINITION
727 bfd_default_arch_struct
728
729DESCRIPTION
730 The <<bfd_default_arch_struct>> is an item of
731 <<bfd_arch_info_type>> which has been initialized to a fairly
732 generic state. A BFD starts life by pointing to this
733 structure, until the correct back end has determined the real
734 architecture of the file.
735
736.extern const bfd_arch_info_type bfd_default_arch_struct;
252b5132
RH
737*/
738
047066e1 739const bfd_arch_info_type bfd_default_arch_struct = {
b34976b6 740 32, 32, 8, bfd_arch_unknown, 0, "unknown", "unknown", 2, TRUE,
047066e1
KH
741 bfd_default_compatible,
742 bfd_default_scan,
743 0,
252b5132
RH
744};
745
746/*
747FUNCTION
748 bfd_set_arch_info
749
750SYNOPSIS
c58b9523 751 void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
252b5132
RH
752
753DESCRIPTION
754 Set the architecture info of @var{abfd} to @var{arg}.
755*/
756
757void
c58b9523 758bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg)
252b5132
RH
759{
760 abfd->arch_info = arg;
761}
762
763/*
764INTERNAL_FUNCTION
765 bfd_default_set_arch_mach
766
767SYNOPSIS
c58b9523
AM
768 bfd_boolean bfd_default_set_arch_mach
769 (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
252b5132
RH
770
771DESCRIPTION
772 Set the architecture and machine type in BFD @var{abfd}
773 to @var{arch} and @var{mach}. Find the correct
774 pointer to a structure and insert it into the <<arch_info>>
0ef5a5bd 775 pointer.
252b5132
RH
776*/
777
b34976b6 778bfd_boolean
c58b9523
AM
779bfd_default_set_arch_mach (bfd *abfd,
780 enum bfd_architecture arch,
781 unsigned long mach)
252b5132 782{
99dc0092
AM
783 abfd->arch_info = bfd_lookup_arch (arch, mach);
784 if (abfd->arch_info != NULL)
b34976b6 785 return TRUE;
252b5132
RH
786
787 abfd->arch_info = &bfd_default_arch_struct;
788 bfd_set_error (bfd_error_bad_value);
b34976b6 789 return FALSE;
252b5132
RH
790}
791
252b5132
RH
792/*
793FUNCTION
794 bfd_get_arch
795
796SYNOPSIS
c58b9523 797 enum bfd_architecture bfd_get_arch (bfd *abfd);
252b5132
RH
798
799DESCRIPTION
800 Return the enumerated type which describes the BFD @var{abfd}'s
801 architecture.
252b5132
RH
802*/
803
804enum bfd_architecture
c58b9523 805bfd_get_arch (bfd *abfd)
252b5132 806{
047066e1 807 return abfd->arch_info->arch;
252b5132
RH
808}
809
810/*
811FUNCTION
812 bfd_get_mach
813
814SYNOPSIS
c58b9523 815 unsigned long bfd_get_mach (bfd *abfd);
252b5132
RH
816
817DESCRIPTION
818 Return the long type which describes the BFD @var{abfd}'s
819 machine.
820*/
821
0ef5a5bd 822unsigned long
c58b9523 823bfd_get_mach (bfd *abfd)
252b5132 824{
047066e1 825 return abfd->arch_info->mach;
252b5132
RH
826}
827
828/*
829FUNCTION
830 bfd_arch_bits_per_byte
831
832SYNOPSIS
c58b9523 833 unsigned int bfd_arch_bits_per_byte (bfd *abfd);
252b5132
RH
834
835DESCRIPTION
836 Return the number of bits in one of the BFD @var{abfd}'s
837 architecture's bytes.
252b5132
RH
838*/
839
840unsigned int
c58b9523 841bfd_arch_bits_per_byte (bfd *abfd)
252b5132
RH
842{
843 return abfd->arch_info->bits_per_byte;
844}
845
846/*
847FUNCTION
848 bfd_arch_bits_per_address
849
850SYNOPSIS
c58b9523 851 unsigned int bfd_arch_bits_per_address (bfd *abfd);
252b5132
RH
852
853DESCRIPTION
854 Return the number of bits in one of the BFD @var{abfd}'s
855 architecture's addresses.
856*/
857
858unsigned int
c58b9523 859bfd_arch_bits_per_address (bfd *abfd)
252b5132
RH
860{
861 return abfd->arch_info->bits_per_address;
862}
863
252b5132 864/*
0ef5a5bd 865INTERNAL_FUNCTION
252b5132
RH
866 bfd_default_compatible
867
868SYNOPSIS
869 const bfd_arch_info_type *bfd_default_compatible
c58b9523 870 (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
252b5132
RH
871
872DESCRIPTION
873 The default function for testing for compatibility.
874*/
875
876const bfd_arch_info_type *
c58b9523
AM
877bfd_default_compatible (const bfd_arch_info_type *a,
878 const bfd_arch_info_type *b)
252b5132
RH
879{
880 if (a->arch != b->arch)
881 return NULL;
882
b74fa2cd
AM
883 if (a->bits_per_word != b->bits_per_word)
884 return NULL;
885
252b5132
RH
886 if (a->mach > b->mach)
887 return a;
888
889 if (b->mach > a->mach)
890 return b;
891
892 return a;
893}
894
252b5132
RH
895/*
896INTERNAL_FUNCTION
897 bfd_default_scan
898
899SYNOPSIS
c58b9523
AM
900 bfd_boolean bfd_default_scan
901 (const struct bfd_arch_info *info, const char *string);
252b5132
RH
902
903DESCRIPTION
904 The default function for working out whether this is an
905 architecture hit and a machine hit.
906*/
907
b34976b6 908bfd_boolean
c58b9523 909bfd_default_scan (const bfd_arch_info_type *info, const char *string)
252b5132
RH
910{
911 const char *ptr_src;
912 const char *ptr_tst;
913 unsigned long number;
914 enum bfd_architecture arch;
915 const char *printable_name_colon;
916
917 /* Exact match of the architecture name (ARCH_NAME) and also the
047066e1 918 default architecture? */
252b5132
RH
919 if (strcasecmp (string, info->arch_name) == 0
920 && info->the_default)
b34976b6 921 return TRUE;
252b5132 922
047066e1 923 /* Exact match of the machine name (PRINTABLE_NAME)? */
252b5132 924 if (strcasecmp (string, info->printable_name) == 0)
b34976b6 925 return TRUE;
0ef5a5bd 926
252b5132 927 /* Given that printable_name contains no colon, attempt to match:
047066e1 928 ARCH_NAME [ ":" ] PRINTABLE_NAME? */
252b5132
RH
929 printable_name_colon = strchr (info->printable_name, ':');
930 if (printable_name_colon == NULL)
931 {
dc810e39 932 size_t strlen_arch_name = strlen (info->arch_name);
252b5132
RH
933 if (strncasecmp (string, info->arch_name, strlen_arch_name) == 0)
934 {
935 if (string[strlen_arch_name] == ':')
936 {
937 if (strcasecmp (string + strlen_arch_name + 1,
938 info->printable_name) == 0)
b34976b6 939 return TRUE;
252b5132
RH
940 }
941 else
942 {
943 if (strcasecmp (string + strlen_arch_name,
944 info->printable_name) == 0)
b34976b6 945 return TRUE;
252b5132
RH
946 }
947 }
948 }
949
950 /* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>;
047066e1 951 Attempt to match: <arch> <mach>? */
252b5132
RH
952 if (printable_name_colon != NULL)
953 {
dc810e39 954 size_t colon_index = printable_name_colon - info->printable_name;
252b5132
RH
955 if (strncasecmp (string, info->printable_name, colon_index) == 0
956 && strcasecmp (string + colon_index,
957 info->printable_name + colon_index + 1) == 0)
b34976b6 958 return TRUE;
252b5132
RH
959 }
960
961 /* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>; Do not
5c4491d3 962 attempt to match just <mach>, it could be ambiguous. This test
0ef5a5bd 963 is left until later. */
252b5132 964
047066e1
KH
965 /* NOTE: The below is retained for compatibility only. Please do
966 not add to this code. */
252b5132
RH
967
968 /* See how much of the supplied string matches with the
969 architecture, eg the string m68k:68020 would match the 68k entry
047066e1 970 up to the :, then we get left with the machine number. */
252b5132 971
0ef5a5bd 972 for (ptr_src = string, ptr_tst = info->arch_name;
252b5132 973 *ptr_src && *ptr_tst;
0ef5a5bd 974 ptr_src++, ptr_tst++)
252b5132 975 {
047066e1
KH
976 if (*ptr_src != *ptr_tst)
977 break;
252b5132
RH
978 }
979
980 /* Chewed up as much of the architecture as will match, skip any
047066e1 981 colons. */
252b5132
RH
982 if (*ptr_src == ':')
983 ptr_src++;
0ef5a5bd 984
252b5132
RH
985 if (*ptr_src == 0)
986 {
047066e1
KH
987 /* Nothing more, then only keep this one if it is the default
988 machine for this architecture. */
252b5132
RH
989 return info->the_default;
990 }
991
992 number = 0;
3882b010 993 while (ISDIGIT (*ptr_src))
252b5132 994 {
047066e1 995 number = number * 10 + *ptr_src - '0';
252b5132
RH
996 ptr_src++;
997 }
998
999 /* NOTE: The below is retained for compatibility only.
0ef5a5bd 1000 PLEASE DO NOT ADD TO THIS CODE. */
252b5132 1001
0ef5a5bd 1002 switch (number)
252b5132
RH
1003 {
1004 /* FIXME: These are needed to parse IEEE objects. */
83ea41ad
NC
1005 /* The following seven case's are here only for compatibility with
1006 older binutils (at least IEEE objects from binutils 2.9.1 require
1007 them). */
1008 case bfd_mach_m68000:
1009 case bfd_mach_m68010:
1010 case bfd_mach_m68020:
1011 case bfd_mach_m68030:
1012 case bfd_mach_m68040:
1013 case bfd_mach_m68060:
1014 case bfd_mach_cpu32:
1015 arch = bfd_arch_m68k;
1016 break;
0ef5a5bd 1017 case 68000:
252b5132
RH
1018 arch = bfd_arch_m68k;
1019 number = bfd_mach_m68000;
1020 break;
1021 case 68010:
1022 arch = bfd_arch_m68k;
1023 number = bfd_mach_m68010;
1024 break;
1025 case 68020:
1026 arch = bfd_arch_m68k;
1027 number = bfd_mach_m68020;
1028 break;
1029 case 68030:
1030 arch = bfd_arch_m68k;
1031 number = bfd_mach_m68030;
1032 break;
1033 case 68040:
1034 arch = bfd_arch_m68k;
1035 number = bfd_mach_m68040;
1036 break;
1037 case 68060:
1038 arch = bfd_arch_m68k;
1039 number = bfd_mach_m68060;
1040 break;
1041 case 68332:
1042 arch = bfd_arch_m68k;
1043 number = bfd_mach_cpu32;
1044 break;
3cac17ae
NC
1045 case 5200:
1046 arch = bfd_arch_m68k;
0b2e31dc 1047 number = bfd_mach_mcf_isa_a_nodiv;
3cac17ae
NC
1048 break;
1049 case 5206:
1050 arch = bfd_arch_m68k;
0b2e31dc 1051 number = bfd_mach_mcf_isa_a_mac;
3cac17ae
NC
1052 break;
1053 case 5307:
1054 arch = bfd_arch_m68k;
0b2e31dc 1055 number = bfd_mach_mcf_isa_a_mac;
3cac17ae
NC
1056 break;
1057 case 5407:
1058 arch = bfd_arch_m68k;
0b2e31dc 1059 number = bfd_mach_mcf_isa_b_nousp_mac;
3cac17ae 1060 break;
3e602632
NC
1061 case 5282:
1062 arch = bfd_arch_m68k;
0b2e31dc 1063 number = bfd_mach_mcf_isa_aplus_emac;
3e602632 1064 break;
252b5132
RH
1065
1066 case 32000:
1067 arch = bfd_arch_we32k;
1068 break;
1069
1070 case 3000:
1071 arch = bfd_arch_mips;
1072 number = bfd_mach_mips3000;
1073 break;
1074
1075 case 4000:
1076 arch = bfd_arch_mips;
1077 number = bfd_mach_mips4000;
1078 break;
1079
1080 case 6000:
1081 arch = bfd_arch_rs6000;
1082 break;
1083
d4845d57
JR
1084 case 7410:
1085 arch = bfd_arch_sh;
1086 number = bfd_mach_sh_dsp;
1087 break;
1088
1089 case 7708:
1090 arch = bfd_arch_sh;
1091 number = bfd_mach_sh3;
1092 break;
1093
1094 case 7729:
1095 arch = bfd_arch_sh;
1096 number = bfd_mach_sh3_dsp;
1097 break;
1098
1099 case 7750:
1100 arch = bfd_arch_sh;
1101 number = bfd_mach_sh4;
1102 break;
1103
0ef5a5bd 1104 default:
b34976b6 1105 return FALSE;
252b5132
RH
1106 }
1107
0ef5a5bd 1108 if (arch != info->arch)
b34976b6 1109 return FALSE;
252b5132
RH
1110
1111 if (number != info->mach)
b34976b6 1112 return FALSE;
252b5132 1113
b34976b6 1114 return TRUE;
252b5132
RH
1115}
1116
252b5132
RH
1117/*
1118FUNCTION
1119 bfd_get_arch_info
1120
1121SYNOPSIS
c58b9523 1122 const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
252b5132
RH
1123
1124DESCRIPTION
1125 Return the architecture info struct in @var{abfd}.
1126*/
1127
1128const bfd_arch_info_type *
c58b9523 1129bfd_get_arch_info (bfd *abfd)
252b5132
RH
1130{
1131 return abfd->arch_info;
1132}
1133
252b5132
RH
1134/*
1135FUNCTION
1136 bfd_lookup_arch
1137
1138SYNOPSIS
1139 const bfd_arch_info_type *bfd_lookup_arch
c58b9523 1140 (enum bfd_architecture arch, unsigned long machine);
252b5132
RH
1141
1142DESCRIPTION
5c4491d3 1143 Look for the architecture info structure which matches the
252b5132
RH
1144 arguments @var{arch} and @var{machine}. A machine of 0 matches the
1145 machine/architecture structure which marks itself as the
aa3d5824 1146 default.
252b5132
RH
1147*/
1148
0ef5a5bd 1149const bfd_arch_info_type *
c58b9523 1150bfd_lookup_arch (enum bfd_architecture arch, unsigned long machine)
252b5132
RH
1151{
1152 const bfd_arch_info_type * const *app, *ap;
1153
1154 for (app = bfd_archures_list; *app != NULL; app++)
1155 {
1156 for (ap = *app; ap != NULL; ap = ap->next)
1157 {
1158 if (ap->arch == arch
1159 && (ap->mach == machine
1160 || (machine == 0 && ap->the_default)))
1161 return ap;
1162 }
1163 }
1164
1165 return NULL;
1166}
1167
252b5132
RH
1168/*
1169FUNCTION
1170 bfd_printable_arch_mach
1171
1172SYNOPSIS
1173 const char *bfd_printable_arch_mach
c58b9523 1174 (enum bfd_architecture arch, unsigned long machine);
252b5132
RH
1175
1176DESCRIPTION
1177 Return a printable string representing the architecture and
0ef5a5bd 1178 machine type.
252b5132
RH
1179
1180 This routine is depreciated.
1181*/
1182
1183const char *
c58b9523 1184bfd_printable_arch_mach (enum bfd_architecture arch, unsigned long machine)
252b5132 1185{
047066e1 1186 const bfd_arch_info_type *ap = bfd_lookup_arch (arch, machine);
252b5132 1187
047066e1
KH
1188 if (ap)
1189 return ap->printable_name;
1190 return "UNKNOWN!";
252b5132 1191}
9a968f43
NC
1192
1193/*
1194FUNCTION
1195 bfd_octets_per_byte
1196
1197SYNOPSIS
c58b9523 1198 unsigned int bfd_octets_per_byte (bfd *abfd);
9a968f43
NC
1199
1200DESCRIPTION
1201 Return the number of octets (8-bit quantities) per target byte
1202 (minimum addressable unit). In most cases, this will be one, but some
1203 DSP targets have 16, 32, or even 48 bits per byte.
9a968f43
NC
1204*/
1205
f6af82bd 1206unsigned int
c58b9523 1207bfd_octets_per_byte (bfd *abfd)
9a968f43 1208{
047066e1
KH
1209 return bfd_arch_mach_octets_per_byte (bfd_get_arch (abfd),
1210 bfd_get_mach (abfd));
9a968f43
NC
1211}
1212
1213/*
1214FUNCTION
1215 bfd_arch_mach_octets_per_byte
1216
1217SYNOPSIS
c58b9523
AM
1218 unsigned int bfd_arch_mach_octets_per_byte
1219 (enum bfd_architecture arch, unsigned long machine);
9a968f43
NC
1220
1221DESCRIPTION
1222 See bfd_octets_per_byte.
0ef5a5bd 1223
9a968f43
NC
1224 This routine is provided for those cases where a bfd * is not
1225 available
1226*/
1227
f6af82bd 1228unsigned int
c58b9523
AM
1229bfd_arch_mach_octets_per_byte (enum bfd_architecture arch,
1230 unsigned long mach)
9a968f43 1231{
047066e1 1232 const bfd_arch_info_type *ap = bfd_lookup_arch (arch, mach);
0ef5a5bd 1233
047066e1
KH
1234 if (ap)
1235 return ap->bits_per_byte / 8;
1236 return 1;
9a968f43 1237}
This page took 0.434217 seconds and 4 git commands to generate.