Use ui_out_emit_list
[external/binutils.git] / gdb / mi / mi-interp.c
1 /* MI Interpreter Definitions and Commands for GDB, the GNU debugger.
2
3    Copyright (C) 2002-2017 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "interps.h"
22 #include "event-top.h"
23 #include "event-loop.h"
24 #include "inferior.h"
25 #include "infrun.h"
26 #include "ui-out.h"
27 #include "top.h"
28 #include "mi-main.h"
29 #include "mi-cmds.h"
30 #include "mi-out.h"
31 #include "mi-console.h"
32 #include "mi-common.h"
33 #include "observer.h"
34 #include "gdbthread.h"
35 #include "solist.h"
36 #include "gdb.h"
37 #include "objfiles.h"
38 #include "tracepoint.h"
39 #include "cli-out.h"
40 #include "thread-fsm.h"
41 #include "cli/cli-interp.h"
42
43 /* These are the interpreter setup, etc. functions for the MI
44    interpreter.  */
45
46 static void mi_execute_command_wrapper (const char *cmd);
47 static void mi_execute_command_input_handler (char *cmd);
48
49 /* These are hooks that we put in place while doing interpreter_exec
50    so we can report interesting things that happened "behind the MI's
51    back" in this command.  */
52
53 static int mi_interp_query_hook (const char *ctlstr, va_list ap)
54   ATTRIBUTE_PRINTF (1, 0);
55
56 static void mi_insert_notify_hooks (void);
57 static void mi_remove_notify_hooks (void);
58
59 static void mi_on_signal_received (enum gdb_signal siggnal);
60 static void mi_on_end_stepping_range (void);
61 static void mi_on_signal_exited (enum gdb_signal siggnal);
62 static void mi_on_exited (int exitstatus);
63 static void mi_on_normal_stop (struct bpstats *bs, int print_frame);
64 static void mi_on_no_history (void);
65
66 static void mi_new_thread (struct thread_info *t);
67 static void mi_thread_exit (struct thread_info *t, int silent);
68 static void mi_record_changed (struct inferior*, int, const char *,
69                                const char *);
70 static void mi_inferior_added (struct inferior *inf);
71 static void mi_inferior_appeared (struct inferior *inf);
72 static void mi_inferior_exit (struct inferior *inf);
73 static void mi_inferior_removed (struct inferior *inf);
74 static void mi_on_resume (ptid_t ptid);
75 static void mi_solib_loaded (struct so_list *solib);
76 static void mi_solib_unloaded (struct so_list *solib);
77 static void mi_about_to_proceed (void);
78 static void mi_traceframe_changed (int tfnum, int tpnum);
79 static void mi_tsv_created (const struct trace_state_variable *tsv);
80 static void mi_tsv_deleted (const struct trace_state_variable *tsv);
81 static void mi_tsv_modified (const struct trace_state_variable *tsv);
82 static void mi_breakpoint_created (struct breakpoint *b);
83 static void mi_breakpoint_deleted (struct breakpoint *b);
84 static void mi_breakpoint_modified (struct breakpoint *b);
85 static void mi_command_param_changed (const char *param, const char *value);
86 static void mi_memory_changed (struct inferior *inf, CORE_ADDR memaddr,
87                                ssize_t len, const bfd_byte *myaddr);
88 static void mi_on_sync_execution_done (void);
89
90 static int report_initial_inferior (struct inferior *inf, void *closure);
91
92 /* Display the MI prompt.  */
93
94 static void
95 display_mi_prompt (struct mi_interp *mi)
96 {
97   struct ui *ui = current_ui;
98
99   fputs_unfiltered ("(gdb) \n", mi->raw_stdout);
100   gdb_flush (mi->raw_stdout);
101   ui->prompt_state = PROMPTED;
102 }
103
104 /* Returns the INTERP's data cast as mi_interp if INTERP is an MI, and
105    returns NULL otherwise.  */
106
107 static struct mi_interp *
108 as_mi_interp (struct interp *interp)
109 {
110   if (interp_ui_out (interp)->is_mi_like_p ())
111     return (struct mi_interp *) interp;
112   return NULL;
113 }
114
115 void
116 mi_interp::init (bool top_level)
117 {
118   mi_interp *mi = this;
119   const char *name;
120   int mi_version;
121
122   /* Store the current output channel, so that we can create a console
123      channel that encapsulates and prefixes all gdb_output-type bits
124      coming from the rest of the debugger.  */
125   mi->raw_stdout = gdb_stdout;
126
127   /* Create MI console channels, each with a different prefix so they
128      can be distinguished.  */
129   mi->out = new mi_console_file (mi->raw_stdout, "~", '"');
130   mi->err = new mi_console_file (mi->raw_stdout, "&", '"');
131   mi->log = mi->err;
132   mi->targ = new mi_console_file (mi->raw_stdout, "@", '"');
133   mi->event_channel = new mi_console_file (mi->raw_stdout, "=", 0);
134
135   name = interp_name (this);
136   /* INTERP_MI selects the most recent released version.  "mi2" was
137      released as part of GDB 6.0.  */
138   if (strcmp (name, INTERP_MI) == 0)
139     mi_version = 2;
140   else if (strcmp (name, INTERP_MI1) == 0)
141     mi_version = 1;
142   else if (strcmp (name, INTERP_MI2) == 0)
143     mi_version = 2;
144   else if (strcmp (name, INTERP_MI3) == 0)
145     mi_version = 3;
146   else
147     gdb_assert_not_reached ("unhandled MI version");
148
149   mi->mi_uiout = mi_out_new (mi_version);
150   mi->cli_uiout = cli_out_new (mi->out);
151
152   if (top_level)
153     {
154       /* The initial inferior is created before this function is
155          called, so we need to report it explicitly.  Use iteration in
156          case future version of GDB creates more than one inferior
157          up-front.  */
158       iterate_over_inferiors (report_initial_inferior, mi);
159     }
160 }
161
162 void
163 mi_interp::resume ()
164 {
165   struct mi_interp *mi = this;
166   struct ui *ui = current_ui;
167
168   /* As per hack note in mi_interpreter_init, swap in the output
169      channels... */
170   gdb_setup_readline (0);
171
172   ui->call_readline = gdb_readline_no_editing_callback;
173   ui->input_handler = mi_execute_command_input_handler;
174
175   gdb_stdout = mi->out;
176   /* Route error and log output through the MI.  */
177   gdb_stderr = mi->err;
178   gdb_stdlog = mi->log;
179   /* Route target output through the MI.  */
180   gdb_stdtarg = mi->targ;
181   /* Route target error through the MI as well.  */
182   gdb_stdtargerr = mi->targ;
183
184   /* Replace all the hooks that we know about.  There really needs to
185      be a better way of doing this... */
186   clear_interpreter_hooks ();
187
188   deprecated_show_load_progress = mi_load_progress;
189 }
190
191 void
192 mi_interp::suspend ()
193 {
194   gdb_disable_readline ();
195 }
196
197 gdb_exception
198 mi_interp::exec (const char *command)
199 {
200   mi_execute_command_wrapper (command);
201   return exception_none;
202 }
203
204 void
205 mi_cmd_interpreter_exec (const char *command, char **argv, int argc)
206 {
207   struct interp *interp_to_use;
208   int i;
209   char *mi_error_message = NULL;
210   struct cleanup *old_chain;
211
212   if (argc < 2)
213     error (_("-interpreter-exec: "
214              "Usage: -interpreter-exec interp command"));
215
216   interp_to_use = interp_lookup (current_ui, argv[0]);
217   if (interp_to_use == NULL)
218     error (_("-interpreter-exec: could not find interpreter \"%s\""),
219            argv[0]);
220
221   /* Note that unlike the CLI version of this command, we don't
222      actually set INTERP_TO_USE as the current interpreter, as we
223      still want gdb_stdout, etc. to point at MI streams.  */
224
225   /* Insert the MI out hooks, making sure to also call the
226      interpreter's hooks if it has any.  */
227   /* KRS: We shouldn't need this... Events should be installed and
228      they should just ALWAYS fire something out down the MI
229      channel.  */
230   mi_insert_notify_hooks ();
231
232   /* Now run the code.  */
233
234   old_chain = make_cleanup (null_cleanup, 0);
235   for (i = 1; i < argc; i++)
236     {
237       struct gdb_exception e = interp_exec (interp_to_use, argv[i]);
238
239       if (e.reason < 0)
240         {
241           mi_error_message = xstrdup (e.message);
242           make_cleanup (xfree, mi_error_message);
243           break;
244         }
245     }
246
247   mi_remove_notify_hooks ();
248
249   if (mi_error_message != NULL)
250     error ("%s", mi_error_message);
251   do_cleanups (old_chain);
252 }
253
254 /* This inserts a number of hooks that are meant to produce
255    async-notify ("=") MI messages while running commands in another
256    interpreter using mi_interpreter_exec.  The canonical use for this
257    is to allow access to the gdb CLI interpreter from within the MI,
258    while still producing MI style output when actions in the CLI
259    command change GDB's state.  */
260
261 static void
262 mi_insert_notify_hooks (void)
263 {
264   deprecated_query_hook = mi_interp_query_hook;
265 }
266
267 static void
268 mi_remove_notify_hooks (void)
269 {
270   deprecated_query_hook = NULL;
271 }
272
273 static int
274 mi_interp_query_hook (const char *ctlstr, va_list ap)
275 {
276   return 1;
277 }
278
279 static void
280 mi_execute_command_wrapper (const char *cmd)
281 {
282   struct ui *ui = current_ui;
283
284   mi_execute_command (cmd, ui->instream == ui->stdin_stream);
285 }
286
287 /* Observer for the synchronous_command_done notification.  */
288
289 static void
290 mi_on_sync_execution_done (void)
291 {
292   struct ui *ui = current_ui;
293   struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
294
295   if (mi == NULL)
296     return;
297
298   /* If MI is sync, then output the MI prompt now, indicating we're
299      ready for further input.  */
300   if (!mi_async_p ())
301     display_mi_prompt (mi);
302 }
303
304 /* mi_execute_command_wrapper wrapper suitable for INPUT_HANDLER.  */
305
306 static void
307 mi_execute_command_input_handler (char *cmd)
308 {
309   struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
310   struct ui *ui = current_ui;
311
312   ui->prompt_state = PROMPT_NEEDED;
313
314   mi_execute_command_wrapper (cmd);
315
316   /* Print a prompt, indicating we're ready for further input, unless
317      we just started a synchronous command.  In that case, we're about
318      to go back to the event loop and will output the prompt in the
319      'synchronous_command_done' observer when the target next
320      stops.  */
321   if (ui->prompt_state == PROMPT_NEEDED)
322     display_mi_prompt (mi);
323 }
324
325 void
326 mi_interp::pre_command_loop ()
327 {
328   struct mi_interp *mi = this;
329
330   /* Turn off 8 bit strings in quoted output.  Any character with the
331      high bit set is printed using C's octal format.  */
332   sevenbit_strings = 1;
333
334   /* Tell the world that we're alive.  */
335   display_mi_prompt (mi);
336 }
337
338 static void
339 mi_new_thread (struct thread_info *t)
340 {
341   struct inferior *inf = find_inferior_ptid (t->ptid);
342
343   gdb_assert (inf);
344
345   SWITCH_THRU_ALL_UIS ()
346     {
347       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
348       struct cleanup *old_chain;
349
350       if (mi == NULL)
351         continue;
352
353       old_chain = make_cleanup_restore_target_terminal ();
354       target_terminal_ours_for_output ();
355
356       fprintf_unfiltered (mi->event_channel,
357                           "thread-created,id=\"%d\",group-id=\"i%d\"",
358                           t->global_num, inf->num);
359       gdb_flush (mi->event_channel);
360
361       do_cleanups (old_chain);
362     }
363 }
364
365 static void
366 mi_thread_exit (struct thread_info *t, int silent)
367 {
368   if (silent)
369     return;
370
371   SWITCH_THRU_ALL_UIS ()
372     {
373       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
374       struct cleanup *old_chain;
375
376       if (mi == NULL)
377         continue;
378
379       old_chain = make_cleanup_restore_target_terminal ();
380       target_terminal_ours_for_output ();
381       fprintf_unfiltered (mi->event_channel,
382                           "thread-exited,id=\"%d\",group-id=\"i%d\"",
383                           t->global_num, t->inf->num);
384       gdb_flush (mi->event_channel);
385
386       do_cleanups (old_chain);
387     }
388 }
389
390 /* Emit notification on changing the state of record.  */
391
392 static void
393 mi_record_changed (struct inferior *inferior, int started, const char *method,
394                    const char *format)
395 {
396   SWITCH_THRU_ALL_UIS ()
397     {
398       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
399       struct cleanup *old_chain;
400
401       if (mi == NULL)
402         continue;
403
404       old_chain = make_cleanup_restore_target_terminal ();
405       target_terminal_ours_for_output ();
406
407       if (started)
408         {
409           if (format != NULL)
410             {
411               fprintf_unfiltered (mi->event_channel,
412                                   "record-started,thread-group=\"i%d\","
413                                   "method=\"%s\",format=\"%s\"",
414                                   inferior->num, method, format);
415             }
416           else
417             {
418               fprintf_unfiltered (mi->event_channel,
419                                   "record-started,thread-group=\"i%d\","
420                                   "method=\"%s\"",
421                                   inferior->num, method);
422             }
423         }
424       else
425         {
426           fprintf_unfiltered (mi->event_channel,
427                               "record-stopped,thread-group=\"i%d\"",
428                               inferior->num);
429         }
430
431       gdb_flush (mi->event_channel);
432
433       do_cleanups (old_chain);
434     }
435 }
436
437 static void
438 mi_inferior_added (struct inferior *inf)
439 {
440   SWITCH_THRU_ALL_UIS ()
441     {
442       struct interp *interp;
443       struct mi_interp *mi;
444       struct cleanup *old_chain;
445
446       /* We'll be called once for the initial inferior, before the top
447          level interpreter is set.  */
448       interp = top_level_interpreter ();
449       if (interp == NULL)
450         continue;
451
452       mi = as_mi_interp (interp);
453       if (mi == NULL)
454         continue;
455
456       old_chain = make_cleanup_restore_target_terminal ();
457       target_terminal_ours_for_output ();
458
459       fprintf_unfiltered (mi->event_channel,
460                           "thread-group-added,id=\"i%d\"",
461                           inf->num);
462       gdb_flush (mi->event_channel);
463
464       do_cleanups (old_chain);
465     }
466 }
467
468 static void
469 mi_inferior_appeared (struct inferior *inf)
470 {
471   SWITCH_THRU_ALL_UIS ()
472     {
473       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
474       struct cleanup *old_chain;
475
476       if (mi == NULL)
477         continue;
478
479       old_chain = make_cleanup_restore_target_terminal ();
480       target_terminal_ours_for_output ();
481
482       fprintf_unfiltered (mi->event_channel,
483                           "thread-group-started,id=\"i%d\",pid=\"%d\"",
484                           inf->num, inf->pid);
485       gdb_flush (mi->event_channel);
486       do_cleanups (old_chain);
487     }
488 }
489
490 static void
491 mi_inferior_exit (struct inferior *inf)
492 {
493   SWITCH_THRU_ALL_UIS ()
494     {
495       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
496       struct cleanup *old_chain;
497
498       if (mi == NULL)
499         continue;
500
501       old_chain = make_cleanup_restore_target_terminal ();
502       target_terminal_ours_for_output ();
503
504       if (inf->has_exit_code)
505         fprintf_unfiltered (mi->event_channel,
506                             "thread-group-exited,id=\"i%d\",exit-code=\"%s\"",
507                             inf->num, int_string (inf->exit_code, 8, 0, 0, 1));
508       else
509         fprintf_unfiltered (mi->event_channel,
510                             "thread-group-exited,id=\"i%d\"", inf->num);
511
512       gdb_flush (mi->event_channel);
513       do_cleanups (old_chain);
514     }
515 }
516
517 static void
518 mi_inferior_removed (struct inferior *inf)
519 {
520   SWITCH_THRU_ALL_UIS ()
521     {
522       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
523       struct cleanup *old_chain;
524
525       if (mi == NULL)
526         continue;
527
528       old_chain = make_cleanup_restore_target_terminal ();
529       target_terminal_ours_for_output ();
530
531       fprintf_unfiltered (mi->event_channel,
532                           "thread-group-removed,id=\"i%d\"",
533                           inf->num);
534       gdb_flush (mi->event_channel);
535
536       do_cleanups (old_chain);
537     }
538 }
539
540 /* Return the MI interpreter, if it is active -- either because it's
541    the top-level interpreter or the interpreter executing the current
542    command.  Returns NULL if the MI interpreter is not being used.  */
543
544 static struct mi_interp *
545 find_mi_interp (void)
546 {
547   struct mi_interp *mi;
548
549   mi = as_mi_interp (top_level_interpreter ());
550   if (mi != NULL)
551     return mi;
552
553   mi = as_mi_interp (command_interp ());
554   if (mi != NULL)
555     return mi;
556
557   return NULL;
558 }
559
560 /* Observers for several run control events that print why the
561    inferior has stopped to both the the MI event channel and to the MI
562    console.  If the MI interpreter is not active, print nothing.  */
563
564 /* Observer for the signal_received notification.  */
565
566 static void
567 mi_on_signal_received (enum gdb_signal siggnal)
568 {
569   SWITCH_THRU_ALL_UIS ()
570     {
571       struct mi_interp *mi = find_mi_interp ();
572
573       if (mi == NULL)
574         continue;
575
576       print_signal_received_reason (mi->mi_uiout, siggnal);
577       print_signal_received_reason (mi->cli_uiout, siggnal);
578     }
579 }
580
581 /* Observer for the end_stepping_range notification.  */
582
583 static void
584 mi_on_end_stepping_range (void)
585 {
586   SWITCH_THRU_ALL_UIS ()
587     {
588       struct mi_interp *mi = find_mi_interp ();
589
590       if (mi == NULL)
591         continue;
592
593       print_end_stepping_range_reason (mi->mi_uiout);
594       print_end_stepping_range_reason (mi->cli_uiout);
595     }
596 }
597
598 /* Observer for the signal_exited notification.  */
599
600 static void
601 mi_on_signal_exited (enum gdb_signal siggnal)
602 {
603   SWITCH_THRU_ALL_UIS ()
604     {
605       struct mi_interp *mi = find_mi_interp ();
606
607       if (mi == NULL)
608         continue;
609
610       print_signal_exited_reason (mi->mi_uiout, siggnal);
611       print_signal_exited_reason (mi->cli_uiout, siggnal);
612     }
613 }
614
615 /* Observer for the exited notification.  */
616
617 static void
618 mi_on_exited (int exitstatus)
619 {
620   SWITCH_THRU_ALL_UIS ()
621     {
622       struct mi_interp *mi = find_mi_interp ();
623
624       if (mi == NULL)
625         continue;
626
627       print_exited_reason (mi->mi_uiout, exitstatus);
628       print_exited_reason (mi->cli_uiout, exitstatus);
629     }
630 }
631
632 /* Observer for the no_history notification.  */
633
634 static void
635 mi_on_no_history (void)
636 {
637   SWITCH_THRU_ALL_UIS ()
638     {
639       struct mi_interp *mi = find_mi_interp ();
640
641       if (mi == NULL)
642         continue;
643
644       print_no_history_reason (mi->mi_uiout);
645       print_no_history_reason (mi->cli_uiout);
646     }
647 }
648
649 static void
650 mi_on_normal_stop_1 (struct bpstats *bs, int print_frame)
651 {
652   /* Since this can be called when CLI command is executing,
653      using cli interpreter, be sure to use MI uiout for output,
654      not the current one.  */
655   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
656   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter ();
657
658   if (print_frame)
659     {
660       struct thread_info *tp;
661       int core;
662       struct interp *console_interp;
663
664       tp = inferior_thread ();
665
666       if (tp->thread_fsm != NULL
667           && thread_fsm_finished_p (tp->thread_fsm))
668         {
669           enum async_reply_reason reason;
670
671           reason = thread_fsm_async_reply_reason (tp->thread_fsm);
672           mi_uiout->field_string ("reason", async_reason_lookup (reason));
673         }
674       print_stop_event (mi_uiout);
675
676       console_interp = interp_lookup (current_ui, INTERP_CONSOLE);
677       if (should_print_stop_to_console (console_interp, tp))
678         print_stop_event (mi->cli_uiout);
679
680       mi_uiout->field_int ("thread-id", tp->global_num);
681       if (non_stop)
682         {
683           ui_out_emit_list list_emitter (mi_uiout, "stopped-threads");
684
685           mi_uiout->field_int (NULL, tp->global_num);
686         }
687       else
688         mi_uiout->field_string ("stopped-threads", "all");
689
690       core = target_core_of_thread (inferior_ptid);
691       if (core != -1)
692         mi_uiout->field_int ("core", core);
693     }
694   
695   fputs_unfiltered ("*stopped", mi->raw_stdout);
696   mi_out_put (mi_uiout, mi->raw_stdout);
697   mi_out_rewind (mi_uiout);
698   mi_print_timing_maybe (mi->raw_stdout);
699   fputs_unfiltered ("\n", mi->raw_stdout);
700   gdb_flush (mi->raw_stdout);
701 }
702
703 static void
704 mi_on_normal_stop (struct bpstats *bs, int print_frame)
705 {
706   SWITCH_THRU_ALL_UIS ()
707     {
708       if (as_mi_interp (top_level_interpreter ()) == NULL)
709         continue;
710
711       mi_on_normal_stop_1 (bs, print_frame);
712     }
713 }
714
715 static void
716 mi_about_to_proceed (void)
717 {
718   /* Suppress output while calling an inferior function.  */
719
720   if (!ptid_equal (inferior_ptid, null_ptid))
721     {
722       struct thread_info *tp = inferior_thread ();
723
724       if (tp->control.in_infcall)
725         return;
726     }
727
728   mi_proceeded = 1;
729 }
730
731 /* When the element is non-zero, no MI notifications will be emitted in
732    response to the corresponding observers.  */
733
734 struct mi_suppress_notification mi_suppress_notification =
735   {
736     0,
737     0,
738     0,
739     0,
740   };
741
742 /* Emit notification on changing a traceframe.  */
743
744 static void
745 mi_traceframe_changed (int tfnum, int tpnum)
746 {
747   if (mi_suppress_notification.traceframe)
748     return;
749
750   SWITCH_THRU_ALL_UIS ()
751     {
752       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
753       struct cleanup *old_chain;
754
755       if (mi == NULL)
756         continue;
757
758       old_chain = make_cleanup_restore_target_terminal ();
759       target_terminal_ours_for_output ();
760
761       if (tfnum >= 0)
762         fprintf_unfiltered (mi->event_channel, "traceframe-changed,"
763                             "num=\"%d\",tracepoint=\"%d\"\n",
764                             tfnum, tpnum);
765       else
766         fprintf_unfiltered (mi->event_channel, "traceframe-changed,end");
767
768       gdb_flush (mi->event_channel);
769
770       do_cleanups (old_chain);
771     }
772 }
773
774 /* Emit notification on creating a trace state variable.  */
775
776 static void
777 mi_tsv_created (const struct trace_state_variable *tsv)
778 {
779   SWITCH_THRU_ALL_UIS ()
780     {
781       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
782       struct cleanup *old_chain;
783
784       if (mi == NULL)
785         continue;
786
787       old_chain = make_cleanup_restore_target_terminal ();
788       target_terminal_ours_for_output ();
789
790       fprintf_unfiltered (mi->event_channel, "tsv-created,"
791                           "name=\"%s\",initial=\"%s\"\n",
792                           tsv->name, plongest (tsv->initial_value));
793
794       gdb_flush (mi->event_channel);
795
796       do_cleanups (old_chain);
797     }
798 }
799
800 /* Emit notification on deleting a trace state variable.  */
801
802 static void
803 mi_tsv_deleted (const struct trace_state_variable *tsv)
804 {
805   SWITCH_THRU_ALL_UIS ()
806     {
807       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
808       struct cleanup *old_chain;
809
810       if (mi == NULL)
811         continue;
812
813       old_chain = make_cleanup_restore_target_terminal ();
814       target_terminal_ours_for_output ();
815
816       if (tsv != NULL)
817         fprintf_unfiltered (mi->event_channel, "tsv-deleted,"
818                             "name=\"%s\"\n", tsv->name);
819       else
820         fprintf_unfiltered (mi->event_channel, "tsv-deleted\n");
821
822       gdb_flush (mi->event_channel);
823
824       do_cleanups (old_chain);
825     }
826 }
827
828 /* Emit notification on modifying a trace state variable.  */
829
830 static void
831 mi_tsv_modified (const struct trace_state_variable *tsv)
832 {
833   SWITCH_THRU_ALL_UIS ()
834     {
835       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
836       struct ui_out *mi_uiout;
837       struct cleanup *old_chain;
838
839       if (mi == NULL)
840         continue;
841
842       mi_uiout = interp_ui_out (top_level_interpreter ());
843
844       old_chain = make_cleanup_restore_target_terminal ();
845       target_terminal_ours_for_output ();
846
847       fprintf_unfiltered (mi->event_channel,
848                           "tsv-modified");
849
850       mi_uiout->redirect (mi->event_channel);
851
852       mi_uiout->field_string ("name", tsv->name);
853       mi_uiout->field_string ("initial",
854                            plongest (tsv->initial_value));
855       if (tsv->value_known)
856         mi_uiout->field_string ("current", plongest (tsv->value));
857
858       mi_uiout->redirect (NULL);
859
860       gdb_flush (mi->event_channel);
861
862       do_cleanups (old_chain);
863     }
864 }
865
866 /* Emit notification about a created breakpoint.  */
867
868 static void
869 mi_breakpoint_created (struct breakpoint *b)
870 {
871   if (mi_suppress_notification.breakpoint)
872     return;
873
874   if (b->number <= 0)
875     return;
876
877   SWITCH_THRU_ALL_UIS ()
878     {
879       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
880       struct ui_out *mi_uiout;
881       struct cleanup *old_chain;
882
883       if (mi == NULL)
884         continue;
885
886       mi_uiout = interp_ui_out (top_level_interpreter ());
887
888       old_chain = make_cleanup_restore_target_terminal ();
889       target_terminal_ours_for_output ();
890
891       fprintf_unfiltered (mi->event_channel,
892                           "breakpoint-created");
893       /* We want the output from gdb_breakpoint_query to go to
894          mi->event_channel.  One approach would be to just call
895          gdb_breakpoint_query, and then use mi_out_put to send the current
896          content of mi_uiout into mi->event_channel.  However, that will
897          break if anything is output to mi_uiout prior to calling the
898          breakpoint_created notifications.  So, we use
899          ui_out_redirect.  */
900       mi_uiout->redirect (mi->event_channel);
901       TRY
902         {
903           gdb_breakpoint_query (mi_uiout, b->number, NULL);
904         }
905       CATCH (e, RETURN_MASK_ERROR)
906         {
907         }
908       END_CATCH
909
910       mi_uiout->redirect (NULL);
911
912       gdb_flush (mi->event_channel);
913
914       do_cleanups (old_chain);
915     }
916 }
917
918 /* Emit notification about deleted breakpoint.  */
919
920 static void
921 mi_breakpoint_deleted (struct breakpoint *b)
922 {
923   if (mi_suppress_notification.breakpoint)
924     return;
925
926   if (b->number <= 0)
927     return;
928
929   SWITCH_THRU_ALL_UIS ()
930     {
931       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
932       struct cleanup *old_chain;
933
934       if (mi == NULL)
935         continue;
936
937       old_chain = make_cleanup_restore_target_terminal ();
938       target_terminal_ours_for_output ();
939
940       fprintf_unfiltered (mi->event_channel, "breakpoint-deleted,id=\"%d\"",
941                           b->number);
942
943       gdb_flush (mi->event_channel);
944
945       do_cleanups (old_chain);
946     }
947 }
948
949 /* Emit notification about modified breakpoint.  */
950
951 static void
952 mi_breakpoint_modified (struct breakpoint *b)
953 {
954   if (mi_suppress_notification.breakpoint)
955     return;
956
957   if (b->number <= 0)
958     return;
959
960   SWITCH_THRU_ALL_UIS ()
961     {
962       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
963       struct cleanup *old_chain;
964
965       if (mi == NULL)
966         continue;
967
968       old_chain = make_cleanup_restore_target_terminal ();
969       target_terminal_ours_for_output ();
970       fprintf_unfiltered (mi->event_channel,
971                           "breakpoint-modified");
972       /* We want the output from gdb_breakpoint_query to go to
973          mi->event_channel.  One approach would be to just call
974          gdb_breakpoint_query, and then use mi_out_put to send the current
975          content of mi_uiout into mi->event_channel.  However, that will
976          break if anything is output to mi_uiout prior to calling the
977          breakpoint_created notifications.  So, we use
978          ui_out_redirect.  */
979       mi->mi_uiout->redirect (mi->event_channel);
980       TRY
981         {
982           gdb_breakpoint_query (mi->mi_uiout, b->number, NULL);
983         }
984       CATCH (e, RETURN_MASK_ERROR)
985         {
986         }
987       END_CATCH
988
989       mi->mi_uiout->redirect (NULL);
990
991       gdb_flush (mi->event_channel);
992
993       do_cleanups (old_chain);
994     }
995 }
996
997 static int
998 mi_output_running_pid (struct thread_info *info, void *arg)
999 {
1000   ptid_t *ptid = (ptid_t *) arg;
1001
1002   SWITCH_THRU_ALL_UIS ()
1003     {
1004       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
1005
1006       if (mi == NULL)
1007         continue;
1008
1009       if (ptid_get_pid (*ptid) == ptid_get_pid (info->ptid))
1010         fprintf_unfiltered (mi->raw_stdout,
1011                             "*running,thread-id=\"%d\"\n",
1012                             info->global_num);
1013     }
1014
1015   return 0;
1016 }
1017
1018 static int
1019 mi_inferior_count (struct inferior *inf, void *arg)
1020 {
1021   if (inf->pid != 0)
1022     {
1023       int *count_p = (int *) arg;
1024       (*count_p)++;
1025     }
1026
1027   return 0;
1028 }
1029
1030 static void
1031 mi_on_resume_1 (struct mi_interp *mi, ptid_t ptid)
1032 {
1033   /* To cater for older frontends, emit ^running, but do it only once
1034      per each command.  We do it here, since at this point we know
1035      that the target was successfully resumed, and in non-async mode,
1036      we won't return back to MI interpreter code until the target
1037      is done running, so delaying the output of "^running" until then
1038      will make it impossible for frontend to know what's going on.
1039
1040      In future (MI3), we'll be outputting "^done" here.  */
1041   if (!running_result_record_printed && mi_proceeded)
1042     {
1043       fprintf_unfiltered (mi->raw_stdout, "%s^running\n",
1044                           current_token ? current_token : "");
1045     }
1046
1047   if (ptid_get_pid (ptid) == -1)
1048     fprintf_unfiltered (mi->raw_stdout, "*running,thread-id=\"all\"\n");
1049   else if (ptid_is_pid (ptid))
1050     {
1051       int count = 0;
1052
1053       /* Backwards compatibility.  If there's only one inferior,
1054          output "all", otherwise, output each resumed thread
1055          individually.  */
1056       iterate_over_inferiors (mi_inferior_count, &count);
1057
1058       if (count == 1)
1059         fprintf_unfiltered (mi->raw_stdout, "*running,thread-id=\"all\"\n");
1060       else
1061         iterate_over_threads (mi_output_running_pid, &ptid);
1062     }
1063   else
1064     {
1065       struct thread_info *ti = find_thread_ptid (ptid);
1066
1067       gdb_assert (ti);
1068       fprintf_unfiltered (mi->raw_stdout, "*running,thread-id=\"%d\"\n",
1069                           ti->global_num);
1070     }
1071
1072   if (!running_result_record_printed && mi_proceeded)
1073     {
1074       running_result_record_printed = 1;
1075       /* This is what gdb used to do historically -- printing prompt
1076          even if it cannot actually accept any input.  This will be
1077          surely removed for MI3, and may be removed even earlier.  */
1078       if (current_ui->prompt_state == PROMPT_BLOCKED)
1079         fputs_unfiltered ("(gdb) \n", mi->raw_stdout);
1080     }
1081   gdb_flush (mi->raw_stdout);
1082 }
1083
1084 static void
1085 mi_on_resume (ptid_t ptid)
1086 {
1087   struct thread_info *tp = NULL;
1088
1089   if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
1090     tp = inferior_thread ();
1091   else
1092     tp = find_thread_ptid (ptid);
1093
1094   /* Suppress output while calling an inferior function.  */
1095   if (tp->control.in_infcall)
1096     return;
1097
1098   SWITCH_THRU_ALL_UIS ()
1099     {
1100       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
1101       struct cleanup *old_chain;
1102
1103       if (mi == NULL)
1104         continue;
1105
1106       old_chain = make_cleanup_restore_target_terminal ();
1107       target_terminal_ours_for_output ();
1108
1109       mi_on_resume_1 (mi, ptid);
1110
1111       do_cleanups (old_chain);
1112     }
1113 }
1114
1115 /* See mi-interp.h.  */
1116
1117 void
1118 mi_output_solib_attribs (ui_out *uiout, struct so_list *solib)
1119 {
1120   struct gdbarch *gdbarch = target_gdbarch ();
1121
1122   uiout->field_string ("id", solib->so_original_name);
1123   uiout->field_string ("target-name", solib->so_original_name);
1124   uiout->field_string ("host-name", solib->so_name);
1125   uiout->field_int ("symbols-loaded", solib->symbols_loaded);
1126   if (!gdbarch_has_global_solist (target_gdbarch ()))
1127       uiout->field_fmt ("thread-group", "i%d", current_inferior ()->num);
1128
1129   ui_out_emit_list list_emitter (uiout, "ranges");
1130   ui_out_emit_tuple tuple_emitter (uiout, NULL);
1131   if (solib->addr_high != 0)
1132     {
1133       uiout->field_core_addr ("from", gdbarch, solib->addr_low);
1134       uiout->field_core_addr ("to", gdbarch, solib->addr_high);
1135     }
1136 }
1137
1138 static void
1139 mi_solib_loaded (struct so_list *solib)
1140 {
1141   SWITCH_THRU_ALL_UIS ()
1142     {
1143       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
1144       struct ui_out *uiout;
1145       struct cleanup *old_chain;
1146
1147       if (mi == NULL)
1148         continue;
1149
1150       uiout = interp_ui_out (top_level_interpreter ());
1151
1152       old_chain = make_cleanup_restore_target_terminal ();
1153       target_terminal_ours_for_output ();
1154
1155       fprintf_unfiltered (mi->event_channel, "library-loaded");
1156
1157       uiout->redirect (mi->event_channel);
1158
1159       mi_output_solib_attribs (uiout, solib);
1160
1161       uiout->redirect (NULL);
1162
1163       gdb_flush (mi->event_channel);
1164
1165       do_cleanups (old_chain);
1166     }
1167 }
1168
1169 static void
1170 mi_solib_unloaded (struct so_list *solib)
1171 {
1172   SWITCH_THRU_ALL_UIS ()
1173     {
1174       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
1175       struct ui_out *uiout;
1176       struct cleanup *old_chain;
1177
1178       if (mi == NULL)
1179         continue;
1180
1181       uiout = interp_ui_out (top_level_interpreter ());
1182
1183       old_chain = make_cleanup_restore_target_terminal ();
1184       target_terminal_ours_for_output ();
1185
1186       fprintf_unfiltered (mi->event_channel, "library-unloaded");
1187
1188       uiout->redirect (mi->event_channel);
1189
1190       uiout->field_string ("id", solib->so_original_name);
1191       uiout->field_string ("target-name", solib->so_original_name);
1192       uiout->field_string ("host-name", solib->so_name);
1193       if (!gdbarch_has_global_solist (target_gdbarch ()))
1194         {
1195           uiout->field_fmt ("thread-group", "i%d", current_inferior ()->num);
1196         }
1197
1198       uiout->redirect (NULL);
1199
1200       gdb_flush (mi->event_channel);
1201
1202       do_cleanups (old_chain);
1203     }
1204 }
1205
1206 /* Emit notification about the command parameter change.  */
1207
1208 static void
1209 mi_command_param_changed (const char *param, const char *value)
1210 {
1211   if (mi_suppress_notification.cmd_param_changed)
1212     return;
1213
1214   SWITCH_THRU_ALL_UIS ()
1215     {
1216       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
1217       struct ui_out *mi_uiout;
1218       struct cleanup *old_chain;
1219
1220       if (mi == NULL)
1221         continue;
1222
1223       mi_uiout = interp_ui_out (top_level_interpreter ());
1224
1225       old_chain = make_cleanup_restore_target_terminal ();
1226       target_terminal_ours_for_output ();
1227
1228       fprintf_unfiltered (mi->event_channel, "cmd-param-changed");
1229
1230       mi_uiout->redirect (mi->event_channel);
1231
1232       mi_uiout->field_string ("param", param);
1233       mi_uiout->field_string ("value", value);
1234
1235       mi_uiout->redirect (NULL);
1236
1237       gdb_flush (mi->event_channel);
1238
1239       do_cleanups (old_chain);
1240     }
1241 }
1242
1243 /* Emit notification about the target memory change.  */
1244
1245 static void
1246 mi_memory_changed (struct inferior *inferior, CORE_ADDR memaddr,
1247                    ssize_t len, const bfd_byte *myaddr)
1248 {
1249   if (mi_suppress_notification.memory)
1250     return;
1251
1252   SWITCH_THRU_ALL_UIS ()
1253     {
1254       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
1255       struct ui_out *mi_uiout;
1256       struct obj_section *sec;
1257       struct cleanup *old_chain;
1258
1259       if (mi == NULL)
1260         continue;
1261
1262       mi_uiout = interp_ui_out (top_level_interpreter ());
1263
1264       old_chain = make_cleanup_restore_target_terminal ();
1265       target_terminal_ours_for_output ();
1266
1267       fprintf_unfiltered (mi->event_channel, "memory-changed");
1268
1269       mi_uiout->redirect (mi->event_channel);
1270
1271       mi_uiout->field_fmt ("thread-group", "i%d", inferior->num);
1272       mi_uiout->field_core_addr ("addr", target_gdbarch (), memaddr);
1273       mi_uiout->field_fmt ("len", "%s", hex_string (len));
1274
1275       /* Append 'type=code' into notification if MEMADDR falls in the range of
1276          sections contain code.  */
1277       sec = find_pc_section (memaddr);
1278       if (sec != NULL && sec->objfile != NULL)
1279         {
1280           flagword flags = bfd_get_section_flags (sec->objfile->obfd,
1281                                                   sec->the_bfd_section);
1282
1283           if (flags & SEC_CODE)
1284             mi_uiout->field_string ("type", "code");
1285         }
1286
1287       mi_uiout->redirect (NULL);
1288
1289       gdb_flush (mi->event_channel);
1290
1291       do_cleanups (old_chain);
1292     }
1293 }
1294
1295 /* Emit an event when the selection context (inferior, thread, frame)
1296    changed.  */
1297
1298 static void
1299 mi_user_selected_context_changed (user_selected_what selection)
1300 {
1301   struct thread_info *tp;
1302
1303   /* Don't send an event if we're responding to an MI command.  */
1304   if (mi_suppress_notification.user_selected_context)
1305     return;
1306
1307   tp = find_thread_ptid (inferior_ptid);
1308
1309   SWITCH_THRU_ALL_UIS ()
1310     {
1311       struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
1312       struct ui_out *mi_uiout;
1313       struct cleanup *old_chain;
1314
1315       if (mi == NULL)
1316         continue;
1317
1318       mi_uiout = interp_ui_out (top_level_interpreter ());
1319
1320       mi_uiout->redirect (mi->event_channel);
1321
1322       old_chain = make_cleanup_ui_out_redirect_pop (mi_uiout);
1323
1324       make_cleanup_restore_target_terminal ();
1325       target_terminal_ours_for_output ();
1326
1327       if (selection & USER_SELECTED_INFERIOR)
1328         print_selected_inferior (mi->cli_uiout);
1329
1330       if (tp != NULL
1331           && (selection & (USER_SELECTED_THREAD | USER_SELECTED_FRAME)))
1332         {
1333           print_selected_thread_frame (mi->cli_uiout, selection);
1334
1335           fprintf_unfiltered (mi->event_channel,
1336                               "thread-selected,id=\"%d\"",
1337                               tp->global_num);
1338
1339           if (tp->state != THREAD_RUNNING)
1340             {
1341               if (has_stack_frames ())
1342                 print_stack_frame_to_uiout (mi_uiout, get_selected_frame (NULL),
1343                                             1, SRC_AND_LOC, 1);
1344             }
1345         }
1346
1347       gdb_flush (mi->event_channel);
1348       do_cleanups (old_chain);
1349     }
1350 }
1351
1352 static int
1353 report_initial_inferior (struct inferior *inf, void *closure)
1354 {
1355   /* This function is called from mi_interpreter_init, and since
1356      mi_inferior_added assumes that inferior is fully initialized
1357      and top_level_interpreter_data is set, we cannot call
1358      it here.  */
1359   struct mi_interp *mi = (struct mi_interp *) closure;
1360   struct cleanup *old_chain;
1361
1362   old_chain = make_cleanup_restore_target_terminal ();
1363   target_terminal_ours_for_output ();
1364
1365   fprintf_unfiltered (mi->event_channel,
1366                       "thread-group-added,id=\"i%d\"",
1367                       inf->num);
1368   gdb_flush (mi->event_channel);
1369
1370   do_cleanups (old_chain);
1371   return 0;
1372 }
1373
1374 ui_out *
1375 mi_interp::interp_ui_out ()
1376 {
1377   return this->mi_uiout;
1378 }
1379
1380 /* Do MI-specific logging actions; save raw_stdout, and change all
1381    the consoles to use the supplied ui-file(s).  */
1382
1383 void
1384 mi_interp::set_logging (ui_file_up logfile, bool logging_redirect)
1385 {
1386   struct mi_interp *mi = this;
1387
1388   if (logfile != NULL)
1389     {
1390       mi->saved_raw_stdout = mi->raw_stdout;
1391       mi->raw_stdout = make_logging_output (mi->raw_stdout,
1392                                             std::move (logfile),
1393                                             logging_redirect);
1394
1395     }
1396   else
1397     {
1398       delete mi->raw_stdout;
1399       mi->raw_stdout = mi->saved_raw_stdout;
1400       mi->saved_raw_stdout = NULL;
1401     }
1402   
1403   mi->out->set_raw (mi->raw_stdout);
1404   mi->err->set_raw (mi->raw_stdout);
1405   mi->log->set_raw (mi->raw_stdout);
1406   mi->targ->set_raw (mi->raw_stdout);
1407   mi->event_channel->set_raw (mi->raw_stdout);
1408 }
1409
1410 /* Factory for MI interpreters.  */
1411
1412 static struct interp *
1413 mi_interp_factory (const char *name)
1414 {
1415   return new mi_interp (name);
1416 }
1417
1418 extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
1419
1420 void
1421 _initialize_mi_interp (void)
1422 {
1423   /* The various interpreter levels.  */
1424   interp_factory_register (INTERP_MI1, mi_interp_factory);
1425   interp_factory_register (INTERP_MI2, mi_interp_factory);
1426   interp_factory_register (INTERP_MI3, mi_interp_factory);
1427   interp_factory_register (INTERP_MI, mi_interp_factory);
1428
1429   observer_attach_signal_received (mi_on_signal_received);
1430   observer_attach_end_stepping_range (mi_on_end_stepping_range);
1431   observer_attach_signal_exited (mi_on_signal_exited);
1432   observer_attach_exited (mi_on_exited);
1433   observer_attach_no_history (mi_on_no_history);
1434   observer_attach_new_thread (mi_new_thread);
1435   observer_attach_thread_exit (mi_thread_exit);
1436   observer_attach_inferior_added (mi_inferior_added);
1437   observer_attach_inferior_appeared (mi_inferior_appeared);
1438   observer_attach_inferior_exit (mi_inferior_exit);
1439   observer_attach_inferior_removed (mi_inferior_removed);
1440   observer_attach_record_changed (mi_record_changed);
1441   observer_attach_normal_stop (mi_on_normal_stop);
1442   observer_attach_target_resumed (mi_on_resume);
1443   observer_attach_solib_loaded (mi_solib_loaded);
1444   observer_attach_solib_unloaded (mi_solib_unloaded);
1445   observer_attach_about_to_proceed (mi_about_to_proceed);
1446   observer_attach_traceframe_changed (mi_traceframe_changed);
1447   observer_attach_tsv_created (mi_tsv_created);
1448   observer_attach_tsv_deleted (mi_tsv_deleted);
1449   observer_attach_tsv_modified (mi_tsv_modified);
1450   observer_attach_breakpoint_created (mi_breakpoint_created);
1451   observer_attach_breakpoint_deleted (mi_breakpoint_deleted);
1452   observer_attach_breakpoint_modified (mi_breakpoint_modified);
1453   observer_attach_command_param_changed (mi_command_param_changed);
1454   observer_attach_memory_changed (mi_memory_changed);
1455   observer_attach_sync_execution_done (mi_on_sync_execution_done);
1456   observer_attach_user_selected_context_changed
1457     (mi_user_selected_context_changed);
1458 }