forked from Imagelibrary/binutils-gdb
The patch to fix paging with redirection caused a regression in the internal AdaCore test suite. The problem occurs when running an MI command from the CLI using interpreter-exec, when paging is enabled. This scenario isn't covered by the current test suite, so this patch includes a new test. The problem is that, in this situation, MI does: fputs_unfiltered (strcmp (context->command, "target-select") == 0 ? "^connected" : "^done", mi->raw_stdout); Here raw_stdout is a stdio_file wrapping stdout, so the pager thinks that it is ok to buffer the output. However, in this setup, it isn't ok, and flushing the wrap buffer doesn't really work properly. Also, MI next does: mi_out_put (uiout, mi->raw_stdout); ... but this uses ui_file::write, which also doesn't flush the wrap buffer. I think all this will be fixed by the pager rewrite series I'm working on. However, in the meantime, adding the old gdb_stdout check back to the pager fixes this problem. Regression tested on x86-64 Fedora 34.
61 lines
1.8 KiB
Plaintext
61 lines
1.8 KiB
Plaintext
# Copyright (C) 2021, 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/>.
|
|
|
|
# Do not run if gdb debug is enabled as it will interfere with log redirect.
|
|
if [gdb_debug_enabled] {
|
|
untested "debug is enabled"
|
|
return 0
|
|
}
|
|
|
|
gdb_start
|
|
|
|
gdb_test_no_output "set height 5"
|
|
gdb_test_no_output "set pagination on"
|
|
|
|
# Test that logging redirect disables the pager.
|
|
set log_name [standard_output_file log.txt]
|
|
gdb_test_no_output "set logging file $log_name" \
|
|
"set logging filename"
|
|
gdb_test_no_output "set logging redirect on"
|
|
gdb_test "set logging enabled on" "Copying debug output to .*"
|
|
set ok 1
|
|
set str "1\\n2\\n3\\n4\\n5\\n"
|
|
gdb_test_multiple "printf \"$str\"" "printf without paging" {
|
|
-re "$pagination_prompt" {
|
|
set ok 0
|
|
send_gdb "c\n"
|
|
exp_continue
|
|
}
|
|
-re "\r\n$gdb_prompt $" {
|
|
# Ok.
|
|
}
|
|
}
|
|
if {$ok} {
|
|
pass "printf without paging"
|
|
} else {
|
|
fail "printf without paging"
|
|
}
|
|
gdb_test "set logging enabled off" "Done logging to .*"
|
|
|
|
set cmd "interpreter-exec mi2 \"-data-evaluate-expression 23\""
|
|
gdb_test_multiple $cmd $cmd {
|
|
-re ".done.value=.23\[^\n\]+\r\n$gdb_prompt " {
|
|
pass "$cmd"
|
|
gdb_expect 1 {
|
|
-re "\r\n$gdb_prompt $" { }
|
|
}
|
|
}
|
|
}
|