From 3275ef477498e0500d7ea440f1bc51787acf4610 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 26 Feb 2018 14:30:43 -0500 Subject: [PATCH] Add test for load command 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/ChangeLog | 10 +++++ gdb/testsuite/gdb.base/load-command.c | 22 +++++++++++ gdb/testsuite/gdb.base/load-command.exp | 49 +++++++++++++++++++++++++ gdb/testsuite/lib/gdb.exp | 25 +++++++++---- 4 files changed, 98 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/ChangeLog b/gdb/testsuite/ChangeLog index be173ec34b8..44435570d9c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2018-02-26 Simon Marchi + + * 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. + 2018-02-26 Tom Tromey PR python/16497: diff --git a/gdb/testsuite/gdb.base/load-command.c b/gdb/testsuite/gdb.base/load-command.c new file mode 100644 index 00000000000..ee73e2be170 --- /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 00000000000..61ca272f17a --- /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 e90c4614032..3cd10dcafbb 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. -- 2.30.2