qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 11/11] disas: Enable capstone disassembly for sparc


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH 11/11] disas: Enable capstone disassembly for sparc
Date: Mon, 14 Sep 2020 08:23:46 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0

+SPARC maintainers

On 9/14/20 2:01 AM, Richard Henderson wrote:
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  disas.c            |  2 ++
>  target/sparc/cpu.c |  4 ++++
>  meson.build        | 10 ++++++++++
>  3 files changed, 16 insertions(+)
> 
> diff --git a/disas.c b/disas.c
> index 5e943181d8..b71d06d890 100644
> --- a/disas.c
> +++ b/disas.c
> @@ -196,6 +196,8 @@ static void initialize_debug_host(CPUDebug *s)
>  #elif defined(__sparc__)
>      s->info.print_insn = print_insn_sparc;
>      s->info.mach = bfd_mach_sparc_v9b;
> +    s->info.cap_arch = CS_ARCH_SPARC;
> +    s->info.cap_mode = CS_MODE_V9;
>  #elif defined(__arm__)
>      /* TCG only generates code for arm mode.  */
>      s->info.print_insn = print_insn_arm;
> diff --git a/target/sparc/cpu.c b/target/sparc/cpu.c
> index cf21efd85f..e0b0a88d26 100644
> --- a/target/sparc/cpu.c
> +++ b/target/sparc/cpu.c
> @@ -25,6 +25,8 @@
>  #include "exec/exec-all.h"
>  #include "hw/qdev-properties.h"
>  #include "qapi/visitor.h"
> +#include "disas/capstone.h"
> +
>  
>  //#define DEBUG_FEATURES
>  
> @@ -100,8 +102,10 @@ static bool sparc_cpu_exec_interrupt(CPUState *cs, int 
> interrupt_request)
>  static void cpu_sparc_disas_set_info(CPUState *cpu, disassemble_info *info)
>  {
>      info->print_insn = print_insn_sparc;
> +    info->cap_arch = CS_ARCH_SPARC;
>  #ifdef TARGET_SPARC64
>      info->mach = bfd_mach_sparc_v9b;
> +    info->cap_mode = CS_MODE_V9;
>  #endif
>  }
>  
> diff --git a/meson.build b/meson.build
> index 82cf4a9258..b1c54024ac 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -661,6 +661,16 @@ else
>      )
>    endif
>  
> +  if 'CONFIG_SPARC_DIS' in config_all_disas
> +    capstone_data.set('CAPSTONE_HAS_SPARC', '1')
> +    capstone_files += files(
> +      'capstone/arch/Sparc/SparcDisassembler.c',
> +      'capstone/arch/Sparc/SparcInstPrinter.c',
> +      'capstone/arch/Sparc/SparcMapping.c',
> +      'capstone/arch/Sparc/SparcModule.c'
> +    )
> +  endif
> +
>    if 'CONFIG_S390_DIS' in config_all_disas
>      capstone_data.set('CAPSTONE_HAS_SYSZ', '1')
>      capstone_files += files(
> 

The old disassembler is easier to follow:

 ----------------
 IN:
-0x4000d214:  lda  [ %g3 ] #ASI_M_FLUSH_PROBE, %g6
-0x4000d218:  sta  %g6, [ %g4 ] #ASI_M_FLUSH_PROBE
+0x4000d214:  cc80c060  .byte    0xcc, 0x80, 0xc0, 0x60
+0x4000d218:  cca10060  .byte    0xcc, 0xa1, 0x00, 0x60

^ lda/sta opcodes not supported (there might be more).

 ----------------
 IN:
-0x4000d22c:  sethi  %hi(0xf01f0000), %g1
-0x4000d230:  mov  %g1, %g1     ! 0xf01f0000
-0x4000d234:  jmp  %g1
-0x4000d238:  nop
+0x4000d22c:  033c07c0  sethi    0x3c07c0, %g1
+0x4000d230:  82106000  or       %g1, 0, %g1
+0x4000d234:  81c04000  jmp      %g1
+0x4000d238:  01000000  nop

^ hi()/lo() macros not expanded (easier to read!)

Can we restrict dumping the encoded hex content for debug
profile only?

Anyhow:
Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]