| # 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" |
| } |
| } |