mbox series

[v2,00/38] gdbserver multi-threaded debugging and POWER9/10 support

Message ID 20220329154931.493851-1-npiggin@gmail.com
Headers show
Series gdbserver multi-threaded debugging and POWER9/10 support | expand

Message

Nicholas Piggin March 29, 2022, 3:48 p.m. UTC
POWER10 is working well with sbefifo (modulo the start SBE command
being buggy with stop states -- make sure you use powersave=off when
testing this, until those can be fixed). POWER9 similarly works well,
with the exception of breakpoints causing PSI interrupt storm.

gdbserver itself was due for a bit of attention so there's a bunch of
improvements and fixes.

Multi-threaded debugging is implemented later in the series using the
gdb "all-stop" threads model (all target threads are stopped if any is
stopped).

Since v1:
- Made changes suggested by Joel (thanks).
- Implemented multi-threaded debugging.
- A few more smaller improvements (put_mem handling, breakpoint
  command handling, returning more registers).
- Redudce round trips further by returning registers with stop reason.
- POWER9 support as well.
- Proper SPATTN / attn detection and clearing for POWER9/10.

Thanks,
Nick

Nicholas Piggin (38):
  gdbserver: fix put_mem command parsing
  libpdbg: fix p9chip and p10chip thread_stop
  gdbserver: update gdb_parser_precompile.c, rename detach command
  gdbserver: include <port> argument in command line help text
  gdbserver: Document problem and workaround for client remote timeouts
  gdbserver: print some client/server info
  gdbserver: Make command static
  gdbserver: use standard compatibility test calls
  gdbserver: fix read buffer overflow
  gdbserver: reduce PR_INFO noise
  gdbserver: fix interrupt double stop reason response
  libpdbg: thread_regs don't print regs
  gdbserver: lexer fixes
  gdbserver: put_mem handle arbitrary lengths
  gdbserver: implement NoAckMode
  libpdbg: Remove enable_attn target command
  gdbserver: disable attn after breaking
  gdbserver: use read-modify-write for put_mem that is not 8-byte
    aligned
  gdbserver: enable POWER9 support
  gdbserver: Add POWER10 support
  gdbserver: check for attn using the SPATTN register
  gdbserver: test endian when it is required
  gdbserver: catch ctrl-C
  gdbserver: return more registers
  gdbserver: initial thread support
  gdbserver: track attn enablement by breakpoints
  gdbserver: implement get_thread / set_thread commands
  gdbserver: add multi-threaded start/stop helper functions
  gdbserver: tidy poll()
  gdbserver: multi-thread polling and stop-reason
  gdbserver: track stop reason per thread
  gdbserver: multithread debugging support
  gdbserver: allow gdbserver to start with targets running
  gdbserver: better deal with threads initially stopped
  gdbserver: send regs with stop reason
  gdbserver: use thread_stop_all() / thread_start_all()
  gdbserver: handle gdb breakpoint commands
  gdbserver: remove fallback breakpoint support in put_mem

 README.md                   |   38 +-
 libpdbg/chip.c              |    2 -
 libpdbg/hwunit.h            |    2 +-
 libpdbg/p10chip.c           |    8 +-
 libpdbg/p8chip.c            |   31 -
 libpdbg/p9chip.c            |    8 +-
 libpdbg/thread.c            |    7 +-
 src/gdb_parser.rl           |  124 +++-
 src/gdb_parser_precompile.c |  478 ++++++++++-----
 src/main.c                  |    2 +-
 src/pdbgproxy.c             | 1121 +++++++++++++++++++++++++++++++----
 src/pdbgproxy.h             |   11 +-
 src/thread.c                |    2 +
 13 files changed, 1475 insertions(+), 359 deletions(-)