Remove excess calls to gdb_flush

A customer noticed some mildly odd MI output, where CLI output was
split into multiple MI strings at unusual boundaries, like this:

    ~"$1 = (b => true"
    ~", p => 0x407260"

This is technically correct according to the MI spec, but still
unusual, in that there's no particular reason for the string to be
split where it is.

I tracked this down to a call to gdb_flush in generic_val_print.
Then, I went through all calls to gdb_flush and removed the ones I
thought were superfluous.  In particular:

* Any call in the value-printing code;
* Likewise the type-printing code (just a single call); and
* Any call that immediately followed a printf that obviously
  ended with a newline, my belief being that gdb's standard output
  streams are line buffered (by inheriting the behavior from stdio)

Regression tested on x86-64 Fedora 29.

I didn't add a new test case.  I tend to think we don't necessarily
want to specify this behavior in the tests.  Let me know what you
think of this.

gdb/ChangeLog
2019-03-05  Tom Tromey  <tromey@adacore.com>

	* windows-nat.c (windows_nat_target::attach)
	(windows_nat_target::detach): Don't call gdb_flush.
	* valprint.c (generic_val_print, val_print, val_print_string):
	Don't call gdb_flush.
	* utils.c (defaulted_query): Don't call gdb_flush.
	* typeprint.c (print_type_scalar): Don't call gdb_flush.
	* target.c (target_announce_detach): Don't call gdb_flush.
	* sparc64-tdep.c (adi_print_versions): Don't call gdb_flush.
	* remote.c (extended_remote_target::attach): Don't call
	gdb_flush.
	* procfs.c (procfs_target::detach): Don't call gdb_flush.
	* printcmd.c (do_examine): Don't call gdb_flush.
	(info_display_command): Don't call gdb_flush.
	* p-valprint.c (pascal_val_print): Don't call gdb_flush.
	* nto-procfs.c (nto_procfs_target::attach): Don't call gdb_flush.
	* memattr.c (info_mem_command): Don't call gdb_flush.
	* mdebugread.c (mdebug_build_psymtabs): Don't call gdb_flush.
	* m2-valprint.c (m2_val_print): Don't call gdb_flush.
	* infrun.c (follow_exec, handle_command): Don't call gdb_flush.
	* inf-ptrace.c (inf_ptrace_target::attach): Don't call gdb_flush.
	* hppa-tdep.c (unwind_command): Don't call gdb_flush.
	* gnu-nat.c (gnu_nat_target::attach): Don't call gdb_flush.
	(gnu_nat_target::detach): Don't call gdb_flush.
	* f-valprint.c (f_val_print): Don't call gdb_flush.
	* darwin-nat.c (darwin_nat_target::attach): Don't call gdb_flush.
	* cli/cli-script.c (read_command_lines): Don't call gdb_flush.
	* cli/cli-cmds.c (shell_escape, print_disassembly): Don't call
	gdb_flush.
	* c-valprint.c (c_val_print): Don't call gdb_flush.
	* ada-valprint.c (ada_print_scalar): Don't call gdb_flush.
This commit is contained in:
Tom Tromey 2019-02-19 13:36:17 -07:00
parent 895dafa679
commit c119e04082
25 changed files with 38 additions and 58 deletions

View File

