diff options
author | Kevin Buettner <kevinb@redhat.com> | 2021-10-01 17:14:00 -0700 |
---|---|---|
committer | Kevin Buettner <kevinb@redhat.com> | 2021-11-09 20:27:53 -0700 |
commit | f493b71179ab70d5e278234cb763eede55d44e61 (patch) | |
tree | 9e621ac5f1caa575e70c9fe8201042e786923562 /gdb | |
parent | 9c95aea186b18310340915045189a4e39b8393ea (diff) | |
download | gdb-f493b71179ab70d5e278234cb763eede55d44e61.zip gdb-f493b71179ab70d5e278234cb763eede55d44e61.tar.gz gdb-f493b71179ab70d5e278234cb763eede55d44e61.tar.bz2 |
Test case for Bug 28308
The purpose of this test is described in the comments in
dprintf-execution-x-script.exp.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28308
The name of this new test was based on that of an existing test,
bp-cmds-execution-x-script.exp. I started off by copying that test,
adding to it, and then rewriting almost all of it. It's different
enough that I decided that listing the copyright year as 2021
was sufficient.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/gdb.base/dprintf-execution-x-script.c | 53 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dprintf-execution-x-script.exp | 85 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dprintf-execution-x-script.gdb | 21 |
3 files changed, 159 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/dprintf-execution-x-script.c b/gdb/testsuite/gdb.base/dprintf-execution-x-script.c new file mode 100644 index 0000000..3395413 --- /dev/null +++ b/gdb/testsuite/gdb.base/dprintf-execution-x-script.c @@ -0,0 +1,53 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2021 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 <stdlib.h> +#include <stdio.h> + +volatile int vi = 0; + +void +inc_vi () +{ + vi++; +} + +void +print_vi () +{ + printf ("vi=%d\n", vi); +} + +void +increment () +{ + inc_vi (); +} + +int +main (int argc, char **argv) +{ + print_vi (); + increment (); + print_vi (); + increment (); + print_vi (); + increment (); + print_vi (); + + exit (0); +} diff --git a/gdb/testsuite/gdb.base/dprintf-execution-x-script.exp b/gdb/testsuite/gdb.base/dprintf-execution-x-script.exp new file mode 100644 index 0000000..9133af7 --- /dev/null +++ b/gdb/testsuite/gdb.base/dprintf-execution-x-script.exp @@ -0,0 +1,85 @@ +# Copyright 2021 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 commands in a GDB script file run via GDB's -x flag work +# as expected. Specifically, the script creates a dprintf breakpoint +# as well as a normal breakpoint that has "continue" in its command +# list, and then does "run". Correct output from GDB is checked as +# part of this test. + +# Bail out if the target can't use the 'run' command. +if ![target_can_use_run_cmd] { + return 0 +} + +standard_testfile + +if {[build_executable "failed to prepare" $testfile $srcfile debug]} { + return -1 +} + +# This is the name of the GDB script to load. +set x_file ${srcdir}/${subdir}/$testfile.gdb + +# Create context in which the global, GDBFLAGS, will be restored at +# the end of the block. All commands run within the block are +# actually run in the outer context. (This is why 'res' is available +# outside of the save_vars block.) +save_vars { GDBFLAGS } { + # Set flags with which to start GDB. + append GDBFLAGS " -ex \"set height unlimited\"" + append GDBFLAGS " -x \"$x_file\"" + append GDBFLAGS " --args \"$binfile\"" + + # Start GDB with above flags. + set res [gdb_spawn] +} + +set test "load and run script with -x" +if { $res != 0} { + fail $test + return -1 +} + +# The script loaded via -x contains a run command; while running, GDB +# is expected to print three messages from dprintf breakpoints along +# with three interspersed messages from an ordinary breakpoint (which +# was set up with a continue command). Set up pattern D to match +# output from hitting the dprintf breakpoint and B for the ordinary +# breakpoint. Then set PAT to contain the entire pattern of expected +# output from the interspersed dprintf and ordinary breakpoints along +# with some (additional) expected output from the dprintf breakpoints, +# i.e. 0, 1, and 2. +set d "dprintf in increment.., vi=" +set b "Breakpoint ., inc_vi" +set pat "${d}0.*?$b.*?${d}1.*?$b.*?${d}2.*?$b.*?" + +proc do_test {cmd test} { + gdb_test $cmd "$::pat$::inferior_exited_re normally.*" $test +} + +# Check output from running script with -x +do_test "" $test + +# Restart GDB and 'source' the script; this will (still) run the program +# due to the 'run' command in the script. +clean_restart $binfile +do_test "source $x_file" "load and run script using source command" + +# This should leave us at the gdb prompt; Run program again using +# already established breakpoints, i.e. those loaded from the +# script. Prior to fixing PR 28308, this was the only test that +# would pass. +do_test "run" "run again" diff --git a/gdb/testsuite/gdb.base/dprintf-execution-x-script.gdb b/gdb/testsuite/gdb.base/dprintf-execution-x-script.gdb new file mode 100644 index 0000000..83e7f21 --- /dev/null +++ b/gdb/testsuite/gdb.base/dprintf-execution-x-script.gdb @@ -0,0 +1,21 @@ +# Copyright 2021 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/>. */ + +dprintf increment, "dprintf in increment(), vi=%d\n", vi +break inc_vi +commands + continue +end +run |