summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.multi/gdb-settings.exp
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.multi/gdb-settings.exp')
-rw-r--r--gdb/testsuite/gdb.multi/gdb-settings.exp100
1 files changed, 100 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.multi/gdb-settings.exp b/gdb/testsuite/gdb.multi/gdb-settings.exp
new file mode 100644
index 00000000000..407bc55b1f2
--- /dev/null
+++ b/gdb/testsuite/gdb.multi/gdb-settings.exp
@@ -0,0 +1,100 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2023 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 <http://www.gnu.org/licenses/>.
+
+# Test per-inferior settings in a multi-inferior debug session. Check
+# that the settings really are per-inferior.
+
+load_lib gdb-python.exp
+load_lib gdb-guile.exp
+
+standard_testfile
+
+if {[build_executable "failed to prepare" $testfile $srcfile]} {
+ return -1
+}
+
+# Cache whether we can run Python and/or Guile tests.
+set run_python_tests [allow_python_tests]
+set run_guile_tests [allow_guile_tests]
+
+# The $_gdb_setting/$_gdb_setting_str tests require running inferiors,
+# because they allocate memory in the inferiors for the produced
+# values. Since we need two inferiors for this test, we can't run
+# them with stub boards (e.g. gdbserver with non-extended remote
+# protocol), since they can only run one inferior at a time. We can
+# still run the other tests with multiple inferiors, they just won't
+# be running inferiors.
+set run [expr {![use_gdb_stub]}]
+
+# List of inferior numbers to run tests for.
+set inferiors {1 2}
+
+# Start all the inferiors.
+clean_restart $binfile
+foreach_with_prefix inf $inferiors {
+ if { $inf > 1 } {
+ gdb_test "add-inferior -exec $binfile" "Added inferior 2.*" \
+ "add second inferior"
+ }
+
+ if { $run } {
+ if { ![runto_main] } {
+ return -1
+ }
+ }
+}
+
+# Setup some guile helpers -- if we plan to run the guile tests.
+if { $run_guile_tests } {
+ gdb_install_guile_utils
+ gdb_install_guile_module
+}
+
+# Update the settings for each inferior.
+foreach_with_prefix inf $inferiors {
+ gdb_test "inferior ${inf}" "Switching to inferior ${inf}.*" \
+ "switch to inferior ${inf} before set"
+ gdb_test_no_output "set args inf${inf}-args"
+}
+
+# Check settings are still correct for each inferior.
+foreach_with_prefix inf $inferiors {
+ gdb_test "inferior ${inf}" "Switching to inferior ${inf}.*" \
+ "switch back to inferior ${inf}"
+
+ # Check that using 'with' doesn't corrupt the setting value.
+ gdb_test "with args tmp-value -- print 1" " = 1"
+ gdb_test "show args" "inf${inf}-args.*"
+
+ # If the inferiors are running check $_gdb_setting_str and
+ # $_gdb_setting return the correct values.
+ if { $run } {
+ gdb_test {print $_gdb_setting_str("args")} "\"inf${inf}-args\""
+ gdb_test {print $_gdb_setting("args")} "\"inf${inf}-args\""
+ }
+
+ # Check the settings can be read from Python.
+ if { $run_python_tests } {
+ gdb_test "python print(gdb.parameter('args'))" "inf${inf}-args"
+ }
+
+ # Check the settings can be read from Guile.
+ if { $run_guile_tests } {
+ gdb_test "guile (print (parameter-value \"args\"))" \
+ "inf${inf}-args"
+ }
+}