target/riscv: Use xl instead of mxl for disassemble

Disassemble function(plugin_disas, target_disas, monitor_disas) will
always call set_disas_info before disassembling instructions.

plugin_disas  and target_disas will always be called under a TB, which
has the same XLEN.

We can't ensure that monitor_disas will always be called under a TB,
but current XLEN will still be a better choice, thus we can ensure at
least the disassemble of the nearest one TB is right.

Signed-off-by: LIU Zhiwei <zhiwei_liu@linux.alibaba.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
Message-Id: <20230612111034.3955227-2-christoph.muellner@vrull.eu>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
LIU Zhiwei 2023-06-12 13:10:27 +02:00 committed by Alistair Francis
parent fcb237e64f
commit 94692c3a34

View File

@ -858,9 +858,10 @@ static void riscv_cpu_reset_hold(Object *obj)
static void riscv_cpu_disas_set_info(CPUState *s, disassemble_info *info) static void riscv_cpu_disas_set_info(CPUState *s, disassemble_info *info)
{ {
RISCVCPU *cpu = RISCV_CPU(s); RISCVCPU *cpu = RISCV_CPU(s);
CPURISCVState *env = &cpu->env;
info->target_info = &cpu->cfg; info->target_info = &cpu->cfg;
switch (riscv_cpu_mxl(&cpu->env)) { switch (env->xl) {
case MXL_RV32: case MXL_RV32:
info->print_insn = print_insn_riscv32; info->print_insn = print_insn_riscv32;
break; break;