@ -1,3 +1,36 @@
2019-03-05 Tom Tromey <tromey@adacore.com>
* windows-nat.c (windows_nat_target::attach)
(windows_nat_target::detach): Don't call gdb_flush.
* valprint.c (generic_val_print, val_print, val_print_string):
Don't call gdb_flush.
* utils.c (defaulted_query): Don't call gdb_flush.
* typeprint.c (print_type_scalar): Don't call gdb_flush.
* target.c (target_announce_detach): Don't call gdb_flush.
* sparc64-tdep.c (adi_print_versions): Don't call gdb_flush.
* remote.c (extended_remote_target::attach): Don't call
gdb_flush.
* procfs.c (procfs_target::detach): Don't call gdb_flush.
* printcmd.c (do_examine): Don't call gdb_flush.
(info_display_command): Don't call gdb_flush.
* p-valprint.c (pascal_val_print): Don't call gdb_flush.
* nto-procfs.c (nto_procfs_target::attach): Don't call gdb_flush.
* memattr.c (info_mem_command): Don't call gdb_flush.
* mdebugread.c (mdebug_build_psymtabs): Don't call gdb_flush.
* m2-valprint.c (m2_val_print): Don't call gdb_flush.
* infrun.c (follow_exec, handle_command): Don't call gdb_flush.
* inf-ptrace.c (inf_ptrace_target::attach): Don't call gdb_flush.
* hppa-tdep.c (unwind_command): Don't call gdb_flush.
* gnu-nat.c (gnu_nat_target::attach): Don't call gdb_flush.
(gnu_nat_target::detach): Don't call gdb_flush.
* f-valprint.c (f_val_print): Don't call gdb_flush.
* darwin-nat.c (darwin_nat_target::attach): Don't call gdb_flush.
* cli/cli-script.c (read_command_lines): Don't call gdb_flush.
* cli/cli-cmds.c (shell_escape, print_disassembly): Don't call
gdb_flush.
* c-valprint.c (c_val_print): Don't call gdb_flush.
* ada-valprint.c (ada_print_scalar): Don't call gdb_flush.
2019-03-05 Tom Tromey <tromey@adacore.com> 2019-03-05 Tom Tromey <tromey@adacore.com>
* varobj.c (update_dynamic_varobj_children): Update. * varobj.c (update_dynamic_varobj_children): Update.

View File

@ -465,7 +465,6 @@ ada_print_scalar (struct type *type, LONGEST val, struct ui_file *stream)
default: default:
error (_("Invalid type code in symbol table.")); error (_("Invalid type code in symbol table."));
} }
gdb_flush (stream);
} }
/* Print the character string STRING, printing at most LENGTH characters. /* Print the character string STRING, printing at most LENGTH characters.

View File

@ -564,7 +564,6 @@ c_val_print (struct type *type,
&c_decorations); &c_decorations);
break; break;
} }
gdb_flush (stream);
} }
void void

View File

@ -709,16 +709,10 @@ shell_escape (const char *arg, int from_tty)
arg = "inferior shell"; arg = "inferior shell";
if (rc == -1) if (rc == -1)
{ fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg, safe_strerror (errno));
safe_strerror (errno));
gdb_flush (gdb_stderr);
}
else if (rc) else if (rc)
{ fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
gdb_flush (gdb_stderr);
}
#ifdef GLOBAL_CURDIR #ifdef GLOBAL_CURDIR
/* Make sure to return to the directory GDB thinks it is, in case /* Make sure to return to the directory GDB thinks it is, in case
the shell command we just ran changed it. */ the shell command we just ran changed it. */
@ -743,7 +737,6 @@ shell_escape (const char *arg, int from_tty)
fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell, fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
safe_strerror (errno)); safe_strerror (errno));
gdb_flush (gdb_stderr);
_exit (0177); _exit (0177);
} }
@ -1130,7 +1123,6 @@ print_disassembly (struct gdbarch *gdbarch, const char *name,
} }
} }
printf_filtered ("End of assembler dump.\n"); printf_filtered ("End of assembler dump.\n");
gdb_flush (gdb_stdout);
} }
#if defined(TUI) #if defined(TUI)
else else

View File

@ -1186,10 +1186,7 @@ read_command_lines (const char *prompt_arg, int from_tty, int parse_commands,
END_MESSAGE); END_MESSAGE);
} }
else else
{ printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
printf_unfiltered ("%s\n%s\n", prompt_arg, END_MESSAGE);
gdb_flush (gdb_stdout);
}
} }

