mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
194 lines
5.3 KiB
Plaintext
194 lines
5.3 KiB
Plaintext
# Copyright 2016-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/>.
|
|
|
|
standard_testfile
|
|
|
|
set compile_options "debug"
|
|
if {[build_executable $testfile.exp $testfile ${srcfile} ${compile_options}] == -1} {
|
|
untested "failed to compile"
|
|
return -1
|
|
}
|
|
|
|
# Ensure no output has been sent. Use MESSAGE as test message.
|
|
|
|
proc ensure_no_output {message} {
|
|
global decimal
|
|
|
|
# Run a command and use an anchor to make sure no output appears
|
|
# before the command's expected output.
|
|
gdb_test "print 999" "^print 999\r\n\\\$$decimal = 999" $message
|
|
}
|
|
|
|
# Run a few execution-related commands on CON1, and ensure the proper
|
|
# output, or none, if appropriate, is sent to CON2. CON1_NAME and
|
|
# CON2_NAME are the names of the consoles.
|
|
|
|
proc do_execution_tests {con1 con1_name con2 con2_name} {
|
|
global srcfile
|
|
global decimal
|
|
|
|
set bp_lineno [gdb_get_line_number "set break $con1_name here"]
|
|
|
|
with_spawn_id $con1 {
|
|
gdb_test "next" "global = 1;"
|
|
}
|
|
with_spawn_id $con2 {
|
|
ensure_no_output "next causes no spurious output on other console"
|
|
}
|
|
|
|
with_spawn_id $con1 {
|
|
gdb_test "break $srcfile:$bp_lineno" \
|
|
"Breakpoint $decimal .*$srcfile, line $bp_lineno\\." \
|
|
"set breakpoint"
|
|
}
|
|
with_spawn_id $con2 {
|
|
ensure_no_output "break causes no spurious output on other console"
|
|
}
|
|
|
|
with_spawn_id $con1 {
|
|
gdb_test "continue" "set break $con1_name here .*" "continue to breakpoint"
|
|
}
|
|
|
|
with_spawn_id $con2 {
|
|
set test "breakpoint hit reported on other console"
|
|
gdb_test_multiple "" $test {
|
|
-re "Breakpoint $decimal, .* set break $con1_name here " {
|
|
pass $test
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# The test proper.
|
|
|
|
proc_with_prefix do_test {} {
|
|
global srcfile testfile
|
|
global gdb_prompt
|
|
global gdb_spawn_id
|
|
global gdb_main_spawn_id extra_spawn_id
|
|
|
|
clean_restart $testfile
|
|
|
|
if ![runto_main] {
|
|
return -1
|
|
}
|
|
|
|
gdb_test "new-ui" \
|
|
"Usage: new-ui INTERPRETER TTY" \
|
|
"new-ui without arguments"
|
|
|
|
set test "new-ui does not repeat"
|
|
send_gdb "\n"
|
|
gdb_test_multiple "" $test {
|
|
-re "^\r\n$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
|
|
# Save the main UI's spawn ID.
|
|
set gdb_main_spawn_id $gdb_spawn_id
|
|
|
|
# Create the new PTY for the secondary console UI.
|
|
spawn -pty
|
|
set extra_spawn_id $spawn_id
|
|
set extra_tty_name $spawn_out(slave,name)
|
|
gdb_test_multiple "new-ui console $extra_tty_name" "new-ui" {
|
|
-re "New UI allocated\r\n$gdb_prompt $" {
|
|
}
|
|
}
|
|
|
|
with_spawn_id $extra_spawn_id {
|
|
set test "initial prompt on extra console"
|
|
gdb_test_multiple "" $test {
|
|
-re "$gdb_prompt $" {
|
|
pass $test
|
|
}
|
|
}
|
|
}
|
|
|
|
# Ensure non-execution commands in one console don't cause output
|
|
# in the other consoles.
|
|
with_spawn_id $gdb_main_spawn_id {
|
|
gdb_test "print 1" "^print 1\r\n\\\$1 = 1" "print on main console"
|
|
}
|
|
with_spawn_id $extra_spawn_id {
|
|
gdb_test "print 2" "^print 2\r\n\\\$2 = 2" "print on extra console"
|
|
}
|
|
|
|
# Verify that we get proper queries on the main UI, but that they are
|
|
# auto-answered on secondary UIs.
|
|
with_spawn_id $gdb_main_spawn_id {
|
|
gdb_test "delete" "" "delete all breakpoint on main console" \
|
|
"Delete all breakpoints. .y or n. $" "n"
|
|
}
|
|
with_spawn_id $extra_spawn_id {
|
|
# Check output in two stages in order to override
|
|
# gdb_test_multiple's internal "got interactive prompt" fail
|
|
# that would otherwise match if the expect buffer happens to
|
|
# fill with partial output that ends in "(y or n) ".
|
|
set test "delete all breakpoints on extra console"
|
|
gdb_test_multiple "delete" $test {
|
|
-re "Delete all breakpoints. .y or n. " {
|
|
gdb_test "" \
|
|
".answered Y; input not from terminal." \
|
|
$test
|
|
}
|
|
}
|
|
}
|
|
|
|
# Run a few execution tests with the main console as the driver
|
|
# console.
|
|
with_test_prefix "main console" {
|
|
do_execution_tests \
|
|
$gdb_main_spawn_id "main console" \
|
|
$extra_spawn_id "extra console"
|
|
}
|
|
# Same, but with the extra console as driver.
|
|
with_test_prefix "extra console" {
|
|
do_execution_tests \
|
|
$extra_spawn_id "extra console" \
|
|
$gdb_main_spawn_id "main console"
|
|
}
|
|
}
|
|
|
|
# Test missing / invalid arguments.
|
|
|
|
proc_with_prefix do_test_invalid_args {} {
|
|
global testfile
|
|
|
|
clean_restart $testfile
|
|
|
|
spawn -pty
|
|
set extra_tty_name $spawn_out(slave,name)
|
|
|
|
# Test bad terminal path.
|
|
gdb_test "new-ui console /non/existent/path" \
|
|
"opening terminal failed: No such file or directory\." \
|
|
"new-ui with bad terminal path"
|
|
|
|
# Test bad interpreter name.
|
|
gdb_test "new-ui bloop $extra_tty_name" \
|
|
"Interpreter `bloop' unrecognized" \
|
|
"new-ui with bad interpreter name"
|
|
|
|
# Test that we can continue working normally.
|
|
if ![runto_main] {
|
|
return
|
|
}
|
|
}
|
|
|
|
do_test
|
|
do_test_invalid_args
|