qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Ilya Leoshkevich <iii@linux.ibm.com>
To: "Warner Losh" <imp@bsdimp.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Riku Voipio" <riku.voipio@iki.fi>,
	"Laurent Vivier" <laurent@vivier.eu>
Cc: "Kyle Evans" <kevans@freebsd.org>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Alexandre Iooss" <erdnaxe@crans.org>,
	"Mahmoud Mandour" <ma.mandourr@gmail.com>,
	"Pierrick Bouvier" <pierrick.bouvier@linaro.org>,
	qemu-devel@nongnu.org, "Ilya Leoshkevich" <iii@linux.ibm.com>
Subject: [PATCH v4 01/12] gdbstub: Support disablement in a multi-threaded process
Date: Mon, 19 Feb 2024 15:15:49 +0100	[thread overview]
Message-ID: <20240219141628.246823-2-iii@linux.ibm.com> (raw)
In-Reply-To: <20240219141628.246823-1-iii@linux.ibm.com>

The upcoming follow-fork-mode child support will require disabling
gdbstub in the parent process, which may have multiple threads (which
are represented as CPUs).

Loop over all CPUs in order to remove breakpoints and disable
single-step. Move the respective code into a separate function.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
 gdbstub/user.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/gdbstub/user.c b/gdbstub/user.c
index 14918d1a217..3ce20b7bbfc 100644
--- a/gdbstub/user.c
+++ b/gdbstub/user.c
@@ -356,16 +356,27 @@ int gdbserver_start(const char *port_or_path)
     return -1;
 }
 
+static void disable_gdbstub(CPUState *thread_cpu)
+{
+    CPUState *cpu;
+
+    close(gdbserver_user_state.fd);
+    gdbserver_user_state.fd = -1;
+    CPU_FOREACH(cpu) {
+        cpu_breakpoint_remove_all(cpu, BP_GDB);
+        /* no cpu_watchpoint_remove_all for user-mode */
+        cpu_single_step(cpu, 0);
+    }
+    tb_flush(thread_cpu);
+}
+
 /* Disable gdb stub for child processes.  */
 void gdbserver_fork(CPUState *cpu)
 {
     if (!gdbserver_state.init || gdbserver_user_state.fd < 0) {
         return;
     }
-    close(gdbserver_user_state.fd);
-    gdbserver_user_state.fd = -1;
-    cpu_breakpoint_remove_all(cpu, BP_GDB);
-    /* no cpu_watchpoint_remove_all for user-mode */
+    disable_gdbstub(cpu);
 }
 
 /*
-- 
2.43.2



  reply	other threads:[~2024-02-19 14:17 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-19 14:15 [PATCH v4 00/12] gdbstub: Implement follow-fork-mode child Ilya Leoshkevich
2024-02-19 14:15 ` Ilya Leoshkevich [this message]
2024-02-19 14:15 ` [PATCH v4 02/12] {linux,bsd}-user: Introduce get_task_state() Ilya Leoshkevich
2024-02-19 14:32   ` Warner Losh
2024-02-19 20:46   ` Richard Henderson
2024-02-19 14:15 ` [PATCH v4 03/12] {linux,bsd}-user: Update ts_tid after fork() Ilya Leoshkevich
2024-02-19 14:33   ` Warner Losh
2024-02-19 14:15 ` [PATCH v4 04/12] gdbstub: Introduce gdbserver_fork_start() Ilya Leoshkevich
2024-02-19 14:15 ` [PATCH v4 05/12] {linux,bsd}-user: Pass pid to fork_end() Ilya Leoshkevich
2024-02-19 14:15 ` [PATCH v4 06/12] {linux,bsd}-user: Pass pid to gdbserver_fork() Ilya Leoshkevich
2024-02-19 14:15 ` [PATCH v4 07/12] gdbstub: Call gdbserver_fork() both in parent and in child Ilya Leoshkevich
2024-02-19 14:15 ` [PATCH v4 08/12] gdbstub: Introduce gdb_handle_query_supported_user() Ilya Leoshkevich
2024-02-19 14:15 ` [PATCH v4 09/12] gdbstub: Introduce gdb_handle_set_thread_user() Ilya Leoshkevich
2024-02-19 14:15 ` [PATCH v4 10/12] gdbstub: Introduce gdb_handle_detach_user() Ilya Leoshkevich
2024-02-19 14:15 ` [PATCH v4 11/12] gdbstub: Implement follow-fork-mode child Ilya Leoshkevich
2024-02-19 14:16 ` [PATCH v4 12/12] tests/tcg: Add two follow-fork-mode tests Ilya Leoshkevich
2024-03-04 18:03 ` [PATCH v4 00/12] gdbstub: Implement follow-fork-mode child Alex Bennée

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240219141628.246823-2-iii@linux.ibm.com \
    --to=iii@linux.ibm.com \
    --cc=alex.bennee@linaro.org \
    --cc=erdnaxe@crans.org \
    --cc=imp@bsdimp.com \
    --cc=kevans@freebsd.org \
    --cc=laurent@vivier.eu \
    --cc=ma.mandourr@gmail.com \
    --cc=philmd@linaro.org \
    --cc=pierrick.bouvier@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=riku.voipio@iki.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).