1/* BFD library support routines for architectures.
2   Copyright (C) 1990-2020 Free Software Foundation, Inc.
3   Hacked by John Gilmore and Steve Chamberlain of 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#include "safe-ctype.h"
26
27/*
28
29SECTION
30	Architectures
31
32	BFD keeps one atom in a BFD describing the
33	architecture of the data attached to the BFD: a pointer to a
34	<<bfd_arch_info_type>>.
35
36	Pointers to structures can be requested independently of a BFD
37	so that an architecture's information can be interrogated
38	without access to an open BFD.
39
40	The architecture information is provided by each architecture package.
41	The set of default architectures is selected by the macro
42	<<SELECT_ARCHITECTURES>>.  This is normally set up in the
43	@file{config/@var{target}.mt} file of your choice.  If the name is not
44	defined, then all the architectures supported are included.
45
46	When BFD starts up, all the architectures are called with an
47	initialize method.  It is up to the architecture back end to
48	insert as many items into the list of architectures as it wants to;
49	generally this would be one for each machine and one for the
50	default case (an item with a machine field of 0).
51
52	BFD's idea of an architecture is implemented in	@file{archures.c}.
53*/
54
55/*
56
57SUBSECTION
58	bfd_architecture
59
60DESCRIPTION
61	This enum gives the object file's CPU architecture, in a
62	global sense---i.e., what processor family does it belong to?
63	Another field indicates which processor within
64	the family is in use.  The machine gives a number which
65	distinguishes different versions of the architecture,
66	containing, for example, 68020 for Motorola 68020.
67
68.enum bfd_architecture
69.{
70.  bfd_arch_unknown,   {* File arch not known.  *}
71.  bfd_arch_obscure,   {* Arch known, not one of these.  *}
72.  bfd_arch_m68k,      {* Motorola 68xxx.  *}
73.#define bfd_mach_m68000		1
74.#define bfd_mach_m68008		2
75.#define bfd_mach_m68010		3
76.#define bfd_mach_m68020		4
77.#define bfd_mach_m68030		5
78.#define bfd_mach_m68040		6
79.#define bfd_mach_m68060		7
80.#define bfd_mach_cpu32			8
81.#define bfd_mach_fido			9
82.#define bfd_mach_mcf_isa_a_nodiv	10
83.#define bfd_mach_mcf_isa_a		11
84.#define bfd_mach_mcf_isa_a_mac		12
85.#define bfd_mach_mcf_isa_a_emac	13
86.#define bfd_mach_mcf_isa_aplus		14
87.#define bfd_mach_mcf_isa_aplus_mac	15
88.#define bfd_mach_mcf_isa_aplus_emac	16
89.#define bfd_mach_mcf_isa_b_nousp	17
90.#define bfd_mach_mcf_isa_b_nousp_mac	18
91.#define bfd_mach_mcf_isa_b_nousp_emac	19
92.#define bfd_mach_mcf_isa_b		20
93.#define bfd_mach_mcf_isa_b_mac		21
94.#define bfd_mach_mcf_isa_b_emac	22
95.#define bfd_mach_mcf_isa_b_float	23
96.#define bfd_mach_mcf_isa_b_float_mac	24
97.#define bfd_mach_mcf_isa_b_float_emac	25
98.#define bfd_mach_mcf_isa_c		26
99.#define bfd_mach_mcf_isa_c_mac		27
100.#define bfd_mach_mcf_isa_c_emac	28
101.#define bfd_mach_mcf_isa_c_nodiv	29
102.#define bfd_mach_mcf_isa_c_nodiv_mac	30
103.#define bfd_mach_mcf_isa_c_nodiv_emac	31
104.  bfd_arch_vax,       {* DEC Vax.  *}
105.
106.  bfd_arch_or1k,      {* OpenRISC 1000.  *}
107.#define bfd_mach_or1k		1
108.#define bfd_mach_or1knd	2
109.
110.  bfd_arch_sparc,     {* SPARC.  *}
111.#define bfd_mach_sparc			1
112.{* The difference between v8plus and v9 is that v9 is a true 64 bit env.  *}
113.#define bfd_mach_sparc_sparclet	2
114.#define bfd_mach_sparc_sparclite	3
115.#define bfd_mach_sparc_v8plus		4
116.#define bfd_mach_sparc_v8plusa		5 {* with ultrasparc add'ns.  *}
117.#define bfd_mach_sparc_sparclite_le	6
118.#define bfd_mach_sparc_v9		7
119.#define bfd_mach_sparc_v9a		8 {* with ultrasparc add'ns.  *}
120.#define bfd_mach_sparc_v8plusb		9 {* with cheetah add'ns.  *}
121.#define bfd_mach_sparc_v9b		10 {* with cheetah add'ns.  *}
122.#define bfd_mach_sparc_v8plusc		11 {* with UA2005 and T1 add'ns.  *}
123.#define bfd_mach_sparc_v9c		12 {* with UA2005 and T1 add'ns.  *}
124.#define bfd_mach_sparc_v8plusd		13 {* with UA2007 and T3 add'ns.  *}
125.#define bfd_mach_sparc_v9d		14 {* with UA2007 and T3 add'ns.  *}
126.#define bfd_mach_sparc_v8pluse		15 {* with OSA2001 and T4 add'ns (no IMA).  *}
127.#define bfd_mach_sparc_v9e		16 {* with OSA2001 and T4 add'ns (no IMA).  *}
128.#define bfd_mach_sparc_v8plusv		17 {* with OSA2011 and T4 and IMA and FJMAU add'ns.  *}
129.#define bfd_mach_sparc_v9v		18 {* with OSA2011 and T4 and IMA and FJMAU add'ns.  *}
130.#define bfd_mach_sparc_v8plusm		19 {* with OSA2015 and M7 add'ns.  *}
131.#define bfd_mach_sparc_v9m		20 {* with OSA2015 and M7 add'ns.  *}
132.#define bfd_mach_sparc_v8plusm8	21 {* with OSA2017 and M8 add'ns.  *}
133.#define bfd_mach_sparc_v9m8		22 {* with OSA2017 and M8 add'ns.  *}
134.{* Nonzero if MACH has the v9 instruction set.  *}
135.#define bfd_mach_sparc_v9_p(mach) \
136.  ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9m8 \
137.   && (mach) != bfd_mach_sparc_sparclite_le)
138.{* Nonzero if MACH is a 64 bit sparc architecture.  *}
139.#define bfd_mach_sparc_64bit_p(mach) \
140.  ((mach) >= bfd_mach_sparc_v9 \
141.   && (mach) != bfd_mach_sparc_v8plusb \
142.   && (mach) != bfd_mach_sparc_v8plusc \
143.   && (mach) != bfd_mach_sparc_v8plusd \
144.   && (mach) != bfd_mach_sparc_v8pluse \
145.   && (mach) != bfd_mach_sparc_v8plusv \
146.   && (mach) != bfd_mach_sparc_v8plusm \
147.   && (mach) != bfd_mach_sparc_v8plusm8)
148.  bfd_arch_spu,       {* PowerPC SPU.  *}
149.#define bfd_mach_spu		256
150.  bfd_arch_mips,      {* MIPS Rxxxx.  *}
151.#define bfd_mach_mips3000		3000
152.#define bfd_mach_mips3900		3900
153.#define bfd_mach_mips4000		4000
154.#define bfd_mach_mips4010		4010
155.#define bfd_mach_mips4100		4100
156.#define bfd_mach_mips4111		4111
157.#define bfd_mach_mips4120		4120
158.#define bfd_mach_mips4300		4300
159.#define bfd_mach_mips4400		4400
160.#define bfd_mach_mips4600		4600
161.#define bfd_mach_mips4650		4650
162.#define bfd_mach_mips5000		5000
163.#define bfd_mach_mips5400		5400
164.#define bfd_mach_mips5500		5500
165.#define bfd_mach_mips5900		5900
166.#define bfd_mach_mips6000		6000
167.#define bfd_mach_mips7000		7000
168.#define bfd_mach_mips8000		8000
169.#define bfd_mach_mips9000		9000
170.#define bfd_mach_mips10000		10000
171.#define bfd_mach_mips12000		12000
172.#define bfd_mach_mips14000		14000
173.#define bfd_mach_mips16000		16000
174.#define bfd_mach_mips16		16
175.#define bfd_mach_mips5			5
176.#define bfd_mach_mips_loongson_2e	3001
177.#define bfd_mach_mips_loongson_2f	3002
178.#define bfd_mach_mips_gs464		3003
179.#define bfd_mach_mips_gs464e		3004
180.#define bfd_mach_mips_gs264e		3005
181.#define bfd_mach_mips_sb1		12310201 {* octal 'SB', 01.  *}
182.#define bfd_mach_mips_octeon		6501
183.#define bfd_mach_mips_octeonp		6601
184.#define bfd_mach_mips_octeon2		6502
185.#define bfd_mach_mips_octeon3		6503
186.#define bfd_mach_mips_xlr		887682	 {* decimal 'XLR'.  *}
187.#define bfd_mach_mips_interaptiv_mr2	736550	 {* decimal 'IA2'.  *}
188.#define bfd_mach_mipsisa32		32
189.#define bfd_mach_mipsisa32r2		33
190.#define bfd_mach_mipsisa32r3		34
191.#define bfd_mach_mipsisa32r5		36
192.#define bfd_mach_mipsisa32r6		37
193.#define bfd_mach_mipsisa64		64
194.#define bfd_mach_mipsisa64r2		65
195.#define bfd_mach_mipsisa64r3		66
196.#define bfd_mach_mipsisa64r5		68
197.#define bfd_mach_mipsisa64r6		69
198.#define bfd_mach_mips_micromips	96
199.  bfd_arch_i386,      {* Intel 386.  *}
200.#define bfd_mach_i386_intel_syntax	(1 << 0)
201.#define bfd_mach_i386_i8086		(1 << 1)
202.#define bfd_mach_i386_i386		(1 << 2)
203.#define bfd_mach_x86_64		(1 << 3)
204.#define bfd_mach_x64_32		(1 << 4)
205.#define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
206.#define bfd_mach_x86_64_intel_syntax	(bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
207.#define bfd_mach_x64_32_intel_syntax	(bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
208.  bfd_arch_l1om,      {* Intel L1OM.  *}
209.#define bfd_mach_l1om			(1 << 5)
210.#define bfd_mach_l1om_intel_syntax	(bfd_mach_l1om | bfd_mach_i386_intel_syntax)
211.  bfd_arch_k1om,      {* Intel K1OM.  *}
212.#define bfd_mach_k1om			(1 << 6)
213.#define bfd_mach_k1om_intel_syntax	(bfd_mach_k1om | bfd_mach_i386_intel_syntax)
214.  bfd_arch_iamcu,     {* Intel MCU.  *}
215.#define bfd_mach_iamcu			(1 << 8)
216.#define bfd_mach_i386_iamcu		(bfd_mach_i386_i386 | bfd_mach_iamcu)
217.#define bfd_mach_i386_iamcu_intel_syntax (bfd_mach_i386_iamcu | bfd_mach_i386_intel_syntax)
218.  bfd_arch_romp,      {* IBM ROMP PC/RT.  *}
219.  bfd_arch_convex,    {* Convex.  *}
220.  bfd_arch_m98k,      {* Motorola 98xxx.  *}
221.  bfd_arch_pyramid,   {* Pyramid Technology.  *}
222.  bfd_arch_h8300,     {* Renesas H8/300 (formerly Hitachi H8/300).  *}
223.#define bfd_mach_h8300		1
224.#define bfd_mach_h8300h	2
225.#define bfd_mach_h8300s	3
226.#define bfd_mach_h8300hn	4
227.#define bfd_mach_h8300sn	5
228.#define bfd_mach_h8300sx	6
229.#define bfd_mach_h8300sxn	7
230.  bfd_arch_pdp11,     {* DEC PDP-11.  *}
231.  bfd_arch_powerpc,   {* PowerPC.  *}
232.#define bfd_mach_ppc		32
233.#define bfd_mach_ppc64		64
234.#define bfd_mach_ppc_403	403
235.#define bfd_mach_ppc_403gc	4030
236.#define bfd_mach_ppc_405	405
237.#define bfd_mach_ppc_505	505
238.#define bfd_mach_ppc_601	601
239.#define bfd_mach_ppc_602	602
240.#define bfd_mach_ppc_603	603
241.#define bfd_mach_ppc_ec603e	6031
242.#define bfd_mach_ppc_604	604
243.#define bfd_mach_ppc_620	620
244.#define bfd_mach_ppc_630	630
245.#define bfd_mach_ppc_750	750
246.#define bfd_mach_ppc_860	860
247.#define bfd_mach_ppc_a35	35
248.#define bfd_mach_ppc_rs64ii	642
249.#define bfd_mach_ppc_rs64iii	643
250.#define bfd_mach_ppc_7400	7400
251.#define bfd_mach_ppc_e500	500
252.#define bfd_mach_ppc_e500mc	5001
253.#define bfd_mach_ppc_e500mc64	5005
254.#define bfd_mach_ppc_e5500	5006
255.#define bfd_mach_ppc_e6500	5007
256.#define bfd_mach_ppc_titan	83
257.#define bfd_mach_ppc_vle	84
258.  bfd_arch_rs6000,    {* IBM RS/6000.  *}
259.#define bfd_mach_rs6k		6000
260.#define bfd_mach_rs6k_rs1	6001
261.#define bfd_mach_rs6k_rsc	6003
262.#define bfd_mach_rs6k_rs2	6002
263.  bfd_arch_hppa,      {* HP PA RISC.  *}
264.#define bfd_mach_hppa10	10
265.#define bfd_mach_hppa11	11
266.#define bfd_mach_hppa20	20
267.#define bfd_mach_hppa20w	25
268.  bfd_arch_d10v,      {* Mitsubishi D10V.  *}
269.#define bfd_mach_d10v		1
270.#define bfd_mach_d10v_ts2	2
271.#define bfd_mach_d10v_ts3	3
272.  bfd_arch_d30v,      {* Mitsubishi D30V.  *}
273.  bfd_arch_dlx,       {* DLX.  *}
274.  bfd_arch_m68hc11,   {* Motorola 68HC11.  *}
275.  bfd_arch_m68hc12,   {* Motorola 68HC12.  *}
276.#define bfd_mach_m6812_default 0
277.#define bfd_mach_m6812		1
278.#define bfd_mach_m6812s	2
279.  bfd_arch_m9s12x,    {* Freescale S12X.  *}
280.  bfd_arch_m9s12xg,   {* Freescale XGATE.  *}
281.  bfd_arch_s12z,    {* Freescale S12Z.  *}
282.#define bfd_mach_s12z_default 0
283.  bfd_arch_z8k,       {* Zilog Z8000.  *}
284.#define bfd_mach_z8001		1
285.#define bfd_mach_z8002		2
286.  bfd_arch_sh,	       {* Renesas / SuperH SH (formerly Hitachi SH).  *}
287.#define bfd_mach_sh				1
288.#define bfd_mach_sh2				0x20
289.#define bfd_mach_sh_dsp			0x2d
290.#define bfd_mach_sh2a				0x2a
291.#define bfd_mach_sh2a_nofpu			0x2b
292.#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
293.#define bfd_mach_sh2a_nofpu_or_sh3_nommu	0x2a2
294.#define bfd_mach_sh2a_or_sh4			0x2a3
295.#define bfd_mach_sh2a_or_sh3e			0x2a4
296.#define bfd_mach_sh2e				0x2e
297.#define bfd_mach_sh3				0x30
298.#define bfd_mach_sh3_nommu			0x31
299.#define bfd_mach_sh3_dsp			0x3d
300.#define bfd_mach_sh3e				0x3e
301.#define bfd_mach_sh4				0x40
302.#define bfd_mach_sh4_nofpu			0x41
303.#define bfd_mach_sh4_nommu_nofpu		0x42
304.#define bfd_mach_sh4a				0x4a
305.#define bfd_mach_sh4a_nofpu			0x4b
306.#define bfd_mach_sh4al_dsp			0x4d
307.  bfd_arch_alpha,     {* Dec Alpha.  *}
308.#define bfd_mach_alpha_ev4	0x10
309.#define bfd_mach_alpha_ev5	0x20
310.#define bfd_mach_alpha_ev6	0x30
311.  bfd_arch_arm,       {* Advanced Risc Machines ARM.  *}
312.#define bfd_mach_arm_unknown	0
313.#define bfd_mach_arm_2		1
314.#define bfd_mach_arm_2a	2
315.#define bfd_mach_arm_3		3
316.#define bfd_mach_arm_3M	4
317.#define bfd_mach_arm_4		5
318.#define bfd_mach_arm_4T	6
319.#define bfd_mach_arm_5		7
320.#define bfd_mach_arm_5T	8
321.#define bfd_mach_arm_5TE	9
322.#define bfd_mach_arm_XScale	10
323.#define bfd_mach_arm_ep9312	11
324.#define bfd_mach_arm_iWMMXt	12
325.#define bfd_mach_arm_iWMMXt2	13
326.#define bfd_mach_arm_5TEJ      14
327.#define bfd_mach_arm_6         15
328.#define bfd_mach_arm_6KZ       16
329.#define bfd_mach_arm_6T2       17
330.#define bfd_mach_arm_6K        18
331.#define bfd_mach_arm_7         19
332.#define bfd_mach_arm_6M        20
333.#define bfd_mach_arm_6SM       21
334.#define bfd_mach_arm_7EM       22
335.#define bfd_mach_arm_8         23
336.#define bfd_mach_arm_8R        24
337.#define bfd_mach_arm_8M_BASE   25
338.#define bfd_mach_arm_8M_MAIN   26
339.#define bfd_mach_arm_8_1M_MAIN 27
340.  bfd_arch_nds32,     {* Andes NDS32.  *}
341.#define bfd_mach_n1		1
342.#define bfd_mach_n1h		2
343.#define bfd_mach_n1h_v2	3
344.#define bfd_mach_n1h_v3	4
345.#define bfd_mach_n1h_v3m	5
346.  bfd_arch_ns32k,     {* National Semiconductors ns32000.  *}
347.  bfd_arch_tic30,     {* Texas Instruments TMS320C30.  *}
348.  bfd_arch_tic4x,     {* Texas Instruments TMS320C3X/4X.  *}
349.#define bfd_mach_tic3x		30
350.#define bfd_mach_tic4x		40
351.  bfd_arch_tic54x,    {* Texas Instruments TMS320C54X.  *}
352.  bfd_arch_tic6x,     {* Texas Instruments TMS320C6X.  *}
353.  bfd_arch_v850,      {* NEC V850.  *}
354.  bfd_arch_v850_rh850,{* NEC V850 (using RH850 ABI).  *}
355.#define bfd_mach_v850		1
356.#define bfd_mach_v850e		'E'
357.#define bfd_mach_v850e1	'1'
358.#define bfd_mach_v850e2	0x4532
359.#define bfd_mach_v850e2v3	0x45325633
360.#define bfd_mach_v850e3v5	0x45335635 {* ('E'|'3'|'V'|'5').  *}
361.  bfd_arch_arc,       {* ARC Cores.  *}
362.#define bfd_mach_arc_a4	0
363.#define bfd_mach_arc_a5	1
364.#define bfd_mach_arc_arc600	2
365.#define bfd_mach_arc_arc601	4
366.#define bfd_mach_arc_arc700	3
367.#define bfd_mach_arc_arcv2	5
368. bfd_arch_m32c,       {* Renesas M16C/M32C.  *}
369.#define bfd_mach_m16c		0x75
370.#define bfd_mach_m32c		0x78
371.  bfd_arch_m32r,      {* Renesas M32R (formerly Mitsubishi M32R/D).  *}
372.#define bfd_mach_m32r		1 {* For backwards compatibility.  *}
373.#define bfd_mach_m32rx		'x'
374.#define bfd_mach_m32r2		'2'
375.  bfd_arch_mn10200,   {* Matsushita MN10200.  *}
376.  bfd_arch_mn10300,   {* Matsushita MN10300.  *}
377.#define bfd_mach_mn10300	300
378.#define bfd_mach_am33		330
379.#define bfd_mach_am33_2	332
380.  bfd_arch_fr30,
381.#define bfd_mach_fr30		0x46523330
382.  bfd_arch_frv,
383.#define bfd_mach_frv		1
384.#define bfd_mach_frvsimple	2
385.#define bfd_mach_fr300		300
386.#define bfd_mach_fr400		400
387.#define bfd_mach_fr450		450
388.#define bfd_mach_frvtomcat	499	{* fr500 prototype.  *}
389.#define bfd_mach_fr500		500
390.#define bfd_mach_fr550		550
391.  bfd_arch_moxie,     {* The moxie processor.  *}
392.#define bfd_mach_moxie		1
393.  bfd_arch_ft32,      {* The ft32 processor.  *}
394.#define bfd_mach_ft32		1
395.#define bfd_mach_ft32b		2
396.  bfd_arch_mcore,
397.  bfd_arch_mep,
398.#define bfd_mach_mep		1
399.#define bfd_mach_mep_h1	0x6831
400.#define bfd_mach_mep_c5	0x6335
401.  bfd_arch_metag,
402.#define bfd_mach_metag		1
403.  bfd_arch_ia64,      {* HP/Intel ia64.  *}
404.#define bfd_mach_ia64_elf64	64
405.#define bfd_mach_ia64_elf32	32
406.  bfd_arch_ip2k,      {* Ubicom IP2K microcontrollers. *}
407.#define bfd_mach_ip2022	1
408.#define bfd_mach_ip2022ext	2
409. bfd_arch_iq2000,     {* Vitesse IQ2000.  *}
410.#define bfd_mach_iq2000	1
411.#define bfd_mach_iq10		2
412.  bfd_arch_bpf,       {* Linux eBPF.  *}
413.#define bfd_mach_bpf		1
414.#define bfd_mach_xbpf		2
415.  bfd_arch_epiphany,  {* Adapteva EPIPHANY.  *}
416.#define bfd_mach_epiphany16	1
417.#define bfd_mach_epiphany32	2
418.  bfd_arch_mt,
419.#define bfd_mach_ms1		1
420.#define bfd_mach_mrisc2	2
421.#define bfd_mach_ms2		3
422.  bfd_arch_pj,
423.  bfd_arch_avr,       {* Atmel AVR microcontrollers.  *}
424.#define bfd_mach_avr1		1
425.#define bfd_mach_avr2		2
426.#define bfd_mach_avr25		25
427.#define bfd_mach_avr3		3
428.#define bfd_mach_avr31		31
429.#define bfd_mach_avr35		35
430.#define bfd_mach_avr4		4
431.#define bfd_mach_avr5		5
432.#define bfd_mach_avr51		51
433.#define bfd_mach_avr6		6
434.#define bfd_mach_avrtiny	100
435.#define bfd_mach_avrxmega1	101
436.#define bfd_mach_avrxmega2	102
437.#define bfd_mach_avrxmega3	103
438.#define bfd_mach_avrxmega4	104
439.#define bfd_mach_avrxmega5	105
440.#define bfd_mach_avrxmega6	106
441.#define bfd_mach_avrxmega7	107
442.  bfd_arch_bfin,      {* ADI Blackfin.  *}
443.#define bfd_mach_bfin		1
444.  bfd_arch_cr16,      {* National Semiconductor CompactRISC (ie CR16).  *}
445.#define bfd_mach_cr16		1
446.  bfd_arch_crx,       {*  National Semiconductor CRX.  *}
447.#define bfd_mach_crx		1
448.  bfd_arch_cris,      {* Axis CRIS.  *}
449.#define bfd_mach_cris_v0_v10	255
450.#define bfd_mach_cris_v32	32
451.#define bfd_mach_cris_v10_v32	1032
452.  bfd_arch_riscv,
453.#define bfd_mach_riscv32	132
454.#define bfd_mach_riscv64	164
455.  bfd_arch_rl78,
456.#define bfd_mach_rl78		0x75
457.  bfd_arch_rx,	       {* Renesas RX.  *}
458.#define bfd_mach_rx		0x75
459.#define bfd_mach_rx_v2		0x76
460.#define bfd_mach_rx_v3		0x77
461.  bfd_arch_s390,      {* IBM s390.  *}
462.#define bfd_mach_s390_31	31
463.#define bfd_mach_s390_64	64
464.  bfd_arch_score,     {* Sunplus score.  *}
465.#define bfd_mach_score3	3
466.#define bfd_mach_score7	7
467.  bfd_arch_mmix,      {* Donald Knuth's educational processor.  *}
468.  bfd_arch_xstormy16,
469.#define bfd_mach_xstormy16	1
470.  bfd_arch_msp430,    {* Texas Instruments MSP430 architecture.  *}
471.#define bfd_mach_msp11		11
472.#define bfd_mach_msp110	110
473.#define bfd_mach_msp12		12
474.#define bfd_mach_msp13		13
475.#define bfd_mach_msp14		14
476.#define bfd_mach_msp15		15
477.#define bfd_mach_msp16		16
478.#define bfd_mach_msp20		20
479.#define bfd_mach_msp21		21
480.#define bfd_mach_msp22		22
481.#define bfd_mach_msp23		23
482.#define bfd_mach_msp24		24
483.#define bfd_mach_msp26		26
484.#define bfd_mach_msp31		31
485.#define bfd_mach_msp32		32
486.#define bfd_mach_msp33		33
487.#define bfd_mach_msp41		41
488.#define bfd_mach_msp42		42
489.#define bfd_mach_msp43		43
490.#define bfd_mach_msp44		44
491.#define bfd_mach_msp430x	45
492.#define bfd_mach_msp46		46
493.#define bfd_mach_msp47		47
494.#define bfd_mach_msp54		54
495.  bfd_arch_xc16x,     {* Infineon's XC16X Series.  *}
496.#define bfd_mach_xc16x		1
497.#define bfd_mach_xc16xl	2
498.#define bfd_mach_xc16xs	3
499.  bfd_arch_xgate,     {* Freescale XGATE.  *}
500.#define bfd_mach_xgate		1
501.  bfd_arch_xtensa,    {* Tensilica's Xtensa cores.  *}
502.#define bfd_mach_xtensa	1
503.  bfd_arch_z80,
504.{* Zilog Z80 without undocumented opcodes.  *}
505.#define bfd_mach_z80strict	1
506.{* Zilog Z180: successor with additional instructions, but without
507. halves of ix and iy.  *}
508.#define bfd_mach_z180		2
509.{* Zilog Z80 with ixl, ixh, iyl, and iyh.  *}
510.#define bfd_mach_z80		3
511.{* Zilog eZ80 (successor of Z80 & Z180) in Z80 (16-bit address) mode.  *}
512.#define bfd_mach_ez80_z80	4
513.{* Zilog eZ80 (successor of Z80 & Z180) in ADL (24-bit address) mode.  *}
514.#define bfd_mach_ez80_adl	5
515.{* Z80N *}
516.#define bfd_mach_z80n		6
517.{* Zilog Z80 with all undocumented instructions.  *}
518.#define bfd_mach_z80full	7
519.{* GameBoy Z80 (reduced instruction set).  *}
520.#define bfd_mach_gbz80		8
521.{* ASCII R800: successor with multiplication.  *}
522.#define bfd_mach_r800		11
523.  bfd_arch_lm32,      {* Lattice Mico32.  *}
524.#define bfd_mach_lm32		1
525.  bfd_arch_microblaze,{* Xilinx MicroBlaze.  *}
526.  bfd_arch_tilepro,   {* Tilera TILEPro.  *}
527.  bfd_arch_tilegx,    {* Tilera TILE-Gx.  *}
528.#define bfd_mach_tilepro	1
529.#define bfd_mach_tilegx	1
530.#define bfd_mach_tilegx32	2
531.  bfd_arch_aarch64,   {* AArch64.  *}
532.#define bfd_mach_aarch64 0
533.#define bfd_mach_aarch64_8R	1
534.#define bfd_mach_aarch64_ilp32	32
535.  bfd_arch_nios2,     {* Nios II.  *}
536.#define bfd_mach_nios2		0
537.#define bfd_mach_nios2r1	1
538.#define bfd_mach_nios2r2	2
539.  bfd_arch_visium,    {* Visium.  *}
540.#define bfd_mach_visium	1
541.  bfd_arch_wasm32,    {* WebAssembly.  *}
542.#define bfd_mach_wasm32	1
543.  bfd_arch_pru,       {* PRU.  *}
544.#define bfd_mach_pru		0
545.  bfd_arch_nfp,       {* Netronome Flow Processor *}
546.#define bfd_mach_nfp3200	0x3200
547.#define bfd_mach_nfp6000	0x6000
548.  bfd_arch_csky,      {* C-SKY.  *}
549.#define bfd_mach_ck_unknown    0
550.#define bfd_mach_ck510		1
551.#define bfd_mach_ck610		2
552.#define bfd_mach_ck801		3
553.#define bfd_mach_ck802		4
554.#define bfd_mach_ck803		5
555.#define bfd_mach_ck807		6
556.#define bfd_mach_ck810		7
557.#define bfd_mach_ck860		8
558.  bfd_arch_last
559.  };
560*/
561
562/*
563SUBSECTION
564	bfd_arch_info
565
566DESCRIPTION
567	This structure contains information on architectures for use
568	within BFD.
569
570.
571.typedef struct bfd_arch_info
572.{
573.  int bits_per_word;
574.  int bits_per_address;
575.  int bits_per_byte;
576.  enum bfd_architecture arch;
577.  unsigned long mach;
578.  const char *arch_name;
579.  const char *printable_name;
580.  unsigned int section_align_power;
581.  {* TRUE if this is the default machine for the architecture.
582.     The default arch should be the first entry for an arch so that
583.     all the entries for that arch can be accessed via <<next>>.  *}
584.  bfd_boolean the_default;
585.  const struct bfd_arch_info * (*compatible) (const struct bfd_arch_info *,
586.					       const struct bfd_arch_info *);
587.
588.  bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
589.
590.  {* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
591.     IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
592.     TRUE, the buffer contains code.  *}
593.  void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
594.		  bfd_boolean code);
595.
596.  const struct bfd_arch_info *next;
597.
598.  {* On some architectures the offset for a relocation can point into
599.     the middle of an instruction.  This field specifies the maximum
600.     offset such a relocation can have (in octets).  This affects the
601.     behaviour of the disassembler, since a value greater than zero
602.     means that it may need to disassemble an instruction twice, once
603.     to get its length and then a second time to display it.  If the
604.     value is negative then this has to be done for every single
605.     instruction, regardless of the offset of the reloc.  *}
606.  signed int max_reloc_offset_into_insn;
607.}
608.bfd_arch_info_type;
609.
610*/
611
612extern const bfd_arch_info_type bfd_aarch64_arch;
613extern const bfd_arch_info_type bfd_alpha_arch;
614extern const bfd_arch_info_type bfd_arc_arch;
615extern const bfd_arch_info_type bfd_arm_arch;
616extern const bfd_arch_info_type bfd_avr_arch;
617extern const bfd_arch_info_type bfd_bfin_arch;
618extern const bfd_arch_info_type bfd_cr16_arch;
619extern const bfd_arch_info_type bfd_cris_arch;
620extern const bfd_arch_info_type bfd_crx_arch;
621extern const bfd_arch_info_type bfd_csky_arch;
622extern const bfd_arch_info_type bfd_d10v_arch;
623extern const bfd_arch_info_type bfd_d30v_arch;
624extern const bfd_arch_info_type bfd_dlx_arch;
625extern const bfd_arch_info_type bfd_bpf_arch;
626extern const bfd_arch_info_type bfd_epiphany_arch;
627extern const bfd_arch_info_type bfd_fr30_arch;
628extern const bfd_arch_info_type bfd_frv_arch;
629extern const bfd_arch_info_type bfd_h8300_arch;
630extern const bfd_arch_info_type bfd_hppa_arch;
631extern const bfd_arch_info_type bfd_i386_arch;
632extern const bfd_arch_info_type bfd_iamcu_arch;
633extern const bfd_arch_info_type bfd_ia64_arch;
634extern const bfd_arch_info_type bfd_ip2k_arch;
635extern const bfd_arch_info_type bfd_iq2000_arch;
636extern const bfd_arch_info_type bfd_k1om_arch;
637extern const bfd_arch_info_type bfd_l1om_arch;
638extern const bfd_arch_info_type bfd_lm32_arch;
639extern const bfd_arch_info_type bfd_m32c_arch;
640extern const bfd_arch_info_type bfd_m32r_arch;
641extern const bfd_arch_info_type bfd_m68hc11_arch;
642extern const bfd_arch_info_type bfd_m68hc12_arch;
643extern const bfd_arch_info_type bfd_m9s12x_arch;
644extern const bfd_arch_info_type bfd_m9s12xg_arch;
645extern const bfd_arch_info_type bfd_s12z_arch;
646extern const bfd_arch_info_type bfd_m68k_arch;
647extern const bfd_arch_info_type bfd_mcore_arch;
648extern const bfd_arch_info_type bfd_mep_arch;
649extern const bfd_arch_info_type bfd_metag_arch;
650extern const bfd_arch_info_type bfd_mips_arch;
651extern const bfd_arch_info_type bfd_microblaze_arch;
652extern const bfd_arch_info_type bfd_mmix_arch;
653extern const bfd_arch_info_type bfd_mn10200_arch;
654extern const bfd_arch_info_type bfd_mn10300_arch;
655extern const bfd_arch_info_type bfd_moxie_arch;
656extern const bfd_arch_info_type bfd_ft32_arch;
657extern const bfd_arch_info_type bfd_msp430_arch;
658extern const bfd_arch_info_type bfd_mt_arch;
659extern const bfd_arch_info_type bfd_nds32_arch;
660extern const bfd_arch_info_type bfd_nfp_arch;
661extern const bfd_arch_info_type bfd_nios2_arch;
662extern const bfd_arch_info_type bfd_ns32k_arch;
663extern const bfd_arch_info_type bfd_or1k_arch;
664extern const bfd_arch_info_type bfd_pdp11_arch;
665extern const bfd_arch_info_type bfd_pj_arch;
666extern const bfd_arch_info_type bfd_powerpc_archs[];
667#define bfd_powerpc_arch bfd_powerpc_archs[0]
668extern const bfd_arch_info_type bfd_pru_arch;
669extern const bfd_arch_info_type bfd_riscv_arch;
670extern const bfd_arch_info_type bfd_rs6000_arch;
671extern const bfd_arch_info_type bfd_rl78_arch;
672extern const bfd_arch_info_type bfd_rx_arch;
673extern const bfd_arch_info_type bfd_s390_arch;
674extern const bfd_arch_info_type bfd_score_arch;
675extern const bfd_arch_info_type bfd_sh_arch;
676extern const bfd_arch_info_type bfd_sparc_arch;
677extern const bfd_arch_info_type bfd_spu_arch;
678extern const bfd_arch_info_type bfd_tic30_arch;
679extern const bfd_arch_info_type bfd_tic4x_arch;
680extern const bfd_arch_info_type bfd_tic54x_arch;
681extern const bfd_arch_info_type bfd_tic6x_arch;
682extern const bfd_arch_info_type bfd_tilegx_arch;
683extern const bfd_arch_info_type bfd_tilepro_arch;
684extern const bfd_arch_info_type bfd_v850_arch;
685extern const bfd_arch_info_type bfd_v850_rh850_arch;
686extern const bfd_arch_info_type bfd_vax_arch;
687extern const bfd_arch_info_type bfd_visium_arch;
688extern const bfd_arch_info_type bfd_wasm32_arch;
689extern const bfd_arch_info_type bfd_xstormy16_arch;
690extern const bfd_arch_info_type bfd_xtensa_arch;
691extern const bfd_arch_info_type bfd_xc16x_arch;
692extern const bfd_arch_info_type bfd_xgate_arch;
693extern const bfd_arch_info_type bfd_z80_arch;
694extern const bfd_arch_info_type bfd_z8k_arch;
695
696static const bfd_arch_info_type * const bfd_archures_list[] =
697  {
698#ifdef SELECT_ARCHITECTURES
699    SELECT_ARCHITECTURES,
700#else
701    &bfd_aarch64_arch,
702    &bfd_alpha_arch,
703    &bfd_arc_arch,
704    &bfd_arm_arch,
705    &bfd_avr_arch,
706    &bfd_bfin_arch,
707    &bfd_cr16_arch,
708    &bfd_cris_arch,
709    &bfd_crx_arch,
710    &bfd_csky_arch,
711    &bfd_d10v_arch,
712    &bfd_d30v_arch,
713    &bfd_dlx_arch,
714    &bfd_bpf_arch,
715    &bfd_epiphany_arch,
716    &bfd_fr30_arch,
717    &bfd_frv_arch,
718    &bfd_h8300_arch,
719    &bfd_hppa_arch,
720    &bfd_i386_arch,
721    &bfd_iamcu_arch,
722    &bfd_ia64_arch,
723    &bfd_ip2k_arch,
724    &bfd_iq2000_arch,
725    &bfd_k1om_arch,
726    &bfd_l1om_arch,
727    &bfd_lm32_arch,
728    &bfd_m32c_arch,
729    &bfd_m32r_arch,
730    &bfd_m68hc11_arch,
731    &bfd_m68hc12_arch,
732    &bfd_m9s12x_arch,
733    &bfd_m9s12xg_arch,
734    &bfd_s12z_arch,
735    &bfd_m68k_arch,
736    &bfd_mcore_arch,
737    &bfd_mep_arch,
738    &bfd_metag_arch,
739    &bfd_microblaze_arch,
740    &bfd_mips_arch,
741    &bfd_mmix_arch,
742    &bfd_mn10200_arch,
743    &bfd_mn10300_arch,
744    &bfd_moxie_arch,
745    &bfd_ft32_arch,
746    &bfd_msp430_arch,
747    &bfd_mt_arch,
748    &bfd_nds32_arch,
749    &bfd_nfp_arch,
750    &bfd_nios2_arch,
751    &bfd_ns32k_arch,
752    &bfd_or1k_arch,
753    &bfd_pdp11_arch,
754    &bfd_powerpc_arch,
755    &bfd_pru_arch,
756    &bfd_riscv_arch,
757    &bfd_rl78_arch,
758    &bfd_rs6000_arch,
759    &bfd_rx_arch,
760    &bfd_s390_arch,
761    &bfd_score_arch,
762    &bfd_sh_arch,
763    &bfd_sparc_arch,
764    &bfd_spu_arch,
765    &bfd_tic30_arch,
766    &bfd_tic4x_arch,
767    &bfd_tic54x_arch,
768    &bfd_tic6x_arch,
769    &bfd_tilegx_arch,
770    &bfd_tilepro_arch,
771    &bfd_v850_arch,
772    &bfd_v850_rh850_arch,
773    &bfd_vax_arch,
774    &bfd_visium_arch,
775    &bfd_wasm32_arch,
776    &bfd_xstormy16_arch,
777    &bfd_xtensa_arch,
778    &bfd_xc16x_arch,
779    &bfd_xgate_arch,
780    &bfd_z80_arch,
781    &bfd_z8k_arch,
782#endif
783  0
784};
785
786/*
787FUNCTION
788	bfd_printable_name
789
790SYNOPSIS
791	const char *bfd_printable_name (bfd *abfd);
792
793DESCRIPTION
794	Return a printable string representing the architecture and machine
795	from the pointer to the architecture info structure.
796
797*/
798
799const char *
800bfd_printable_name (bfd *abfd)
801{
802  return abfd->arch_info->printable_name;
803}
804
805/*
806FUNCTION
807	bfd_scan_arch
808
809SYNOPSIS
810	const bfd_arch_info_type *bfd_scan_arch (const char *string);
811
812DESCRIPTION
813	Figure out if BFD supports any cpu which could be described with
814	the name @var{string}.  Return a pointer to an <<arch_info>>
815	structure if a machine is found, otherwise NULL.
816*/
817
818const bfd_arch_info_type *
819bfd_scan_arch (const char *string)
820{
821  const bfd_arch_info_type * const *app, *ap;
822
823  /* Look through all the installed architectures.  */
824  for (app = bfd_archures_list; *app != NULL; app++)
825    {
826      for (ap = *app; ap != NULL; ap = ap->next)
827	{
828	  if (ap->scan (ap, string))
829	    return ap;
830	}
831    }
832
833  return NULL;
834}
835
836/*
837FUNCTION
838	bfd_arch_list
839
840SYNOPSIS
841	const char **bfd_arch_list (void);
842
843DESCRIPTION
844	Return a freshly malloced NULL-terminated vector of the names
845	of all the valid BFD architectures.  Do not modify the names.
846*/
847
848const char **
849bfd_arch_list (void)
850{
851  int vec_length = 0;
852  const char **name_ptr;
853  const char **name_list;
854  const bfd_arch_info_type * const *app;
855  size_t amt;
856
857  /* Determine the number of architectures.  */
858  vec_length = 0;
859  for (app = bfd_archures_list; *app != NULL; app++)
860    {
861      const bfd_arch_info_type *ap;
862      for (ap = *app; ap != NULL; ap = ap->next)
863	{
864	  vec_length++;
865	}
866    }
867
868  amt = (vec_length + 1) * sizeof (char **);
869  name_list = (const char **) bfd_malloc (amt);
870  if (name_list == NULL)
871    return NULL;
872
873  /* Point the list at each of the names.  */
874  name_ptr = name_list;
875  for (app = bfd_archures_list; *app != NULL; app++)
876    {
877      const bfd_arch_info_type *ap;
878      for (ap = *app; ap != NULL; ap = ap->next)
879	{
880	  *name_ptr = ap->printable_name;
881	  name_ptr++;
882	}
883    }
884  *name_ptr = NULL;
885
886  return name_list;
887}
888
889/*
890FUNCTION
891	bfd_arch_get_compatible
892
893SYNOPSIS
894	const bfd_arch_info_type *bfd_arch_get_compatible
895	  (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
896
897DESCRIPTION
898	Determine whether two BFDs' architectures and machine types
899	are compatible.  Calculates the lowest common denominator
900	between the two architectures and machine types implied by
901	the BFDs and returns a pointer to an <<arch_info>> structure
902	describing the compatible machine.
903*/
904
905const bfd_arch_info_type *
906bfd_arch_get_compatible (const bfd *abfd,
907			 const bfd *bbfd,
908			 bfd_boolean accept_unknowns)
909{
910  const bfd *ubfd, *kbfd;
911
912  /* Look for an unknown architecture.  */
913  if (abfd->arch_info->arch == bfd_arch_unknown)
914    ubfd = abfd, kbfd = bbfd;
915  else if (bbfd->arch_info->arch == bfd_arch_unknown)
916    ubfd = bbfd, kbfd = abfd;
917  else
918    /* Otherwise architecture-specific code has to decide.  */
919    return abfd->arch_info->compatible (abfd->arch_info, bbfd->arch_info);
920
921  /* We can allow an unknown architecture if accept_unknowns is true,
922     if UBFD is an IR object, or if the target is the "binary" format,
923     which has an unknown architecture.  Since the binary format can
924     only be set by explicit request from the user, it is safe
925     to assume that they know what they are doing.  */
926  if (accept_unknowns
927      || ubfd->plugin_format == bfd_plugin_yes
928      || strcmp (bfd_get_target (ubfd), "binary") == 0)
929    return kbfd->arch_info;
930  return NULL;
931}
932
933/*
934INTERNAL_DEFINITION
935	bfd_default_arch_struct
936
937DESCRIPTION
938	The <<bfd_default_arch_struct>> is an item of
939	<<bfd_arch_info_type>> which has been initialized to a fairly
940	generic state.  A BFD starts life by pointing to this
941	structure, until the correct back end has determined the real
942	architecture of the file.
943
944.extern const bfd_arch_info_type bfd_default_arch_struct;
945*/
946
947const bfd_arch_info_type bfd_default_arch_struct =
948{
949  32, 32, 8, bfd_arch_unknown, 0, "unknown", "unknown", 2, TRUE,
950  bfd_default_compatible,
951  bfd_default_scan,
952  bfd_arch_default_fill,
953  0, 0
954};
955
956/*
957FUNCTION
958	bfd_set_arch_info
959
960SYNOPSIS
961	void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
962
963DESCRIPTION
964	Set the architecture info of @var{abfd} to @var{arg}.
965*/
966
967void
968bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg)
969{
970  abfd->arch_info = arg;
971}
972
973/*
974FUNCTION
975	bfd_default_set_arch_mach
976
977SYNOPSIS
978	bfd_boolean bfd_default_set_arch_mach
979	  (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
980
981DESCRIPTION
982	Set the architecture and machine type in BFD @var{abfd}
983	to @var{arch} and @var{mach}.  Find the correct
984	pointer to a structure and insert it into the <<arch_info>>
985	pointer.
986*/
987
988bfd_boolean
989bfd_default_set_arch_mach (bfd *abfd,
990			   enum bfd_architecture arch,
991			   unsigned long mach)
992{
993  abfd->arch_info = bfd_lookup_arch (arch, mach);
994  if (abfd->arch_info != NULL)
995    return TRUE;
996
997  abfd->arch_info = &bfd_default_arch_struct;
998  bfd_set_error (bfd_error_bad_value);
999  return FALSE;
1000}
1001
1002/*
1003FUNCTION
1004	bfd_get_arch
1005
1006SYNOPSIS
1007	enum bfd_architecture bfd_get_arch (const bfd *abfd);
1008
1009DESCRIPTION
1010	Return the enumerated type which describes the BFD @var{abfd}'s
1011	architecture.
1012*/
1013
1014enum bfd_architecture
1015bfd_get_arch (const bfd *abfd)
1016{
1017  return abfd->arch_info->arch;
1018}
1019
1020/*
1021FUNCTION
1022	bfd_get_mach
1023
1024SYNOPSIS
1025	unsigned long bfd_get_mach (const bfd *abfd);
1026
1027DESCRIPTION
1028	Return the long type which describes the BFD @var{abfd}'s
1029	machine.
1030*/
1031
1032unsigned long
1033bfd_get_mach (const bfd *abfd)
1034{
1035  return abfd->arch_info->mach;
1036}
1037
1038/*
1039FUNCTION
1040	bfd_arch_bits_per_byte
1041
1042SYNOPSIS
1043	unsigned int bfd_arch_bits_per_byte (const bfd *abfd);
1044
1045DESCRIPTION
1046	Return the number of bits in one of the BFD @var{abfd}'s
1047	architecture's bytes.
1048*/
1049
1050unsigned int
1051bfd_arch_bits_per_byte (const bfd *abfd)
1052{
1053  return abfd->arch_info->bits_per_byte;
1054}
1055
1056/*
1057FUNCTION
1058	bfd_arch_bits_per_address
1059
1060SYNOPSIS
1061	unsigned int bfd_arch_bits_per_address (const bfd *abfd);
1062
1063DESCRIPTION
1064	Return the number of bits in one of the BFD @var{abfd}'s
1065	architecture's addresses.
1066*/
1067
1068unsigned int
1069bfd_arch_bits_per_address (const bfd *abfd)
1070{
1071  return abfd->arch_info->bits_per_address;
1072}
1073
1074/*
1075INTERNAL_FUNCTION
1076	bfd_default_compatible
1077
1078SYNOPSIS
1079	const bfd_arch_info_type *bfd_default_compatible
1080	  (const bfd_arch_info_type *a, const bfd_arch_info_type *b);
1081
1082DESCRIPTION
1083	The default function for testing for compatibility.
1084*/
1085
1086const bfd_arch_info_type *
1087bfd_default_compatible (const bfd_arch_info_type *a,
1088			const bfd_arch_info_type *b)
1089{
1090  if (a->arch != b->arch)
1091    return NULL;
1092
1093  if (a->bits_per_word != b->bits_per_word)
1094    return NULL;
1095
1096  if (a->mach > b->mach)
1097    return a;
1098
1099  if (b->mach > a->mach)
1100    return b;
1101
1102  return a;
1103}
1104
1105/*
1106INTERNAL_FUNCTION
1107	bfd_default_scan
1108
1109SYNOPSIS
1110	bfd_boolean bfd_default_scan
1111	  (const struct bfd_arch_info *info, const char *string);
1112
1113DESCRIPTION
1114	The default function for working out whether this is an
1115	architecture hit and a machine hit.
1116*/
1117
1118bfd_boolean
1119bfd_default_scan (const bfd_arch_info_type *info, const char *string)
1120{
1121  const char *ptr_src;
1122  const char *ptr_tst;
1123  unsigned long number;
1124  enum bfd_architecture arch;
1125  const char *printable_name_colon;
1126
1127  /* Exact match of the architecture name (ARCH_NAME) and also the
1128     default architecture?  */
1129  if (strcasecmp (string, info->arch_name) == 0
1130      && info->the_default)
1131    return TRUE;
1132
1133  /* Exact match of the machine name (PRINTABLE_NAME)?  */
1134  if (strcasecmp (string, info->printable_name) == 0)
1135    return TRUE;
1136
1137  /* Given that printable_name contains no colon, attempt to match:
1138     ARCH_NAME [ ":" ] PRINTABLE_NAME?  */
1139  printable_name_colon = strchr (info->printable_name, ':');
1140  if (printable_name_colon == NULL)
1141    {
1142      size_t strlen_arch_name = strlen (info->arch_name);
1143      if (strncasecmp (string, info->arch_name, strlen_arch_name) == 0)
1144	{
1145	  if (string[strlen_arch_name] == ':')
1146	    {
1147	      if (strcasecmp (string + strlen_arch_name + 1,
1148			      info->printable_name) == 0)
1149		return TRUE;
1150	    }
1151	  else
1152	    {
1153	      if (strcasecmp (string + strlen_arch_name,
1154			      info->printable_name) == 0)
1155		return TRUE;
1156	    }
1157	}
1158    }
1159
1160  /* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>;
1161     Attempt to match: <arch> <mach>?  */
1162  if (printable_name_colon != NULL)
1163    {
1164      size_t colon_index = printable_name_colon - info->printable_name;
1165      if (strncasecmp (string, info->printable_name, colon_index) == 0
1166	  && strcasecmp (string + colon_index,
1167			 info->printable_name + colon_index + 1) == 0)
1168	return TRUE;
1169    }
1170
1171  /* Given that PRINTABLE_NAME has the form: <arch> ":" <mach>; Do not
1172     attempt to match just <mach>, it could be ambiguous.  This test
1173     is left until later.  */
1174
1175  /* NOTE: The below is retained for compatibility only.  Please do
1176     not add to this code.  */
1177
1178  /* See how much of the supplied string matches with the
1179     architecture, eg the string m68k:68020 would match the 68k entry
1180     up to the :, then we get left with the machine number.  */
1181
1182  for (ptr_src = string, ptr_tst = info->arch_name;
1183       *ptr_src && *ptr_tst;
1184       ptr_src++, ptr_tst++)
1185    {
1186      if (*ptr_src != *ptr_tst)
1187	break;
1188    }
1189
1190  /* Chewed up as much of the architecture as will match, skip any
1191     colons.  */
1192  if (*ptr_src == ':')
1193    ptr_src++;
1194
1195  if (*ptr_src == 0)
1196    {
1197      /* Nothing more, then only keep this one if it is the default
1198	 machine for this architecture.  */
1199      return info->the_default;
1200    }
1201
1202  number = 0;
1203  while (ISDIGIT (*ptr_src))
1204    {
1205      number = number * 10 + *ptr_src - '0';
1206      ptr_src++;
1207    }
1208
1209  /* NOTE: The below is retained for compatibility only.
1210     PLEASE DO NOT ADD TO THIS CODE.  */
1211
1212  switch (number)
1213    {
1214    case 68000:
1215      arch = bfd_arch_m68k;
1216      number = bfd_mach_m68000;
1217      break;
1218    case 68010:
1219      arch = bfd_arch_m68k;
1220      number = bfd_mach_m68010;
1221      break;
1222    case 68020:
1223      arch = bfd_arch_m68k;
1224      number = bfd_mach_m68020;
1225      break;
1226    case 68030:
1227      arch = bfd_arch_m68k;
1228      number = bfd_mach_m68030;
1229      break;
1230    case 68040:
1231      arch = bfd_arch_m68k;
1232      number = bfd_mach_m68040;
1233      break;
1234    case 68060:
1235      arch = bfd_arch_m68k;
1236      number = bfd_mach_m68060;
1237      break;
1238    case 68332:
1239      arch = bfd_arch_m68k;
1240      number = bfd_mach_cpu32;
1241      break;
1242    case 5200:
1243      arch = bfd_arch_m68k;
1244      number = bfd_mach_mcf_isa_a_nodiv;
1245      break;
1246    case 5206:
1247      arch = bfd_arch_m68k;
1248      number = bfd_mach_mcf_isa_a_mac;
1249      break;
1250    case 5307:
1251      arch = bfd_arch_m68k;
1252      number = bfd_mach_mcf_isa_a_mac;
1253      break;
1254    case 5407:
1255      arch = bfd_arch_m68k;
1256      number = bfd_mach_mcf_isa_b_nousp_mac;
1257      break;
1258    case 5282:
1259      arch = bfd_arch_m68k;
1260      number = bfd_mach_mcf_isa_aplus_emac;
1261      break;
1262
1263    case 3000:
1264      arch = bfd_arch_mips;
1265      number = bfd_mach_mips3000;
1266      break;
1267
1268    case 4000:
1269      arch = bfd_arch_mips;
1270      number = bfd_mach_mips4000;
1271      break;
1272
1273    case 6000:
1274      arch = bfd_arch_rs6000;
1275      break;
1276
1277    case 7410:
1278      arch = bfd_arch_sh;
1279      number = bfd_mach_sh_dsp;
1280      break;
1281
1282    case 7708:
1283      arch = bfd_arch_sh;
1284      number = bfd_mach_sh3;
1285      break;
1286
1287    case 7729:
1288      arch = bfd_arch_sh;
1289      number = bfd_mach_sh3_dsp;
1290      break;
1291
1292    case 7750:
1293      arch = bfd_arch_sh;
1294      number = bfd_mach_sh4;
1295      break;
1296
1297    default:
1298      return FALSE;
1299    }
1300
1301  if (arch != info->arch)
1302    return FALSE;
1303
1304  if (number != info->mach)
1305    return FALSE;
1306
1307  return TRUE;
1308}
1309
1310/*
1311FUNCTION
1312	bfd_get_arch_info
1313
1314SYNOPSIS
1315	const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
1316
1317DESCRIPTION
1318	Return the architecture info struct in @var{abfd}.
1319*/
1320
1321const bfd_arch_info_type *
1322bfd_get_arch_info (bfd *abfd)
1323{
1324  return abfd->arch_info;
1325}
1326
1327/*
1328FUNCTION
1329	bfd_lookup_arch
1330
1331SYNOPSIS
1332	const bfd_arch_info_type *bfd_lookup_arch
1333	  (enum bfd_architecture arch, unsigned long machine);
1334
1335DESCRIPTION
1336	Look for the architecture info structure which matches the
1337	arguments @var{arch} and @var{machine}. A machine of 0 matches the
1338	machine/architecture structure which marks itself as the
1339	default.
1340*/
1341
1342const bfd_arch_info_type *
1343bfd_lookup_arch (enum bfd_architecture arch, unsigned long machine)
1344{
1345  const bfd_arch_info_type * const *app, *ap;
1346
1347  for (app = bfd_archures_list; *app != NULL; app++)
1348    {
1349      for (ap = *app; ap != NULL; ap = ap->next)
1350	{
1351	  if (ap->arch == arch
1352	      && (ap->mach == machine
1353		  || (machine == 0 && ap->the_default)))
1354	    return ap;
1355	}
1356    }
1357
1358  return NULL;
1359}
1360
1361/*
1362FUNCTION
1363	bfd_printable_arch_mach
1364
1365SYNOPSIS
1366	const char *bfd_printable_arch_mach
1367	  (enum bfd_architecture arch, unsigned long machine);
1368
1369DESCRIPTION
1370	Return a printable string representing the architecture and
1371	machine type.
1372
1373	This routine is depreciated.
1374*/
1375
1376const char *
1377bfd_printable_arch_mach (enum bfd_architecture arch, unsigned long machine)
1378{
1379  const bfd_arch_info_type *ap = bfd_lookup_arch (arch, machine);
1380
1381  if (ap)
1382    return ap->printable_name;
1383  return "UNKNOWN!";
1384}
1385
1386/*
1387FUNCTION
1388	bfd_octets_per_byte
1389
1390SYNOPSIS
1391	unsigned int bfd_octets_per_byte (const bfd *abfd,
1392					  const asection *sec);
1393
1394DESCRIPTION
1395	Return the number of octets (8-bit quantities) per target byte
1396	(minimum addressable unit).  In most cases, this will be one, but some
1397	DSP targets have 16, 32, or even 48 bits per byte.
1398*/
1399
1400unsigned int
1401bfd_octets_per_byte (const bfd *abfd, const asection *sec)
1402{
1403  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
1404      && sec != NULL
1405      && (sec->flags & SEC_ELF_OCTETS) != 0)
1406    return 1;
1407
1408  return bfd_arch_mach_octets_per_byte (bfd_get_arch (abfd),
1409					bfd_get_mach (abfd));
1410}
1411
1412/*
1413FUNCTION
1414	bfd_arch_mach_octets_per_byte
1415
1416SYNOPSIS
1417	unsigned int bfd_arch_mach_octets_per_byte
1418	  (enum bfd_architecture arch, unsigned long machine);
1419
1420DESCRIPTION
1421	See bfd_octets_per_byte.
1422
1423	This routine is provided for those cases where a bfd * is not
1424	available
1425*/
1426
1427unsigned int
1428bfd_arch_mach_octets_per_byte (enum bfd_architecture arch,
1429			       unsigned long mach)
1430{
1431  const bfd_arch_info_type *ap = bfd_lookup_arch (arch, mach);
1432
1433  if (ap)
1434    return ap->bits_per_byte / 8;
1435  return 1;
1436}
1437
1438/*
1439INTERNAL_FUNCTION
1440	bfd_arch_default_fill
1441
1442SYNOPSIS
1443	void *bfd_arch_default_fill (bfd_size_type count,
1444				     bfd_boolean is_bigendian,
1445				     bfd_boolean code);
1446
1447DESCRIPTION
1448	Allocate via bfd_malloc and return a fill buffer of size COUNT.
1449	If IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If
1450	CODE is TRUE, the buffer contains code.
1451*/
1452
1453void *
1454bfd_arch_default_fill (bfd_size_type count,
1455		       bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
1456		       bfd_boolean code ATTRIBUTE_UNUSED)
1457{
1458  void *fill = bfd_malloc (count);
1459  if (fill != NULL)
1460    memset (fill, 0, count);
1461  return fill;
1462}
1463
1464bfd_boolean
1465_bfd_nowrite_set_arch_mach (bfd *abfd,
1466			    enum bfd_architecture arch ATTRIBUTE_UNUSED,
1467			    unsigned long mach ATTRIBUTE_UNUSED)
1468{
1469  return _bfd_bool_bfd_false_error (abfd);
1470}
1471