From patchwork Tue Jun 5 20:49:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Waroquiers X-Patchwork-Id: 27650 Received: (qmail 87622 invoked by alias); 5 Jun 2018 20:49:57 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 87527 invoked by uid 89); 5 Jun 2018 20:49:56 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.6 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=0x X-HELO: mailsec118.isp.belgacom.be Received: from mailsec118.isp.belgacom.be (HELO mailsec118.isp.belgacom.be) (195.238.20.114) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 05 Jun 2018 20:49:54 +0000 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CdCABz9hZb/2wz8VFcHgEGDINDJD4Fa?= =?us-ascii?q?BIojFuMEAGCKQGUL4FkCx8MAYFLgnUCgh8iNxUBAgEBAQEBAQIBaxwMgjUiglI?= =?us-ascii?q?GViMQPxI5HhkJgxkCggOpbIRYg2qBaIoWP4NmggCBO4Eyhg8Ch0KGE4pcQwcCg?= =?us-ascii?q?WeMdguNICuKboYNgVcigVJtgxYJghcXiFmFQD0weAEaAY41AQE?= X-IPAS-Result: =?us-ascii?q?A2CdCABz9hZb/2wz8VFcHgEGDINDJD4FaBIojFuMEAGCKQG?= =?us-ascii?q?UL4FkCx8MAYFLgnUCgh8iNxUBAgEBAQEBAQIBaxwMgjUiglIGViMQPxI5HhkJg?= =?us-ascii?q?xkCggOpbIRYg2qBaIoWP4NmggCBO4Eyhg8Ch0KGE4pcQwcCgWeMdguNICuKboY?= =?us-ascii?q?NgVcigVJtgxYJghcXiFmFQD0weAEaAY41AQE?= Received: from 108.51-241-81.adsl-dyn.isp.belgacom.be (HELO md.home) ([81.241.51.108]) by relay.skynet.be with ESMTP/TLS/DHE-RSA-AES128-GCM-SHA256; 05 Jun 2018 22:49:23 +0200 From: Philippe Waroquiers To: gdb-patches@sourceware.org Cc: Philippe Waroquiers Subject: [RFA_v2 6/8] Add a test for 'frame apply' Date: Tue, 5 Jun 2018 22:49:03 +0200 Message-Id: <20180605204905.30612-7-philippe.waroquiers@skynet.be> In-Reply-To: <20180605204905.30612-1-philippe.waroquiers@skynet.be> References: <20180605204905.30612-1-philippe.waroquiers@skynet.be> X-IsSubscribed: yes gdb/testsuite/ChangeLog 2018-06-05 Philippe Waroquiers * gdb.base/frameapply.c: New file. * gdb.base/frameapply.exp: New file. --- gdb/testsuite/gdb.base/frameapply.c | 71 +++++++++++++++ gdb/testsuite/gdb.base/frameapply.exp | 167 ++++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 gdb/testsuite/gdb.base/frameapply.c create mode 100644 gdb/testsuite/gdb.base/frameapply.exp diff --git a/gdb/testsuite/gdb.base/frameapply.c b/gdb/testsuite/gdb.base/frameapply.c new file mode 100644 index 0000000000..dccf4031ed --- /dev/null +++ b/gdb/testsuite/gdb.base/frameapply.c @@ -0,0 +1,71 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2018 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 . */ + +static void +setup_done (void) +{ +} + +static int +f1 (int f1arg) +{ + int f1loc; + + f1loc = f1arg - 1; + + setup_done (); + return f1loc; +} + +static int +f2 (int f2arg) +{ + int f2loc; + + f2loc = f1 (f2arg - 1); + + return f2loc; +} + +static int +f3 (int f3arg) +{ + int f3loc; + + f3loc = f2 (f3arg - 1); + + return f3loc; +} + +static int +f4 (int f4arg) +{ + int f4loc; + + f4loc = f3 (f4arg - 1); + + return f4loc; +} + +int +main (void) +{ + int result; + + result = f4 (4); + return 0; +} diff --git a/gdb/testsuite/gdb.base/frameapply.exp b/gdb/testsuite/gdb.base/frameapply.exp new file mode 100644 index 0000000000..4b0cce7ee3 --- /dev/null +++ b/gdb/testsuite/gdb.base/frameapply.exp @@ -0,0 +1,167 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2018 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 . + + +# This test checks 'frame apply [all | COUNT | -COUNT] [FLAGS...] COMMAND' + +standard_testfile + +if { [prepare_for_testing "failed to prepare" ${testfile}] } { + return -1 +} + +clean_restart ${binfile} + + +if ![runto setup_done] then { + gdb_suppress_tests +} + +set any "\[^\r\n\]*" +set ws "\[ \t\]\+" +set number "\[0-9]\+" + +# check all | COUNT | -COUNT with a simple command +gdb_test "frame apply all p /x 20" \ + [multi_line \ + "#0${ws}setup_done ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#1${ws}${any} f1 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#2${ws}${any} f2 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#3${ws}${any} f3 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#4${ws}${any} f4 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#5${ws}${any} main ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "Run a simple command on all frames" + +gdb_test "frame apply 3 p /x 20" \ + [multi_line \ + "#0${ws}setup_done ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#1${ws}${any} f1 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#2${ws}${any} f2 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "Run a simple command on the 3 innermost frames" + +gdb_test "frame apply -3 p /x 20" \ + [multi_line \ + "#3${ws}${any} f3 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#4${ws}${any} f4 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#5${ws}${any} main ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "Run a simple command on the 3 outermost frames" + +# check -c (continue- and -s (silently continue) flags +gdb_test "frame apply all p f3arg" \ + [multi_line \ + "#0${ws}setup_done ${any}" \ + "No symbol \\\"f3arg\\\" in current context." \ + ] \ + "Run a failing command that aborts frame apply" + +gdb_test "frame apply all -c p f3arg" \ + [multi_line \ + "#0${ws}setup_done ${any}" \ + "No symbol \\\"f3arg\\\" in current context." \ + "#1${ws}${any} f1 ${any}" \ + "No symbol \\\"f3arg\\\" in current context." \ + "#2${ws}${any} f2 ${any}" \ + "No symbol \\\"f3arg\\\" in current context." \ + "#3${ws}${any} f3 ${any}" \ + "\\\$\[0-9]+ = 3${any}" \ + "#4${ws}${any} f4 ${any}" \ + "No symbol \\\"f3arg\\\" in current context." \ + "#5${ws}${any} main ${any}" \ + "No symbol \\\"f3arg\\\" in current context." \ + ] \ + "Run a command failing in all frames except #3, -c to continue" + +foreach cmd {"frame apply all -s p f3arg" "faas p f3arg"} { + gdb_test $cmd \ + [multi_line \ + "#3${ws}${any} f3 ${any}" \ + "\\\$\[0-9]+ = 3${any}" \ + ] \ + "Run a command failing in all frames except #3, -s to silently continue" +} + +# check verbosity +gdb_test "frame apply 2 p /x 20" \ + [multi_line \ + "#0${ws}setup_done ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#1${ws}${any} f1 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "Run a command at default verbosity 2, printing location" + +gdb_test "frame apply 2 -q p /x 20" \ + [multi_line \ + "${number}${ws}\\\}${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "${any}${ws}${number}${ws} setup_done ()${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "Run a command at verbosity 1, printing source line" + +gdb_test "frame apply 2 -q -q p /x 20" \ + [multi_line \ + "\\\$\[0-9]+ = 0x14${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "Run a command at verbosity 0, printing only command results" + +gdb_test "frame apply 2 -v p /x 20" \ + [multi_line \ + "#0${ws}0x${any}${ws}in setup_done ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#1${ws}0x${any} in f1 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "Run a command at verbosity 3, printing location and address" + +gdb_test "frame apply 2 -v -v p /x 20" \ + [multi_line \ + "#0${ws}setup_done ${any}" \ + "${number}${ws}\\\}${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#1${ws}${any} f1 ${any}" \ + "${number}${ws} setup_done ()${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "Run a command at verbosity 4, printing location and source line" + +# check multiple flags together +gdb_test "frame apply all -q -s -q p f3arg" \ + "\\\$\[0-9]+ = 3${any}" \ + "Run a command failing in all frames except #3, -s to silently continue, verbosity 0" + +# check invalid flag combinations +gdb_test "frame apply all -c -s p f3arg" \ + "frame apply all: flags c and s are mutually exclusive" \ + "Check c and s cannot be used simultaneously" +