aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/paginate-execution-startup.exp
blob: 7a4ac50cc95d5c1742bfdbf5427456ad57ef3ec6 (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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# Copyright (C) 2014-2022 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/>.

# A collection of tests related to pagination resulting from running
# execution commands directly from the command line, with "-ex".

standard_testfile

if {[build_executable "failed to prepare" $testfile $srcfile debug] == -1} {
    return -1
}

set file_arg $binfile
if [is_remote host] {
  set file_arg [remote_download host $file_arg]
}

global GDBFLAGS
set saved_gdbflags $GDBFLAGS

# Returns true if the board can 'gdb -ex "start"', false otherwise.

proc probe_can_run_cmdline  {} {
    global srcfile file_arg
    global saved_gdbflags GDBFLAGS
    global gdb_prompt

    set GDBFLAGS $saved_gdbflags
    append GDBFLAGS " -ex \"set height 0\""
    append GDBFLAGS " -ex \"start\""
    append GDBFLAGS " --args \"$file_arg\""

    with_test_prefix "probe support" {
	set test "run to main"

	gdb_exit
	set res [gdb_spawn]
	if { $res != 0} {
	    fail $test
	    return -1
	}

	set res -1
	gdb_test_multiple "" $test {
	    -re "main .* at .*$srcfile.*$gdb_prompt $" {
		set res 1
		pass $test
	    }
	    -re "Don't know how to run.*$gdb_prompt $" {
		set res 0
		unsupported $test
	    }
	}

	# In case the board file wants to send further commands.
	gdb_test_no_output "set height unlimited"
	return $res
    }
}

# Check that we handle pagination correctly when it triggers due to an
# execution command entered directly on the command line.

proc test_fg_execution_pagination_return {} {
    global file_arg
    global saved_gdbflags GDBFLAGS
    global gdb_prompt pagination_prompt

    set GDBFLAGS $saved_gdbflags
    append GDBFLAGS " -ex \"set height 2\""
    append GDBFLAGS " -ex \"start\""
    append GDBFLAGS " --args \"$file_arg\""

    with_test_prefix "return" {
	set test "run to pagination"

	gdb_exit
	set res [gdb_spawn]
	if { $res != 0} {
	    fail $test
	    return $res
	}
	gdb_test_multiple "" $test {
	    -re "$pagination_prompt$" {
		pass $test
	    }
	    -re "$gdb_prompt $" {
		fail $test
	    }
	}

	send_gdb "\n"

	set saw_pagination_prompt 0
	set test "send \\n to GDB"
	gdb_test_multiple "" $test {
	    -re "$pagination_prompt$" {
		set saw_pagination_prompt 1
		send_gdb "\n"
		exp_continue
	    }
	    -re "$gdb_prompt $" {
		gdb_assert $saw_pagination_prompt $test
	    }
	}

	gdb_test "p 1" " = 1" "GDB accepts further input"

	# In case the board file wants to send further commands.
	gdb_test_no_output "set height unlimited"
    }
}

# Check that we handle canceling pagination correctly when it triggers
# due to an execution command entered directly on the command line.

proc test_fg_execution_pagination_cancel { how } {
    global file_arg
    global saved_gdbflags GDBFLAGS
    global gdb_prompt pagination_prompt

    set GDBFLAGS $saved_gdbflags

    append GDBFLAGS " -ex \"set height 2\""
    append GDBFLAGS " -ex \"start\""
    append GDBFLAGS " --args \"$file_arg\""

    with_test_prefix "cancel with $how" {
	set test "run to pagination"

	gdb_exit
	set res [gdb_spawn]
	if { $res != 0} {
	    fail $test
	    return $res
	}
	gdb_test_multiple "" $test {
	    -re "$pagination_prompt$" {
		pass $test
	    }
	}

	set test "cancel pagination"
	if { $how == "ctrl-c" } {
	    send_gdb "\003"
	} else {
	    send_gdb "q\n"

	}
	gdb_test_multiple "" $test {
	    -re "Quit\r\n$gdb_prompt $" {
		pass $test
	    }
	}

	gdb_test "p 1" " = 1" "GDB accepts further input"

	# In case the board file wants to send further commands.
	gdb_test_no_output "set height unlimited"
    }
}

if {[probe_can_run_cmdline] > 0} {
    test_fg_execution_pagination_return
    if ![target_info exists gdb,nointerrupts] {
       test_fg_execution_pagination_cancel "ctrl-c"
    }
    test_fg_execution_pagination_cancel "quit"
}

set GDBFLAGS $saved_gdbflags