print_insn_sh cleanup:
include: * dis-asm.h (print_insn_shl, print_insn_sh64l): Remove prototype. gdb: * sh-tdep.c (gdb_print_insn_sh64): Delete. (gdb_print_insn_sh): Just set info->endian and use print_insn_sh. (sh_gdbarch_init): Always use gdb_print_insn_sh. opcodes: * disassemble.c (disassembler): Just use print_insn_sh for bfd_arch_sh. * sh-dis.c (LITTLE_BIT): Delete. (print_insn_sh, print_insn_shl): Deleted. (print_insn_shx): Renamed to (print_insn_sh). No longer static. Handle SHmedia instructions. Use info->endian to determine endianness. * sh64-dis.c (print_insn_sh64, print_insn_sh64l): Delete. (print_insn_sh64x): No longer static. Renamed to (print_insn_sh64). Removed pfun_compact and endian arguments. If we got an uneven address to indicate SHmedia, adjust it. Return -2 for SHcompact instructions. sim/sh64: * sim-if.c (sh64_disassemble_insn): Use print_insn_sh instead of print_insn_shl.
This commit is contained in:
parent
ef60b7ff0e
commit
1c509ca821
10 changed files with 56 additions and 117 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Fri May 17 14:26:19 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||||
|
|
||||||
|
* sh-tdep.c (gdb_print_insn_sh64): Delete.
|
||||||
|
(gdb_print_insn_sh): Just set info->endian and use print_insn_sh.
|
||||||
|
(sh_gdbarch_init): Always use gdb_print_insn_sh.
|
||||||
|
|
||||||
2002-05-17 Corinna Vinschen <vinschen@redhat.com>
|
2002-05-17 Corinna Vinschen <vinschen@redhat.com>
|
||||||
|
|
||||||
* NEWS: Add section for multi-arched targets. Add v850 to that section.
|
* NEWS: Add section for multi-arched targets. Add v850 to that section.
|
||||||
|
|
|
@ -908,29 +908,8 @@ sh_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
|
||||||
static int
|
static int
|
||||||
gdb_print_insn_sh (bfd_vma memaddr, disassemble_info *info)
|
gdb_print_insn_sh (bfd_vma memaddr, disassemble_info *info)
|
||||||
{
|
{
|
||||||
if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
|
info->endian = TARGET_BYTE_ORDER;
|
||||||
return print_insn_sh (memaddr, info);
|
return print_insn_sh (memaddr, info);
|
||||||
else
|
|
||||||
return print_insn_shl (memaddr, info);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disassemble an instruction. */
|
|
||||||
static int
|
|
||||||
gdb_print_insn_sh64 (bfd_vma memaddr, disassemble_info *info)
|
|
||||||
{
|
|
||||||
if (pc_is_isa32 (memaddr))
|
|
||||||
{
|
|
||||||
/* Round down the instruction address to the appropriate boundary
|
|
||||||
before disassembling it. */
|
|
||||||
return print_insn_sh64x_media (UNMAKE_ISA32_ADDR (memaddr), info);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
|
|
||||||
return print_insn_sh (memaddr, info);
|
|
||||||
else
|
|
||||||
return print_insn_shl (memaddr, info);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given a GDB frame, determine the address of the calling function's frame.
|
/* Given a GDB frame, determine the address of the calling function's frame.
|
||||||
|
@ -4684,7 +4663,6 @@ sh_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||||
sh_store_return_value = sh64_store_return_value;
|
sh_store_return_value = sh64_store_return_value;
|
||||||
skip_prologue_hard_way = sh64_skip_prologue_hard_way;
|
skip_prologue_hard_way = sh64_skip_prologue_hard_way;
|
||||||
do_pseudo_register = sh64_do_pseudo_register;
|
do_pseudo_register = sh64_do_pseudo_register;
|
||||||
set_gdbarch_print_insn (gdbarch, gdb_print_insn_sh64);
|
|
||||||
set_gdbarch_register_raw_size (gdbarch, sh_sh64_register_raw_size);
|
set_gdbarch_register_raw_size (gdbarch, sh_sh64_register_raw_size);
|
||||||
set_gdbarch_register_virtual_size (gdbarch, sh_sh64_register_raw_size);
|
set_gdbarch_register_virtual_size (gdbarch, sh_sh64_register_raw_size);
|
||||||
set_gdbarch_register_byte (gdbarch, sh_sh64_register_byte);
|
set_gdbarch_register_byte (gdbarch, sh_sh64_register_byte);
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
Fri May 17 14:25:40 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||||
|
|
||||||
|
* dis-asm.h (print_insn_shl, print_insn_sh64l): Remove prototype.
|
||||||
|
|
||||||
2002-04-16 David S. Miller <davem@redhat.com>
|
2002-04-16 David S. Miller <davem@redhat.com>
|
||||||
|
|
||||||
* xregex2.h (__restrict_arr): Define to __restrict on GCC
|
* xregex2.h (__restrict_arr): Define to __restrict on GCC
|
||||||
|
|
|
@ -226,7 +226,6 @@ extern int print_insn_little_powerpc PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_rs6000 PARAMS ((bfd_vma, disassemble_info*));
|
extern int print_insn_rs6000 PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_s390 PARAMS ((bfd_vma, disassemble_info*));
|
extern int print_insn_s390 PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_sh PARAMS ((bfd_vma, disassemble_info*));
|
extern int print_insn_sh PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_shl PARAMS ((bfd_vma, disassemble_info*));
|
|
||||||
extern int print_insn_tic30 PARAMS ((bfd_vma, disassemble_info*));
|
extern int print_insn_tic30 PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_tic54x PARAMS ((bfd_vma, disassemble_info*));
|
extern int print_insn_tic54x PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_tic80 PARAMS ((bfd_vma, disassemble_info*));
|
extern int print_insn_tic80 PARAMS ((bfd_vma, disassemble_info*));
|
||||||
|
@ -235,7 +234,6 @@ extern int print_insn_vax PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_w65 PARAMS ((bfd_vma, disassemble_info*));
|
extern int print_insn_w65 PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_xstormy16 PARAMS ((bfd_vma, disassemble_info*));
|
extern int print_insn_xstormy16 PARAMS ((bfd_vma, disassemble_info*));
|
||||||
extern int print_insn_sh64 PARAMS ((bfd_vma, disassemble_info *));
|
extern int print_insn_sh64 PARAMS ((bfd_vma, disassemble_info *));
|
||||||
extern int print_insn_sh64l PARAMS ((bfd_vma, disassemble_info *));
|
|
||||||
extern int print_insn_sh64x_media PARAMS ((bfd_vma, disassemble_info *));
|
extern int print_insn_sh64x_media PARAMS ((bfd_vma, disassemble_info *));
|
||||||
|
|
||||||
extern disassembler_ftype arc_get_disassembler PARAMS ((void *));
|
extern disassembler_ftype arc_get_disassembler PARAMS ((void *));
|
||||||
|
|
|
@ -1,3 +1,17 @@
|
||||||
|
Fri May 17 14:26:44 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||||
|
|
||||||
|
* disassemble.c (disassembler): Just use print_insn_sh for bfd_arch_sh.
|
||||||
|
* sh-dis.c (LITTLE_BIT): Delete.
|
||||||
|
(print_insn_sh, print_insn_shl): Deleted.
|
||||||
|
(print_insn_shx): Renamed to
|
||||||
|
(print_insn_sh). No longer static. Handle SHmedia instructions.
|
||||||
|
Use info->endian to determine endianness.
|
||||||
|
* sh64-dis.c (print_insn_sh64, print_insn_sh64l): Delete.
|
||||||
|
(print_insn_sh64x): No longer static. Renamed to
|
||||||
|
(print_insn_sh64). Removed pfun_compact and endian arguments.
|
||||||
|
If we got an uneven address to indicate SHmedia, adjust it.
|
||||||
|
Return -2 for SHcompact instructions.
|
||||||
|
|
||||||
2002-05-17 Alan Modra <amodra@bigpond.net.au>
|
2002-05-17 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* acinclude.m4 (AM_INSTALL_LIBBFD): Fake to fool autotools.
|
* acinclude.m4 (AM_INSTALL_LIBBFD): Fake to fool autotools.
|
||||||
|
|
|
@ -278,20 +278,7 @@ disassembler (abfd)
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARCH_sh
|
#ifdef ARCH_sh
|
||||||
case bfd_arch_sh:
|
case bfd_arch_sh:
|
||||||
#ifdef INCLUDE_SHMEDIA
|
disassemble = print_insn_sh;
|
||||||
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;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARCH_sparc
|
#ifdef ARCH_sparc
|
||||||
|
|
|
@ -24,14 +24,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
#include "sh-opc.h"
|
#include "sh-opc.h"
|
||||||
#include "dis-asm.h"
|
#include "dis-asm.h"
|
||||||
|
|
||||||
#define LITTLE_BIT 2
|
|
||||||
|
|
||||||
static void print_movxy
|
static void print_movxy
|
||||||
PARAMS ((sh_opcode_info *, int, int, fprintf_ftype, void *));
|
PARAMS ((sh_opcode_info *, int, int, fprintf_ftype, void *));
|
||||||
static void print_insn_ddt PARAMS ((int, struct disassemble_info *));
|
static void print_insn_ddt PARAMS ((int, struct disassemble_info *));
|
||||||
static void print_dsp_reg PARAMS ((int, fprintf_ftype, void *));
|
static void print_dsp_reg PARAMS ((int, fprintf_ftype, void *));
|
||||||
static void print_insn_ppi PARAMS ((int, struct disassemble_info *));
|
static void print_insn_ppi PARAMS ((int, struct disassemble_info *));
|
||||||
static int print_insn_shx PARAMS ((bfd_vma, struct disassemble_info *));
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_movxy (op, rn, rm, fprintf_fn, stream)
|
print_movxy (op, rn, rm, fprintf_fn, stream)
|
||||||
|
@ -286,8 +283,8 @@ print_insn_ppi (field_b, info)
|
||||||
fprintf_fn (stream, ".word 0x%x", field_b);
|
fprintf_fn (stream, ".word 0x%x", field_b);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
int
|
||||||
print_insn_shx (memaddr, info)
|
print_insn_sh (memaddr, info)
|
||||||
bfd_vma memaddr;
|
bfd_vma memaddr;
|
||||||
struct disassemble_info *info;
|
struct disassemble_info *info;
|
||||||
{
|
{
|
||||||
|
@ -324,6 +321,11 @@ print_insn_shx (memaddr, info)
|
||||||
target_arch = arch_sh4;
|
target_arch = arch_sh4;
|
||||||
break;
|
break;
|
||||||
case bfd_mach_sh5:
|
case bfd_mach_sh5:
|
||||||
|
#ifdef INCLUDE_SHMEDIA
|
||||||
|
status = print_insn_sh64 (memaddr, info);
|
||||||
|
if (status != -2)
|
||||||
|
return status;
|
||||||
|
#endif
|
||||||
/* When we get here for sh64, it's because we want to disassemble
|
/* When we get here for sh64, it's because we want to disassemble
|
||||||
SHcompact, i.e. arch_sh4. */
|
SHcompact, i.e. arch_sh4. */
|
||||||
target_arch = arch_sh4;
|
target_arch = arch_sh4;
|
||||||
|
@ -340,7 +342,7 @@ print_insn_shx (memaddr, info)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->flags & LITTLE_BIT)
|
if (info->endian == BFD_ENDIAN_LITTLE)
|
||||||
{
|
{
|
||||||
nibs[0] = (insn[1] >> 4) & 0xf;
|
nibs[0] = (insn[1] >> 4) & 0xf;
|
||||||
nibs[1] = insn[1] & 0xf;
|
nibs[1] = insn[1] & 0xf;
|
||||||
|
@ -371,7 +373,7 @@ print_insn_shx (memaddr, info)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->flags & LITTLE_BIT)
|
if (info->endian == BFD_ENDIAN_LITTLE)
|
||||||
field_b = insn[1] << 8 | insn[0];
|
field_b = insn[1] << 8 | insn[0];
|
||||||
else
|
else
|
||||||
field_b = insn[0] << 8 | insn[1];
|
field_b = insn[0] << 8 | insn[1];
|
||||||
|
@ -677,7 +679,7 @@ print_insn_shx (memaddr, info)
|
||||||
{
|
{
|
||||||
info->flags |= 1;
|
info->flags |= 1;
|
||||||
fprintf_fn (stream, "\t(slot ");
|
fprintf_fn (stream, "\t(slot ");
|
||||||
print_insn_shx (memaddr + 2, info);
|
print_insn_sh (memaddr + 2, info);
|
||||||
info->flags &= ~1;
|
info->flags &= ~1;
|
||||||
fprintf_fn (stream, ")");
|
fprintf_fn (stream, ")");
|
||||||
return 4;
|
return 4;
|
||||||
|
@ -700,14 +702,14 @@ print_insn_shx (memaddr, info)
|
||||||
|
|
||||||
if (size == 2)
|
if (size == 2)
|
||||||
{
|
{
|
||||||
if ((info->flags & LITTLE_BIT) != 0)
|
if (info->endian == BFD_ENDIAN_LITTLE)
|
||||||
val = bfd_getl16 (bytes);
|
val = bfd_getl16 (bytes);
|
||||||
else
|
else
|
||||||
val = bfd_getb16 (bytes);
|
val = bfd_getb16 (bytes);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((info->flags & LITTLE_BIT) != 0)
|
if (info->endian == BFD_ENDIAN_LITTLE)
|
||||||
val = bfd_getl32 (bytes);
|
val = bfd_getl32 (bytes);
|
||||||
else
|
else
|
||||||
val = bfd_getb32 (bytes);
|
val = bfd_getb32 (bytes);
|
||||||
|
@ -724,27 +726,3 @@ print_insn_shx (memaddr, info)
|
||||||
fprintf_fn (stream, ".word 0x%x%x%x%x", nibs[0], nibs[1], nibs[2], nibs[3]);
|
fprintf_fn (stream, ".word 0x%x%x%x%x", nibs[0], nibs[1], nibs[2], nibs[3]);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
print_insn_shl (memaddr, info)
|
|
||||||
bfd_vma memaddr;
|
|
||||||
struct disassemble_info *info;
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
info->flags = LITTLE_BIT;
|
|
||||||
r = print_insn_shx (memaddr, info);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
print_insn_sh (memaddr, info)
|
|
||||||
bfd_vma memaddr;
|
|
||||||
struct disassemble_info *info;
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
info->flags = 0;
|
|
||||||
r = print_insn_shx (memaddr, info);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
|
@ -55,10 +55,6 @@ static unsigned long *shmedia_opcode_mask_table;
|
||||||
|
|
||||||
static void initialize_shmedia_opcode_mask_table PARAMS ((void));
|
static void initialize_shmedia_opcode_mask_table PARAMS ((void));
|
||||||
static int print_insn_shmedia PARAMS ((bfd_vma, disassemble_info *));
|
static int print_insn_shmedia PARAMS ((bfd_vma, disassemble_info *));
|
||||||
static int print_insn_sh64x
|
|
||||||
PARAMS ((bfd_vma, disassemble_info *,
|
|
||||||
int (*) PARAMS ((bfd_vma, struct disassemble_info *)),
|
|
||||||
enum bfd_endian));
|
|
||||||
static const char *creg_name PARAMS ((int));
|
static const char *creg_name PARAMS ((int));
|
||||||
static boolean init_sh64_disasm_info PARAMS ((struct disassemble_info *));
|
static boolean init_sh64_disasm_info PARAMS ((struct disassemble_info *));
|
||||||
static enum sh64_elf_cr_type sh64_get_contents_type_disasm
|
static enum sh64_elf_cr_type sh64_get_contents_type_disasm
|
||||||
|
@ -555,15 +551,15 @@ print_insn_sh64x_media (memaddr, info)
|
||||||
return print_insn_shmedia (memaddr, info);
|
return print_insn_shmedia (memaddr, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Main entry to disassemble SHcompact or SHmedia insns. */
|
/* Main entry to disassemble SHmedia insns.
|
||||||
|
If we see an SHcompact instruction, return -2. */
|
||||||
|
|
||||||
static int
|
int
|
||||||
print_insn_sh64x (memaddr, info, pfun_compact, endian)
|
print_insn_sh64 (memaddr, info)
|
||||||
bfd_vma memaddr;
|
bfd_vma memaddr;
|
||||||
struct disassemble_info *info;
|
struct disassemble_info *info;
|
||||||
int (*pfun_compact) PARAMS ((bfd_vma, struct disassemble_info *));
|
|
||||||
enum bfd_endian endian;
|
|
||||||
{
|
{
|
||||||
|
enum bfd_endian endian = info->endian;
|
||||||
enum sh64_elf_cr_type cr_type;
|
enum sh64_elf_cr_type cr_type;
|
||||||
|
|
||||||
if (info->private_data == NULL && ! init_sh64_disasm_info (info))
|
if (info->private_data == NULL && ! init_sh64_disasm_info (info))
|
||||||
|
@ -575,6 +571,10 @@ print_insn_sh64x (memaddr, info, pfun_compact, endian)
|
||||||
int length = 4 - (memaddr % 4);
|
int length = 4 - (memaddr % 4);
|
||||||
info->display_endian = endian;
|
info->display_endian = endian;
|
||||||
|
|
||||||
|
/* If we got an uneven address to indicate SHmedia, adjust it. */
|
||||||
|
if (cr_type == CRT_SH5_ISA32 && length == 3)
|
||||||
|
memaddr--, length = 4;
|
||||||
|
|
||||||
/* Only disassemble on four-byte boundaries. Addresses that are not
|
/* Only disassemble on four-byte boundaries. Addresses that are not
|
||||||
a multiple of four can happen after a data region. */
|
a multiple of four can happen after a data region. */
|
||||||
if (cr_type == CRT_SH5_ISA32 && length == 4)
|
if (cr_type == CRT_SH5_ISA32 && length == 4)
|
||||||
|
@ -633,27 +633,6 @@ print_insn_sh64x (memaddr, info, pfun_compact, endian)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (*pfun_compact) (memaddr, info);
|
/* SH1 .. SH4 instruction, let caller handle it. */
|
||||||
}
|
return -2;
|
||||||
|
|
||||||
/* Main entry to disassemble SHcompact or SHmedia insns, big endian. */
|
|
||||||
|
|
||||||
int
|
|
||||||
print_insn_sh64 (memaddr, info)
|
|
||||||
bfd_vma memaddr;
|
|
||||||
struct disassemble_info *info;
|
|
||||||
{
|
|
||||||
return
|
|
||||||
print_insn_sh64x (memaddr, info, print_insn_sh, BFD_ENDIAN_BIG);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Main entry to disassemble SHcompact or SHmedia insns, little endian. */
|
|
||||||
|
|
||||||
int
|
|
||||||
print_insn_sh64l (memaddr, info)
|
|
||||||
bfd_vma memaddr;
|
|
||||||
struct disassemble_info *info;
|
|
||||||
{
|
|
||||||
return
|
|
||||||
print_insn_sh64x (memaddr, info, print_insn_shl, BFD_ENDIAN_LITTLE);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
Fri May 17 14:27:41 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||||
|
|
||||||
|
* sim-if.c (sh64_disassemble_insn): Use print_insn_sh instead of
|
||||||
|
print_insn_shl.
|
||||||
|
|
||||||
2001-07-05 Ben Elliston <bje@redhat.com>
|
2001-07-05 Ben Elliston <bje@redhat.com>
|
||||||
|
|
||||||
* Makefile.in (stamp-arch): Use $(CGEN_CPU_DIR).
|
* Makefile.in (stamp-arch): Use $(CGEN_CPU_DIR).
|
||||||
|
|
|
@ -232,15 +232,5 @@ sh64_disassemble_insn (SIM_CPU *cpu, const CGEN_INSN *insn,
|
||||||
if (sh64_h_ism_get (cpu) == ISM_MEDIA)
|
if (sh64_h_ism_get (cpu) == ISM_MEDIA)
|
||||||
print_insn_sh64x_media (pc, &disasm_info);
|
print_insn_sh64x_media (pc, &disasm_info);
|
||||||
else
|
else
|
||||||
switch (disasm_info.endian)
|
print_insn_sh (pc, &disasm_info);
|
||||||
{
|
|
||||||
case BFD_ENDIAN_BIG:
|
|
||||||
print_insn_sh (pc, &disasm_info);
|
|
||||||
break;
|
|
||||||
case BFD_ENDIAN_LITTLE:
|
|
||||||
print_insn_shl (pc, &disasm_info);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue