From: Claudiu Zissulescu Date: Fri, 12 Jun 2026 09:25:40 +0000 (-0500) Subject: windows gdb: Fix -target-attach result X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9deb94fdd530dcb988dc90abab392f15088ef6fe;p=thirdparty%2Fbinutils-gdb.git windows gdb: Fix -target-attach result This patch fixes a Windows issue with "-target-attach ", where "running" is emitted instead of "done". The "done" message should be synchronous for "-target-attach", but "mi_proceeded" variable is incorrectly set to "1" when clear_proceed_status(0, true) is called. As a result, "mi_interp::on_about_to_proceed" sets mi_proceed to 1, and later "mi_interp::on_resume" emits "running" instead of "done". Remove redundant clear_proceed_status(0) call (the notify argument is set to true by default). The init_wait_for_inferior(), which runs on the very next line, already calls clear_proceed_status (0, false). A new test is added too. Signed-off-by: Claudiu Zissulescu Approved-By: Pedro Alves Approved-By: Simon Marchi --- diff --git a/gdb/testsuite/gdb.mi/mi-attach.c b/gdb/testsuite/gdb.mi/mi-attach.c new file mode 100644 index 00000000000..0ec0a0c161f --- /dev/null +++ b/gdb/testsuite/gdb.mi/mi-attach.c @@ -0,0 +1,37 @@ +/* Copyright 2026 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include +#include + +#ifdef _WIN32 +#include +#else +#include +#endif + +int +main (void) +{ + /* Sleep long enough (5 min) to be attached to. */ +#ifdef _WIN32 + Sleep (300000); +#else + sleep (300); +#endif + return 0; +} diff --git a/gdb/testsuite/gdb.mi/mi-attach.exp b/gdb/testsuite/gdb.mi/mi-attach.exp new file mode 100644 index 00000000000..9c58ccb3728 --- /dev/null +++ b/gdb/testsuite/gdb.mi/mi-attach.exp @@ -0,0 +1,33 @@ +# Copyright 2026 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +require can_spawn_for_attach + +standard_testfile + +if {[build_executable "failed to prepare" $testfile $srcfile {debug}]} { + return +} + +set spawn_id [spawn_wait_for_attach $::binfile] +set prog_pid [spawn_id_get_pid $spawn_id] + +mi_clean_restart + +mi_gdb_test "-target-attach $prog_pid" ".*\\^done.*" "attach \$PROG_PID" +kill_wait_spawned_process $spawn_id diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 3399b8c3303..d2940afadff 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1935,7 +1935,6 @@ windows_nat_target::do_initial_windows_stuff (DWORD pid, bool attaching) if (!inf->target_is_pushed (this)) inf->push_target (this); windows_clear_solib (); - clear_proceed_status (0); init_wait_for_inferior (); inferior_appeared (inf, pid);