Sorry. As you correctly pointed out there is no f33 register. I wrote f33, when I really meant f34.
I believe the index of f32 is 64 and f34 is 65. This is confirmed when looking at the XML description of the registers in GDB: <https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=gdb/features/sparc/sparc64-fpu.xml;h=8710585774d821c660af5e76f92707637633daf7;hb=HEAD> Thanks in advance Mikael Szreder On February 13, 2025 5:57:59 PM GMT+01:00, Richard Henderson <richard.hender...@linaro.org> wrote: >On 2/3/25 06:50, Mikael Szreder wrote: >> The gdbstub implementation for the Sparc architecture would incorectly >> calculate the the floating point register offset. >> This would cause register pairs(eg f32,f33) to point to the same value. >> >> Fixes: 30038fd81808 ("target-sparc: Change fpr representation to doubles.") >> Signed-off-by: Mikael Szreder <g...@miszr.win> >> --- >> target/sparc/gdbstub.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/target/sparc/gdbstub.c b/target/sparc/gdbstub.c >> index ec0036e9ef..5578fa9813 100644 >> --- a/target/sparc/gdbstub.c >> +++ b/target/sparc/gdbstub.c >> @@ -80,7 +80,7 @@ int sparc_cpu_gdb_read_register(CPUState *cs, GByteArray >> *mem_buf, int n) >> } >> if (n < 80) { >> /* f32-f62 (double width, even numbers only) */ >> - return gdb_get_reg64(mem_buf, env->fpr[(n - 32) / 2].ll); >> + return gdb_get_reg64(mem_buf, env->fpr[(n - 64) + 16].ll); > >I don't understand your issue with f33, since there is no such thing. Sparc >v9 has f0, f1, ... f31, then f32, f34, ... f62. The odd numbers above 32 do >not exist. > >Certainly the indexing is incorrect afterward. > >Originally, > > f32 = 64 -> (64 - 32) / 2 = 16 > f34 = 66 -> (66 - 32) / 2 = 17 > >whereas your replacement gives > > f34 = 66 -> (66 - 64) + 16 = 18. > >One could rewrite this as > > (n - 64) / 2 + 16 > >but that's algebraically identical to what we have now, so I don't see the >point. > >One plausible adjustment in this area would be to reject odd numbers from this >block and let them fall through to 'return 0' at the end. > > >r~