View File

@ -2056,8 +2056,6 @@ darwin_nat_target::attach (const char *args, int from_tty)
else else
printf_unfiltered (_("Attaching to %s\n"), printf_unfiltered (_("Attaching to %s\n"),
target_pid_to_str (ptid_t (pid))); target_pid_to_str (ptid_t (pid)));
gdb_flush (gdb_stdout);
} }
if (pid == 0 || ::kill (pid, 0) < 0) if (pid == 0 || ::kill (pid, 0) < 0)

View File

@ -366,7 +366,6 @@ f_val_print (struct type *type, int embedded_offset,
&f_decorations); &f_decorations);
break; break;
} }
gdb_flush (stream);
} }
static void static void

View File

@ -2217,8 +2217,6 @@ gnu_nat_target::attach (const char *args, int from_tty)
exec_file, pid); exec_file, pid);
else else
printf_unfiltered ("Attaching to pid %d\n", pid); printf_unfiltered ("Attaching to pid %d\n", pid);
gdb_flush (gdb_stdout);
} }
inf_debug (inf, "attaching to pid: %d", pid); inf_debug (inf, "attaching to pid: %d", pid);
@ -2273,7 +2271,6 @@ gnu_nat_target::detach (inferior *inf, int from_tty)
exec_file, gnu_current_inf->pid); exec_file, gnu_current_inf->pid);
else else
printf_unfiltered ("Detaching from pid %d\n", gnu_current_inf->pid); printf_unfiltered ("Detaching from pid %d\n", gnu_current_inf->pid);
gdb_flush (gdb_stdout);
} }
pid = gnu_current_inf->pid; pid = gnu_current_inf->pid;

View File

@ -2580,10 +2580,8 @@ unwind_command (const char *exp, int from_tty)
printf_unfiltered ("unwind_table_entry (%s):\n", host_address_to_string (u)); printf_unfiltered ("unwind_table_entry (%s):\n", host_address_to_string (u));
printf_unfiltered ("\tregion_start = %s\n", hex_string (u->region_start)); printf_unfiltered ("\tregion_start = %s\n", hex_string (u->region_start));
gdb_flush (gdb_stdout);
printf_unfiltered ("\tregion_end = %s\n", hex_string (u->region_end)); printf_unfiltered ("\tregion_end = %s\n", hex_string (u->region_end));
gdb_flush (gdb_stdout);
#define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD); #define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD);

View File

@ -217,8 +217,6 @@ inf_ptrace_target::attach (const char *args, int from_tty)
else else
printf_unfiltered (_("Attaching to %s\n"), printf_unfiltered (_("Attaching to %s\n"),
target_pid_to_str (ptid_t (pid))); target_pid_to_str (ptid_t (pid)));
gdb_flush (gdb_stdout);
} }
#ifdef PT_ATTACH #ifdef PT_ATTACH

View File

@ -1159,8 +1159,6 @@ follow_exec (ptid_t ptid, char *exec_file_target)
/* We've followed the inferior through an exec. Therefore, the /* We've followed the inferior through an exec. Therefore, the
inferior has essentially been killed & reborn. */ inferior has essentially been killed & reborn. */
gdb_flush (gdb_stdout);
breakpoint_init_inferior (inf_execd); breakpoint_init_inferior (inf_execd);
gdb::unique_xmalloc_ptr<char> exec_file_host gdb::unique_xmalloc_ptr<char> exec_file_host
@ -8406,10 +8404,7 @@ Are you sure you want to change it? "),
sigs[signum] = 1; sigs[signum] = 1;
} }
else else
{ printf_unfiltered (_("Not confirmed, unchanged.\n"));
printf_unfiltered (_("Not confirmed, unchanged.\n"));
gdb_flush (gdb_stdout);
}
} }
break; break;
case GDB_SIGNAL_0: case GDB_SIGNAL_0:

View File

