From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 61D343857436 for ; Sat, 2 Oct 2021 01:01:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 61D343857436 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-237-8mqGVvqEMq20rwZM8Lpt6w-1; Fri, 01 Oct 2021 21:01:26 -0400 X-MC-Unique: 8mqGVvqEMq20rwZM8Lpt6w-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7FFBA1006AA2 for ; Sat, 2 Oct 2021 01:01:24 +0000 (UTC) Received: from f34-1.lan (ovpn-112-47.phx2.redhat.com [10.3.112.47]) by smtp.corp.redhat.com (Postfix) with ESMTP id 560691972D; Sat, 2 Oct 2021 01:01:24 +0000 (UTC) From: Kevin Buettner To: gdb-patches@sourceware.org Subject: [PATCH 2/2] Test case for Bug 28308 Date: Fri, 1 Oct 2021 18:00:54 -0700 Message-Id: <20211002010054.1546736-3-kevinb@redhat.com> In-Reply-To: <20211002010054.1546736-1-kevinb@redhat.com> References: <20211002010054.1546736-1-kevinb@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII" X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 02 Oct 2021 01:01:33 -0000 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. --- .../gdb.base/dprintf-execution-x-script.c | 53 ++++++++++ .../gdb.base/dprintf-execution-x-script.exp | 97 +++++++++++++++++++ .../gdb.base/dprintf-execution-x-script.gdb | 21 ++++ 3 files changed, 171 insertions(+) create mode 100644 gdb/testsuite/gdb.base/dprintf-execution-x-script.c create mode 100644 gdb/testsuite/gdb.base/dprintf-execution-x-script.exp create mode 100644 gdb/testsuite/gdb.base/dprintf-execution-x-script.gdb 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 00000000000..339541337b3 --- /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 . */ + +#include +#include + +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 00000000000..3aa758e0b7b --- /dev/null +++ b/gdb/testsuite/gdb.base/dprintf-execution-x-script.exp @@ -0,0 +1,97 @@ +# 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 . */ + +# 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 + +# Make sure that there's no running gdb. It's not clear to me +# that this is necessary, but a search shows that all other uses of +# gdb_spawn first do a gdb_exit. +gdb_exit + +# 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_multiple $cmd $test { + -re "$::pat$::inferior_exited_re normally.*$::gdb_prompt $" { + pass $test + } + -re "Don't know how to run.*$::gdb_prompt $" { + unsupported $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 00000000000..83e7f21da42 --- /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 . */ + +dprintf increment, "dprintf in increment(), vi=%d\n", vi +break inc_vi +commands + continue +end +run -- 2.31.1