On 2/5/20 5:10 PM, Alex Bennée wrote: > This is cleaner than poking memory directly and will make later > clean-ups easier. > > Signed-off-by: Alex Bennée <alex.ben...@linaro.org> > --- > target/i386/gdbstub.c | 22 ++++++++-------------- > 1 file changed, 8 insertions(+), 14 deletions(-) > > diff --git a/target/i386/gdbstub.c b/target/i386/gdbstub.c > index 572ead641ca..208b3de70da 100644 > --- a/target/i386/gdbstub.c > +++ b/target/i386/gdbstub.c > @@ -95,29 +95,26 @@ int x86_cpu_gdb_read_register(CPUState *cs, uint8_t > *mem_buf, int n) > if (env->hflags & HF_CS64_MASK) { > return gdb_get_reg64(mem_buf, env->regs[gpr_map[n]]); > } else if (n < CPU_NB_REGS32) { > + > return gdb_get_reg64(mem_buf, > env->regs[gpr_map[n]] & 0xffffffffUL);
Watch the stray spaces. > } else if (n >= IDX_FP_REGS && n < IDX_FP_REGS + 8) { > -#ifdef USE_X86LDOUBLE > - /* FIXME: byteswap float values - after fixing fpregs layout. */ > - memcpy(mem_buf, &env->fpregs[n - IDX_FP_REGS], 10); > -#else > - memset(mem_buf, 0, 10); > -#endif > + guint8 *data = (guint8 *) &env->fpregs[n - IDX_FP_REGS]; > + memcpy(mem_buf, data, 10); > + /* byte swap? this is at least correct of x86-on-x86 */ Yes, byte swap. typedef struct { uint64_t low; uint16_t high; } floatx80; Output little-endian low, followed by little-endian high. > @@ -290,10 +287,7 @@ int x86_cpu_gdb_write_register(CPUState *cs, uint8_t > *mem_buf, int n) > return 4; > } > } else if (n >= IDX_FP_REGS && n < IDX_FP_REGS + 8) { > -#ifdef USE_X86LDOUBLE > - /* FIXME: byteswap float values - after fixing fpregs layout. */ > memcpy(&env->fpregs[n - IDX_FP_REGS], mem_buf, 10); > -#endif > return 10; Similarly. r~