summary refs log tree commit diff stats
path: root/stubs
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2025-02-07 15:31:06 +0000
committerAlex Bennée <alex.bennee@linaro.org>2025-02-10 13:47:58 +0000
commitfccb744f41c69fec6fd92225fe907c6e69de5d44 (patch)
treecd6b4d4bf739ce9c3862d63eccc865536a3c0980 /stubs
parent9853485dd420a567500019752d011cc8d38f7199 (diff)
downloadfocaccia-qemu-fccb744f41c69fec6fd92225fe907c6e69de5d44.tar.gz
focaccia-qemu-fccb744f41c69fec6fd92225fe907c6e69de5d44.zip
gdbstub: Try unlinking the unix socket before binding
In case an emulated process execve()s another emulated process, bind()
will fail, because the socket already exists. So try deleting it. Use
the existing unix_listen() function which does this. Link qemu-user
with qemu-sockets.c and add the monitor_get_fd() stub.

Note that it is not possible to handle this in do_execv(): deleting
gdbserver_user_state.socket_path before safe_execve() is not correct,
because the latter may fail, and afterwards we may lose control.

Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20250117001542.8290-3-iii@linux.ibm.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20250207153112.3939799-12-alex.bennee@linaro.org>
Diffstat (limited to 'stubs')
-rw-r--r--stubs/meson.build2
-rw-r--r--stubs/monitor-fd.c9
2 files changed, 11 insertions, 0 deletions
diff --git a/stubs/meson.build b/stubs/meson.build
index a8b3aeb564..b0fee37e05 100644
--- a/stubs/meson.build
+++ b/stubs/meson.build
@@ -61,6 +61,8 @@ if have_user
   if not have_system
     stub_ss.add(files('qdev.c'))
   endif
+
+  stub_ss.add(files('monitor-fd.c'))
 endif
 
 if have_system
diff --git a/stubs/monitor-fd.c b/stubs/monitor-fd.c
new file mode 100644
index 0000000000..9bb6749885
--- /dev/null
+++ b/stubs/monitor-fd.c
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "qemu/osdep.h"
+#include "monitor/monitor.h"
+
+int monitor_get_fd(Monitor *mon, const char *fdname, Error **errp)
+{
+    abort();
+}