# This testcase is part of GDB, the GNU debugger. # Copyright 2023-2024 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 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" } }