Automatic Copyright Year update after running gdb/copyright.py
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / auto-connect-native-target.exp
CommitLineData
88b9d363 1# Copyright 2014-2022 Free Software Foundation, Inc.
6a3cb8e8
PA
2
3# This program is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 3 of the License, or
6# (at your option) any later version.
7#
8# This program is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16# Test "set auto-connect-native-target off" and "target native" on
17# native targets.
18
19standard_testfile
20
21if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
22 return -1
23}
24
25# Whether this GDB is configured with a "native" target.
26set have_native 0
27
28set test "help target native"
29gdb_test_multiple $test $test {
90a45c4d 30 -re "Undefined target command.*$gdb_prompt $" {
6a3cb8e8
PA
31 set have_native 0
32 }
33 -re "Native process.*$gdb_prompt $" {
34 set have_native 1
35 }
36}
37
38if { !$have_native } {
bc6c7af4 39 unsupported "no \"target native\" support."
6a3cb8e8
PA
40 return
41}
42
43# Returns the topmost target pushed on the target stack. TEST is used
44# as test message.
45
46proc get_topmost_target {test} {
47 global gdb_prompt
48
49 set topmost "unknown"
50
51 gdb_test_multiple "maint print target-stack" $test {
52 -re "The current target stack is:\r\n - (\[^ \]+) .*$gdb_prompt $" {
53 set topmost $expect_out(1,string)
54 pass $test
55 }
56 }
57
58 return $topmost
59}
60
61set topmost [get_topmost_target "check whether a target is already connected"]
62
63# Testing against the extended-remote board, for example?
64if { $topmost != "exec" } {
bc6c7af4 65 unsupported "already connected to target $topmost."
6a3cb8e8
PA
66 return
67}
68
69# Check which target this board connects to. If testing with a native
70# target board, this should cause the native target to auto connect.
71if ![runto_main] then {
bc6c7af4 72 fail "can't run to main"
6a3cb8e8
PA
73 return 0
74}
75
76# Returns true if the native target is pushed on the target stack.
77# TEST is used as test message.
78
79proc check_native_target {test} {
80 global gdb_prompt
81
82 gdb_test_multiple "maint print target-stack" $test {
83 -re " native .*$gdb_prompt $" {
84 pass $test
85 return 1
86 }
87 -re "$gdb_prompt $" {
88 pass $test
89 }
90 }
91
92 return 0
93}
94
95# Testing against a remote board, for example?
96if { ![check_native_target "check whether board tests the native target"] } {
bc6c7af4 97 unsupported "not testing the native target."
6a3cb8e8
PA
98 return
99}
100
101# Kill program. TEST is used as test message.
102
103proc kill_program {test} {
104 global gdb_prompt
105
106 gdb_test_multiple "kill" $test {
107 -re "Kill the program being debugged\\? .y or n. $" {
108 send_gdb "y\n"
109 exp_continue
110 }
111 -re "$gdb_prompt $" {
112 pass $test
113 }
114 }
115}
116
117# Kill the program. This should pop the target. The "start" test
118# below will fail otherwise.
119kill_program "kill"
120
121# Now prevent the native target from auto connecting.
122gdb_test_no_output "set auto-connect-native-target off"
123
124# Commands that rely on the native target auto-connecting should no longer work.
125gdb_test "start" "Don't know how to run.*" "start no longer works"
126
127# Explicitly connect to the native target.
128gdb_test "target native" \
129 "Done. Use the \"run\" command to start a process.*" \
130 "explicitly connect to the native target"
131
132proc test_native_target_remains_pushed {} {
133 gdb_test "maint print target-stack" \
134 "The current target stack is:\r\n .* native .* exec .*" \
135 "native target remains pushed"
136}
137
138# Test a set of "inferior gone" scenarios, making sure the target
139# remains pushed.
140
141with_test_prefix "kill" {
11af934b 142 gdb_test "start" "main.*"
6a3cb8e8
PA
143
144 kill_program "kill"
145
146 test_native_target_remains_pushed
147}
148
149with_test_prefix "detach" {
150 gdb_test "start" "main.*"
151
152 set test "detach"
153 gdb_test_multiple $test $test {
154 -re "Detach the program being debugged\\? .y or n. $" {
155 send_gdb "y\n"
156 exp_continue
157 }
158 -re "$gdb_prompt $" {
159 pass $test
160 }
161 }
162
163 test_native_target_remains_pushed
164}
165
166with_test_prefix "run to exit" {
167 gdb_test "start" "Temporary breakpoint .* main .*"
168
169 gdb_test "c" "$inferior_exited_re normally.*"
170
171 test_native_target_remains_pushed
172}
173
174# Now test disconnecting. Commands that rely on the native target
175# auto-connecting should no longer work (again) after this.
176
177with_test_prefix "disconnect" {
178 gdb_test "start" "Temporary breakpoint .* main .*"
179
180 set test "disconnect"
181 gdb_test_multiple $test $test {
182 -re "A program is being debugged already.* .y or n. $" {
183 send_gdb "y\n"
184 exp_continue
185 }
186 -re "$gdb_prompt $" {
187 pass $test
188 }
189 }
190
191 set topmost \
192 [get_topmost_target "check whether the target is no longer connected"]
193
194 set test "no longer connected to a target"
195 if { $topmost == "exec" } {
196 pass $test
197 } else {
198 fail $test
199 }
200
201 gdb_test "start" "Don't know how to run.*" "start no longer works"
202}
203
204# Reenable auto-connecting to the native target. Plain "start" should
205# start working again.
206gdb_test_no_output "set auto-connect-native-target on"
207
208gdb_test "start" "Temporary breakpoint .* main .*" \
209 "start auto-connects to the native target after reenabling auto-connect"
This page took 1.055795 seconds and 4 git commands to generate.