target/ppc: Fix XER access in gdbstub
The value of XER is split in multiple fields of CPUPPCState, like
env->xer and env->so. To get/set the whole register from gdb, we should
use cpu_read_xer/cpu_write_xer.
Fixes: da91a00f19
("target-ppc: Split out SO, OV, CA fields from XER")
Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br>
Message-Id: <20211014223234.127012-3-matheus.ferst@eldorado.org.br>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
66c6b40aba
commit
7974dc5900
@ -159,7 +159,7 @@ int ppc_cpu_gdb_read_register(CPUState *cs, GByteArray *buf, int n)
|
||||
gdb_get_regl(buf, env->ctr);
|
||||
break;
|
||||
case 69:
|
||||
gdb_get_reg32(buf, env->xer);
|
||||
gdb_get_reg32(buf, cpu_read_xer(env));
|
||||
break;
|
||||
case 70:
|
||||
gdb_get_reg32(buf, env->fpscr);
|
||||
@ -217,7 +217,7 @@ int ppc_cpu_gdb_read_register_apple(CPUState *cs, GByteArray *buf, int n)
|
||||
gdb_get_reg64(buf, env->ctr);
|
||||
break;
|
||||
case 69 + 32:
|
||||
gdb_get_reg32(buf, env->xer);
|
||||
gdb_get_reg32(buf, cpu_read_xer(env));
|
||||
break;
|
||||
case 70 + 32:
|
||||
gdb_get_reg64(buf, env->fpscr);
|
||||
@ -269,7 +269,7 @@ int ppc_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
||||
env->ctr = ldtul_p(mem_buf);
|
||||
break;
|
||||
case 69:
|
||||
env->xer = ldl_p(mem_buf);
|
||||
cpu_write_xer(env, ldl_p(mem_buf));
|
||||
break;
|
||||
case 70:
|
||||
/* fpscr */
|
||||
@ -319,7 +319,7 @@ int ppc_cpu_gdb_write_register_apple(CPUState *cs, uint8_t *mem_buf, int n)
|
||||
env->ctr = ldq_p(mem_buf);
|
||||
break;
|
||||
case 69 + 32:
|
||||
env->xer = ldl_p(mem_buf);
|
||||
cpu_write_xer(env, ldl_p(mem_buf));
|
||||
break;
|
||||
case 70 + 32:
|
||||
/* fpscr */
|
||||
|
Loading…
Reference in New Issue
Block a user