| # 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" | 
 |     gdb_test_no_output "set cwd /inf${inf}-cwd" | 
 |     gdb_test_no_output "set inferior-tty /inf${inf}-tty" | 
 | } | 
 |  | 
 | # 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.*" | 
 |  | 
 |     gdb_test "with cwd tmp-value -- print 1" " = 1" | 
 |     gdb_test "show cwd" "/inf${inf}-cwd.*" | 
 |  | 
 |     gdb_test "with inferior-tty tmp-value -- print 1" " = 1" | 
 |     gdb_test "show inferior-tty" "/inf${inf}-tty.*" | 
 |  | 
 |     # 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\"" | 
 |  | 
 | 	gdb_test {print $_gdb_setting_str("cwd")} "\"/inf${inf}-cwd\"" | 
 | 	gdb_test {print $_gdb_setting("cwd")} "\"/inf${inf}-cwd\"" | 
 |  | 
 | 	gdb_test {print $_gdb_setting_str("inferior-tty")} \ | 
 | 	    "\"/inf${inf}-tty\"" | 
 | 	gdb_test {print $_gdb_setting("inferior-tty")} \ | 
 | 	    "\"/inf${inf}-tty\"" | 
 |     } | 
 |  | 
 |     # Check the settings can be read from Python. | 
 |     if { $run_python_tests } { | 
 | 	gdb_test "python print(gdb.parameter('args'))" "inf${inf}-args" | 
 | 	gdb_test "python print(gdb.parameter('cwd'))" "/inf${inf}-cwd" | 
 | 	gdb_test "python print(gdb.parameter('inferior-tty'))" \ | 
 | 	    "/inf${inf}-tty" | 
 |     } | 
 |  | 
 |     # Check the settings can be read from Guile. | 
 |     if { $run_guile_tests } { | 
 | 	gdb_test "guile (print (parameter-value \"args\"))" \ | 
 | 	    "inf${inf}-args" | 
 | 	gdb_test "guile (print (parameter-value \"cwd\"))" \ | 
 | 	    "/inf${inf}-cwd" | 
 | 	gdb_test "guile (print (parameter-value \"inferior-tty\"))" \ | 
 | 	    "/inf${inf}-tty" | 
 |     } | 
 | } |