/* Select disassembly routine for specified architecture.
- Copyright (C) 1994-2018 Free Software Foundation, Inc.
+ Copyright (C) 1994-2020 Free Software Foundation, Inc.
This file is part of the GNU opcodes library.
#include "sysdep.h"
#include "disassemble.h"
#include "safe-ctype.h"
-#include <assert.h>
+#include "opintl.h"
#ifdef ARCH_all
#define ARCH_aarch64
#define ARCH_cr16
#define ARCH_cris
#define ARCH_crx
+#define ARCH_csky
#define ARCH_d10v
#define ARCH_d30v
#define ARCH_dlx
+#define ARCH_bpf
#define ARCH_epiphany
#define ARCH_fr30
#define ARCH_frv
#define ARCH_ft32
#define ARCH_h8300
#define ARCH_hppa
-#define ARCH_i370
#define ARCH_i386
#define ARCH_ia64
#define ARCH_ip2k
#define ARCH_m68hc11
#define ARCH_m68hc12
#define ARCH_m68k
-#define ARCH_m88k
#define ARCH_mcore
#define ARCH_mep
#define ARCH_metag
#define ARCH_mt
#define ARCH_msp430
#define ARCH_nds32
+#define ARCH_nfp
#define ARCH_nios2
#define ARCH_ns32k
#define ARCH_or1k
#define ARCH_rs6000
#define ARCH_rl78
#define ARCH_rx
+#define ARCH_s12z
#define ARCH_s390
#define ARCH_score
#define ARCH_sh
#define ARCH_tic4x
#define ARCH_tic54x
#define ARCH_tic6x
-#define ARCH_tic80
#define ARCH_tilegx
#define ARCH_tilepro
#define ARCH_v850
#define ARCH_vax
#define ARCH_visium
-#define ARCH_w65
#define ARCH_wasm32
#define ARCH_xstormy16
#define ARCH_xc16x
#define ARCH_xtensa
#define ARCH_z80
#define ARCH_z8k
-#define INCLUDE_SHMEDIA
#endif
#ifdef ARCH_m32c
#include "m32c-desc.h"
#endif
+#ifdef ARCH_bpf
+/* XXX this should be including bpf-desc.h instead of this hackery,
+ but at the moment it is not possible to include several CGEN
+ generated *-desc.h files simultaneously. To be fixed in
+ CGEN... */
+
+# ifdef ARCH_m32c
+enum epbf_isa_attr
+{
+ ISA_EBPFLE, ISA_EBPFBE, ISA_EBPFMAX
+};
+# else
+# include "bpf-desc.h"
+# define ISA_EBPFMAX ISA_MAX
+# endif
+#endif /* ARCH_bpf */
+
disassembler_ftype
disassembler (enum bfd_architecture a,
bfd_boolean big ATTRIBUTE_UNUSED,
disassemble = print_insn_crx;
break;
#endif
+#ifdef ARCH_csky
+ case bfd_arch_csky:
+ disassemble = csky_get_disassembler (abfd);
+ break;
+#endif
+
#ifdef ARCH_d10v
case bfd_arch_d10v:
disassemble = print_insn_d10v;
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:
case bfd_arch_iamcu:
disassemble = print_insn_ip2k;
break;
#endif
+#ifdef ARCH_bpf
+ case bfd_arch_bpf:
+ disassemble = print_insn_bpf;
+ break;
+#endif
#ifdef ARCH_epiphany
case bfd_arch_epiphany:
disassemble = print_insn_epiphany;
disassemble = print_insn_m9s12xg;
break;
#endif
+#if defined(ARCH_s12z)
+ case bfd_arch_s12z:
+ disassemble = print_insn_s12z;
+ 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_mt
case bfd_arch_mt:
disassemble = print_insn_mt;
disassemble = print_insn_nds32;
break;
#endif
+#ifdef ARCH_nfp
+ case bfd_arch_nfp:
+ disassemble = print_insn_nfp;
+ break;
+#endif
#ifdef ARCH_ns32k
case bfd_arch_ns32k:
disassemble = print_insn_ns32k;
disassemble = print_insn_tic6x;
break;
#endif
-#ifdef ARCH_tic80
- case bfd_arch_tic80:
- disassemble = print_insn_tic80;
- break;
-#endif
#ifdef ARCH_ft32
case bfd_arch_ft32:
disassemble = print_insn_ft32;
disassemble = print_insn_v850;
break;
#endif
-#ifdef ARCH_w65
- case bfd_arch_w65:
- disassemble = print_insn_w65;
- break;
-#endif
#ifdef ARCH_wasm32
case bfd_arch_wasm32:
disassemble = print_insn_wasm32;
#ifdef ARCH_mips
print_mips_disassembler_options (stream);
#endif
+#ifdef ARCH_nfp
+ print_nfp_disassembler_options (stream);
+#endif
#ifdef ARCH_powerpc
print_ppc_disassembler_options (stream);
#endif
info->disassembler_needs_relocs = TRUE;
break;
#endif
+#ifdef ARCH_csky
+ case bfd_arch_csky:
+ info->symbol_is_valid = csky_symbol_is_valid;
+ info->disassembler_needs_relocs = TRUE;
+ break;
+#endif
+
#ifdef ARCH_ia64
case bfd_arch_ia64:
info->skip_zeroes = 16;
/* This processor in fact is little endian. The value set here
reflects the way opcodes are written in the cgen description. */
info->endian = BFD_ENDIAN_BIG;
- if (! info->insn_sets)
+ if (!info->private_data)
{
- info->insn_sets = cgen_bitset_create (ISA_MAX);
+ info->private_data = cgen_bitset_create (ISA_MAX);
if (info->mach == bfd_mach_m16c)
- cgen_bitset_set (info->insn_sets, ISA_M16C);
+ cgen_bitset_set (info->private_data, ISA_M16C);
else
- cgen_bitset_set (info->insn_sets, ISA_M32C);
+ cgen_bitset_set (info->private_data, ISA_M32C);
+ }
+ break;
+#endif
+#ifdef ARCH_bpf
+ case bfd_arch_bpf:
+ if (!info->private_data)
+ {
+ info->private_data = cgen_bitset_create (ISA_EBPFMAX);
+ if (info->endian == BFD_ENDIAN_BIG)
+ cgen_bitset_set (info->private_data, ISA_EBPFBE);
+ else
+ cgen_bitset_set (info->private_data, ISA_EBPFLE);
}
break;
#endif
disassemble_init_powerpc (info);
break;
#endif
+#ifdef ARCH_riscv
+ case bfd_arch_riscv:
+ info->symbol_is_valid = riscv_symbol_is_valid;
+ break;
+#endif
#ifdef ARCH_wasm32
case bfd_arch_wasm32:
disassemble_init_wasm32 (info);
disassemble_init_s390 (info);
break;
#endif
+#ifdef ARCH_nds32
+ case bfd_arch_nds32:
+ disassemble_init_nds32 (info);
+ break;
+ #endif
default:
break;
}
}
+void
+disassemble_free_target (struct disassemble_info *info)
+{
+ if (info == NULL)
+ return;
+
+ switch (info->arch)
+ {
+ default:
+ return;
+
+#ifdef ARCH_bpf
+ case bfd_arch_bpf:
+#endif
+#ifdef ARCH_m32c
+ case bfd_arch_m32c:
+#endif
+#if defined ARCH_bpf || defined ARCH_m32c
+ if (info->private_data)
+ {
+ CGEN_BITSET *mask = info->private_data;
+ free (mask->bits);
+ }
+ break;
+#endif
+
+#ifdef ARCH_arc
+ case bfd_arch_arc:
+ break;
+#endif
+#ifdef ARCH_cris
+ case bfd_arch_cris:
+ break;
+#endif
+#ifdef ARCH_mmix
+ case bfd_arch_mmix:
+ break;
+#endif
+#ifdef ARCH_nfp
+ case bfd_arch_nfp:
+ break;
+#endif
+#ifdef ARCH_powerpc
+ case bfd_arch_powerpc:
+ break;
+#endif
+#ifdef ARCH_riscv
+ case bfd_arch_riscv:
+ break;
+#endif
+#ifdef ARCH_rs6000
+ case bfd_arch_rs6000:
+ break;
+#endif
+ }
+
+ free (info->private_data);
+}
+
/* Remove whitespace and consecutive commas from OPTIONS. */
char *
return c1 - c2;
}
+
+void
+opcodes_assert (const char *file, int line)
+{
+ opcodes_error_handler (_("assertion fail %s:%d"), file, line);
+ opcodes_error_handler (_("Please report this bug"));
+ abort ();
+}