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