* [PATCH] Allow 'interrupt -a' in all-stop mode @ 2022-06-08 15:27 Tom Tromey 2022-06-09 15:40 ` Pedro Alves 0 siblings, 1 reply; 5+ messages in thread From: Tom Tromey @ 2022-06-08 15:27 UTC (permalink / raw) To: gdb-patches; +Cc: Tom Tromey PR gdb/17160 points out that "interrupt -a" errors in all-stop mode, but there's no good reason for this. This patch removes the error. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17160 --- gdb/infcmd.c | 3 -- gdb/testsuite/gdb.base/interrupt-daemon.exp | 36 +++++++++++---------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/gdb/infcmd.c b/gdb/infcmd.c index e909d4d4c81..18590259339 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -2874,9 +2874,6 @@ interrupt_command (const char *args, int from_tty) && startswith (args, "-a")) all_threads = 1; - if (!non_stop && all_threads) - error (_("-a is meaningless in all-stop mode.")); - interrupt_target_1 (all_threads); } } diff --git a/gdb/testsuite/gdb.base/interrupt-daemon.exp b/gdb/testsuite/gdb.base/interrupt-daemon.exp index 0c71a6df71c..8dcbf778222 100644 --- a/gdb/testsuite/gdb.base/interrupt-daemon.exp +++ b/gdb/testsuite/gdb.base/interrupt-daemon.exp @@ -58,28 +58,30 @@ proc do_test {} { } } - with_test_prefix "bg" { - - set test "continue&" - gdb_test_multiple "continue&" $test { - -re "Continuing\\.\r\n$gdb_prompt " { - pass $test + foreach arg {"" "-a"} { + with_test_prefix "bg$arg" { + + set test "continue&" + gdb_test_multiple "continue&" $test { + -re "Continuing\\.\r\n$gdb_prompt " { + pass $test + } } - } - after 200 + after 200 - set test "interrupt" - gdb_test_multiple $test $test { - -re "$gdb_prompt " { - pass $test + set test "interrupt $arg" + gdb_test_multiple $test $test { + -re "$gdb_prompt " { + pass $test + } } - } - set test "interrupt cmd stops process" - gdb_test_multiple "" $test { - -re "received signal SIGINT" { - pass $test + set test "interrupt cmd stops process" + gdb_test_multiple "" $test { + -re "received signal SIGINT" { + pass $test + } } } } -- 2.34.1 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Allow 'interrupt -a' in all-stop mode 2022-06-08 15:27 [PATCH] Allow 'interrupt -a' in all-stop mode Tom Tromey @ 2022-06-09 15:40 ` Pedro Alves 2022-06-10 15:52 ` Tom Tromey 0 siblings, 1 reply; 5+ messages in thread From: Pedro Alves @ 2022-06-09 15:40 UTC (permalink / raw) To: Tom Tromey, gdb-patches On 2022-06-08 16:27, Tom Tromey via Gdb-patches wrote: > PR gdb/17160 points out that "interrupt -a" errors in all-stop mode, > but there's no good reason for this. This patch removes the error. > > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17160 The code change in GDB is OK. The testcase part, I'd rather this wasn't done in gdb.base/interrupt-daemon.exp, as it's very unrelated to the purpose of that test. I'd rather a new testcase called, say, continue_-a.exp. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Allow 'interrupt -a' in all-stop mode 2022-06-09 15:40 ` Pedro Alves @ 2022-06-10 15:52 ` Tom Tromey 2022-06-13 14:10 ` Pedro Alves 0 siblings, 1 reply; 5+ messages in thread From: Tom Tromey @ 2022-06-10 15:52 UTC (permalink / raw) To: Pedro Alves; +Cc: Tom Tromey, gdb-patches Pedro> The testcase part, I'd rather this wasn't done in gdb.base/interrupt-daemon.exp, Pedro> as it's very unrelated to the purpose of that test. I'd rather a new testcase Pedro> called, say, continue_-a.exp. How about this? Tom commit 5794300eaff799c2019aaa481d2c8a51662ffe05 Author: Tom Tromey <tromey@adacore.com> Date: Wed Jun 8 09:26:08 2022 -0600 Allow 'interrupt -a' in all-stop mode PR gdb/17160 points out that "interrupt -a" errors in all-stop mode, but there's no good reason for this. This patch removes the error. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17160 diff --git a/gdb/infcmd.c b/gdb/infcmd.c index e909d4d4c81..18590259339 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -2874,9 +2874,6 @@ interrupt_command (const char *args, int from_tty) && startswith (args, "-a")) all_threads = 1; - if (!non_stop && all_threads) - error (_("-a is meaningless in all-stop mode.")); - interrupt_target_1 (all_threads); } } diff --git a/gdb/testsuite/gdb.base/interrupt-a.c b/gdb/testsuite/gdb.base/interrupt-a.c new file mode 100644 index 00000000000..3e67045e9da --- /dev/null +++ b/gdb/testsuite/gdb.base/interrupt-a.c @@ -0,0 +1,25 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2022 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 <http://www.gnu.org/licenses/>. */ + +#include <unistd.h> + +int +main () +{ + while (1) + sleep (50); +} diff --git a/gdb/testsuite/gdb.base/interrupt-a.exp b/gdb/testsuite/gdb.base/interrupt-a.exp new file mode 100644 index 00000000000..9c65d6edd5f --- /dev/null +++ b/gdb/testsuite/gdb.base/interrupt-a.exp @@ -0,0 +1,50 @@ +# Copyright (C) 2022 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 <http://www.gnu.org/licenses/>. + +# Test that 'interrupt -a' works in all stop mode. + +standard_testfile .c +set executable ${testfile} + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug}]} { + return -1 +} + +if {![runto_main]} { + return -1 +} + +set test "continue &" +gdb_test_multiple "continue&" $test { + -re "Continuing\\.\r\n$gdb_prompt " { + pass $test + } +} + +set test "interrupt -a" +gdb_test_multiple $test $test { + -re "$gdb_prompt " { + pass $test + } +} + +after 200 + +set test "inferior stopped" +gdb_test_multiple "" $test { + -re "Program received signal" { + pass $test + } +} ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Allow 'interrupt -a' in all-stop mode 2022-06-10 15:52 ` Tom Tromey @ 2022-06-13 14:10 ` Pedro Alves 2022-06-14 15:04 ` Tom Tromey 0 siblings, 1 reply; 5+ messages in thread From: Pedro Alves @ 2022-06-13 14:10 UTC (permalink / raw) To: Tom Tromey; +Cc: gdb-patches On 2022-06-10 16:52, Tom Tromey wrote: > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see <http://www.gnu.org/licenses/>. */ > + > +#include <unistd.h> > + > +int > +main () > +{ > + while (1) > + sleep (50); We try to avoid having testcases that run forever if GDB misbehaves. For more complicated threading tests, we end up with something like: /* Don't run forever. */ alarm (300); For simpler testcases, we can just do something like: int i; for (i = 0; i < 60; i++) sleep (1); ('i' should not be declared within the 'for' so that this compiles with compilers that default to C89/C90.) ... which avoids introducing the depending on "alarm", which does not exist on all targets. > +} > diff --git a/gdb/testsuite/gdb.base/interrupt-a.exp b/gdb/testsuite/gdb.base/interrupt-a.exp > new file mode 100644 > index 00000000000..9c65d6edd5f > --- /dev/null > +++ b/gdb/testsuite/gdb.base/interrupt-a.exp > @@ -0,0 +1,50 @@ > +# Copyright (C) 2022 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 <http://www.gnu.org/licenses/>. > + > +# Test that 'interrupt -a' works in all stop mode. > + > +standard_testfile .c > +set executable ${testfile} > + > +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug}]} { > + return -1 > +} > + > +if {![runto_main]} { > + return -1 > +} > + > +set test "continue &" > +gdb_test_multiple "continue&" $test { > + -re "Continuing\\.\r\n$gdb_prompt " { > + pass $test > + } > +} You can get rid of the test variable (throughout) by using $gdb_test_name, like: gdb_test_multiple "continue &" "" { -re "Continuing\\.\r\n$gdb_prompt " { pass $gdb_test_name } } > + > +set test "interrupt -a" > +gdb_test_multiple $test $test { > + -re "$gdb_prompt " { > + pass $test > + } > +} > + > +after 200 This sleep normally appears after the "continue &" command, to give a bit of time for the program to run after GDB prints "Continuing". Here, after an "interrupt" command it doesn't appear necessary. I think you want to move it to right after the continue command. > + > +set test "inferior stopped" > +gdb_test_multiple "" $test { > + -re "Program received signal" { > + pass $test > + } > +} > Otherwise LGTM. Thanks. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] Allow 'interrupt -a' in all-stop mode 2022-06-13 14:10 ` Pedro Alves @ 2022-06-14 15:04 ` Tom Tromey 0 siblings, 0 replies; 5+ messages in thread From: Tom Tromey @ 2022-06-14 15:04 UTC (permalink / raw) To: Pedro Alves; +Cc: Tom Tromey, gdb-patches Pedro> We try to avoid having testcases that run forever if GDB Pedro> misbehaves. For more complicated threading tests, we end up with Pedro> something like: [...] Thanks, I fixed this & the other comments. I'm going to check it in now. Tom ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-06-14 15:04 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-06-08 15:27 [PATCH] Allow 'interrupt -a' in all-stop mode Tom Tromey 2022-06-09 15:40 ` Pedro Alves 2022-06-10 15:52 ` Tom Tromey 2022-06-13 14:10 ` Pedro Alves 2022-06-14 15:04 ` Tom Tromey
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 read-only IMAP folder(s) and NNTP newsgroup(s).