[PATCH] Allow 'interrupt -a' in all-stop mode
Pedro Alves
pedro@palves.net
Mon Jun 13 14:10:07 GMT 2022
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.
More information about the Gdb-patches
mailing list