summaryrefslogtreecommitdiff
path: root/opcodes/disassemble.c
diff options
context:
space:
mode:
authorJose E. Marchesi <jose.marchesi@oracle.com>2019-05-23 19:04:36 +0200
committerJose E. Marchesi <jose.marchesi@oracle.com>2019-05-23 19:33:56 +0200
commit79472b45328232b083e897a511d4160a6dde0463 (patch)
treeff50820cf858918ae1115a0c6e6829633de3fffc /opcodes/disassemble.c
parentea195bb04cc5c964126aeff0f87d7161a03ca926 (diff)
downloadbinutils-gdb-79472b45328232b083e897a511d4160a6dde0463.tar.gz
opcodes: add support for eBPF
This patch adds support for the Linux kernel eBPF architecture to the opcodes. The port is based on CGEN. opcodes/ChangeLog: 2019-05-23 Jose E. Marchesi <jose.marchesi@oracle.com> * configure.ac (SHARED_DEPENDENCIES): Add case for bfd_bpf_arch. * configure: Regenerated. * Makefile.am: Add rules for the files generated from cpu/bpf.cpu and cpu/bpf.opc. (HFILES): Add bpf-desc.h and bpf-opc.h. (TARGET_LIBOPCODES_CFILES): Add bpf-asm.c, bpf-desc.c, bpf-dis.c, bpf-ibld.c and bpf-opc.c. (BPF_DEPS): Define. * Makefile.in: Regenerated. * disassemble.c (ARCH_bpf): Define. (disassembler): Add case for bfd_arch_bpf. (disassemble_init_for_target): Likewise. (enum epbf_isa_attr): Define. * disassemble.h: extern print_insn_bpf. * bpf-asm.c: Generated. * bpf-opc.h: Likewise. * bpf-opc.c: Likewise. * bpf-ibld.c: Likewise. * bpf-dis.c: Likewise. * bpf-desc.h: Likewise. * bpf-desc.c: Likewise.
Diffstat (limited to 'opcodes/disassemble.c')
-rw-r--r--opcodes/disassemble.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/opcodes/disassemble.c b/opcodes/disassemble.c
index 1ef8b8f6252..aef2fd8644b 100644
--- a/opcodes/disassemble.c
+++ b/opcodes/disassemble.c
@@ -37,6 +37,7 @@
#define ARCH_d10v
#define ARCH_d30v
#define ARCH_dlx
+#define ARCH_bpf
#define ARCH_epiphany
#define ARCH_fr30
#define ARCH_frv
@@ -106,6 +107,23 @@
#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,
@@ -224,6 +242,11 @@ disassembler (enum bfd_architecture a,
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;
@@ -641,6 +664,18 @@ disassemble_init_for_target (struct disassemble_info * info)
}
break;
#endif
+#ifdef ARCH_bpf
+ case bfd_arch_bpf:
+ if (!info->insn_sets)
+ {
+ info->insn_sets = cgen_bitset_create (ISA_EBPFMAX);
+ if (info->endian == BFD_ENDIAN_BIG)
+ cgen_bitset_set (info->insn_sets, ISA_EBPFBE);
+ else
+ cgen_bitset_set (info->insn_sets, ISA_EBPFLE);
+ }
+ break;
+#endif
#ifdef ARCH_pru
case bfd_arch_pru:
info->disassembler_needs_relocs = TRUE;