@ -408,7 +408,6 @@ m2_val_print (struct type *type, int embedded_offset,
if (TYPE_STUB (elttype)) if (TYPE_STUB (elttype))
{ {
fprintf_filtered (stream, _("<incomplete type>")); fprintf_filtered (stream, _("<incomplete type>"));
gdb_flush (stream);
break; break;
} }
else else
@ -499,5 +498,4 @@ m2_val_print (struct type *type, int embedded_offset,
&m2_decorations); &m2_decorations);
break; break;
} }
gdb_flush (stream);
} }

View File

@ -377,7 +377,6 @@ mdebug_build_psymtabs (minimal_symbol_reader &reader,
objfile->name); objfile->name);
printf_unfiltered (_("You should compile with -g2 or " printf_unfiltered (_("You should compile with -g2 or "
"-g3 for best debugging support.\n")); "-g3 for best debugging support.\n"));
gdb_flush (gdb_stdout);
} }
#endif #endif
} }

View File

@ -459,8 +459,6 @@ info_mem_command (const char *args, int from_tty)
#endif #endif
printf_filtered ("\n"); printf_filtered ("\n");
gdb_flush (gdb_stdout);
} }
} }

View File

@ -712,8 +712,6 @@ nto_procfs_target::attach (const char *args, int from_tty)
else else
printf_unfiltered ("Attaching to %s\n", printf_unfiltered ("Attaching to %s\n",
target_pid_to_str (ptid_t (pid))); target_pid_to_str (ptid_t (pid)));
gdb_flush (gdb_stdout);
} }
inferior_ptid = do_attach (ptid_t (pid)); inferior_ptid = do_attach (ptid_t (pid));
inf = current_inferior (); inf = current_inferior ();

View File

@ -349,7 +349,6 @@ pascal_val_print (struct type *type,
if (TYPE_STUB (elttype)) if (TYPE_STUB (elttype))
{ {
fprintf_filtered (stream, "<incomplete type>"); fprintf_filtered (stream, "<incomplete type>");
gdb_flush (stream);
break; break;
} }
else else
@ -418,7 +417,6 @@ pascal_val_print (struct type *type,
error (_("Invalid pascal type code %d in symbol table."), error (_("Invalid pascal type code %d in symbol table."),
TYPE_CODE (type)); TYPE_CODE (type));
} }
gdb_flush (stream);
} }
void void

View File

@ -1098,7 +1098,6 @@ do_examine (struct format_data fmt, struct gdbarch *gdbarch, CORE_ADDR addr)
count += branch_delay_insns; count += branch_delay_insns;
} }
printf_filtered ("\n"); printf_filtered ("\n");
gdb_flush (gdb_stdout);
} }
if (need_to_update_next_address) if (need_to_update_next_address)
@ -2068,7 +2067,6 @@ Num Enb Expression\n"));
if (d->block && !contained_in (get_selected_block (0), d->block)) if (d->block && !contained_in (get_selected_block (0), d->block))
printf_filtered (_(" (cannot be evaluated in the current context)")); printf_filtered (_(" (cannot be evaluated in the current context)"));
printf_filtered ("\n"); printf_filtered ("\n");
gdb_flush (gdb_stdout);
} }
} }

View File

@ -1911,7 +1911,6 @@ procfs_target::detach (inferior *inf, int from_tty)
printf_filtered (_("Detaching from program: %s, %s\n"), exec_file, printf_filtered (_("Detaching from program: %s, %s\n"), exec_file,
target_pid_to_str (ptid_t (pid))); target_pid_to_str (ptid_t (pid)));
gdb_flush (gdb_stdout);
} }
do_detach (); do_detach ();

View File

