mbox series

[v2,00/11] gdbstub: conversion to runtime endianess helpers

Message ID 20250324102142.67022-1-alex.bennee@linaro.org
Headers show
Series gdbstub: conversion to runtime endianess helpers | expand

Message

Alex Bennée March 24, 2025, 10:21 a.m. UTC
The aim of this work is to get rid of the endian aware helpers in
gdbstub/helpers.h which due to their use of tswap() mean target
gdbstubs need to be built multiple times. While this series doesn't
actually build each stub once it introduces a new helper -
gdb_get_register_value() which takes a MemOp which can describe the
current endian state of the system. This will be a lot easier to
dynamically feed from a helper function.

The most complex example is PPC which has a helper called
ppc_maybe_bswap_register() which was doing this.

This is still an RFC but I've spun out v2 for further discussion.

In v2:

  - drop uint8_t casting and use void as C intended ;-)
  - add specific 32/64 bit helpers with type checking an assertion
  - various tweaks and fixes (see individual commits)

There are a few other misc clean-ups I did on the way which might be
worth cherry picking for 10.0 but I'll leave that up to maintainers.

Alex Bennée (11):
  include/exec: fix assert in size_memop
  include/gdbstub: fix include guard in commands.h
  gdbstub: assert earlier in handle_read_all_regs
  gdbstub: introduce target independent gdb register helper
  target/arm: convert 32 bit gdbstub to new helpers
  target/arm: convert 64 bit gdbstub to new helpers
  target/ppc: expand comment on FP/VMX/VSX access functions
  target/ppc: make ppc_maybe_bswap_register static
  target/ppc: convert gdbstub to new helpers
  target/microblaze: convert gdbstub to new helper
  include/gdbstub: add note to helpers.h

 include/exec/memop.h        |   4 +-
 include/gdbstub/commands.h  |   2 +-
 include/gdbstub/helpers.h   |   4 +-
 include/gdbstub/registers.h |  55 ++++++++++
 target/ppc/cpu.h            |   8 +-
 gdbstub/gdbstub.c           |  25 ++++-
 target/arm/gdbstub.c        |  55 ++++++----
 target/arm/gdbstub64.c      |  53 ++++++----
 target/microblaze/gdbstub.c |  49 ++++-----
 target/ppc/gdbstub.c        | 197 ++++++++++++++++++++----------------
 10 files changed, 292 insertions(+), 160 deletions(-)
 create mode 100644 include/gdbstub/registers.h

Comments

Pierrick Bouvier March 24, 2025, 7:10 p.m. UTC | #1
On 3/24/25 03:21, Alex Bennée wrote:
> The aim of this work is to get rid of the endian aware helpers in
> gdbstub/helpers.h which due to their use of tswap() mean target
> gdbstubs need to be built multiple times. While this series doesn't
> actually build each stub once it introduces a new helper -
> gdb_get_register_value() which takes a MemOp which can describe the
> current endian state of the system. This will be a lot easier to
> dynamically feed from a helper function.
> 
> The most complex example is PPC which has a helper called
> ppc_maybe_bswap_register() which was doing this.
> 
> This is still an RFC but I've spun out v2 for further discussion.
> 
> In v2:
> 
>    - drop uint8_t casting and use void as C intended ;-)

C allows that permissively, and it can be convenient when underlying 
type is really unknown. But in our case, it's only two variants.

If really it hurts to replace callers, _Generic is at least a better 
solution than invoking the void* hammer.

>    - add specific 32/64 bit helpers with type checking an assertion
>    - various tweaks and fixes (see individual commits)
> 
> There are a few other misc clean-ups I did on the way which might be
> worth cherry picking for 10.0 but I'll leave that up to maintainers.
> 
> Alex Bennée (11):
>    include/exec: fix assert in size_memop
>    include/gdbstub: fix include guard in commands.h
>    gdbstub: assert earlier in handle_read_all_regs
>    gdbstub: introduce target independent gdb register helper
>    target/arm: convert 32 bit gdbstub to new helpers
>    target/arm: convert 64 bit gdbstub to new helpers
>    target/ppc: expand comment on FP/VMX/VSX access functions
>    target/ppc: make ppc_maybe_bswap_register static
>    target/ppc: convert gdbstub to new helpers
>    target/microblaze: convert gdbstub to new helper
>    include/gdbstub: add note to helpers.h
> 
>   include/exec/memop.h        |   4 +-
>   include/gdbstub/commands.h  |   2 +-
>   include/gdbstub/helpers.h   |   4 +-
>   include/gdbstub/registers.h |  55 ++++++++++
>   target/ppc/cpu.h            |   8 +-
>   gdbstub/gdbstub.c           |  25 ++++-
>   target/arm/gdbstub.c        |  55 ++++++----
>   target/arm/gdbstub64.c      |  53 ++++++----
>   target/microblaze/gdbstub.c |  49 ++++-----
>   target/ppc/gdbstub.c        | 197 ++++++++++++++++++++----------------
>   10 files changed, 292 insertions(+), 160 deletions(-)
>   create mode 100644 include/gdbstub/registers.h
>