fix for PR gdb/15995
authorTom Tromey <tromey@redhat.com>
Thu, 17 Oct 2013 18:29:28 +0000 (18:29 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 17 Oct 2013 18:29:28 +0000 (18:29 +0000)
This patch fixes PR gdb/15995.

The bug here is that gdb's printf command does not flush the output
stream.  This makes a printf that is not newline-terminated interleave
incorrectly with other forms of output, such as that generated via a
call to an external program using "shell".

I note that the "output" command already does this flushing.

The fix is to call gdb_flush in printf_command.

Built and regtested on x86-64 Fedora 18.
New test case included.

PR gdb/15995:
* printcmd.c (printcmd): Call gdb_flush.

* gdb.base/printcmds.exp (test_printf): Test printf flushing.

gdb/ChangeLog
gdb/printcmd.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/printcmds.exp

index adf5dcca92d159cf659ef41f8857ecb4acc642d5..d6200fa0844d7135f5edb4152a2c6b7c20544fbf 100644 (file)
@@ -1,3 +1,8 @@
+2013-10-17  Tom Tromey  <tromey@redhat.com>
+
+       PR gdb/15995:
+       * printcmd.c (printcmd): Call gdb_flush.
+
 2013-10-17  Tom Tromey  <tromey@redhat.com>
 
        * elfread.c (struct elfinfo) <stabindexsect>: Remove.
index 751cd2b797f092d571a708761c9aed3a1f367444..9bca6dd88b81eb64cb1b1fdcb752f1f9d1cef44b 100644 (file)
@@ -2458,6 +2458,7 @@ static void
 printf_command (char *arg, int from_tty)
 {
   ui_printf (arg, gdb_stdout);
+  gdb_flush (gdb_stdout);
 }
 
 /* Implement the "eval" command.  */
index 886338eab4154a6198a45996302d2482f1b618ee..634184a1e8bebce2794e4d6985fe93129c89e263 100644 (file)
@@ -1,3 +1,7 @@
+2013-10-17  Tom Tromey  <tromey@redhat.com>
+
+       * gdb.base/printcmds.exp (test_printf): Test printf flushing.
+
 2013-10-14  Tom Tromey  <tromey@redhat.com>
 
        * gdb.dwarf2/dwzbuildid.exp (write_dwarf_file): Pass explicit test
index 60e4a7f574f75d4d93e8c8f552194c3e9b3fc8aa..6d65107be1df8a8537489fa4f41dde7052125514 100644 (file)
@@ -740,6 +740,12 @@ proc test_printf {} {
     gdb_test "printf \"% p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
     gdb_test "printf \"%0p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
     gdb_test "printf \"%+p\", 0" "Inappropriate modifiers to format specifier 'p' in printf"
+
+
+    gdb_test "define hibob\nprintf \"hi bob \"\nshell echo zzz\nprintf \"y\\n\"\nend" \
+       "" \
+       "create hibob command"
+    gdb_test "hibob" "hi bob zzz.*y" "run hibob command"
 }
 
 #Test printing DFP values with printf