15796c8dcSSimon Schubert /* Select disassembly routine for specified architecture.
25796c8dcSSimon Schubert Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3*ef5ccd6cSJohn Marino 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
4*ef5ccd6cSJohn Marino Free Software Foundation, Inc.
55796c8dcSSimon Schubert
65796c8dcSSimon Schubert This file is part of the GNU opcodes library.
75796c8dcSSimon Schubert
85796c8dcSSimon Schubert This library is free software; you can redistribute it and/or modify
95796c8dcSSimon Schubert it under the terms of the GNU General Public License as published by
105796c8dcSSimon Schubert the Free Software Foundation; either version 3 of the License, or
115796c8dcSSimon Schubert (at your option) any later version.
125796c8dcSSimon Schubert
135796c8dcSSimon Schubert This program is distributed in the hope that it will be useful,
145796c8dcSSimon Schubert but WITHOUT ANY WARRANTY; without even the implied warranty of
155796c8dcSSimon Schubert MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
165796c8dcSSimon Schubert GNU General Public License for more details.
175796c8dcSSimon Schubert
185796c8dcSSimon Schubert You should have received a copy of the GNU General Public License
195796c8dcSSimon Schubert along with this program; if not, write to the Free Software
205796c8dcSSimon Schubert Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
215796c8dcSSimon Schubert MA 02110-1301, USA. */
225796c8dcSSimon Schubert
235796c8dcSSimon Schubert #include "sysdep.h"
245796c8dcSSimon Schubert #include "dis-asm.h"
255796c8dcSSimon Schubert
265796c8dcSSimon Schubert #ifdef ARCH_all
27*ef5ccd6cSJohn Marino #define ARCH_aarch64
285796c8dcSSimon Schubert #define ARCH_alpha
295796c8dcSSimon Schubert #define ARCH_arc
305796c8dcSSimon Schubert #define ARCH_arm
315796c8dcSSimon Schubert #define ARCH_avr
325796c8dcSSimon Schubert #define ARCH_bfin
335796c8dcSSimon Schubert #define ARCH_cr16
345796c8dcSSimon Schubert #define ARCH_cris
355796c8dcSSimon Schubert #define ARCH_crx
365796c8dcSSimon Schubert #define ARCH_d10v
375796c8dcSSimon Schubert #define ARCH_d30v
385796c8dcSSimon Schubert #define ARCH_dlx
39a45ae5f8SJohn Marino #define ARCH_epiphany
405796c8dcSSimon Schubert #define ARCH_fr30
415796c8dcSSimon Schubert #define ARCH_frv
425796c8dcSSimon Schubert #define ARCH_h8300
435796c8dcSSimon Schubert #define ARCH_h8500
445796c8dcSSimon Schubert #define ARCH_hppa
455796c8dcSSimon Schubert #define ARCH_i370
465796c8dcSSimon Schubert #define ARCH_i386
475796c8dcSSimon Schubert #define ARCH_i860
485796c8dcSSimon Schubert #define ARCH_i960
495796c8dcSSimon Schubert #define ARCH_ia64
505796c8dcSSimon Schubert #define ARCH_ip2k
515796c8dcSSimon Schubert #define ARCH_iq2000
525796c8dcSSimon Schubert #define ARCH_lm32
535796c8dcSSimon Schubert #define ARCH_m32c
545796c8dcSSimon Schubert #define ARCH_m32r
555796c8dcSSimon Schubert #define ARCH_m68hc11
565796c8dcSSimon Schubert #define ARCH_m68hc12
575796c8dcSSimon Schubert #define ARCH_m68k
585796c8dcSSimon Schubert #define ARCH_m88k
595796c8dcSSimon Schubert #define ARCH_mcore
605796c8dcSSimon Schubert #define ARCH_mep
61*ef5ccd6cSJohn Marino #define ARCH_metag
625796c8dcSSimon Schubert #define ARCH_microblaze
635796c8dcSSimon Schubert #define ARCH_mips
645796c8dcSSimon Schubert #define ARCH_mmix
655796c8dcSSimon Schubert #define ARCH_mn10200
665796c8dcSSimon Schubert #define ARCH_mn10300
675796c8dcSSimon Schubert #define ARCH_moxie
685796c8dcSSimon Schubert #define ARCH_mt
695796c8dcSSimon Schubert #define ARCH_msp430
70*ef5ccd6cSJohn Marino #define ARCH_nios2
715796c8dcSSimon Schubert #define ARCH_ns32k
725796c8dcSSimon Schubert #define ARCH_openrisc
735796c8dcSSimon Schubert #define ARCH_or32
745796c8dcSSimon Schubert #define ARCH_pdp11
755796c8dcSSimon Schubert #define ARCH_pj
765796c8dcSSimon Schubert #define ARCH_powerpc
775796c8dcSSimon Schubert #define ARCH_rs6000
78a45ae5f8SJohn Marino #define ARCH_rl78
79cf7f2e2dSJohn Marino #define ARCH_rx
805796c8dcSSimon Schubert #define ARCH_s390
815796c8dcSSimon Schubert #define ARCH_score
825796c8dcSSimon Schubert #define ARCH_sh
835796c8dcSSimon Schubert #define ARCH_sparc
845796c8dcSSimon Schubert #define ARCH_spu
855796c8dcSSimon Schubert #define ARCH_tic30
865796c8dcSSimon Schubert #define ARCH_tic4x
875796c8dcSSimon Schubert #define ARCH_tic54x
88cf7f2e2dSJohn Marino #define ARCH_tic6x
895796c8dcSSimon Schubert #define ARCH_tic80
90a45ae5f8SJohn Marino #define ARCH_tilegx
91a45ae5f8SJohn Marino #define ARCH_tilepro
925796c8dcSSimon Schubert #define ARCH_v850
935796c8dcSSimon Schubert #define ARCH_vax
945796c8dcSSimon Schubert #define ARCH_w65
955796c8dcSSimon Schubert #define ARCH_xstormy16
965796c8dcSSimon Schubert #define ARCH_xc16x
97*ef5ccd6cSJohn Marino #define ARCH_xgate
985796c8dcSSimon Schubert #define ARCH_xtensa
995796c8dcSSimon Schubert #define ARCH_z80
1005796c8dcSSimon Schubert #define ARCH_z8k
1015796c8dcSSimon Schubert #define INCLUDE_SHMEDIA
1025796c8dcSSimon Schubert #endif
1035796c8dcSSimon Schubert
1045796c8dcSSimon Schubert #ifdef ARCH_m32c
1055796c8dcSSimon Schubert #include "m32c-desc.h"
1065796c8dcSSimon Schubert #endif
1075796c8dcSSimon Schubert
1085796c8dcSSimon Schubert disassembler_ftype
disassembler(abfd)1095796c8dcSSimon Schubert disassembler (abfd)
1105796c8dcSSimon Schubert bfd *abfd;
1115796c8dcSSimon Schubert {
1125796c8dcSSimon Schubert enum bfd_architecture a = bfd_get_arch (abfd);
1135796c8dcSSimon Schubert disassembler_ftype disassemble;
1145796c8dcSSimon Schubert
1155796c8dcSSimon Schubert switch (a)
1165796c8dcSSimon Schubert {
1175796c8dcSSimon Schubert /* If you add a case to this table, also add it to the
1185796c8dcSSimon Schubert ARCH_all definition right above this function. */
119*ef5ccd6cSJohn Marino #ifdef ARCH_aarch64
120*ef5ccd6cSJohn Marino case bfd_arch_aarch64:
121*ef5ccd6cSJohn Marino disassemble = print_insn_aarch64;
122*ef5ccd6cSJohn Marino break;
123*ef5ccd6cSJohn Marino #endif
1245796c8dcSSimon Schubert #ifdef ARCH_alpha
1255796c8dcSSimon Schubert case bfd_arch_alpha:
1265796c8dcSSimon Schubert disassemble = print_insn_alpha;
1275796c8dcSSimon Schubert break;
1285796c8dcSSimon Schubert #endif
1295796c8dcSSimon Schubert #ifdef ARCH_arc
1305796c8dcSSimon Schubert case bfd_arch_arc:
1315796c8dcSSimon Schubert disassemble = arc_get_disassembler (abfd);
1325796c8dcSSimon Schubert break;
1335796c8dcSSimon Schubert #endif
1345796c8dcSSimon Schubert #ifdef ARCH_arm
1355796c8dcSSimon Schubert case bfd_arch_arm:
1365796c8dcSSimon Schubert if (bfd_big_endian (abfd))
1375796c8dcSSimon Schubert disassemble = print_insn_big_arm;
1385796c8dcSSimon Schubert else
1395796c8dcSSimon Schubert disassemble = print_insn_little_arm;
1405796c8dcSSimon Schubert break;
1415796c8dcSSimon Schubert #endif
1425796c8dcSSimon Schubert #ifdef ARCH_avr
1435796c8dcSSimon Schubert case bfd_arch_avr:
1445796c8dcSSimon Schubert disassemble = print_insn_avr;
1455796c8dcSSimon Schubert break;
1465796c8dcSSimon Schubert #endif
1475796c8dcSSimon Schubert #ifdef ARCH_bfin
1485796c8dcSSimon Schubert case bfd_arch_bfin:
1495796c8dcSSimon Schubert disassemble = print_insn_bfin;
1505796c8dcSSimon Schubert break;
1515796c8dcSSimon Schubert #endif
1525796c8dcSSimon Schubert #ifdef ARCH_cr16
1535796c8dcSSimon Schubert case bfd_arch_cr16:
1545796c8dcSSimon Schubert disassemble = print_insn_cr16;
1555796c8dcSSimon Schubert break;
1565796c8dcSSimon Schubert #endif
1575796c8dcSSimon Schubert #ifdef ARCH_cris
1585796c8dcSSimon Schubert case bfd_arch_cris:
1595796c8dcSSimon Schubert disassemble = cris_get_disassembler (abfd);
1605796c8dcSSimon Schubert break;
1615796c8dcSSimon Schubert #endif
1625796c8dcSSimon Schubert #ifdef ARCH_crx
1635796c8dcSSimon Schubert case bfd_arch_crx:
1645796c8dcSSimon Schubert disassemble = print_insn_crx;
1655796c8dcSSimon Schubert break;
1665796c8dcSSimon Schubert #endif
1675796c8dcSSimon Schubert #ifdef ARCH_d10v
1685796c8dcSSimon Schubert case bfd_arch_d10v:
1695796c8dcSSimon Schubert disassemble = print_insn_d10v;
1705796c8dcSSimon Schubert break;
1715796c8dcSSimon Schubert #endif
1725796c8dcSSimon Schubert #ifdef ARCH_d30v
1735796c8dcSSimon Schubert case bfd_arch_d30v:
1745796c8dcSSimon Schubert disassemble = print_insn_d30v;
1755796c8dcSSimon Schubert break;
1765796c8dcSSimon Schubert #endif
1775796c8dcSSimon Schubert #ifdef ARCH_dlx
1785796c8dcSSimon Schubert case bfd_arch_dlx:
1795796c8dcSSimon Schubert /* As far as I know we only handle big-endian DLX objects. */
1805796c8dcSSimon Schubert disassemble = print_insn_dlx;
1815796c8dcSSimon Schubert break;
1825796c8dcSSimon Schubert #endif
1835796c8dcSSimon Schubert #ifdef ARCH_h8300
1845796c8dcSSimon Schubert case bfd_arch_h8300:
1855796c8dcSSimon Schubert if (bfd_get_mach (abfd) == bfd_mach_h8300h
1865796c8dcSSimon Schubert || bfd_get_mach (abfd) == bfd_mach_h8300hn)
1875796c8dcSSimon Schubert disassemble = print_insn_h8300h;
1885796c8dcSSimon Schubert else if (bfd_get_mach (abfd) == bfd_mach_h8300s
1895796c8dcSSimon Schubert || bfd_get_mach (abfd) == bfd_mach_h8300sn
1905796c8dcSSimon Schubert || bfd_get_mach (abfd) == bfd_mach_h8300sx
1915796c8dcSSimon Schubert || bfd_get_mach (abfd) == bfd_mach_h8300sxn)
1925796c8dcSSimon Schubert disassemble = print_insn_h8300s;
1935796c8dcSSimon Schubert else
1945796c8dcSSimon Schubert disassemble = print_insn_h8300;
1955796c8dcSSimon Schubert break;
1965796c8dcSSimon Schubert #endif
1975796c8dcSSimon Schubert #ifdef ARCH_h8500
1985796c8dcSSimon Schubert case bfd_arch_h8500:
1995796c8dcSSimon Schubert disassemble = print_insn_h8500;
2005796c8dcSSimon Schubert break;
2015796c8dcSSimon Schubert #endif
2025796c8dcSSimon Schubert #ifdef ARCH_hppa
2035796c8dcSSimon Schubert case bfd_arch_hppa:
2045796c8dcSSimon Schubert disassemble = print_insn_hppa;
2055796c8dcSSimon Schubert break;
2065796c8dcSSimon Schubert #endif
2075796c8dcSSimon Schubert #ifdef ARCH_i370
2085796c8dcSSimon Schubert case bfd_arch_i370:
2095796c8dcSSimon Schubert disassemble = print_insn_i370;
2105796c8dcSSimon Schubert break;
2115796c8dcSSimon Schubert #endif
2125796c8dcSSimon Schubert #ifdef ARCH_i386
2135796c8dcSSimon Schubert case bfd_arch_i386:
2145796c8dcSSimon Schubert case bfd_arch_l1om:
215a45ae5f8SJohn Marino case bfd_arch_k1om:
2165796c8dcSSimon Schubert disassemble = print_insn_i386;
2175796c8dcSSimon Schubert break;
2185796c8dcSSimon Schubert #endif
2195796c8dcSSimon Schubert #ifdef ARCH_i860
2205796c8dcSSimon Schubert case bfd_arch_i860:
2215796c8dcSSimon Schubert disassemble = print_insn_i860;
2225796c8dcSSimon Schubert break;
2235796c8dcSSimon Schubert #endif
2245796c8dcSSimon Schubert #ifdef ARCH_i960
2255796c8dcSSimon Schubert case bfd_arch_i960:
2265796c8dcSSimon Schubert disassemble = print_insn_i960;
2275796c8dcSSimon Schubert break;
2285796c8dcSSimon Schubert #endif
2295796c8dcSSimon Schubert #ifdef ARCH_ia64
2305796c8dcSSimon Schubert case bfd_arch_ia64:
2315796c8dcSSimon Schubert disassemble = print_insn_ia64;
2325796c8dcSSimon Schubert break;
2335796c8dcSSimon Schubert #endif
2345796c8dcSSimon Schubert #ifdef ARCH_ip2k
2355796c8dcSSimon Schubert case bfd_arch_ip2k:
2365796c8dcSSimon Schubert disassemble = print_insn_ip2k;
2375796c8dcSSimon Schubert break;
2385796c8dcSSimon Schubert #endif
239a45ae5f8SJohn Marino #ifdef ARCH_epiphany
240a45ae5f8SJohn Marino case bfd_arch_epiphany:
241a45ae5f8SJohn Marino disassemble = print_insn_epiphany;
242a45ae5f8SJohn Marino break;
243a45ae5f8SJohn Marino #endif
2445796c8dcSSimon Schubert #ifdef ARCH_fr30
2455796c8dcSSimon Schubert case bfd_arch_fr30:
2465796c8dcSSimon Schubert disassemble = print_insn_fr30;
2475796c8dcSSimon Schubert break;
2485796c8dcSSimon Schubert #endif
2495796c8dcSSimon Schubert #ifdef ARCH_lm32
2505796c8dcSSimon Schubert case bfd_arch_lm32:
2515796c8dcSSimon Schubert disassemble = print_insn_lm32;
2525796c8dcSSimon Schubert break;
2535796c8dcSSimon Schubert #endif
2545796c8dcSSimon Schubert #ifdef ARCH_m32r
2555796c8dcSSimon Schubert case bfd_arch_m32r:
2565796c8dcSSimon Schubert disassemble = print_insn_m32r;
2575796c8dcSSimon Schubert break;
2585796c8dcSSimon Schubert #endif
259*ef5ccd6cSJohn Marino #if defined(ARCH_m68hc11) || defined(ARCH_m68hc12) \
260*ef5ccd6cSJohn Marino || defined(ARCH_9s12x) || defined(ARCH_m9s12xg)
2615796c8dcSSimon Schubert case bfd_arch_m68hc11:
2625796c8dcSSimon Schubert disassemble = print_insn_m68hc11;
2635796c8dcSSimon Schubert break;
2645796c8dcSSimon Schubert case bfd_arch_m68hc12:
2655796c8dcSSimon Schubert disassemble = print_insn_m68hc12;
2665796c8dcSSimon Schubert break;
267*ef5ccd6cSJohn Marino case bfd_arch_m9s12x:
268*ef5ccd6cSJohn Marino disassemble = print_insn_m9s12x;
269*ef5ccd6cSJohn Marino break;
270*ef5ccd6cSJohn Marino case bfd_arch_m9s12xg:
271*ef5ccd6cSJohn Marino disassemble = print_insn_m9s12xg;
272*ef5ccd6cSJohn Marino break;
2735796c8dcSSimon Schubert #endif
2745796c8dcSSimon Schubert #ifdef ARCH_m68k
2755796c8dcSSimon Schubert case bfd_arch_m68k:
2765796c8dcSSimon Schubert disassemble = print_insn_m68k;
2775796c8dcSSimon Schubert break;
2785796c8dcSSimon Schubert #endif
2795796c8dcSSimon Schubert #ifdef ARCH_m88k
2805796c8dcSSimon Schubert case bfd_arch_m88k:
2815796c8dcSSimon Schubert disassemble = print_insn_m88k;
2825796c8dcSSimon Schubert break;
2835796c8dcSSimon Schubert #endif
2845796c8dcSSimon Schubert #ifdef ARCH_mt
2855796c8dcSSimon Schubert case bfd_arch_mt:
2865796c8dcSSimon Schubert disassemble = print_insn_mt;
2875796c8dcSSimon Schubert break;
2885796c8dcSSimon Schubert #endif
2895796c8dcSSimon Schubert #ifdef ARCH_microblaze
2905796c8dcSSimon Schubert case bfd_arch_microblaze:
2915796c8dcSSimon Schubert disassemble = print_insn_microblaze;
2925796c8dcSSimon Schubert break;
2935796c8dcSSimon Schubert #endif
2945796c8dcSSimon Schubert #ifdef ARCH_msp430
2955796c8dcSSimon Schubert case bfd_arch_msp430:
2965796c8dcSSimon Schubert disassemble = print_insn_msp430;
2975796c8dcSSimon Schubert break;
2985796c8dcSSimon Schubert #endif
2995796c8dcSSimon Schubert #ifdef ARCH_ns32k
3005796c8dcSSimon Schubert case bfd_arch_ns32k:
3015796c8dcSSimon Schubert disassemble = print_insn_ns32k;
3025796c8dcSSimon Schubert break;
3035796c8dcSSimon Schubert #endif
3045796c8dcSSimon Schubert #ifdef ARCH_mcore
3055796c8dcSSimon Schubert case bfd_arch_mcore:
3065796c8dcSSimon Schubert disassemble = print_insn_mcore;
3075796c8dcSSimon Schubert break;
3085796c8dcSSimon Schubert #endif
3095796c8dcSSimon Schubert #ifdef ARCH_mep
3105796c8dcSSimon Schubert case bfd_arch_mep:
3115796c8dcSSimon Schubert disassemble = print_insn_mep;
3125796c8dcSSimon Schubert break;
3135796c8dcSSimon Schubert #endif
314*ef5ccd6cSJohn Marino #ifdef ARCH_metag
315*ef5ccd6cSJohn Marino case bfd_arch_metag:
316*ef5ccd6cSJohn Marino disassemble = print_insn_metag;
317*ef5ccd6cSJohn Marino break;
318*ef5ccd6cSJohn Marino #endif
3195796c8dcSSimon Schubert #ifdef ARCH_mips
3205796c8dcSSimon Schubert case bfd_arch_mips:
3215796c8dcSSimon Schubert if (bfd_big_endian (abfd))
3225796c8dcSSimon Schubert disassemble = print_insn_big_mips;
3235796c8dcSSimon Schubert else
3245796c8dcSSimon Schubert disassemble = print_insn_little_mips;
3255796c8dcSSimon Schubert break;
3265796c8dcSSimon Schubert #endif
3275796c8dcSSimon Schubert #ifdef ARCH_mmix
3285796c8dcSSimon Schubert case bfd_arch_mmix:
3295796c8dcSSimon Schubert disassemble = print_insn_mmix;
3305796c8dcSSimon Schubert break;
3315796c8dcSSimon Schubert #endif
3325796c8dcSSimon Schubert #ifdef ARCH_mn10200
3335796c8dcSSimon Schubert case bfd_arch_mn10200:
3345796c8dcSSimon Schubert disassemble = print_insn_mn10200;
3355796c8dcSSimon Schubert break;
3365796c8dcSSimon Schubert #endif
3375796c8dcSSimon Schubert #ifdef ARCH_mn10300
3385796c8dcSSimon Schubert case bfd_arch_mn10300:
3395796c8dcSSimon Schubert disassemble = print_insn_mn10300;
3405796c8dcSSimon Schubert break;
3415796c8dcSSimon Schubert #endif
342*ef5ccd6cSJohn Marino #ifdef ARCH_nios2
343*ef5ccd6cSJohn Marino case bfd_arch_nios2:
344*ef5ccd6cSJohn Marino if (bfd_big_endian (abfd))
345*ef5ccd6cSJohn Marino disassemble = print_insn_big_nios2;
346*ef5ccd6cSJohn Marino else
347*ef5ccd6cSJohn Marino disassemble = print_insn_little_nios2;
348*ef5ccd6cSJohn Marino break;
349*ef5ccd6cSJohn Marino #endif
3505796c8dcSSimon Schubert #ifdef ARCH_openrisc
3515796c8dcSSimon Schubert case bfd_arch_openrisc:
3525796c8dcSSimon Schubert disassemble = print_insn_openrisc;
3535796c8dcSSimon Schubert break;
3545796c8dcSSimon Schubert #endif
3555796c8dcSSimon Schubert #ifdef ARCH_or32
3565796c8dcSSimon Schubert case bfd_arch_or32:
3575796c8dcSSimon Schubert if (bfd_big_endian (abfd))
3585796c8dcSSimon Schubert disassemble = print_insn_big_or32;
3595796c8dcSSimon Schubert else
3605796c8dcSSimon Schubert disassemble = print_insn_little_or32;
3615796c8dcSSimon Schubert break;
3625796c8dcSSimon Schubert #endif
3635796c8dcSSimon Schubert #ifdef ARCH_pdp11
3645796c8dcSSimon Schubert case bfd_arch_pdp11:
3655796c8dcSSimon Schubert disassemble = print_insn_pdp11;
3665796c8dcSSimon Schubert break;
3675796c8dcSSimon Schubert #endif
3685796c8dcSSimon Schubert #ifdef ARCH_pj
3695796c8dcSSimon Schubert case bfd_arch_pj:
3705796c8dcSSimon Schubert disassemble = print_insn_pj;
3715796c8dcSSimon Schubert break;
3725796c8dcSSimon Schubert #endif
3735796c8dcSSimon Schubert #ifdef ARCH_powerpc
3745796c8dcSSimon Schubert case bfd_arch_powerpc:
3755796c8dcSSimon Schubert if (bfd_big_endian (abfd))
3765796c8dcSSimon Schubert disassemble = print_insn_big_powerpc;
3775796c8dcSSimon Schubert else
3785796c8dcSSimon Schubert disassemble = print_insn_little_powerpc;
3795796c8dcSSimon Schubert break;
3805796c8dcSSimon Schubert #endif
3815796c8dcSSimon Schubert #ifdef ARCH_rs6000
3825796c8dcSSimon Schubert case bfd_arch_rs6000:
3835796c8dcSSimon Schubert if (bfd_get_mach (abfd) == bfd_mach_ppc_620)
3845796c8dcSSimon Schubert disassemble = print_insn_big_powerpc;
3855796c8dcSSimon Schubert else
3865796c8dcSSimon Schubert disassemble = print_insn_rs6000;
3875796c8dcSSimon Schubert break;
3885796c8dcSSimon Schubert #endif
389a45ae5f8SJohn Marino #ifdef ARCH_rl78
390a45ae5f8SJohn Marino case bfd_arch_rl78:
391a45ae5f8SJohn Marino disassemble = print_insn_rl78;
392a45ae5f8SJohn Marino break;
393a45ae5f8SJohn Marino #endif
394cf7f2e2dSJohn Marino #ifdef ARCH_rx
395cf7f2e2dSJohn Marino case bfd_arch_rx:
396cf7f2e2dSJohn Marino disassemble = print_insn_rx;
397cf7f2e2dSJohn Marino break;
398cf7f2e2dSJohn Marino #endif
3995796c8dcSSimon Schubert #ifdef ARCH_s390
4005796c8dcSSimon Schubert case bfd_arch_s390:
4015796c8dcSSimon Schubert disassemble = print_insn_s390;
4025796c8dcSSimon Schubert break;
4035796c8dcSSimon Schubert #endif
4045796c8dcSSimon Schubert #ifdef ARCH_score
4055796c8dcSSimon Schubert case bfd_arch_score:
4065796c8dcSSimon Schubert if (bfd_big_endian (abfd))
4075796c8dcSSimon Schubert disassemble = print_insn_big_score;
4085796c8dcSSimon Schubert else
4095796c8dcSSimon Schubert disassemble = print_insn_little_score;
4105796c8dcSSimon Schubert break;
4115796c8dcSSimon Schubert #endif
4125796c8dcSSimon Schubert #ifdef ARCH_sh
4135796c8dcSSimon Schubert case bfd_arch_sh:
4145796c8dcSSimon Schubert disassemble = print_insn_sh;
4155796c8dcSSimon Schubert break;
4165796c8dcSSimon Schubert #endif
4175796c8dcSSimon Schubert #ifdef ARCH_sparc
4185796c8dcSSimon Schubert case bfd_arch_sparc:
4195796c8dcSSimon Schubert disassemble = print_insn_sparc;
4205796c8dcSSimon Schubert break;
4215796c8dcSSimon Schubert #endif
4225796c8dcSSimon Schubert #ifdef ARCH_spu
4235796c8dcSSimon Schubert case bfd_arch_spu:
4245796c8dcSSimon Schubert disassemble = print_insn_spu;
4255796c8dcSSimon Schubert break;
4265796c8dcSSimon Schubert #endif
4275796c8dcSSimon Schubert #ifdef ARCH_tic30
4285796c8dcSSimon Schubert case bfd_arch_tic30:
4295796c8dcSSimon Schubert disassemble = print_insn_tic30;
4305796c8dcSSimon Schubert break;
4315796c8dcSSimon Schubert #endif
4325796c8dcSSimon Schubert #ifdef ARCH_tic4x
4335796c8dcSSimon Schubert case bfd_arch_tic4x:
4345796c8dcSSimon Schubert disassemble = print_insn_tic4x;
4355796c8dcSSimon Schubert break;
4365796c8dcSSimon Schubert #endif
4375796c8dcSSimon Schubert #ifdef ARCH_tic54x
4385796c8dcSSimon Schubert case bfd_arch_tic54x:
4395796c8dcSSimon Schubert disassemble = print_insn_tic54x;
4405796c8dcSSimon Schubert break;
4415796c8dcSSimon Schubert #endif
442cf7f2e2dSJohn Marino #ifdef ARCH_tic6x
443cf7f2e2dSJohn Marino case bfd_arch_tic6x:
444cf7f2e2dSJohn Marino disassemble = print_insn_tic6x;
445cf7f2e2dSJohn Marino break;
446cf7f2e2dSJohn Marino #endif
4475796c8dcSSimon Schubert #ifdef ARCH_tic80
4485796c8dcSSimon Schubert case bfd_arch_tic80:
4495796c8dcSSimon Schubert disassemble = print_insn_tic80;
4505796c8dcSSimon Schubert break;
4515796c8dcSSimon Schubert #endif
4525796c8dcSSimon Schubert #ifdef ARCH_v850
4535796c8dcSSimon Schubert case bfd_arch_v850:
454*ef5ccd6cSJohn Marino case bfd_arch_v850_rh850:
4555796c8dcSSimon Schubert disassemble = print_insn_v850;
4565796c8dcSSimon Schubert break;
4575796c8dcSSimon Schubert #endif
4585796c8dcSSimon Schubert #ifdef ARCH_w65
4595796c8dcSSimon Schubert case bfd_arch_w65:
4605796c8dcSSimon Schubert disassemble = print_insn_w65;
4615796c8dcSSimon Schubert break;
4625796c8dcSSimon Schubert #endif
463*ef5ccd6cSJohn Marino #ifdef ARCH_xgate
464*ef5ccd6cSJohn Marino case bfd_arch_xgate:
465*ef5ccd6cSJohn Marino disassemble = print_insn_xgate;
466*ef5ccd6cSJohn Marino break;
467*ef5ccd6cSJohn Marino #endif
4685796c8dcSSimon Schubert #ifdef ARCH_xstormy16
4695796c8dcSSimon Schubert case bfd_arch_xstormy16:
4705796c8dcSSimon Schubert disassemble = print_insn_xstormy16;
4715796c8dcSSimon Schubert break;
4725796c8dcSSimon Schubert #endif
4735796c8dcSSimon Schubert #ifdef ARCH_xc16x
4745796c8dcSSimon Schubert case bfd_arch_xc16x:
4755796c8dcSSimon Schubert disassemble = print_insn_xc16x;
4765796c8dcSSimon Schubert break;
4775796c8dcSSimon Schubert #endif
4785796c8dcSSimon Schubert #ifdef ARCH_xtensa
4795796c8dcSSimon Schubert case bfd_arch_xtensa:
4805796c8dcSSimon Schubert disassemble = print_insn_xtensa;
4815796c8dcSSimon Schubert break;
4825796c8dcSSimon Schubert #endif
4835796c8dcSSimon Schubert #ifdef ARCH_z80
4845796c8dcSSimon Schubert case bfd_arch_z80:
4855796c8dcSSimon Schubert disassemble = print_insn_z80;
4865796c8dcSSimon Schubert break;
4875796c8dcSSimon Schubert #endif
4885796c8dcSSimon Schubert #ifdef ARCH_z8k
4895796c8dcSSimon Schubert case bfd_arch_z8k:
4905796c8dcSSimon Schubert if (bfd_get_mach(abfd) == bfd_mach_z8001)
4915796c8dcSSimon Schubert disassemble = print_insn_z8001;
4925796c8dcSSimon Schubert else
4935796c8dcSSimon Schubert disassemble = print_insn_z8002;
4945796c8dcSSimon Schubert break;
4955796c8dcSSimon Schubert #endif
4965796c8dcSSimon Schubert #ifdef ARCH_vax
4975796c8dcSSimon Schubert case bfd_arch_vax:
4985796c8dcSSimon Schubert disassemble = print_insn_vax;
4995796c8dcSSimon Schubert break;
5005796c8dcSSimon Schubert #endif
5015796c8dcSSimon Schubert #ifdef ARCH_frv
5025796c8dcSSimon Schubert case bfd_arch_frv:
5035796c8dcSSimon Schubert disassemble = print_insn_frv;
5045796c8dcSSimon Schubert break;
5055796c8dcSSimon Schubert #endif
5065796c8dcSSimon Schubert #ifdef ARCH_moxie
5075796c8dcSSimon Schubert case bfd_arch_moxie:
5085796c8dcSSimon Schubert disassemble = print_insn_moxie;
5095796c8dcSSimon Schubert break;
5105796c8dcSSimon Schubert #endif
5115796c8dcSSimon Schubert #ifdef ARCH_iq2000
5125796c8dcSSimon Schubert case bfd_arch_iq2000:
5135796c8dcSSimon Schubert disassemble = print_insn_iq2000;
5145796c8dcSSimon Schubert break;
5155796c8dcSSimon Schubert #endif
5165796c8dcSSimon Schubert #ifdef ARCH_m32c
5175796c8dcSSimon Schubert case bfd_arch_m32c:
5185796c8dcSSimon Schubert disassemble = print_insn_m32c;
5195796c8dcSSimon Schubert break;
5205796c8dcSSimon Schubert #endif
521a45ae5f8SJohn Marino #ifdef ARCH_tilegx
522a45ae5f8SJohn Marino case bfd_arch_tilegx:
523a45ae5f8SJohn Marino disassemble = print_insn_tilegx;
524a45ae5f8SJohn Marino break;
525a45ae5f8SJohn Marino #endif
526a45ae5f8SJohn Marino #ifdef ARCH_tilepro
527a45ae5f8SJohn Marino case bfd_arch_tilepro:
528a45ae5f8SJohn Marino disassemble = print_insn_tilepro;
529a45ae5f8SJohn Marino break;
530a45ae5f8SJohn Marino #endif
5315796c8dcSSimon Schubert default:
5325796c8dcSSimon Schubert return 0;
5335796c8dcSSimon Schubert }
5345796c8dcSSimon Schubert return disassemble;
5355796c8dcSSimon Schubert }
5365796c8dcSSimon Schubert
5375796c8dcSSimon Schubert void
disassembler_usage(stream)5385796c8dcSSimon Schubert disassembler_usage (stream)
5395796c8dcSSimon Schubert FILE * stream ATTRIBUTE_UNUSED;
5405796c8dcSSimon Schubert {
541*ef5ccd6cSJohn Marino #ifdef ARCH_aarch64
542*ef5ccd6cSJohn Marino print_aarch64_disassembler_options (stream);
543*ef5ccd6cSJohn Marino #endif
5445796c8dcSSimon Schubert #ifdef ARCH_arm
5455796c8dcSSimon Schubert print_arm_disassembler_options (stream);
5465796c8dcSSimon Schubert #endif
5475796c8dcSSimon Schubert #ifdef ARCH_mips
5485796c8dcSSimon Schubert print_mips_disassembler_options (stream);
5495796c8dcSSimon Schubert #endif
5505796c8dcSSimon Schubert #ifdef ARCH_powerpc
5515796c8dcSSimon Schubert print_ppc_disassembler_options (stream);
5525796c8dcSSimon Schubert #endif
5535796c8dcSSimon Schubert #ifdef ARCH_i386
5545796c8dcSSimon Schubert print_i386_disassembler_options (stream);
5555796c8dcSSimon Schubert #endif
5565796c8dcSSimon Schubert #ifdef ARCH_s390
5575796c8dcSSimon Schubert print_s390_disassembler_options (stream);
5585796c8dcSSimon Schubert #endif
5595796c8dcSSimon Schubert
5605796c8dcSSimon Schubert return;
5615796c8dcSSimon Schubert }
5625796c8dcSSimon Schubert
5635796c8dcSSimon Schubert void
disassemble_init_for_target(struct disassemble_info * info)5645796c8dcSSimon Schubert disassemble_init_for_target (struct disassemble_info * info)
5655796c8dcSSimon Schubert {
5665796c8dcSSimon Schubert if (info == NULL)
5675796c8dcSSimon Schubert return;
5685796c8dcSSimon Schubert
5695796c8dcSSimon Schubert switch (info->arch)
5705796c8dcSSimon Schubert {
571*ef5ccd6cSJohn Marino #ifdef ARCH_aarch64
572*ef5ccd6cSJohn Marino case bfd_arch_aarch64:
573*ef5ccd6cSJohn Marino info->symbol_is_valid = aarch64_symbol_is_valid;
574*ef5ccd6cSJohn Marino info->disassembler_needs_relocs = TRUE;
575*ef5ccd6cSJohn Marino break;
576*ef5ccd6cSJohn Marino #endif
5775796c8dcSSimon Schubert #ifdef ARCH_arm
5785796c8dcSSimon Schubert case bfd_arch_arm:
5795796c8dcSSimon Schubert info->symbol_is_valid = arm_symbol_is_valid;
5805796c8dcSSimon Schubert info->disassembler_needs_relocs = TRUE;
5815796c8dcSSimon Schubert break;
5825796c8dcSSimon Schubert #endif
5835796c8dcSSimon Schubert #ifdef ARCH_ia64
5845796c8dcSSimon Schubert case bfd_arch_ia64:
5855796c8dcSSimon Schubert info->skip_zeroes = 16;
5865796c8dcSSimon Schubert break;
5875796c8dcSSimon Schubert #endif
5885796c8dcSSimon Schubert #ifdef ARCH_tic4x
5895796c8dcSSimon Schubert case bfd_arch_tic4x:
5905796c8dcSSimon Schubert info->skip_zeroes = 32;
5915796c8dcSSimon Schubert break;
5925796c8dcSSimon Schubert #endif
5935796c8dcSSimon Schubert #ifdef ARCH_mep
5945796c8dcSSimon Schubert case bfd_arch_mep:
5955796c8dcSSimon Schubert info->skip_zeroes = 256;
5965796c8dcSSimon Schubert info->skip_zeroes_at_end = 0;
5975796c8dcSSimon Schubert break;
5985796c8dcSSimon Schubert #endif
599*ef5ccd6cSJohn Marino #ifdef ARCH_metag
600*ef5ccd6cSJohn Marino case bfd_arch_metag:
601*ef5ccd6cSJohn Marino info->disassembler_needs_relocs = TRUE;
602*ef5ccd6cSJohn Marino break;
603*ef5ccd6cSJohn Marino #endif
6045796c8dcSSimon Schubert #ifdef ARCH_m32c
6055796c8dcSSimon Schubert case bfd_arch_m32c:
606c50c785cSJohn Marino /* This processor in fact is little endian. The value set here
607c50c785cSJohn Marino reflects the way opcodes are written in the cgen description. */
6085796c8dcSSimon Schubert info->endian = BFD_ENDIAN_BIG;
6095796c8dcSSimon Schubert if (! info->insn_sets)
6105796c8dcSSimon Schubert {
6115796c8dcSSimon Schubert info->insn_sets = cgen_bitset_create (ISA_MAX);
6125796c8dcSSimon Schubert if (info->mach == bfd_mach_m16c)
6135796c8dcSSimon Schubert cgen_bitset_set (info->insn_sets, ISA_M16C);
6145796c8dcSSimon Schubert else
6155796c8dcSSimon Schubert cgen_bitset_set (info->insn_sets, ISA_M32C);
6165796c8dcSSimon Schubert }
6175796c8dcSSimon Schubert break;
6185796c8dcSSimon Schubert #endif
619*ef5ccd6cSJohn Marino #ifdef ARCH_powerpc
620*ef5ccd6cSJohn Marino case bfd_arch_powerpc:
621*ef5ccd6cSJohn Marino #endif
622*ef5ccd6cSJohn Marino #ifdef ARCH_rs6000
623*ef5ccd6cSJohn Marino case bfd_arch_rs6000:
624*ef5ccd6cSJohn Marino #endif
625*ef5ccd6cSJohn Marino #if defined (ARCH_powerpc) || defined (ARCH_rs6000)
626*ef5ccd6cSJohn Marino disassemble_init_powerpc (info);
627*ef5ccd6cSJohn Marino break;
628*ef5ccd6cSJohn Marino #endif
6295796c8dcSSimon Schubert default:
6305796c8dcSSimon Schubert break;
6315796c8dcSSimon Schubert }
6325796c8dcSSimon Schubert }
633