mbox series

[00/16] Add Multi-Core Debug (MCD) API support

Message ID 20250310150510.200607-1-mario.fleischmann@lauterbach.com (mailing list archive)
Headers show
Series Add Multi-Core Debug (MCD) API support | expand

Message

Mario Fleischmann March 10, 2025, 3:04 p.m. UTC
This patch series introduces support for the Multi-Core Debug (MCD) API, a
commonly used debug interface by emulators. The MCD API, defined through a
header file, consists of 54 functions for implementing debug and trace.
However, since it is a header-file-only interface, MCD does not specify a
communication protocol. We get around this limitation by following a remote
procedure call approach using QMP. The client stub corresponding to this
implementation can be found at https://gitlab.com/lauterbach/mcdrefsrv

This series is the successor to:
"[PATCH v5 00/18] first version of mcdstub"
(https://patchew.org/QEMU/20231220162555.19545-1-nicolas.eder@lauterbach.com/)

* Architecture-independent MCD implementation
* QMP instead of custom TCP protocol

qemu-system-<arch> [options] -qmp tcp::1235,server=on,wait=off

* Architecture-independent QTest test suite

V=1 QTEST_QEMU_BINARY="./qemu-system-<arch> [options]" tests/qtest/mcd-test

* Architecture-specific tests can be found at the client stub

Mario Fleischmann (16):
  mcd: Introduce Multi-Core Debug (MCD) API
  mcd: Introduce MCD server
  mcd: Implement target initialization API
  mcd: Implement server connection API
  mcd: Implement target system query
  mcd: Implement core connection control
  mcd: Implement memory space query
  gdbstub: Expose GDBRegisterState
  mcd: Implement register query
  mcd: Implement runstate control
  mcd test: Implement core state query
  gdbstub: Expose gdb_write_register
  mcd: Implement register/memory access
  mcd: Implement single stepping
  mcd: Implement trigger control
  mcd: Implement reset control

 MAINTAINERS               |    9 +
 docs/interop/index.rst    |    1 +
 docs/interop/mcd.rst      |   58 +
 gdbstub/gdbstub.c         |   15 +-
 include/exec/gdbstub.h    |   18 +-
 mcd/libmcd_qapi.c         |  506 +++++
 mcd/libmcd_qapi.h         |   81 +
 mcd/mcd_api.h             | 3963 +++++++++++++++++++++++++++++++++++++
 mcd/mcdserver.c           | 2242 +++++++++++++++++++++
 mcd/mcdstub_qapi.c        |  974 +++++++++
 mcd/meson.build           |   12 +
 meson.build               |    1 +
 qapi/mcd.json             | 2366 ++++++++++++++++++++++
 qapi/meson.build          |    1 +
 qapi/qapi-schema.json     |    1 +
 tests/qtest/libmcd-test.c |  379 ++++
 tests/qtest/libmcd-test.h |   68 +
 tests/qtest/mcd-test.c    |  644 ++++++
 tests/qtest/meson.build   |    2 +
 19 files changed, 11331 insertions(+), 10 deletions(-)
 create mode 100644 docs/interop/mcd.rst
 create mode 100644 mcd/libmcd_qapi.c
 create mode 100644 mcd/libmcd_qapi.h
 create mode 100644 mcd/mcd_api.h
 create mode 100644 mcd/mcdserver.c
 create mode 100644 mcd/mcdstub_qapi.c
 create mode 100644 mcd/meson.build
 create mode 100644 qapi/mcd.json
 create mode 100644 tests/qtest/libmcd-test.c
 create mode 100644 tests/qtest/libmcd-test.h
 create mode 100644 tests/qtest/mcd-test.c