v4: https://lore.kernel.org/qemu-devel/20250108202625.149869-1-...@linux.ibm.com/ v4 -> v5: Fix the qemu-user-only build by adding qemu-sockets.c to it. Drop the qapi_bool_parse() changes (Daniel).
v3: https://lore.kernel.org/qemu-devel/20241216123412.77450-1-...@linux.ibm.com/ v3 -> v4: Rebase. Add missing "\n"s to error messages. Use unix_listen() (Alex). Use qapi_bool_parse() and patch it to accept NULL (Alex). Remove a leftover include (Alex). Rename port_or_path to path, set it to NULL after freeing (Alex). v2: https://lore.kernel.org/qemu-devel/20241106223629.2608-1-...@linux.ibm.com/ v2 -> v3: Rebase. Patches that need review: - [PATCH 2/8] gdbstub: Try unlinking the unix socket before binding - [PATCH 4/8] user: Introduce host_interrupt_signal # linux part - [PATCH 6/8] gdbstub: Allow late attachment - [PATCH 7/8] docs/user: Document the %d placeholder and suspend=n QEMU_GDB features - [PATCH 8/8] tests/tcg: Add late gdbstub attach test v1: https://lore.kernel.org/qemu-devel/20241024200031.80327-1-...@linux.ibm.com/ v1 -> v2: Rebase, fix conflicts with the QEMU_RTSIG_MAP patch. Use qemu_get_thread_id() for %d (Helge, Richard, Warner). Add R-bs, except for the Richard's one on 4/8, since conflict resolution caused a noticeable change. Hi, This series adds the ability to attach GDB to a running qemu-user instance. This is useful for debugging multi-process apps. Patches 1 and 2 implement a small related feature: the ability to create individual UNIX sockets for each child process. Patches 3-5 add the required infrastructure. In particular, we need to reserve a host signal for waking up threads, as discussed in [1]. By the way, the problem with atomicity of checking for pending signals and invoking syscalls that I'm describing in that thread seems to have already been solved by the safe_syscall infrastructure, so the changes are fairly simple. If this series is accepted, I will rebase the all-stop series on top of it. Patch 6 is the implementation, patch 7 is a documentation update, patch 8 is a test. I tested this series on Linux and only compile-tested on the BSDs. Best regards, Ilya Ilya Leoshkevich (8): gdbstub: Allow the %d placeholder in the socket path gdbstub: Try unlinking the unix socket before binding user: Introduce user/signal.h user: Introduce host_interrupt_signal osdep: Introduce qemu_kill_thread() gdbstub: Allow late attachment docs/user: Document the %d placeholder and suspend=n QEMU_GDB features tests/tcg: Add late gdbstub attach test bsd-user/main.c | 1 - bsd-user/signal-common.h | 1 - bsd-user/signal.c | 13 ++ docs/user/main.rst | 16 ++- gdbstub/user.c | 154 +++++++++++++++++---- include/qemu/osdep.h | 9 ++ include/user/signal.h | 25 ++++ linux-user/main.c | 1 - linux-user/signal-common.h | 1 - linux-user/signal.c | 26 +++- linux-user/syscall.c | 1 + stubs/meson.build | 2 + stubs/monitor-fd.c | 9 ++ tests/guest-debug/run-test.py | 15 +- tests/tcg/multiarch/Makefile.target | 9 +- tests/tcg/multiarch/gdbstub/late-attach.py | 28 ++++ tests/tcg/multiarch/late-attach.c | 41 ++++++ util/meson.build | 2 + util/oslib-posix.c | 15 ++ 19 files changed, 326 insertions(+), 43 deletions(-) create mode 100644 include/user/signal.h create mode 100644 stubs/monitor-fd.c create mode 100644 tests/tcg/multiarch/gdbstub/late-attach.py create mode 100644 tests/tcg/multiarch/late-attach.c -- 2.47.1