diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c index 1934f919c0..f89b20ea84 100644 --- a/target/riscv/gdbstub.c +++ b/target/riscv/gdbstub.c @@ -191,14 +191,15 @@ static int riscv_gdb_set_csr(CPUState *cs, uint8_t *mem_buf, int n) { RISCVCPU *cpu = RISCV_CPU(cs); CPURISCVState *env = &cpu->env; + const unsigned regsz = riscv_cpu_is_32bit(cpu) ? 4 : 8; if (n < CSR_TABLE_SIZE) { - target_ulong val = ldtul_p(mem_buf); + target_ulong val = ldn_p(mem_buf, regsz); int result; result = riscv_csrrw_debug(env, n, NULL, val, -1); if (result == RISCV_EXCP_NONE) { - return sizeof(target_ulong); + return regsz; } } return 0; @@ -225,11 +226,12 @@ static int riscv_gdb_get_virtual(CPUState *cs, GByteArray *buf, int n) static int riscv_gdb_set_virtual(CPUState *cs, uint8_t *mem_buf, int n) { if (n == 0) { -#ifndef CONFIG_USER_ONLY RISCVCPU *cpu = RISCV_CPU(cs); + const unsigned regsz = riscv_cpu_is_32bit(cpu) ? 4 : 8; +#ifndef CONFIG_USER_ONLY CPURISCVState *env = &cpu->env; - target_ulong new_priv = ldtul_p(mem_buf) & 0x3; + target_ulong new_priv = ldn_p(mem_buf, regsz) & 0x3; bool new_virt = 0; if (new_priv == PRV_RESERVED) { @@ -237,7 +239,7 @@ static int riscv_gdb_set_virtual(CPUState *cs, uint8_t *mem_buf, int n) } if (new_priv != PRV_M) { - new_virt = (ldtul_p(mem_buf) & BIT(2)) >> 2; + new_virt = (ldn_p(mem_buf, regsz) & BIT(2)) >> 2; } if (riscv_has_ext(env, RVH) && new_virt != env->virt_enabled) { @@ -246,7 +248,7 @@ static int riscv_gdb_set_virtual(CPUState *cs, uint8_t *mem_buf, int n) riscv_cpu_set_mode(env, new_priv, new_virt); #endif - return sizeof(target_ulong); + return regsz; } return 0; }