Skip to content

Commit

Permalink
disas: Enable capstone disassembly for s390x
Browse files Browse the repository at this point in the history
Enable s390x, aka SYSZ, in the git submodule build.
Set the capstone parameters for both s390x host and guest.

Tested-by: Alex Bennée <[email protected]>
Reviewed-by: Alex Bennée <[email protected]>
Acked-by: Thomas Huth <[email protected]>
Signed-off-by: Richard Henderson <[email protected]>
  • Loading branch information
rth7680 committed Oct 3, 2020
1 parent f343346 commit 3d56284
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 0 deletions.
3 changes: 3 additions & 0 deletions disas.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ static void initialize_debug_host(CPUDebug *s)
s->info.print_insn = print_insn_m68k;
#elif defined(__s390__)
s->info.print_insn = print_insn_s390;
s->info.cap_arch = CS_ARCH_SYSZ;
s->info.cap_insn_unit = 2;
s->info.cap_insn_split = 6;
#elif defined(__hppa__)
s->info.print_insn = print_insn_hppa;
#endif
Expand Down
11 changes: 11 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,17 @@ if capstone_opt == 'internal'
)
endif

if 'CONFIG_S390_DIS' in config_all_disas
capstone_data.set('CAPSTONE_HAS_SYSZ', '1')
capstone_files += files(
'capstone/arch/SystemZ/SystemZDisassembler.c',
'capstone/arch/SystemZ/SystemZInstPrinter.c',
'capstone/arch/SystemZ/SystemZMapping.c',
'capstone/arch/SystemZ/SystemZModule.c',
'capstone/arch/SystemZ/SystemZMCTargetDesc.c'
)
endif

if 'CONFIG_I386_DIS' in config_all_disas
capstone_data.set('CAPSTONE_HAS_X86', 1)
capstone_files += files(
Expand Down
4 changes: 4 additions & 0 deletions target/s390x/cpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include "sysemu/tcg.h"
#endif
#include "fpu/softfloat-helpers.h"
#include "disas/capstone.h"

#define CR0_RESET 0xE0UL
#define CR14_RESET 0xC2000000UL;
Expand Down Expand Up @@ -182,6 +183,9 @@ static void s390_cpu_disas_set_info(CPUState *cpu, disassemble_info *info)
{
info->mach = bfd_mach_s390_64;
info->print_insn = print_insn_s390;
info->cap_arch = CS_ARCH_SYSZ;
info->cap_insn_unit = 2;
info->cap_insn_split = 6;
}

static void s390_cpu_realizefn(DeviceState *dev, Error **errp)
Expand Down

0 comments on commit 3d56284

Please sign in to comment.