1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22: #include "sysdep.h"
23: #include "dis-asm.h"
24:
25: #ifdef ARCH_all
26: #define ARCH_alpha
27: #define ARCH_arc
28: #define ARCH_arm
29: #define ARCH_avr
30: #define ARCH_bfin
31: #define ARCH_cr16
32: #define ARCH_cris
33: #define ARCH_crx
34: #define ARCH_d10v
35: #define ARCH_d30v
36: #define ARCH_dlx
37: #define ARCH_fr30
38: #define ARCH_frv
39: #define ARCH_h8300
40: #define ARCH_h8500
41: #define ARCH_hppa
42: #define ARCH_i370
43: #define ARCH_i386
44: #define ARCH_i860
45: #define ARCH_i960
46: #define ARCH_ia64
47: #define ARCH_ip2k
48: #define ARCH_iq2000
49: #define ARCH_m32c
50: #define ARCH_m32r
51: #define ARCH_m68hc11
52: #define ARCH_m68hc12
53: #define ARCH_m68k
54: #define ARCH_m88k
55: #define ARCH_maxq
56: #define ARCH_mcore
57: #define ARCH_mep
58: #define ARCH_mips
59: #define ARCH_mmix
60: #define ARCH_mn10200
61: #define ARCH_mn10300
62: #define ARCH_mt
63: #define ARCH_msp430
64: #define ARCH_ns32k
65: #define ARCH_openrisc
66: #define ARCH_or32
67: #define ARCH_pdp11
68: #define ARCH_pj
69: #define ARCH_powerpc
70: #define ARCH_rs6000
71: #define ARCH_s390
72: #define ARCH_score
73: #define ARCH_sh
74: #define ARCH_sparc
75: #define ARCH_spu
76: #define ARCH_tic30
77: #define ARCH_tic4x
78: #define ARCH_tic54x
79: #define ARCH_tic80
80: #define ARCH_v850
81: #define ARCH_vax
82: #define ARCH_w65
83: #define ARCH_xstormy16
84: #define ARCH_xc16x
85: #define ARCH_xtensa
86: #define ARCH_z80
87: #define ARCH_z8k
88: #define INCLUDE_SHMEDIA
89: #endif
90:
91: #ifdef ARCH_m32c
92: #include "m32c-desc.h"
93: #endif
94:
95: disassembler_ftype
96: disassembler (abfd)
97: bfd *abfd;
98: {
99: enum bfd_architecture a = bfd_get_arch (abfd);
100: disassembler_ftype disassemble;
101:
102: switch (a)
103: {
104:
105:
106: #ifdef ARCH_alpha
107: case bfd_arch_alpha:
108: disassemble = print_insn_alpha;
109: break;
110: #endif
111: #ifdef ARCH_arc
112: case bfd_arch_arc:
113: {
114: disassemble = arc_get_disassembler (abfd);
115: break;
116: }
117: #endif
118: #ifdef ARCH_arm
119: case bfd_arch_arm:
120: if (bfd_big_endian (abfd))
121: disassemble = print_insn_big_arm;
122: else
123: disassemble = print_insn_little_arm;
124: break;
125: #endif
126: #ifdef ARCH_avr
127: case bfd_arch_avr:
128: disassemble = print_insn_avr;
129: break;
130: #endif
131: #ifdef ARCH_bfin
132: case bfd_arch_bfin:
133: disassemble = print_insn_bfin;
134: break;
135: #endif
136: #ifdef ARCH_cr16
137: case bfd_arch_cr16:
138: disassemble = print_insn_cr16;
139: break;
140: #endif
141: #ifdef ARCH_cris
142: case bfd_arch_cris:
143: disassemble = cris_get_disassembler (abfd);
144: break;
145: #endif
146: #ifdef ARCH_crx
147: case bfd_arch_crx:
148: disassemble = print_insn_crx;
149: break;
150: #endif
151: #ifdef ARCH_d10v
152: case bfd_arch_d10v:
153: disassemble = print_insn_d10v;
154: break;
155: #endif
156: #ifdef ARCH_d30v
157: case bfd_arch_d30v:
158: disassemble = print_insn_d30v;
159: break;
160: #endif
161: #ifdef ARCH_dlx
162: case bfd_arch_dlx:
163:
164: disassemble = print_insn_dlx;
165: break;
166: #endif
167: #ifdef ARCH_h8300
168: case bfd_arch_h8300:
169: if (bfd_get_mach (abfd) == bfd_mach_h8300h
170: || bfd_get_mach (abfd) == bfd_mach_h8300hn)
171: disassemble = print_insn_h8300h;
172: else if (bfd_get_mach (abfd) == bfd_mach_h8300s
173: || bfd_get_mach (abfd) == bfd_mach_h8300sn
174: || bfd_get_mach (abfd) == bfd_mach_h8300sx
175: || bfd_get_mach (abfd) == bfd_mach_h8300sxn)
176: disassemble = print_insn_h8300s;
177: else
178: disassemble = print_insn_h8300;
179: break;
180: #endif
181: #ifdef ARCH_h8500
182: case bfd_arch_h8500:
183: disassemble = print_insn_h8500;
184: break;
185: #endif
186: #ifdef ARCH_hppa
187: case bfd_arch_hppa:
188: disassemble = print_insn_hppa;
189: break;
190: #endif
191: #ifdef ARCH_i370
192: case bfd_arch_i370:
193: disassemble = print_insn_i370;
194: break;
195: #endif
196: #ifdef ARCH_i386
197: case bfd_arch_i386:
198: disassemble = print_insn_i386;
199: break;
200: #endif
201: #ifdef ARCH_i860
202: case bfd_arch_i860:
203: disassemble = print_insn_i860;
204: break;
205: #endif
206: #ifdef ARCH_i960
207: case bfd_arch_i960:
208: disassemble = print_insn_i960;
209: break;
210: #endif
211: #ifdef ARCH_ia64
212: case bfd_arch_ia64:
213: disassemble = print_insn_ia64;
214: break;
215: #endif
216: #ifdef ARCH_ip2k
217: case bfd_arch_ip2k:
218: disassemble = print_insn_ip2k;
219: break;
220: #endif
221: #ifdef ARCH_fr30
222: case bfd_arch_fr30:
223: disassemble = print_insn_fr30;
224: break;
225: #endif
226: #ifdef ARCH_m32r
227: case bfd_arch_m32r:
228: disassemble = print_insn_m32r;
229: break;
230: #endif
231: #if defined(ARCH_m68hc11) || defined(ARCH_m68hc12)
232: case bfd_arch_m68hc11:
233: disassemble = print_insn_m68hc11;
234: break;
235: case bfd_arch_m68hc12:
236: disassemble = print_insn_m68hc12;
237: break;
238: #endif
239: #ifdef ARCH_m68k
240: case bfd_arch_m68k:
241: disassemble = print_insn_m68k;
242: break;
243: #endif
244: #ifdef ARCH_m88k
245: case bfd_arch_m88k:
246: disassemble = print_insn_m88k;
247: break;
248: #endif
249: #ifdef ARCH_maxq
250: case bfd_arch_maxq:
251: disassemble = print_insn_maxq_little;
252: break;
253: #endif
254: #ifdef ARCH_mt
255: case bfd_arch_mt:
256: disassemble = print_insn_mt;
257: break;
258: #endif
259: #ifdef ARCH_msp430
260: case bfd_arch_msp430:
261: disassemble = print_insn_msp430;
262: break;
263: #endif
264: #ifdef ARCH_ns32k
265: case bfd_arch_ns32k:
266: disassemble = print_insn_ns32k;
267: break;
268: #endif
269: #ifdef ARCH_mcore
270: case bfd_arch_mcore:
271: disassemble = print_insn_mcore;
272: break;
273: #endif
274: #ifdef ARCH_mep
275: case bfd_arch_mep:
276: disassemble = print_insn_mep;
277: break;
278: #endif
279: #ifdef ARCH_mips
280: case bfd_arch_mips:
281: if (bfd_big_endian (abfd))
282: disassemble = print_insn_big_mips;
283: else
284: disassemble = print_insn_little_mips;
285: break;
286: #endif
287: #ifdef ARCH_mmix
288: case bfd_arch_mmix:
289: disassemble = print_insn_mmix;
290: break;
291: #endif
292: #ifdef ARCH_mn10200
293: case bfd_arch_mn10200:
294: disassemble = print_insn_mn10200;
295: break;
296: #endif
297: #ifdef ARCH_mn10300
298: case bfd_arch_mn10300:
299: disassemble = print_insn_mn10300;
300: break;
301: #endif
302: #ifdef ARCH_openrisc
303: case bfd_arch_openrisc:
304: disassemble = print_insn_openrisc;
305: break;
306: #endif
307: #ifdef ARCH_or32
308: case bfd_arch_or32:
309: if (bfd_big_endian (abfd))
310: disassemble = print_insn_big_or32;
311: else
312: disassemble = print_insn_little_or32;
313: break;
314: #endif
315: #ifdef ARCH_pdp11
316: case bfd_arch_pdp11:
317: disassemble = print_insn_pdp11;
318: break;
319: #endif
320: #ifdef ARCH_pj
321: case bfd_arch_pj:
322: disassemble = print_insn_pj;
323: break;
324: #endif
325: #ifdef ARCH_powerpc
326: case bfd_arch_powerpc:
327: if (bfd_big_endian (abfd))
328: disassemble = print_insn_big_powerpc;
329: else
330: disassemble = print_insn_little_powerpc;
331: break;
332: #endif
333: #ifdef ARCH_rs6000
334: case bfd_arch_rs6000:
335: if (bfd_get_mach (abfd) == bfd_mach_ppc_620)
336: disassemble = print_insn_big_powerpc;
337: else
338: disassemble = print_insn_rs6000;
339: break;
340: #endif
341: #ifdef ARCH_s390
342: case bfd_arch_s390:
343: disassemble = print_insn_s390;
344: break;
345: #endif
346: #ifdef ARCH_score
347: case bfd_arch_score:
348: if (bfd_big_endian (abfd))
349: disassemble = print_insn_big_score;
350: else
351: disassemble = print_insn_little_score;
352: break;
353: #endif
354: #ifdef ARCH_sh
355: case bfd_arch_sh:
356: disassemble = print_insn_sh;
357: break;
358: #endif
359: #ifdef ARCH_sparc
360: case bfd_arch_sparc:
361: disassemble = print_insn_sparc;
362: break;
363: #endif
364: #ifdef ARCH_spu
365: case bfd_arch_spu:
366: disassemble = print_insn_spu;
367: break;
368: #endif
369: #ifdef ARCH_tic30
370: case bfd_arch_tic30:
371: disassemble = print_insn_tic30;
372: break;
373: #endif
374: #ifdef ARCH_tic4x
375: case bfd_arch_tic4x:
376: disassemble = print_insn_tic4x;
377: break;
378: #endif
379: #ifdef ARCH_tic54x
380: case bfd_arch_tic54x:
381: disassemble = print_insn_tic54x;
382: break;
383: #endif
384: #ifdef ARCH_tic80
385: case bfd_arch_tic80:
386: disassemble = print_insn_tic80;
387: break;
388: #endif
389: #ifdef ARCH_v850
390: case bfd_arch_v850:
391: disassemble = print_insn_v850;
392: break;
393: #endif
394: #ifdef ARCH_w65
395: case bfd_arch_w65:
396: disassemble = print_insn_w65;
397: break;
398: #endif
399: #ifdef ARCH_xstormy16
400: case bfd_arch_xstormy16:
401: disassemble = print_insn_xstormy16;
402: break;
403: #endif
404: #ifdef ARCH_xc16x
405: case bfd_arch_xc16x:
406: disassemble = print_insn_xc16x;
407: break;
408: #endif
409: #ifdef ARCH_xtensa
410: case bfd_arch_xtensa:
411: disassemble = print_insn_xtensa;
412: break;
413: #endif
414: #ifdef ARCH_z80
415: case bfd_arch_z80:
416: disassemble = print_insn_z80;
417: break;
418: #endif
419: #ifdef ARCH_z8k
420: case bfd_arch_z8k:
421: if (bfd_get_mach(abfd) == bfd_mach_z8001)
422: disassemble = print_insn_z8001;
423: else
424: disassemble = print_insn_z8002;
425: break;
426: #endif
427: #ifdef ARCH_vax
428: case bfd_arch_vax:
429: disassemble = print_insn_vax;
430: break;
431: #endif
432: #ifdef ARCH_frv
433: case bfd_arch_frv:
434: disassemble = print_insn_frv;
435: break;
436: #endif
437: #ifdef ARCH_iq2000
438: case bfd_arch_iq2000:
439: disassemble = print_insn_iq2000;
440: break;
441: #endif
442: #ifdef ARCH_m32c
443: case bfd_arch_m32c:
444: disassemble = print_insn_m32c;
445: break;
446: #endif
447: default:
448: return 0;
449: }
450: return disassemble;
451: }
452:
453: void
454: disassembler_usage (stream)
455: FILE * stream ATTRIBUTE_UNUSED;
456: {
457: #ifdef ARCH_arm
458: print_arm_disassembler_options (stream);
459: #endif
460: #ifdef ARCH_mips
461: print_mips_disassembler_options (stream);
462: #endif
463: #ifdef ARCH_powerpc
464: print_ppc_disassembler_options (stream);
465: #endif
466: #ifdef ARCH_i386
467: print_i386_disassembler_options (stream);
468: #endif
469:
470: return;
471: }
472:
473: void
474: disassemble_init_for_target (struct disassemble_info * info)
475: {
476: if (info == NULL)
477: return;
478:
479: switch (info->arch)
480: {
481: #ifdef ARCH_arm
482: case bfd_arch_arm:
483: info->symbol_is_valid = arm_symbol_is_valid;
484: info->disassembler_needs_relocs = TRUE;
485: break;
486: #endif
487: #ifdef ARCH_ia64
488: case bfd_arch_ia64:
489: info->skip_zeroes = 16;
490: break;
491: #endif
492: #ifdef ARCH_tic4x
493: case bfd_arch_tic4x:
494: info->skip_zeroes = 32;
495: break;
496: #endif
497: #ifdef ARCH_mep
498: case bfd_arch_mep:
499: info->skip_zeroes = 256;
500: info->skip_zeroes_at_end = 0;
501: break;
502: #endif
503: #ifdef ARCH_m32c
504: case bfd_arch_m32c:
505: info->endian = BFD_ENDIAN_BIG;
506: if (! info->insn_sets)
507: {
508: info->insn_sets = cgen_bitset_create (ISA_MAX);
509: if (info->mach == bfd_mach_m16c)
510: cgen_bitset_set (info->insn_sets, ISA_M16C);
511: else
512: cgen_bitset_set (info->insn_sets, ISA_M32C);
513: }
514: break;
515: #endif
516: default:
517: break;
518: }
519: }