@ -5826,8 +5826,6 @@ extended_remote_target::attach (const char *args, int from_tty)
else else
printf_unfiltered (_("Attaching to %s\n"), printf_unfiltered (_("Attaching to %s\n"),
target_pid_to_str (ptid_t (pid))); target_pid_to_str (ptid_t (pid)));
gdb_flush (gdb_stdout);
} }
xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid); xsnprintf (rs->buf.data (), get_remote_packet_size (), "vAttach;%x", pid);

View File

@ -406,7 +406,6 @@ adi_print_versions (CORE_ADDR vaddr, size_t cnt, gdb_byte *tags)
++v_idx; ++v_idx;
} }
printf_filtered ("\n"); printf_filtered ("\n");
gdb_flush (gdb_stdout);
vaddr += maxelts; vaddr += maxelts;
} }
} }

View File

@ -3168,7 +3168,6 @@ target_announce_detach (int from_tty)
pid = inferior_ptid.pid (); pid = inferior_ptid.pid ();
printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file, printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file,
target_pid_to_str (ptid_t (pid))); target_pid_to_str (ptid_t (pid)));
gdb_flush (gdb_stdout);
} }
/* The inferior process has died. Long live the inferior! */ /* The inferior process has died. Long live the inferior! */

View File

@ -691,7 +691,6 @@ print_type_scalar (struct type *type, LONGEST val, struct ui_file *stream)
default: default:
error (_("Invalid type code in symbol table.")); error (_("Invalid type code in symbol table."));
} }
gdb_flush (stream);
} }
/* Dump details of a type specified either directly or indirectly. /* Dump details of a type specified either directly or indirectly.

View File

@ -890,7 +890,6 @@ defaulted_query (const char *ctlstr, const char defchar, va_list args)
printf_filtered (_("(%s or %s) [answered %c; " printf_filtered (_("(%s or %s) [answered %c; "
"input not from terminal]\n"), "input not from terminal]\n"),
y_string, n_string, def_answer); y_string, n_string, def_answer);
gdb_flush (gdb_stdout);
return def_value; return def_value;
} }

View File

@ -986,7 +986,6 @@ generic_val_print (struct type *type,
error (_("Unhandled type code %d in symbol table."), error (_("Unhandled type code %d in symbol table."),
TYPE_CODE (type)); TYPE_CODE (type));
} }
gdb_flush (stream);
} }
/* Print using the given LANGUAGE the data of type TYPE located at /* Print using the given LANGUAGE the data of type TYPE located at
@ -1032,7 +1031,6 @@ val_print (struct type *type, LONGEST embedded_offset,
if (TYPE_STUB (real_type)) if (TYPE_STUB (real_type))
{ {
fprintf_filtered (stream, _("<incomplete type>")); fprintf_filtered (stream, _("<incomplete type>"));
gdb_flush (stream);
return; return;
} }
@ -2860,8 +2858,6 @@ val_print_string (struct type *elttype, const char *encoding,
fprintf_filtered (stream, ">"); fprintf_filtered (stream, ">");
} }
gdb_flush (stream);
return (bytes_read / width); return (bytes_read / width);
} }

View File

@ -2015,8 +2015,6 @@ windows_nat_target::attach (const char *args, int from_tty)
else else
printf_unfiltered ("Attaching to %s\n", printf_unfiltered ("Attaching to %s\n",
target_pid_to_str (ptid_t (pid))); target_pid_to_str (ptid_t (pid)));
gdb_flush (gdb_stdout);
} }
do_initial_windows_stuff (this, pid, 1); do_initial_windows_stuff (this, pid, 1);
@ -2046,7 +2044,6 @@ windows_nat_target::detach (inferior *inf, int from_tty)
exec_file = ""; exec_file = "";
printf_unfiltered ("Detaching from program: %s, Pid %u\n", exec_file, printf_unfiltered ("Detaching from program: %s, Pid %u\n", exec_file,
(unsigned) current_event.dwProcessId); (unsigned) current_event.dwProcessId);
gdb_flush (gdb_stdout);
} }
x86_cleanup_dregs (); x86_cleanup_dregs ();