diff options
| author | Ilya Leoshkevich <iii@linux.ibm.com> | 2025-02-07 15:31:05 +0000 |
|---|---|---|
| committer | Alex Bennée <alex.bennee@linaro.org> | 2025-02-10 13:47:58 +0000 |
| commit | 9853485dd420a567500019752d011cc8d38f7199 (patch) | |
| tree | 3c69ccad6d853bb8768c1324b6daa66999b59f76 | |
| parent | 43ab3fb375ebb55c5b2ee7b88945f1466e7e2d5f (diff) | |
| download | focaccia-qemu-9853485dd420a567500019752d011cc8d38f7199.tar.gz focaccia-qemu-9853485dd420a567500019752d011cc8d38f7199.zip | |
gdbstub: Allow the %d placeholder in the socket path
Just like for QEMU_LOG_FILENAME, replace %d with PID in the GDB socket path. This allows running multi-process applications with, e.g., export QEMU_GDB=/tmp/qemu-%d.sock. Currently this is not possible, since the first process will cause the subsequent ones to fail due to not being able to bind() the GDB socket. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Warner Losh <imp@bsdimp.com> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Message-Id: <20250117001542.8290-2-iii@linux.ibm.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20250207153112.3939799-11-alex.bennee@linaro.org>
| -rw-r--r-- | gdbstub/user.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gdbstub/user.c b/gdbstub/user.c index c2bdfc3d49..fd29d595f4 100644 --- a/gdbstub/user.c +++ b/gdbstub/user.c @@ -317,9 +317,19 @@ static bool gdb_accept_socket(int gdb_fd) static int gdbserver_open_socket(const char *path) { + g_autoptr(GString) buf = g_string_new(""); struct sockaddr_un sockaddr = {}; + char *pid_placeholder; int fd, ret; + pid_placeholder = strstr(path, "%d"); + if (pid_placeholder != NULL) { + g_string_append_len(buf, path, pid_placeholder - path); + g_string_append_printf(buf, "%d", qemu_get_thread_id()); + g_string_append(buf, pid_placeholder + 2); + path = buf->str; + } + fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd < 0) { perror("create socket"); |