diff options
Diffstat (limited to 'gdb/mi')
-rw-r--r-- | gdb/mi/mi-interp.c | 21 | ||||
-rw-r--r-- | gdb/mi/mi-main.c | 5 | ||||
-rw-r--r-- | gdb/mi/mi-main.h | 1 |
3 files changed, 25 insertions, 2 deletions
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c index fb4b4d5..dee921f 100644 --- a/gdb/mi/mi-interp.c +++ b/gdb/mi/mi-interp.c @@ -61,6 +61,7 @@ static void mi_inferior_exit (int pid); static void mi_on_resume (ptid_t ptid); static void mi_solib_loaded (struct so_list *solib); static void mi_solib_unloaded (struct so_list *solib); +static void mi_about_to_proceed (void); static void * mi_interpreter_init (int top_level) @@ -91,6 +92,7 @@ mi_interpreter_init (int top_level) observer_attach_target_resumed (mi_on_resume); observer_attach_solib_loaded (mi_solib_loaded); observer_attach_solib_unloaded (mi_solib_unloaded); + observer_attach_about_to_proceed (mi_about_to_proceed); } return mi; @@ -368,6 +370,21 @@ mi_on_normal_stop (struct bpstats *bs, int print_frame) } static void +mi_about_to_proceed (void) +{ + /* Suppress output while calling an inferior function. */ + + if (!ptid_equal (inferior_ptid, null_ptid)) + { + struct thread_info *tp = inferior_thread (); + if (tp->in_infcall) + return; + } + + mi_proceeded = 1; +} + +static void mi_on_resume (ptid_t ptid) { struct thread_info *tp = NULL; @@ -389,7 +406,7 @@ mi_on_resume (ptid_t ptid) will make it impossible for frontend to know what's going on. In future (MI3), we'll be outputting "^done" here. */ - if (!running_result_record_printed) + if (!running_result_record_printed && mi_proceeded) { if (current_token) fputs_unfiltered (current_token, raw_stdout); @@ -411,7 +428,7 @@ mi_on_resume (ptid_t ptid) fprintf_unfiltered (raw_stdout, "*running,thread-id=\"%d\"\n", ti->num); } - if (!running_result_record_printed) + if (!running_result_record_printed && mi_proceeded) { running_result_record_printed = 1; /* This is what gdb used to do historically -- printing prompt even if diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 97a136b..d7d8dc4 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -78,6 +78,10 @@ static int do_timings = 0; char *current_token; int running_result_record_printed = 1; +/* Flag indicating that the target has proceeded since the last + command was issued. */ +int mi_proceeded; + extern void _initialize_mi_main (void); static void mi_cmd_execute (struct mi_parse *parse); @@ -1147,6 +1151,7 @@ captured_mi_execute_command (struct ui_out *uiout, void *data) cleanup = make_cleanup (free_current_contents, ¤t_token); running_result_record_printed = 0; + mi_proceeded = 0; switch (context->op) { case MI_COMMAND: diff --git a/gdb/mi/mi-main.h b/gdb/mi/mi-main.h index 90a61e3..c8e0b7e 100644 --- a/gdb/mi/mi-main.h +++ b/gdb/mi/mi-main.h @@ -31,6 +31,7 @@ extern void mi_print_timing_maybe (void); extern char *current_token; extern int running_result_record_printed; +extern int mi_proceeded; #endif |