disassemble.c revision 89857
1161754Sru/* Select disassembly routine for specified architecture. 288276Smarkm Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 388276Smarkm Free Software Foundation, Inc. 47527Sjkh 57527SjkhThis program is free software; you can redistribute it and/or modify 67527Sjkhit under the terms of the GNU General Public License as published by 77527Sjkhthe Free Software Foundation; either version 2 of the License, or 87527Sjkh(at your option) any later version. 97527Sjkh 107527SjkhThis program is distributed in the hope that it will be useful, 117527Sjkhbut WITHOUT ANY WARRANTY; without even the implied warranty of 127527SjkhMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 137527SjkhGNU General Public License for more details. 147527Sjkh 157527SjkhYou should have received a copy of the GNU General Public License 16161754Srualong with this program; if not, write to the Free Software 177527SjkhFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 187527Sjkh 197527Sjkh#include "sysdep.h" 207527Sjkh#include "dis-asm.h" 217527Sjkh 227527Sjkh#ifdef ARCH_all 237527Sjkh#define ARCH_a29k 247527Sjkh#define ARCH_alpha 257527Sjkh#define ARCH_arc 267527Sjkh#define ARCH_arm 277527Sjkh#define ARCH_avr 287527Sjkh#define ARCH_cris 297527Sjkh#define ARCH_d10v 307527Sjkh#define ARCH_d30v 317527Sjkh#define ARCH_h8300 327527Sjkh#define ARCH_h8500 3388276Smarkm#define ARCH_hppa 3488276Smarkm#define ARCH_i370 3588276Smarkm#define ARCH_i386 367527Sjkh#define ARCH_i860 3728365Scharnier#define ARCH_i960 387527Sjkh#define ARCH_ia64 39161754Sru#define ARCH_fr30 4028365Scharnier#define ARCH_m32r 417527Sjkh#define ARCH_m68k 427527Sjkh#define ARCH_m68hc11 437527Sjkh#define ARCH_m68hc12 447527Sjkh#define ARCH_m88k 45161754Sru#define ARCH_mcore 467527Sjkh#define ARCH_mips 477527Sjkh#define ARCH_mmix 487527Sjkh#define ARCH_mn10200 497527Sjkh#define ARCH_mn10300 5088276Smarkm#define ARCH_ns32k 51161754Sru#define ARCH_openrisc 527527Sjkh#define ARCH_pdp11 53161754Sru#define ARCH_pj 5488276Smarkm#define ARCH_powerpc 5588276Smarkm#define ARCH_rs6000 567527Sjkh#define ARCH_s390 577527Sjkh#define ARCH_sh 5888276Smarkm#define ARCH_sparc 5988276Smarkm#define ARCH_tic30 607527Sjkh#define ARCH_tic54x 617527Sjkh#define ARCH_tic80 62161754Sru#define ARCH_v850 63162124Sru#define ARCH_vax 64162124Sru#define ARCH_w65 65162124Sru#define ARCH_xstormy16 66162124Sru#define ARCH_z8k 67162124Sru#endif 68162124Sru 69162124Sru 70162124Srudisassembler_ftype 71162124Srudisassembler (abfd) 72162124Sru bfd *abfd; 73162124Sru{ 74162124Sru enum bfd_architecture a = bfd_get_arch (abfd); 75162124Sru disassembler_ftype disassemble; 76162124Sru 77162124Sru switch (a) 78162124Sru { 79162124Sru /* If you add a case to this table, also add it to the 80162124Sru ARCH_all definition right above this function. */ 81162124Sru#ifdef ARCH_a29k 82162124Sru case bfd_arch_a29k: 83161754Sru /* As far as I know we only handle big-endian 29k objects. */ 847527Sjkh disassemble = print_insn_big_a29k; 8588276Smarkm break; 867527Sjkh#endif 8788276Smarkm#ifdef ARCH_alpha 8888276Smarkm case bfd_arch_alpha: 8988276Smarkm disassemble = print_insn_alpha; 9088276Smarkm break; 9188276Smarkm#endif 9288276Smarkm#ifdef ARCH_arc 9388276Smarkm case bfd_arch_arc: 9488276Smarkm { 9588276Smarkm disassemble = arc_get_disassembler (abfd); 9688276Smarkm break; 9788276Smarkm } 9888276Smarkm#endif 997527Sjkh#ifdef ARCH_arm 10088276Smarkm case bfd_arch_arm: 101161754Sru if (bfd_big_endian (abfd)) 10288276Smarkm disassemble = print_insn_big_arm; 10388276Smarkm else 1047527Sjkh disassemble = print_insn_little_arm; 1057527Sjkh break; 10688276Smarkm#endif 1077527Sjkh#ifdef ARCH_avr 10888276Smarkm case bfd_arch_avr: 10988276Smarkm disassemble = print_insn_avr; 11088276Smarkm break; 1117527Sjkh#endif 11288276Smarkm#ifdef ARCH_cris 11388276Smarkm case bfd_arch_cris: 11488276Smarkm disassemble = cris_get_disassembler (abfd); 11588276Smarkm break; 116161754Sru#endif 117161754Sru#ifdef ARCH_d10v 118161754Sru case bfd_arch_d10v: 119161754Sru disassemble = print_insn_d10v; 12088276Smarkm break; 12188276Smarkm#endif 122161754Sru#ifdef ARCH_d30v 123161754Sru case bfd_arch_d30v: 124161754Sru disassemble = print_insn_d30v; 125161754Sru break; 12688276Smarkm#endif 1277527Sjkh#ifdef ARCH_h8300 12888276Smarkm case bfd_arch_h8300: 1297527Sjkh if (bfd_get_mach(abfd) == bfd_mach_h8300h) 1307527Sjkh disassemble = print_insn_h8300h; 1317527Sjkh else if (bfd_get_mach(abfd) == bfd_mach_h8300s) 13288276Smarkm disassemble = print_insn_h8300s; 13388276Smarkm else 13488276Smarkm disassemble = print_insn_h8300; 13588276Smarkm break; 13688276Smarkm#endif 13788276Smarkm#ifdef ARCH_h8500 13888276Smarkm case bfd_arch_h8500: 13988276Smarkm disassemble = print_insn_h8500; 14088276Smarkm break; 14188276Smarkm#endif 14288276Smarkm#ifdef ARCH_hppa 14388276Smarkm case bfd_arch_hppa: 14488276Smarkm disassemble = print_insn_hppa; 14588276Smarkm break; 1467527Sjkh#endif 1477527Sjkh#ifdef ARCH_i370 1487527Sjkh case bfd_arch_i370: 1497527Sjkh disassemble = print_insn_i370; 150161754Sru break; 1517527Sjkh#endif 1527527Sjkh#ifdef ARCH_i386 1537527Sjkh case bfd_arch_i386: 1547527Sjkh disassemble = print_insn_i386; 1557527Sjkh break; 15688276Smarkm#endif 1577527Sjkh#ifdef ARCH_i860 1587527Sjkh case bfd_arch_i860: 1597527Sjkh disassemble = print_insn_i860; 1607527Sjkh break; 1617527Sjkh#endif 1627527Sjkh#ifdef ARCH_i960 1637527Sjkh case bfd_arch_i960: 1647527Sjkh disassemble = print_insn_i960; 1657527Sjkh break; 1667527Sjkh#endif 1677527Sjkh#ifdef ARCH_ia64 1687527Sjkh case bfd_arch_ia64: 1697527Sjkh disassemble = print_insn_ia64; 170161754Sru break; 171161754Sru#endif 172161754Sru#ifdef ARCH_fr30 173161754Sru case bfd_arch_fr30: 174161754Sru disassemble = print_insn_fr30; 175161754Sru break; 176161754Sru#endif 177161754Sru#ifdef ARCH_m32r 178161754Sru case bfd_arch_m32r: 179161754Sru disassemble = print_insn_m32r; 180161754Sru break; 18188276Smarkm#endif 182161754Sru#if defined(ARCH_m68hc11) || defined(ARCH_m68hc12) 183161754Sru case bfd_arch_m68hc11: 184161754Sru disassemble = print_insn_m68hc11; 185161754Sru break; 186161754Sru case bfd_arch_m68hc12: 187161754Sru disassemble = print_insn_m68hc12; 188161754Sru break; 189161754Sru#endif 1907527Sjkh#ifdef ARCH_m68k 1917527Sjkh case bfd_arch_m68k: 1927527Sjkh disassemble = print_insn_m68k; 1937527Sjkh break; 1947527Sjkh#endif 195161754Sru#ifdef ARCH_m88k 196161754Sru case bfd_arch_m88k: 197161754Sru disassemble = print_insn_m88k; 198161754Sru break; 199161754Sru#endif 200161754Sru#ifdef ARCH_ns32k 201161754Sru case bfd_arch_ns32k: 2027527Sjkh disassemble = print_insn_ns32k; 20388276Smarkm break; 204161754Sru#endif 205161754Sru#ifdef ARCH_mcore 20688276Smarkm case bfd_arch_mcore: 207161754Sru disassemble = print_insn_mcore; 208161754Sru break; 20988276Smarkm#endif 21088276Smarkm#ifdef ARCH_mips 211 case bfd_arch_mips: 212 if (bfd_big_endian (abfd)) 213 disassemble = print_insn_big_mips; 214 else 215 disassemble = print_insn_little_mips; 216 break; 217#endif 218#ifdef ARCH_mmix 219 case bfd_arch_mmix: 220 disassemble = print_insn_mmix; 221 break; 222#endif 223#ifdef ARCH_mn10200 224 case bfd_arch_mn10200: 225 disassemble = print_insn_mn10200; 226 break; 227#endif 228#ifdef ARCH_mn10300 229 case bfd_arch_mn10300: 230 disassemble = print_insn_mn10300; 231 break; 232#endif 233#ifdef ARCH_openrisc 234 case bfd_arch_openrisc: 235 disassemble = print_insn_openrisc; 236 break; 237#endif 238#ifdef ARCH_pdp11 239 case bfd_arch_pdp11: 240 disassemble = print_insn_pdp11; 241 break; 242#endif 243#ifdef ARCH_pj 244 case bfd_arch_pj: 245 disassemble = print_insn_pj; 246 break; 247#endif 248#ifdef ARCH_powerpc 249 case bfd_arch_powerpc: 250 if (bfd_big_endian (abfd)) 251 disassemble = print_insn_big_powerpc; 252 else 253 disassemble = print_insn_little_powerpc; 254 break; 255#endif 256#ifdef ARCH_rs6000 257 case bfd_arch_rs6000: 258 if (bfd_get_mach (abfd) == bfd_mach_ppc_620) 259 disassemble = print_insn_big_powerpc; 260 else 261 disassemble = print_insn_rs6000; 262 break; 263#endif 264#ifdef ARCH_s390 265 case bfd_arch_s390: 266 disassemble = print_insn_s390; 267 break; 268#endif 269#ifdef ARCH_sh 270 case bfd_arch_sh: 271 if (bfd_big_endian (abfd)) 272 disassemble = print_insn_sh; 273 else 274 disassemble = print_insn_shl; 275 break; 276#endif 277#ifdef ARCH_sparc 278 case bfd_arch_sparc: 279 disassemble = print_insn_sparc; 280 break; 281#endif 282#ifdef ARCH_tic30 283 case bfd_arch_tic30: 284 disassemble = print_insn_tic30; 285 break; 286#endif 287#ifdef ARCH_tic54x 288 case bfd_arch_tic54x: 289 disassemble = print_insn_tic54x; 290 break; 291#endif 292#ifdef ARCH_tic80 293 case bfd_arch_tic80: 294 disassemble = print_insn_tic80; 295 break; 296#endif 297#ifdef ARCH_v850 298 case bfd_arch_v850: 299 disassemble = print_insn_v850; 300 break; 301#endif 302#ifdef ARCH_w65 303 case bfd_arch_w65: 304 disassemble = print_insn_w65; 305 break; 306#endif 307#ifdef ARCH_xstormy16 308 case bfd_arch_xstormy16: 309 disassemble = print_insn_xstormy16; 310 break; 311#endif 312#ifdef ARCH_z8k 313 case bfd_arch_z8k: 314 if (bfd_get_mach(abfd) == bfd_mach_z8001) 315 disassemble = print_insn_z8001; 316 else 317 disassemble = print_insn_z8002; 318 break; 319#endif 320#ifdef ARCH_vax 321 case bfd_arch_vax: 322 disassemble = print_insn_vax; 323 break; 324#endif 325 default: 326 return 0; 327 } 328 return disassemble; 329} 330 331void 332disassembler_usage (stream) 333 FILE * stream ATTRIBUTE_UNUSED; 334{ 335#ifdef ARCH_arm 336 print_arm_disassembler_options (stream); 337#endif 338 339 return; 340} 341