target/loongarch/gdbstub: Fix gdbstub incorrectly handling some registers
Write operation with R32 (orig_a0) and R34 (CSR_BADV) is discarded on gdbstub implementation for LoongArch system. And return value should be register size rather than 0, since it is used to calculate offset of next register such as R33 (PC) in function handle_write_all_regs(). Cc: qemu-stable@nongnu.org Fixes: ca61e75071c6 ("target/loongarch: Add gdb support.") Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Bibo Mao <maobibo@loongson.cn>
This commit is contained in:
parent
b61b9d8913
commit
7bd4eaa847
@ -63,23 +63,24 @@ int loongarch_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
||||
{
|
||||
CPULoongArchState *env = cpu_env(cs);
|
||||
target_ulong tmp;
|
||||
int read_length;
|
||||
int length = 0;
|
||||
|
||||
if (n < 0 || n > 34) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (is_la64(env)) {
|
||||
tmp = ldq_le_p(mem_buf);
|
||||
read_length = 8;
|
||||
length = 8;
|
||||
} else {
|
||||
tmp = ldl_le_p(mem_buf);
|
||||
read_length = 4;
|
||||
length = 4;
|
||||
}
|
||||
|
||||
if (0 <= n && n < 32) {
|
||||
env->gpr[n] = tmp;
|
||||
length = read_length;
|
||||
} else if (n == 33) {
|
||||
set_pc(env, tmp);
|
||||
length = read_length;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user