Message ID | 20200414143240.21764-3-philmd@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | gdbstub: Introduce gdb_get_float32/gdb_get_float64 helpers | expand |
On 4/14/20 7:32 AM, Philippe Mathieu-Daudé wrote: > When converted to use GByteArray in commits 462474d760c and > a010bdbe719, the call to stfq_p() was removed. This call > serialize a float. > Since we now use a GByteArray, we can not use stfq_p() directly. > Introduce the gdb_get_float64() helper to load a float64 register. > > Fixes: 462474d760c ("target/m68k: use gdb_get_reg helpers") > Fixes: a010bdbe719 ("extend GByteArray to read register helpers") > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > include/exec/gdbstub.h | 12 ++++++++++++ > target/m68k/helper.c | 3 ++- > target/ppc/gdbstub.c | 4 ++-- > target/ppc/translate_init.inc.c | 2 +- > 4 files changed, 17 insertions(+), 4 deletions(-) This one can wait for 5.1, or be dropped altogether, depending. In this case, we're only making the artificial distinction between float64 and uint64_t. Therefore all of the existing uses of gdb_get_reg64 that you replace are not bug fixes. Therefore, not 5.0 material. I've been considering removing float32 and float64, and just replacing them with uint32_t and uint64_t, and removing all of the associated shims like stfq_p. But I've never quite gotten around to doing that. r~
diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index 3caca99416..ef88cefbf6 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -137,6 +137,18 @@ static inline int gdb_get_float32(GByteArray *array, float32 val) return sizeof(buf); } +static inline int gdb_get_float64(GByteArray *array, float64 val) +{ + uint8_t buf[8]; + + QEMU_BUILD_BUG_ON(sizeof(CPU_DoubleU) != sizeof(buf)); + + stfq_p(buf, val); + g_byte_array_append(array, buf, sizeof(buf)); + + return sizeof(buf); +} + static inline int gdb_get_zeroes(GByteArray *array, size_t len) { for (size_t i = 0; i < len; i++) { diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 014657c637..cc80b48dda 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -72,7 +72,8 @@ static int cf_fpu_gdb_get_reg(CPUM68KState *env, GByteArray *mem_buf, int n) { if (n < 8) { float_status s; - return gdb_get_reg64(mem_buf, floatx80_to_float64(env->fregs[n].d, &s)); + return gdb_get_float64(mem_buf, + floatx80_to_float64(env->fregs[n].d, &s)); } switch (n) { case 8: /* fpcontrol */ diff --git a/target/ppc/gdbstub.c b/target/ppc/gdbstub.c index eb362dd9ae..5c11c88b2a 100644 --- a/target/ppc/gdbstub.c +++ b/target/ppc/gdbstub.c @@ -130,7 +130,7 @@ int ppc_cpu_gdb_read_register(CPUState *cs, GByteArray *buf, int n) gdb_get_regl(buf, env->gpr[n]); } else if (n < 64) { /* fprs */ - gdb_get_reg64(buf, *cpu_fpr_ptr(env, n - 32)); + gdb_get_float64(buf, *cpu_fpr_ptr(env, n - 32)); } else { switch (n) { case 64: @@ -184,7 +184,7 @@ int ppc_cpu_gdb_read_register_apple(CPUState *cs, GByteArray *buf, int n) gdb_get_reg64(buf, env->gpr[n]); } else if (n < 64) { /* fprs */ - gdb_get_reg64(buf, *cpu_fpr_ptr(env, n - 32)); + gdb_get_float64(buf, *cpu_fpr_ptr(env, n - 32)); } else if (n < 96) { /* Altivec */ gdb_get_reg64(buf, n - 64); diff --git a/target/ppc/translate_init.inc.c b/target/ppc/translate_init.inc.c index e853164a86..d825cb5975 100644 --- a/target/ppc/translate_init.inc.c +++ b/target/ppc/translate_init.inc.c @@ -9881,7 +9881,7 @@ static int gdb_get_float_reg(CPUPPCState *env, GByteArray *buf, int n) { uint8_t *mem_buf; if (n < 32) { - gdb_get_reg64(buf, *cpu_fpr_ptr(env, n)); + gdb_get_float64(buf, *cpu_fpr_ptr(env, n)); mem_buf = gdb_get_reg_ptr(buf, 8); ppc_maybe_bswap_register(env, mem_buf, 8); return 8;
When converted to use GByteArray in commits 462474d760c and a010bdbe719, the call to stfq_p() was removed. This call serialize a float. Since we now use a GByteArray, we can not use stfq_p() directly. Introduce the gdb_get_float64() helper to load a float64 register. Fixes: 462474d760c ("target/m68k: use gdb_get_reg helpers") Fixes: a010bdbe719 ("extend GByteArray to read register helpers") Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- include/exec/gdbstub.h | 12 ++++++++++++ target/m68k/helper.c | 3 ++- target/ppc/gdbstub.c | 4 ++-- target/ppc/translate_init.inc.c | 2 +- 4 files changed, 17 insertions(+), 4 deletions(-)