1/* Select disassembly routine for specified architecture. 2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 3 Free Software Foundation, Inc. 4 5This program is free software; you can redistribute it and/or modify 6it under the terms of the GNU General Public License as published by 7the Free Software Foundation; either version 2 of the License, or 8(at your option) any later version. 9 10This program is distributed in the hope that it will be useful, 11but WITHOUT ANY WARRANTY; without even the implied warranty of 12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13GNU General Public License for more details. 14 15You should have received a copy of the GNU General Public License 16along with this program; if not, write to the Free Software 17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 18 19#include "sysdep.h" 20#include "dis-asm.h" 21 22#ifdef ARCH_all 23#define ARCH_a29k 24#define ARCH_alpha 25#define ARCH_arc 26#define ARCH_arm 27#define ARCH_avr 28#define ARCH_cris 29#define ARCH_crx 30#define ARCH_d10v 31#define ARCH_d30v 32#define ARCH_dlx 33#define ARCH_h8300 34#define ARCH_h8500 35#define ARCH_hppa 36#define ARCH_i370 37#define ARCH_i386 38#define ARCH_i860 39#define ARCH_i960 40#define ARCH_ip2k 41#define ARCH_ia64 42#define ARCH_fr30 43#define ARCH_m32r 44#define ARCH_m68k 45#define ARCH_m68hc11 46#define ARCH_m68hc12 47#define ARCH_m88k 48#define ARCH_mcore 49#define ARCH_mips 50#define ARCH_mmix 51#define ARCH_mn10200 52#define ARCH_mn10300 53#define ARCH_msp430 54#define ARCH_ns32k 55#define ARCH_openrisc 56#define ARCH_or32 57#define ARCH_pdp11 58#define ARCH_pj 59#define ARCH_powerpc 60#define ARCH_rs6000 61#define ARCH_s390 62#define ARCH_sh 63#define ARCH_sparc 64#define ARCH_tic30 65#define ARCH_tic4x 66#define ARCH_tic54x 67#define ARCH_tic80 68#define ARCH_v850 69#define ARCH_vax 70#define ARCH_w65 71#define ARCH_xstormy16 72#define ARCH_xtensa 73#define ARCH_z8k 74#define ARCH_frv 75#define ARCH_iq2000 76#define INCLUDE_SHMEDIA 77#endif 78 79 80disassembler_ftype 81disassembler (abfd) 82 bfd *abfd; 83{ 84 enum bfd_architecture a = bfd_get_arch (abfd); 85 disassembler_ftype disassemble; 86 87 switch (a) 88 { 89 /* If you add a case to this table, also add it to the 90 ARCH_all definition right above this function. */ 91#ifdef ARCH_a29k 92 case bfd_arch_a29k: 93 /* As far as I know we only handle big-endian 29k objects. */ 94 disassemble = print_insn_big_a29k; 95 break; 96#endif 97#ifdef ARCH_alpha 98 case bfd_arch_alpha: 99 disassemble = print_insn_alpha; 100 break; 101#endif 102#ifdef ARCH_arc 103 case bfd_arch_arc: 104 { 105 disassemble = arc_get_disassembler (abfd); 106 break; 107 } 108#endif 109#ifdef ARCH_arm 110 case bfd_arch_arm: 111 if (bfd_big_endian (abfd)) 112 disassemble = print_insn_big_arm; 113 else 114 disassemble = print_insn_little_arm; 115 break; 116#endif 117#ifdef ARCH_avr 118 case bfd_arch_avr: 119 disassemble = print_insn_avr; 120 break; 121#endif 122#ifdef ARCH_cris 123 case bfd_arch_cris: 124 disassemble = cris_get_disassembler (abfd); 125 break; 126#endif 127#ifdef ARCH_crx 128 case bfd_arch_crx: 129 disassemble = print_insn_crx; 130 break; 131#endif 132#ifdef ARCH_d10v 133 case bfd_arch_d10v: 134 disassemble = print_insn_d10v; 135 break; 136#endif 137#ifdef ARCH_d30v 138 case bfd_arch_d30v: 139 disassemble = print_insn_d30v; 140 break; 141#endif 142#ifdef ARCH_dlx 143 case bfd_arch_dlx: 144 /* As far as I know we only handle big-endian DLX objects. */ 145 disassemble = print_insn_dlx; 146 break; 147#endif 148#ifdef ARCH_h8300 149 case bfd_arch_h8300: 150 if (bfd_get_mach (abfd) == bfd_mach_h8300h 151 || bfd_get_mach (abfd) == bfd_mach_h8300hn) 152 disassemble = print_insn_h8300h; 153 else if (bfd_get_mach (abfd) == bfd_mach_h8300s 154 || bfd_get_mach (abfd) == bfd_mach_h8300sn 155 || bfd_get_mach (abfd) == bfd_mach_h8300sx 156 || bfd_get_mach (abfd) == bfd_mach_h8300sxn) 157 disassemble = print_insn_h8300s; 158 else 159 disassemble = print_insn_h8300; 160 break; 161#endif 162#ifdef ARCH_h8500 163 case bfd_arch_h8500: 164 disassemble = print_insn_h8500; 165 break; 166#endif 167#ifdef ARCH_hppa 168 case bfd_arch_hppa: 169 disassemble = print_insn_hppa; 170 break; 171#endif 172#ifdef ARCH_i370 173 case bfd_arch_i370: 174 disassemble = print_insn_i370; 175 break; 176#endif 177#ifdef ARCH_i386 178 case bfd_arch_i386: 179 disassemble = print_insn_i386; 180 break; 181#endif 182#ifdef ARCH_i860 183 case bfd_arch_i860: 184 disassemble = print_insn_i860; 185 break; 186#endif 187#ifdef ARCH_i960 188 case bfd_arch_i960: 189 disassemble = print_insn_i960; 190 break; 191#endif 192#ifdef ARCH_ia64 193 case bfd_arch_ia64: 194 disassemble = print_insn_ia64; 195 break; 196#endif 197#ifdef ARCH_ip2k 198 case bfd_arch_ip2k: 199 disassemble = print_insn_ip2k; 200 break; 201#endif 202#ifdef ARCH_fr30 203 case bfd_arch_fr30: 204 disassemble = print_insn_fr30; 205 break; 206#endif 207#ifdef ARCH_m32r 208 case bfd_arch_m32r: 209 disassemble = print_insn_m32r; 210 break; 211#endif 212#if defined(ARCH_m68hc11) || defined(ARCH_m68hc12) 213 case bfd_arch_m68hc11: 214 disassemble = print_insn_m68hc11; 215 break; 216 case bfd_arch_m68hc12: 217 disassemble = print_insn_m68hc12; 218 break; 219#endif 220#ifdef ARCH_m68k 221 case bfd_arch_m68k: 222 disassemble = print_insn_m68k; 223 break; 224#endif 225#ifdef ARCH_m88k 226 case bfd_arch_m88k: 227 disassemble = print_insn_m88k; 228 break; 229#endif 230#ifdef ARCH_msp430 231 case bfd_arch_msp430: 232 disassemble = print_insn_msp430; 233 break; 234#endif 235#ifdef ARCH_ns32k 236 case bfd_arch_ns32k: 237 disassemble = print_insn_ns32k; 238 break; 239#endif 240#ifdef ARCH_mcore 241 case bfd_arch_mcore: 242 disassemble = print_insn_mcore; 243 break; 244#endif 245#ifdef ARCH_mips 246 case bfd_arch_mips: 247 if (bfd_big_endian (abfd)) 248 disassemble = print_insn_big_mips; 249 else 250 disassemble = print_insn_little_mips; 251 break; 252#endif 253#ifdef ARCH_mmix 254 case bfd_arch_mmix: 255 disassemble = print_insn_mmix; 256 break; 257#endif 258#ifdef ARCH_mn10200 259 case bfd_arch_mn10200: 260 disassemble = print_insn_mn10200; 261 break; 262#endif 263#ifdef ARCH_mn10300 264 case bfd_arch_mn10300: 265 disassemble = print_insn_mn10300; 266 break; 267#endif 268#ifdef ARCH_openrisc 269 case bfd_arch_openrisc: 270 disassemble = print_insn_openrisc; 271 break; 272#endif 273#ifdef ARCH_or32 274 case bfd_arch_or32: 275 if (bfd_big_endian (abfd)) 276 disassemble = print_insn_big_or32; 277 else 278 disassemble = print_insn_little_or32; 279 break; 280#endif 281#ifdef ARCH_pdp11 282 case bfd_arch_pdp11: 283 disassemble = print_insn_pdp11; 284 break; 285#endif 286#ifdef ARCH_pj 287 case bfd_arch_pj: 288 disassemble = print_insn_pj; 289 break; 290#endif 291#ifdef ARCH_powerpc 292 case bfd_arch_powerpc: 293 if (bfd_big_endian (abfd)) 294 disassemble = print_insn_big_powerpc; 295 else 296 disassemble = print_insn_little_powerpc; 297 break; 298#endif 299#ifdef ARCH_rs6000 300 case bfd_arch_rs6000: 301 if (bfd_get_mach (abfd) == bfd_mach_ppc_620) 302 disassemble = print_insn_big_powerpc; 303 else 304 disassemble = print_insn_rs6000; 305 break; 306#endif 307#ifdef ARCH_s390 308 case bfd_arch_s390: 309 disassemble = print_insn_s390; 310 break; 311#endif 312#ifdef ARCH_sh 313 case bfd_arch_sh: 314 disassemble = print_insn_sh; 315 break; 316#endif 317#ifdef ARCH_sparc 318 case bfd_arch_sparc: 319 disassemble = print_insn_sparc; 320 break; 321#endif 322#ifdef ARCH_tic30 323 case bfd_arch_tic30: 324 disassemble = print_insn_tic30; 325 break; 326#endif 327#ifdef ARCH_tic4x 328 case bfd_arch_tic4x: 329 disassemble = print_insn_tic4x; 330 break; 331#endif 332#ifdef ARCH_tic54x 333 case bfd_arch_tic54x: 334 disassemble = print_insn_tic54x; 335 break; 336#endif 337#ifdef ARCH_tic80 338 case bfd_arch_tic80: 339 disassemble = print_insn_tic80; 340 break; 341#endif 342#ifdef ARCH_v850 343 case bfd_arch_v850: 344 disassemble = print_insn_v850; 345 break; 346#endif 347#ifdef ARCH_w65 348 case bfd_arch_w65: 349 disassemble = print_insn_w65; 350 break; 351#endif 352#ifdef ARCH_xstormy16 353 case bfd_arch_xstormy16: 354 disassemble = print_insn_xstormy16; 355 break; 356#endif 357#ifdef ARCH_xtensa 358 case bfd_arch_xtensa: 359 disassemble = print_insn_xtensa; 360 break; 361#endif 362#ifdef ARCH_z8k 363 case bfd_arch_z8k: 364 if (bfd_get_mach(abfd) == bfd_mach_z8001) 365 disassemble = print_insn_z8001; 366 else 367 disassemble = print_insn_z8002; 368 break; 369#endif 370#ifdef ARCH_vax 371 case bfd_arch_vax: 372 disassemble = print_insn_vax; 373 break; 374#endif 375#ifdef ARCH_frv 376 case bfd_arch_frv: 377 disassemble = print_insn_frv; 378 break; 379#endif 380#ifdef ARCH_iq2000 381 case bfd_arch_iq2000: 382 disassemble = print_insn_iq2000; 383 break; 384#endif 385 default: 386 return 0; 387 } 388 return disassemble; 389} 390 391void 392disassembler_usage (stream) 393 FILE * stream ATTRIBUTE_UNUSED; 394{ 395#ifdef ARCH_arm 396 print_arm_disassembler_options (stream); 397#endif 398#ifdef ARCH_mips 399 print_mips_disassembler_options (stream); 400#endif 401#ifdef ARCH_powerpc 402 print_ppc_disassembler_options (stream); 403#endif 404 405 return; 406} 407 408void 409disassemble_init_for_target (struct disassemble_info * info) 410{ 411 if (info == NULL) 412 return; 413 414 switch (info->arch) 415 { 416#ifdef ARCH_arm 417 case bfd_arch_arm: 418 info->symbol_is_valid = arm_symbol_is_valid; 419 break; 420#endif 421 default: 422 break; 423 } 424} 425