From patchwork Sun Feb 25 20:43:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 26050 Received: (qmail 114186 invoked by alias); 25 Feb 2018 20:44:07 -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 114168 invoked by uid 89); 25 Feb 2018 20:44:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.2 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_SOFTFAIL autolearn=ham version=3.3.2 spammy=Manually X-HELO: barracuda.ebox.ca Received: from barracuda.ebox.ca (HELO barracuda.ebox.ca) (96.127.255.19) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 25 Feb 2018 20:44:05 +0000 X-ASG-Debug-ID: 1519591436-0c856e618af1480001-fS2M51 Received: from smtp.ebox.ca (smtp.electronicbox.net [96.127.255.82]) by barracuda.ebox.ca with ESMTP id q2WUH3iHMFXAwx7h (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 25 Feb 2018 15:43:57 -0500 (EST) X-Barracuda-Envelope-From: simon.marchi@polymtl.ca X-Barracuda-RBL-Trusted-Forwarder: 96.127.255.82 Received: from simark.lan (192-222-251-162.qc.cable.ebox.net [192.222.251.162]) by smtp.ebox.ca (Postfix) with ESMTP id CDCE5441D64; Sun, 25 Feb 2018 15:43:56 -0500 (EST) From: Simon Marchi X-Barracuda-Effective-Source-IP: 192-222-251-162.qc.cable.ebox.net[192.222.251.162] X-Barracuda-Apparent-Source-IP: 192.222.251.162 X-Barracuda-RBL-IP: 192.222.251.162 To: gdb-patches@sourceware.org Cc: Tom Tromey , Simon Marchi Subject: [PATCH] Add test for load command Date: Sun, 25 Feb 2018 15:43:54 -0500 X-ASG-Orig-Subj: [PATCH] Add test for load command Message-Id: <20180225204354.6307-1-simon.marchi@polymtl.ca> In-Reply-To: <20180225173703.6675-1-tom@tromey.com> References: <20180225173703.6675-1-tom@tromey.com> X-Barracuda-Connect: smtp.electronicbox.net[96.127.255.82] X-Barracuda-Start-Time: 1519591437 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://96.127.255.19:443/cgi-mod/mark.cgi X-Barracuda-Scan-Msg-Size: 5970 X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=8.0 tests= X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.48315 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- X-IsSubscribed: yes [[Hi Tom, What do you think of adding this test to check this code path?]] There doesn't seem to by any test for the load command. I suggest to add this test, so that we can have a minimum of confidence we don't break it completely while refactoring the code that implements it. gdb/testsuite/ChangeLog: * gdb.base/load-command.c: New file. * gdb.base/load-command.exp: New file. * lib/gdb.exp (gdb_is_target_remote_prompt): Rename to... (gdb_is_target_1): ...this, and generalize for other targets than just remote. (gdb_is_target_remote): Use gdb_is_target_1. (gdb_is_target_native): use gdb_is_target_1. --- gdb/testsuite/gdb.base/load-command.c | 22 +++++++++++++++ gdb/testsuite/gdb.base/load-command.exp | 49 +++++++++++++++++++++++++++++++++ gdb/testsuite/lib/gdb.exp | 25 +++++++++++------ 3 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 gdb/testsuite/gdb.base/load-command.c create mode 100644 gdb/testsuite/gdb.base/load-command.exp diff --git a/gdb/testsuite/gdb.base/load-command.c b/gdb/testsuite/gdb.base/load-command.c new file mode 100644 index 0000000000..ee73e2be17 --- /dev/null +++ b/gdb/testsuite/gdb.base/load-command.c @@ -0,0 +1,22 @@ +/* This test program 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 . */ + +int the_variable = 0x1234; + +int main () +{ +} diff --git a/gdb/testsuite/gdb.base/load-command.exp b/gdb/testsuite/gdb.base/load-command.exp new file mode 100644 index 0000000000..61ca272f17 --- /dev/null +++ b/gdb/testsuite/gdb.base/load-command.exp @@ -0,0 +1,49 @@ +# 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 the "load" command. + +standard_testfile + +# Disable generation of position independent executable (PIE). Otherwise, we +# would have to manually specify an offset to load. + +set opts {debug ldflags=-no-pie} + +if [prepare_for_testing "failed to prepare" $testfile $srcfile $opts] { + return -1 +} + +if ![runto_main] { + fail "can't run to main" + return -1 +} + +# The native target does not support the load command. +if [gdb_is_target_native] { + unsupported "the native target does not support the load command" + return +} + +# Manually change the value of the_variable. +gdb_test "print/x the_variable" " = 0x1234" "check initial value of the_variable" +gdb_test_no_output "set the_variable = 0x5555" "manually change the_variable" +gdb_test "print/x the_variable" " = 0x5555" "check manually changed value of the_variable" + +# Re-load the binary using the load command. +gdb_test "load ${binfile}" ".*Loading section .data.*Transfer rate:.*" "re-load binary" + +# Re-loading the binary should have reset the variable value. +gdb_test "print/x the_variable" " = 0x1234" "check initial value of the_variable" diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index e90c461403..3cd10dcafb 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -3154,14 +3154,19 @@ proc skip_compile_feature_tests {} { return $result } -# Helper for gdb_is_target_remote. PROMPT_REGEXP is the expected -# prompt. +# Helper for gdb_is_target_* procs. TARGET_NAME is the name of the target +# we're looking for (used to build the test name). TARGET_STACK_REGEXP +# is a regexp that will match the output of "maint print target-stack" if +# the target in question is currently pushed. -proc gdb_is_target_remote_prompt { prompt_regexp } { +proc gdb_is_target_1 { target_name target_stack_regexp } { + global gdb_prompt + + set prompt_regexp "$gdb_prompt $" - set test "probe for target remote" + set test "probe for target ${target_name}" gdb_test_multiple "maint print target-stack" $test { - -re ".*emote serial target in gdb-specific protocol.*$prompt_regexp" { + -re "${target_stack_regexp}${prompt_regexp}" { pass $test return 1 } @@ -3175,10 +3180,14 @@ proc gdb_is_target_remote_prompt { prompt_regexp } { # Check whether we're testing with the remote or extended-remote # targets. -proc gdb_is_target_remote {} { - global gdb_prompt +proc gdb_is_target_remote { } { + return [gdb_is_target_1 "remote" ".*emote serial target in gdb-specific protocol.*"] +} + +# Check whether we're testing with the native target. - return [gdb_is_target_remote_prompt "$gdb_prompt $"] +proc gdb_is_target_native { } { + return [gdb_is_target_1 "native" ".*native \\(Native process\\).*"] } # Return the effective value of use_gdb_stub.