aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2022-01-03 09:48:37 -0700
committerTom Tromey <tromey@adacore.com>2022-01-05 06:49:08 -0700
commit93f3b8eeaac14fe1d9343ce1b8eca87be2ce5843 (patch)
treeecabfa0adc00be7840c212b6bee26b752665f2b2
parent74e315dbfe5200c473b226e937935fb8ce391489 (diff)
downloadgdb-93f3b8eeaac14fe1d9343ce1b8eca87be2ce5843.zip
gdb-93f3b8eeaac14fe1d9343ce1b8eca87be2ce5843.tar.gz
gdb-93f3b8eeaac14fe1d9343ce1b8eca87be2ce5843.tar.bz2
Fix pager regression
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.
-rw-r--r--gdb/testsuite/gdb.base/page-logging.exp10
-rw-r--r--gdb/utils.c1
2 files changed, 11 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/page-logging.exp b/gdb/testsuite/gdb.base/page-logging.exp
index 05a3f79..ffc180a 100644
--- a/gdb/testsuite/gdb.base/page-logging.exp
+++ b/gdb/testsuite/gdb.base/page-logging.exp
@@ -48,3 +48,13 @@ if {$ok} {
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 $" { }
+ }
+ }
+}
diff --git a/gdb/utils.c b/gdb/utils.c
index 11f88d6..df4e6c1 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -1750,6 +1750,7 @@ fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
/* Don't do any filtering if it is disabled. */
if (!stream->can_page ()
+ || stream != gdb_stdout
|| !pagination_enabled
|| pagination_disabled_for_command
|| batch_flag