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