aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBibo Mao <maobibo@loongson.cn>2025-02-18 11:20:27 +0800
committerBibo Mao <maobibo@loongson.cn>2025-02-25 16:05:31 +0800
commit7bd4eaa847fcdbc4505d9ab95dafa21791d8302a (patch)
tree6df9e020924a9912623a3af227349385a3b348af
parentb61b9d891305abf8fe37f07280ca5a99a10da6cf (diff)
downloadqemu-7bd4eaa847fcdbc4505d9ab95dafa21791d8302a.zip
qemu-7bd4eaa847fcdbc4505d9ab95dafa21791d8302a.tar.gz
qemu-7bd4eaa847fcdbc4505d9ab95dafa21791d8302a.tar.bz2
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>
-rw-r--r--target/loongarch/gdbstub.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/target/loongarch/gdbstub.c b/target/loongarch/gdbstub.c
index dafa4fe..471eda2 100644
--- a/target/loongarch/gdbstub.c
+++ b/target/loongarch/gdbstub.c
@@ -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;
}