Only send sync execution command output to the UI that ran the command

Currently when a "step", "next", etc. finishes, the current source
line is printed on all console UIs.

This patch makes the CLI and TUI interpreters reuse MI's logic to only
emit console output related to a synchronous command on the
console-like interpreter that started the command in the first place.

gdb/ChangeLog:
2016-06-21  Pedro Alves  <palves@redhat.com>

	* cli/cli-interp.c (cli_on_normal_stop): Bail out early if there's
	nothing to print.  Use should_print_stop_to_console.
	* tui/tui-interp.c (tui_on_normal_stop): Likewise.
This commit is contained in:
Pedro Alves 2016-06-21 01:11:53 +01:00
parent 8980e177bb
commit eaae60fd94
3 changed files with 23 additions and 4 deletions

View File

@ -1,3 +1,9 @@
2016-06-21 Pedro Alves <palves@redhat.com>
* cli/cli-interp.c (cli_on_normal_stop): Bail out early if there's
nothing to print. Use should_print_stop_to_console.
* tui/tui-interp.c (tui_on_normal_stop): Likewise.
2016-06-21 Pedro Alves <palves@redhat.com>
* breakpoint.c (new_until_break_fsm): Add 'cmd_interp' parameter.

View File

@ -95,14 +95,20 @@ cli_on_normal_stop (struct bpstats *bs, int print_frame)
{
struct switch_thru_all_uis state;
if (!print_frame)
return;
SWITCH_THRU_ALL_UIS (state)
{
struct cli_interp *cli = as_cli_interp (top_level_interpreter ());
struct interp *interp = top_level_interpreter ();
struct cli_interp *cli = as_cli_interp (interp);
struct thread_info *thread;
if (cli == NULL)
continue;
if (print_frame)
thread = inferior_thread ();
if (should_print_stop_to_console (interp, thread))
print_stop_event (cli->cli_uiout);
}
}

View File

@ -32,6 +32,7 @@
#include "tui/tui-io.h"
#include "infrun.h"
#include "observer.h"
#include "gdbthread.h"
static struct ui_out *tui_ui_out (struct interp *self);
@ -71,14 +72,20 @@ tui_on_normal_stop (struct bpstats *bs, int print_frame)
{
struct switch_thru_all_uis state;
if (!print_frame)
return;
SWITCH_THRU_ALL_UIS (state)
{
struct interp *tui = as_tui_interp (top_level_interpreter ());
struct interp *interp = top_level_interpreter ();
struct interp *tui = as_tui_interp (interp);
struct thread_info *thread;
if (tui == NULL)
continue;
if (print_frame)
thread = inferior_thread ();
if (should_print_stop_to_console (interp, thread))
print_stop_event (tui_ui_out (tui));
}
}