From patchwork Tue Jul 10 21:39:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Waroquiers X-Patchwork-Id: 28306 Received: (qmail 58067 invoked by alias); 10 Jul 2018 21:39:53 -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 57934 invoked by uid 89); 10 Jul 2018 21:39:52 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-27.2 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=288 X-HELO: mailsec114.isp.belgacom.be Received: from mailsec114.isp.belgacom.be (HELO mailsec114.isp.belgacom.be) (195.238.20.110) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 10 Jul 2018 21:39:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skynet.be; i=@skynet.be; q=dns/txt; s=securemail; t=1531258789; x=1562794789; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=IX0EFyDsnfhk/ZmJ3ox4NMoOgb7a0kZP4kFnxd/GY4c=; b=vY+RKyAu1+hPfDOb8DnjF8Xs5y4zs9Z8Q/3hz7AJKBmkt93WRrFX5q2R JMgSg28aYAEAAwSgh3obXdPwW7jVEQ==; Received: from 160.177-177-91.adsl-dyn.isp.belgacom.be (HELO md.home) ([91.177.177.160]) by relay.skynet.be with ESMTP/TLS/DHE-RSA-AES128-GCM-SHA256; 10 Jul 2018 23:39:32 +0200 From: Philippe Waroquiers To: gdb-patches@sourceware.org Cc: Philippe Waroquiers Subject: [RFA_v4 6/8] Add a test for 'frame apply' Date: Tue, 10 Jul 2018 23:39:24 +0200 Message-Id: <20180710213926.32240-7-philippe.waroquiers@skynet.be> In-Reply-To: <20180710213926.32240-1-philippe.waroquiers@skynet.be> References: <20180710213926.32240-1-philippe.waroquiers@skynet.be> X-IsSubscribed: yes Add a test for 'frame apply' gdb/testsuite/ChangeLog 2018-07-09 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 | 217 ++++++++++++++++++++++++++ 2 files changed, 288 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..9f340e5615 --- /dev/null +++ b/gdb/testsuite/gdb.base/frameapply.exp @@ -0,0 +1,217 @@ +# 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 . + + +# Test 'frame apply [all | COUNT | -COUNT | level LEVEL...] [FLAG]... COMMAND'. + +standard_testfile + +if { [prepare_for_testing "failed to prepare" ${testfile}] } { + return -1 +} + +clean_restart ${binfile} + + +if ![runto setup_done] then { + fail "can't run to setup_done" + return 0 +} + +set any "\[^\r\n\]*" +set ws "\[ \t\]\+" +set number "\[0-9]\+" + + +# Check all | COUNT | -COUNT | level LEVEL... with a simple command. +with_test_prefix "simple command" { + foreach_with_prefix frame_apply_args { + "all" + "6" + "-6" + "level 0-5" + "level 0-3 4-5" + "level 0 1-2 3-5" + "level 0 1 2 3 4 5" + "level 0-0 1-1 2-2 3-3 4-4 5-5" } { + set cmd "frame apply $frame_apply_args p /x 20" + gdb_test $cmd \ + [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" + } +} + +# Check frame apply on 3 innermost frames. +with_test_prefix "innermost 3" { + foreach_with_prefix frame_apply_args { + "3" + "level 0-2" } { + set cmd "frame apply $frame_apply_args p /x 20" + gdb_test $cmd \ + [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" + } +} + +# Check frame apply on 3 outermost frames. +with_test_prefix "outermost 3" { + foreach_with_prefix frame_apply_args { + "-3" } { + set cmd "frame apply $frame_apply_args p /x 20" + gdb_test $cmd \ + [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. +with_test_prefix "!cont !silent flags" { + foreach_with_prefix frame_apply_args { + "all" + "level 0-5" + } { + set cmd "frame apply $frame_apply_args p f3arg" + gdb_test $cmd \ + [multi_line \ + "#0${ws}setup_done ${any}" \ + "No symbol \\\"f3arg\\\" in current context." \ + ] \ + "run a failing command that aborts frame apply" + } +} + +with_test_prefix "cont !silent flags" { + foreach_with_prefix frame_apply_args { + "all -c" + "level 0-5 -c"} { + set cmd "frame apply $frame_apply_args p f3arg" + gdb_test $cmd \ + [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" + } +} + +with_test_prefix "!cont silent flags" { + foreach_with_prefix cmd_and_args { + "frame apply all -s" + "faas" + "frame apply level 0-5 -s"} { + set cmd "$cmd_and_args 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 quietness. +with_test_prefix "!quiet flag" { + foreach_with_prefix frame_apply_args { + "2" + "level 0-1"} { + set cmd "frame apply $frame_apply_args p /x 20" + gdb_test $cmd \ + [multi_line \ + "#0${ws}setup_done ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + "#1${ws}${any} f1 ${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "run a command, printing location" + } +} + +with_test_prefix "quiet flag" { + foreach_with_prefix frame_apply_args { + "2 -q" + "level 0-1 -q"} { + set cmd "frame apply $frame_apply_args p /x 20" + gdb_test $cmd \ + [multi_line \ + "\\\$\[0-9]+ = 0x14${any}" \ + "\\\$\[0-9]+ = 0x14${any}" \ + ] \ + "run a command with -q quiet flag, printing only command results" + } +} + +# Check multiple flags together. +with_test_prefix "quiet silent flags" { + foreach_with_prefix frame_apply_args { + "all -q -s -q" + "level 0-5 -q -s -q"} { + set cmd "frame apply $frame_apply_args p f3arg" + gdb_test $cmd \ + "\\\$\[0-9]+ = 3${any}" \ + "run a command failing in all frames except #3, -s to silently continue, quiet" + } +} + +# Check invalid flag combinations. +gdb_test "frame apply all -c -s p f3arg" \ + "frame apply all: -c and -s are mutually exclusive" \ + "check -c and -s cannot be used simultaneously" + +# Check some cases of missing or wrong args. +gdb_test "frame apply" "Missing COUNT argument." "missing COUNT" +gdb_test "frame apply -c" "Invalid COUNT argument." "invalid COUNT arg" +gdb_test "frame apply level 4-2 p 1" "inverted range" "inverted range" +gdb_test "frame apply level 0-3" \ + "Please specify a command to apply on the selected frames" \ + "missing command"