d28847ce8e
2001-10-08 Nick Clifton <nickc@cambridge.redhat.com> * sh64-opc.c: Regenerate. 2001-03-13 DJ Delorie <dj@redhat.com> * sh64-opc.h: Rename A_RESV_Fx to A_REUSE_PREV so that its purpose is more obvious. * sh64-opc.c (shmedia_table): Ditto. * sh64-dis.c (initialize_shmedia_opcode_mask_table): Ditto. (print_insn_shmedia): Ditto. 2001-03-12 DJ Delorie <dj@redhat.com> * sh64-opc.c: Adjust comments to reflect reality: replace bits 3:0 with zeros (not "reserved"), replace "rrrrrr" with "gggggg" for two-operand floating point opcodes. Remove "fsina". 2001-01-08 Hans-Peter Nilsson <hpn@cygnus.com> * sh64-dis.c (print_insn_shmedia) <failing read_memory_func>: Correct printing of .byte:s. Return number of printed bytes or -1; never 0. (print_insn_sh64x) <not CRT_SH5_ISA16>: Ditto. Print as .byte:s to next four-byte-alignment if insn or data is not aligned. 2001-01-06 Hans-Peter Nilsson <hpn@cygnus.com> * sh64-dis.c: Update comments and fix comment formatting. (initialize_shmedia_opcode_mask_table) <case A_IMMM>: Abort instead of setting length to 0. (crange_qsort_cmpb, crange_qsort_cmpl, crange_bsearch_cmpb, crange_bsearch_cmpl, sh64_get_contents_type, sh64_address_in_cranges): Move to bfd/elf32-sh64.c. 2001-01-05 Hans-Peter Nilsson <hpn@cygnus.com> * sh64-opc.c: Remove #if 0:d entries for instructions not found in SH-5/ST50-023-04: fcosa.s, fsrra.s and prefo. 2000-12-30 Hans-Peter Nilsson <hpn@cygnus.com> * sh64-dis.c (print_insn_shmedia): Display MOVI/SHORI-formed address with same prefix as SHcompact. In the disassembler, use a .cranges section for linked executables. * sh64-dis.c (SAVED_MOVI_R, SAVED_MOVI_IMM): Move to head of file and update for using structure in info->private_data. (struct sh64_disassemble_info): New. (is_shmedia_p): Delete. (crange_qsort_cmpb): New function. (crange_qsort_cmpl, crange_bsearch_cmpb): New functions. (crange_bsearch_cmpl, sh64_address_in_cranges): New functions. (init_sh64_disasm_info, sh64_get_contents_type_disasm): New functions. (sh64_get_contents_type, sh64_address_is_shmedia): New functions. (print_insn_shmedia): Correct displaying of address after MOVI/SHORI pair. Display addresses for linked executables only. (print_insn_sh64x_media): Initialize info->private_data by calling init_sh64_disasm_info. (print_insn_sh64x): Ditto. Find out type of contents by calling sh64_contents_type_disasm. Display data regions using ".long" and ".byte" similar to unrecognized opcodes. 2000-12-19 Hans-Peter Nilsson <hpn@cygnus.com> * sh64-dis.c (is_shmedia_p): Check info->section and look for ISA information in section flags before considering symbols. Don't assume an info->mach setting of bfd_mach_sh5 means SHmedia code. * configure.in (bfd_sh_arch): Check presence of sh64 insns by matching $target $canon_targets instead of looking at the now-removed -DINCLUDE_SHMEDIA in $targ_cflags. * configure: Regenerate. 2000-11-25 Hans-Peter Nilsson <hpn@cygnus.com> * sh64-opc.c (shmedia_creg_table): New. * sh64-opc.h (shmedia_creg_info): New type. (shmedia_creg_table): Declare. * sh64-dis.c (creg_name): New function. (print_insn_shmedia): Use it. * disassemble.c (disassembler) [ARCH_sh, INCLUDE_SHMEDIA]: Map bfd_mach_sh5 to print_insn_sh64 if big-endian and to print_insn_sh64l if little-endian. * sh64-dis.c (print_insn_shmedia): Make r unsigned. (print_insn_sh64l): New. (print_insn_sh64x): New. (print_insn_sh64x_media): New. (print_insn_sh64): Break out code to print_insn_sh64x and print_insn_sh64x_media. 2000-11-24 Hans-Peter Nilsson <hpn@cygnus.com> * sh64-opc.h: New file * sh64-opc.c: New file * sh64-dis.c: New file * Makefile.am: Add sh64 targets. (HFILES): Add sh64-opc.h. (CFILES): Add sh64-opc.c and sh64-dis.c. (ALL_MACHINES): Add sh64 files. * Makefile.in: Regenerate. * configure.in: Add support for sh64 to bfd_sh_arch. * configure: Regenerate. * disassemble.c [ARCH_all] (INCLUDE_SHMEDIA): Define. (disassembler) [ARCH_sh, INCLUDE_SHMEDIA]: Map bfd_mach_sh5 to print_insn_sh64. * sh-dis.c (print_insn_shx): Handle bfd_mach_sh5 as arch_sh4. * po/POTFILES.in: Regenerate. * po/opcodes.pot: Regenerate.
360 lines
7.7 KiB
C
360 lines
7.7 KiB
C
/* Select disassembly routine for specified architecture.
|
|
Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
|
Free Software Foundation, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|
|
|
#include "sysdep.h"
|
|
#include "dis-asm.h"
|
|
|
|
#ifdef ARCH_all
|
|
#define ARCH_a29k
|
|
#define ARCH_alpha
|
|
#define ARCH_arc
|
|
#define ARCH_arm
|
|
#define ARCH_avr
|
|
#define ARCH_cris
|
|
#define ARCH_d10v
|
|
#define ARCH_d30v
|
|
#define ARCH_h8300
|
|
#define ARCH_h8500
|
|
#define ARCH_hppa
|
|
#define ARCH_i370
|
|
#define ARCH_i386
|
|
#define ARCH_i860
|
|
#define ARCH_i960
|
|
#define ARCH_ia64
|
|
#define ARCH_fr30
|
|
#define ARCH_m32r
|
|
#define ARCH_m68k
|
|
#define ARCH_m68hc11
|
|
#define ARCH_m68hc12
|
|
#define ARCH_m88k
|
|
#define ARCH_mcore
|
|
#define ARCH_mips
|
|
#define ARCH_mmix
|
|
#define ARCH_mn10200
|
|
#define ARCH_mn10300
|
|
#define ARCH_ns32k
|
|
#define ARCH_openrisc
|
|
#define ARCH_or32
|
|
#define ARCH_pdp11
|
|
#define ARCH_pj
|
|
#define ARCH_powerpc
|
|
#define ARCH_rs6000
|
|
#define ARCH_s390
|
|
#define ARCH_sh
|
|
#define ARCH_sparc
|
|
#define ARCH_tic30
|
|
#define ARCH_tic54x
|
|
#define ARCH_tic80
|
|
#define ARCH_v850
|
|
#define ARCH_vax
|
|
#define ARCH_w65
|
|
#define ARCH_xstormy16
|
|
#define ARCH_z8k
|
|
#define INCLUDE_SHMEDIA
|
|
#endif
|
|
|
|
|
|
disassembler_ftype
|
|
disassembler (abfd)
|
|
bfd *abfd;
|
|
{
|
|
enum bfd_architecture a = bfd_get_arch (abfd);
|
|
disassembler_ftype disassemble;
|
|
|
|
switch (a)
|
|
{
|
|
/* If you add a case to this table, also add it to the
|
|
ARCH_all definition right above this function. */
|
|
#ifdef ARCH_a29k
|
|
case bfd_arch_a29k:
|
|
/* As far as I know we only handle big-endian 29k objects. */
|
|
disassemble = print_insn_big_a29k;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_alpha
|
|
case bfd_arch_alpha:
|
|
disassemble = print_insn_alpha;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_arc
|
|
case bfd_arch_arc:
|
|
{
|
|
disassemble = arc_get_disassembler (abfd);
|
|
break;
|
|
}
|
|
#endif
|
|
#ifdef ARCH_arm
|
|
case bfd_arch_arm:
|
|
if (bfd_big_endian (abfd))
|
|
disassemble = print_insn_big_arm;
|
|
else
|
|
disassemble = print_insn_little_arm;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_avr
|
|
case bfd_arch_avr:
|
|
disassemble = print_insn_avr;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_cris
|
|
case bfd_arch_cris:
|
|
disassemble = cris_get_disassembler (abfd);
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_d10v
|
|
case bfd_arch_d10v:
|
|
disassemble = print_insn_d10v;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_d30v
|
|
case bfd_arch_d30v:
|
|
disassemble = print_insn_d30v;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_h8300
|
|
case bfd_arch_h8300:
|
|
if (bfd_get_mach(abfd) == bfd_mach_h8300h)
|
|
disassemble = print_insn_h8300h;
|
|
else if (bfd_get_mach(abfd) == bfd_mach_h8300s)
|
|
disassemble = print_insn_h8300s;
|
|
else
|
|
disassemble = print_insn_h8300;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_h8500
|
|
case bfd_arch_h8500:
|
|
disassemble = print_insn_h8500;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_hppa
|
|
case bfd_arch_hppa:
|
|
disassemble = print_insn_hppa;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_i370
|
|
case bfd_arch_i370:
|
|
disassemble = print_insn_i370;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_i386
|
|
case bfd_arch_i386:
|
|
disassemble = print_insn_i386;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_i860
|
|
case bfd_arch_i860:
|
|
disassemble = print_insn_i860;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_i960
|
|
case bfd_arch_i960:
|
|
disassemble = print_insn_i960;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_ia64
|
|
case bfd_arch_ia64:
|
|
disassemble = print_insn_ia64;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_fr30
|
|
case bfd_arch_fr30:
|
|
disassemble = print_insn_fr30;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_m32r
|
|
case bfd_arch_m32r:
|
|
disassemble = print_insn_m32r;
|
|
break;
|
|
#endif
|
|
#if defined(ARCH_m68hc11) || defined(ARCH_m68hc12)
|
|
case bfd_arch_m68hc11:
|
|
disassemble = print_insn_m68hc11;
|
|
break;
|
|
case bfd_arch_m68hc12:
|
|
disassemble = print_insn_m68hc12;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_m68k
|
|
case bfd_arch_m68k:
|
|
disassemble = print_insn_m68k;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_m88k
|
|
case bfd_arch_m88k:
|
|
disassemble = print_insn_m88k;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_ns32k
|
|
case bfd_arch_ns32k:
|
|
disassemble = print_insn_ns32k;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_mcore
|
|
case bfd_arch_mcore:
|
|
disassemble = print_insn_mcore;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_mips
|
|
case bfd_arch_mips:
|
|
if (bfd_big_endian (abfd))
|
|
disassemble = print_insn_big_mips;
|
|
else
|
|
disassemble = print_insn_little_mips;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_mmix
|
|
case bfd_arch_mmix:
|
|
disassemble = print_insn_mmix;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_mn10200
|
|
case bfd_arch_mn10200:
|
|
disassemble = print_insn_mn10200;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_mn10300
|
|
case bfd_arch_mn10300:
|
|
disassemble = print_insn_mn10300;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_openrisc
|
|
case bfd_arch_openrisc:
|
|
disassemble = print_insn_openrisc;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_or32
|
|
case bfd_arch_or32:
|
|
if (bfd_big_endian (abfd))
|
|
disassemble = print_insn_big_or32;
|
|
else
|
|
disassemble = print_insn_little_or32;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_pdp11
|
|
case bfd_arch_pdp11:
|
|
disassemble = print_insn_pdp11;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_pj
|
|
case bfd_arch_pj:
|
|
disassemble = print_insn_pj;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_powerpc
|
|
case bfd_arch_powerpc:
|
|
if (bfd_big_endian (abfd))
|
|
disassemble = print_insn_big_powerpc;
|
|
else
|
|
disassemble = print_insn_little_powerpc;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_rs6000
|
|
case bfd_arch_rs6000:
|
|
if (bfd_get_mach (abfd) == bfd_mach_ppc_620)
|
|
disassemble = print_insn_big_powerpc;
|
|
else
|
|
disassemble = print_insn_rs6000;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_s390
|
|
case bfd_arch_s390:
|
|
disassemble = print_insn_s390;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_sh
|
|
case bfd_arch_sh:
|
|
#ifdef INCLUDE_SHMEDIA
|
|
if (bfd_get_mach (abfd) == bfd_mach_sh5)
|
|
{
|
|
if (bfd_big_endian (abfd))
|
|
disassemble = print_insn_sh64;
|
|
else
|
|
disassemble = print_insn_sh64l;
|
|
break;
|
|
}
|
|
#endif
|
|
if (bfd_big_endian (abfd))
|
|
disassemble = print_insn_sh;
|
|
else
|
|
disassemble = print_insn_shl;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_sparc
|
|
case bfd_arch_sparc:
|
|
disassemble = print_insn_sparc;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_tic30
|
|
case bfd_arch_tic30:
|
|
disassemble = print_insn_tic30;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_tic54x
|
|
case bfd_arch_tic54x:
|
|
disassemble = print_insn_tic54x;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_tic80
|
|
case bfd_arch_tic80:
|
|
disassemble = print_insn_tic80;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_v850
|
|
case bfd_arch_v850:
|
|
disassemble = print_insn_v850;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_w65
|
|
case bfd_arch_w65:
|
|
disassemble = print_insn_w65;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_xstormy16
|
|
case bfd_arch_xstormy16:
|
|
disassemble = print_insn_xstormy16;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_z8k
|
|
case bfd_arch_z8k:
|
|
if (bfd_get_mach(abfd) == bfd_mach_z8001)
|
|
disassemble = print_insn_z8001;
|
|
else
|
|
disassemble = print_insn_z8002;
|
|
break;
|
|
#endif
|
|
#ifdef ARCH_vax
|
|
case bfd_arch_vax:
|
|
disassemble = print_insn_vax;
|
|
break;
|
|
#endif
|
|
default:
|
|
return 0;
|
|
}
|
|
return disassemble;
|
|
}
|
|
|
|
void
|
|
disassembler_usage (stream)
|
|
FILE * stream ATTRIBUTE_UNUSED;
|
|
{
|
|
#ifdef ARCH_arm
|
|
print_arm_disassembler_options (stream);
|
|
#endif
|
|
|
|
return;
|
|
}
|