]>
Commit | Line | Data |
---|---|---|
1ba1ac88 AB |
1 | # This testcase is part of GDB, the GNU debugger. |
2 | # | |
3666a048 | 3 | # Copyright 2019-2021 Free Software Foundation, Inc. |
1ba1ac88 AB |
4 | # |
5 | # This program is free software; you can redistribute it and/or modify | |
6 | # it under the terms of the GNU General Public License as published by | |
7 | # the Free Software Foundation; either version 3 of the License, or | |
8 | # (at your option) any later version. | |
9 | # | |
10 | # This program is distributed in the hope that it will be useful, | |
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | # GNU General Public License for more details. | |
14 | # | |
15 | # You should have received a copy of the GNU General Public License | |
16 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 | ||
18 | # This test script exposes a bug where, if gdbserver dies while GDB is | |
19 | # sourcing a python command like 'gdb.execute ("continue")', then GDB | |
20 | # will deadlock. | |
21 | ||
22 | load_lib gdbserver-support.exp | |
23 | ||
24 | standard_testfile multi-ui-errors.c | |
25 | ||
26 | if {[skip_gdbserver_tests]} { | |
27 | return 0 | |
28 | } | |
29 | ||
30 | if {[build_executable "failed to prepare" ${testfile} \ | |
31 | ${srcfile}] == -1} { | |
32 | return -1 | |
33 | } | |
34 | ||
35 | # Start gdbserver. | |
36 | set res [gdbserver_spawn "${binfile}"] | |
37 | set gdbserver_protocol [lindex $res 0] | |
38 | set gdbserver_gdbport [lindex $res 1] | |
39 | set gdbserver_pid [exp_pid -i $server_spawn_id] | |
40 | ||
41 | # Generate a python script we will later source. | |
42 | set file1 [standard_output_file file1.py] | |
43 | set fd [open "$file1" w] | |
44 | puts $fd \ | |
45 | "import gdb | |
46 | ||
47 | def do_gdb_stuff (): | |
48 | gdb.execute ('target $gdbserver_protocol $gdbserver_gdbport') | |
49 | gdb.execute ('continue') | |
50 | ||
51 | do_gdb_stuff()" | |
52 | close $fd | |
53 | ||
54 | # Now start GDB, sourcing the python command file we generated above. | |
55 | # Set the height and width so we don't end up at a paging prompt. | |
56 | if {[gdb_spawn_with_cmdline_opts \ | |
57 | "-quiet -iex \"set height 0\" -iex \"set width 0\" -ex \"source $file1\""] != 0} { | |
58 | fail "spawn" | |
59 | return | |
60 | } | |
61 | ||
62 | # Wait for the inferior to start up. | |
63 | with_spawn_id $server_spawn_id { | |
64 | gdb_test_multiple "" "ensure inferior is running" { | |
65 | -re "@@XX@@ Inferior Starting @@XX@@" { | |
66 | pass $gdb_test_name | |
67 | } | |
68 | timeout { | |
195a8287 | 69 | fail $gdb_test_name |
1ba1ac88 AB |
70 | } |
71 | } | |
72 | } | |
73 | ||
74 | # Now kill the gdbserver. | |
75 | remote_exec target "kill -9 $gdbserver_pid" | |
76 | ||
77 | # Wait for GDB to return to a prompt. | |
78 | gdb_test_multiple "" "landed at prompt after gdbserver dies" { | |
79 | -re "$gdb_prompt $" { | |
80 | pass $gdb_test_name | |
81 | } | |
82 | timeout { | |
83 | fail "$gdb_test_name (timeout)" | |
84 | } | |
85 | } | |
86 | ||
87 | # Run a simple command to ensure we can interact with GDB. | |
88 | gdb_test "echo hello\\n" "hello" "can we interact with gdb" |