aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.multi/gdb-settings.exp
blob: f8e9aaf3e2679ed546bebd4ead8248bb5d09e127 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# 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"
}

# 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.*"

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

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

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