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