This is a pretty simple conversion given a single set of registers and
an existing helper to probe endianess.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v2
- use mb_cpu_is_big_endian
- use explicit MO_32 size
- handle differing size of env->ear between user/system
---
target/microblaze/gdbstub.c | 49 +++++++++++++++++--------------------
1 file changed, 22 insertions(+), 27 deletions(-)
@@ -50,62 +50,57 @@ int mb_cpu_gdb_read_register(CPUState *cs, GByteArray
*mem_buf, int n)
{
MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs);
CPUMBState *env = &cpu->env;
- uint32_t val;
+ MemOp mo = mb_cpu_is_big_endian(cs) ? MO_BE : MO_LE;
+ uint32_t msr;
switch (n) {
case 1 ... 31:
- val = env->regs[n];
- break;
+ return gdb_get_reg32_value(mo | MO_32, mem_buf, &env->regs[n]);
case GDB_PC:
- val = env->pc;
- break;
+ return gdb_get_reg32_value(mo | MO_32, mem_buf, &env->pc);
case GDB_MSR:
- val = mb_cpu_read_msr(env);
- break;
+ msr = mb_cpu_read_msr(env);
+ return gdb_get_reg32_value(mo | MO_32, mem_buf, &msr);
case GDB_EAR:
- val = env->ear;
- break;
+#if TARGET_LONG_BITS == 64
+ return gdb_get_reg64_value(mo | MO_64, mem_buf, &env->ear);
+#else
+ return gdb_get_reg32_value(mo | MO_32, mem_buf, &env->ear);
+#endif