Message ID | 20200414111846.27495-1-philmd@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [PATCH-for-5.0] gdbstub: Introduce gdb_get_freg32() to get float32 registers | expand |
On 4/14/20 4:18 AM, Philippe Mathieu-Daudé wrote: > +static inline int gdb_get_freg32(GByteArray *array, float32 val) > +{ > + uint8_t buf[4]; > + > + QEMU_BUILD_BUG_ON(sizeof(CPU_FloatU) != sizeof(buf)); Why bother withe the BUG_ON when you could just put the sizeof(CPU_FloatU) into the array bounds above? r~
On 4/14/20 5:19 PM, Richard Henderson wrote: > On 4/14/20 4:18 AM, Philippe Mathieu-Daudé wrote: >> +static inline int gdb_get_freg32(GByteArray *array, float32 val) >> +{ >> + uint8_t buf[4]; >> + >> + QEMU_BUILD_BUG_ON(sizeof(CPU_FloatU) != sizeof(buf)); > > Why bother withe the BUG_ON when you could just put the sizeof(CPU_FloatU) into > the array bounds above? Ah good idea, thanks :) > > > r~ >
diff --git a/include/exec/gdbstub.h b/include/exec/gdbstub.h index b52d9933ee..52a4a936c6 100644 --- a/include/exec/gdbstub.h +++ b/include/exec/gdbstub.h @@ -125,6 +125,18 @@ static inline int gdb_get_reg128(GByteArray *buf, uint64_t val_hi, return 16; } +static inline int gdb_get_freg32(GByteArray *array, float32 val) +{ + uint8_t buf[4]; + + QEMU_BUILD_BUG_ON(sizeof(CPU_FloatU) != sizeof(buf)); + + stfl_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/sh4/gdbstub.c b/target/sh4/gdbstub.c index 49fc4a0cc6..da95205889 100644 --- a/target/sh4/gdbstub.c +++ b/target/sh4/gdbstub.c @@ -58,11 +58,9 @@ int superh_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n) return gdb_get_regl(mem_buf, env->fpscr); case 25 ... 40: if (env->fpscr & FPSCR_FR) { - stfl_p(mem_buf, env->fregs[n - 9]); - } else { - stfl_p(mem_buf, env->fregs[n - 25]); + return gdb_get_freg32(mem_buf, env->fregs[n - 9]); } - return 4; + return gdb_get_freg32(mem_buf, env->fregs[n - 25]); case 41: return gdb_get_regl(mem_buf, env->ssr); case 42:
Since we now use a GByteArray, we can not use stfl_p() directly. Introduce the gdb_get_freg32() helper to load a float32 register. Fixes: a010bdbe719 ("extend GByteArray to read register helpers") Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Based-on: <20200414102427.7459-1-philmd@redhat.com> --- include/exec/gdbstub.h | 12 ++++++++++++ target/sh4/gdbstub.c | 6 ++---- 2 files changed, 14 insertions(+), 4 deletions(-)