Skip to content
Snippets Groups Projects
  • Andrew Burgess's avatar
    94452ac4
    target/riscv: remove fflags, frm, and fcsr from riscv-*-fpu.xml · 94452ac4
    Andrew Burgess authored
    
    While testing some changes to GDB's handling for the RISC-V registers
    fcsr, fflags, and frm, I spotted that QEMU includes these registers
    twice in the target description it sends to GDB, once in the fpu
    feature, and once in the csr feature.
    
    Right now things basically work OK, QEMU maps these registers onto two
    different register numbers, e.g. fcsr maps to both 68 and 73, and GDB
    can use either of these to access the register.
    
    However, GDB's target descriptions don't really work this way, each
    register should appear just once in a target description, mapping the
    register name onto the number GDB should use when accessing the
    register on the target.  Duplicate register names actually result in
    duplicate registers on the GDB side, however, as the registers have
    the same name, the user can only access one of these registers.
    
    Currently GDB has a hack in place, specifically for RISC-V, to spot
    the duplicate copies of these three registers, and hide them from the
    user, ensuring the user only ever sees a single copy of each.
    
    In this commit I propose fixing this issue on the QEMU side, and in
    the process, simplify the fpu register handling a little.
    
    I think we should, remove fflags, frm, and fcsr from the two (32-bit
    and 64-bit) fpu feature xml files.  These files will only contain the
    32 core floating point register f0 to f31.  The fflags, frm, and fcsr
    registers will continue to be advertised in the csr feature as they
    currently are.
    
    With that change made, I will simplify riscv_gdb_get_fpu and
    riscv_gdb_set_fpu, removing the extra handling for the 3 status
    registers.
    
    Signed-off-by: default avatarAndrew Burgess <aburgess@redhat.com>
    Reviewed-by: default avatarAlistair Francis <alistair.francis@wdc.com>
    Message-Id: <0fbf2a5b12e3210ff3867d5cf7022b3f3462c9c8.1661934573.git.aburgess@redhat.com>
    Signed-off-by: default avatarAlistair Francis <alistair.francis@wdc.com>
    94452ac4
    History
    target/riscv: remove fflags, frm, and fcsr from riscv-*-fpu.xml
    Andrew Burgess authored
    
    While testing some changes to GDB's handling for the RISC-V registers
    fcsr, fflags, and frm, I spotted that QEMU includes these registers
    twice in the target description it sends to GDB, once in the fpu
    feature, and once in the csr feature.
    
    Right now things basically work OK, QEMU maps these registers onto two
    different register numbers, e.g. fcsr maps to both 68 and 73, and GDB
    can use either of these to access the register.
    
    However, GDB's target descriptions don't really work this way, each
    register should appear just once in a target description, mapping the
    register name onto the number GDB should use when accessing the
    register on the target.  Duplicate register names actually result in
    duplicate registers on the GDB side, however, as the registers have
    the same name, the user can only access one of these registers.
    
    Currently GDB has a hack in place, specifically for RISC-V, to spot
    the duplicate copies of these three registers, and hide them from the
    user, ensuring the user only ever sees a single copy of each.
    
    In this commit I propose fixing this issue on the QEMU side, and in
    the process, simplify the fpu register handling a little.
    
    I think we should, remove fflags, frm, and fcsr from the two (32-bit
    and 64-bit) fpu feature xml files.  These files will only contain the
    32 core floating point register f0 to f31.  The fflags, frm, and fcsr
    registers will continue to be advertised in the csr feature as they
    currently are.
    
    With that change made, I will simplify riscv_gdb_get_fpu and
    riscv_gdb_set_fpu, removing the extra handling for the 3 status
    registers.
    
    Signed-off-by: default avatarAndrew Burgess <aburgess@redhat.com>
    Reviewed-by: default avatarAlistair Francis <alistair.francis@wdc.com>
    Message-Id: <0fbf2a5b12e3210ff3867d5cf7022b3f3462c9c8.1661934573.git.aburgess@redhat.com>
    Signed-off-by: default avatarAlistair Francis <alistair.francis@wdc.com>