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>
This commit is contained in:
parent
43ab3fb375
commit
9853485dd4
@ -317,9 +317,19 @@ static bool gdb_accept_socket(int gdb_fd)
|
|||||||
|
|
||||||
static int gdbserver_open_socket(const char *path)
|
static int gdbserver_open_socket(const char *path)
|
||||||
{
|
{
|
||||||
|
g_autoptr(GString) buf = g_string_new("");
|
||||||
struct sockaddr_un sockaddr = {};
|
struct sockaddr_un sockaddr = {};
|
||||||
|
char *pid_placeholder;
|
||||||
int fd, ret;
|
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);
|
fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
perror("create socket");
|
perror("create socket");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user