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 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 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 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