gdb_readline2 -> gdb_readline_no_editing_callback
[external/binutils.git] / gdb / mi / mi-interp.c
1 /* MI Interpreter Definitions and Commands for GDB, the GNU debugger.
2
3    Copyright (C) 2002-2016 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
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 static void mi_command_loop (void *data);
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);
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 static void *
92 mi_interpreter_init (struct interp *interp, int top_level)
93 {
94   struct mi_interp *mi = XNEW (struct mi_interp);
95   const char *name;
96   int mi_version;
97
98   /* Assign the output channel created at startup to its own global,
99      so that we can create a console channel that encapsulates and
100      prefixes all gdb_output-type bits coming from the rest of the
101      debugger.  */
102
103   raw_stdout = gdb_stdout;
104
105   /* Create MI console channels, each with a different prefix so they
106      can be distinguished.  */
107   mi->out = mi_console_file_new (raw_stdout, "~", '"');
108   mi->err = mi_console_file_new (raw_stdout, "&", '"');
109   mi->log = mi->err;
110   mi->targ = mi_console_file_new (raw_stdout, "@", '"');
111   mi->event_channel = mi_console_file_new (raw_stdout, "=", 0);
112
113   name = interp_name (interp);
114   /* INTERP_MI selects the most recent released version.  "mi2" was
115      released as part of GDB 6.0.  */
116   if (strcmp (name, INTERP_MI) == 0)
117     mi_version = 2;
118   else if (strcmp (name, INTERP_MI1) == 0)
119     mi_version = 1;
120   else if (strcmp (name, INTERP_MI2) == 0)
121     mi_version = 2;
122   else if (strcmp (name, INTERP_MI3) == 0)
123     mi_version = 3;
124   else
125     gdb_assert_not_reached ("unhandled MI version");
126
127   mi->mi_uiout = mi_out_new (mi_version);
128   mi->cli_uiout = cli_out_new (mi->out);
129
130   /* There are installed even if MI is not the top level interpreter.
131      The callbacks themselves decide whether to be skipped.  */
132   observer_attach_signal_received (mi_on_signal_received);
133   observer_attach_end_stepping_range (mi_on_end_stepping_range);
134   observer_attach_signal_exited (mi_on_signal_exited);
135   observer_attach_exited (mi_on_exited);
136   observer_attach_no_history (mi_on_no_history);
137
138   if (top_level)
139     {
140       observer_attach_new_thread (mi_new_thread);
141       observer_attach_thread_exit (mi_thread_exit);
142       observer_attach_inferior_added (mi_inferior_added);
143       observer_attach_inferior_appeared (mi_inferior_appeared);
144       observer_attach_inferior_exit (mi_inferior_exit);
145       observer_attach_inferior_removed (mi_inferior_removed);
146       observer_attach_record_changed (mi_record_changed);
147       observer_attach_normal_stop (mi_on_normal_stop);
148       observer_attach_target_resumed (mi_on_resume);
149       observer_attach_solib_loaded (mi_solib_loaded);
150       observer_attach_solib_unloaded (mi_solib_unloaded);
151       observer_attach_about_to_proceed (mi_about_to_proceed);
152       observer_attach_traceframe_changed (mi_traceframe_changed);
153       observer_attach_tsv_created (mi_tsv_created);
154       observer_attach_tsv_deleted (mi_tsv_deleted);
155       observer_attach_tsv_modified (mi_tsv_modified);
156       observer_attach_breakpoint_created (mi_breakpoint_created);
157       observer_attach_breakpoint_deleted (mi_breakpoint_deleted);
158       observer_attach_breakpoint_modified (mi_breakpoint_modified);
159       observer_attach_command_param_changed (mi_command_param_changed);
160       observer_attach_memory_changed (mi_memory_changed);
161       observer_attach_sync_execution_done (mi_on_sync_execution_done);
162
163       /* The initial inferior is created before this function is
164          called, so we need to report it explicitly.  Use iteration in
165          case future version of GDB creates more than one inferior
166          up-front.  */
167       iterate_over_inferiors (report_initial_inferior, mi);
168     }
169
170   return mi;
171 }
172
173 static int
174 mi_interpreter_resume (void *data)
175 {
176   struct mi_interp *mi = (struct mi_interp *) data;
177
178   /* As per hack note in mi_interpreter_init, swap in the output
179      channels... */
180   gdb_setup_readline ();
181
182   /* These overwrite some of the initialization done in
183      _intialize_event_loop.  */
184   call_readline = gdb_readline_no_editing_callback;
185   input_handler = mi_execute_command_input_handler;
186   async_command_editing_p = 0;
187   /* FIXME: This is a total hack for now.  PB's use of the MI
188      implicitly relies on a bug in the async support which allows
189      asynchronous commands to leak through the commmand loop.  The bug
190      involves (but is not limited to) the fact that sync_execution was
191      erroneously initialized to 0.  Duplicate by initializing it thus
192      here...  */
193   sync_execution = 0;
194
195   gdb_stdout = mi->out;
196   /* Route error and log output through the MI.  */
197   gdb_stderr = mi->err;
198   gdb_stdlog = mi->log;
199   /* Route target output through the MI.  */
200   gdb_stdtarg = mi->targ;
201   /* Route target error through the MI as well.  */
202   gdb_stdtargerr = mi->targ;
203
204   /* Replace all the hooks that we know about.  There really needs to
205      be a better way of doing this... */
206   clear_interpreter_hooks ();
207
208   deprecated_show_load_progress = mi_load_progress;
209
210   return 1;
211 }
212
213 static int
214 mi_interpreter_suspend (void *data)
215 {
216   gdb_disable_readline ();
217   return 1;
218 }
219
220 static struct gdb_exception
221 mi_interpreter_exec (void *data, const char *command)
222 {
223   mi_execute_command_wrapper (command);
224   return exception_none;
225 }
226
227 void
228 mi_cmd_interpreter_exec (char *command, char **argv, int argc)
229 {
230   struct interp *interp_to_use;
231   int i;
232   char *mi_error_message = NULL;
233   struct cleanup *old_chain;
234
235   if (argc < 2)
236     error (_("-interpreter-exec: "
237              "Usage: -interpreter-exec interp command"));
238
239   interp_to_use = interp_lookup (argv[0]);
240   if (interp_to_use == NULL)
241     error (_("-interpreter-exec: could not find interpreter \"%s\""),
242            argv[0]);
243
244   /* Note that unlike the CLI version of this command, we don't
245      actually set INTERP_TO_USE as the current interpreter, as we
246      still want gdb_stdout, etc. to point at MI streams.  */
247
248   /* Insert the MI out hooks, making sure to also call the
249      interpreter's hooks if it has any.  */
250   /* KRS: We shouldn't need this... Events should be installed and
251      they should just ALWAYS fire something out down the MI
252      channel.  */
253   mi_insert_notify_hooks ();
254
255   /* Now run the code.  */
256
257   old_chain = make_cleanup (null_cleanup, 0);
258   for (i = 1; i < argc; i++)
259     {
260       struct gdb_exception e = interp_exec (interp_to_use, argv[i]);
261
262       if (e.reason < 0)
263         {
264           mi_error_message = xstrdup (e.message);
265           make_cleanup (xfree, mi_error_message);
266           break;
267         }
268     }
269
270   mi_remove_notify_hooks ();
271
272   if (mi_error_message != NULL)
273     error ("%s", mi_error_message);
274   do_cleanups (old_chain);
275 }
276
277 /* This inserts a number of hooks that are meant to produce
278    async-notify ("=") MI messages while running commands in another
279    interpreter using mi_interpreter_exec.  The canonical use for this
280    is to allow access to the gdb CLI interpreter from within the MI,
281    while still producing MI style output when actions in the CLI
282    command change GDB's state.  */
283
284 static void
285 mi_insert_notify_hooks (void)
286 {
287   deprecated_query_hook = mi_interp_query_hook;
288 }
289
290 static void
291 mi_remove_notify_hooks (void)
292 {
293   deprecated_query_hook = NULL;
294 }
295
296 static int
297 mi_interp_query_hook (const char *ctlstr, va_list ap)
298 {
299   return 1;
300 }
301
302 static void
303 mi_execute_command_wrapper (const char *cmd)
304 {
305   mi_execute_command (cmd, stdin == instream);
306 }
307
308 /* Observer for the synchronous_command_done notification.  */
309
310 static void
311 mi_on_sync_execution_done (void)
312 {
313   /* If MI is sync, then output the MI prompt now, indicating we're
314      ready for further input.  */
315   if (!mi_async_p ())
316     {
317       fputs_unfiltered ("(gdb) \n", raw_stdout);
318       gdb_flush (raw_stdout);
319     }
320 }
321
322 /* mi_execute_command_wrapper wrapper suitable for INPUT_HANDLER.  */
323
324 static void
325 mi_execute_command_input_handler (char *cmd)
326 {
327   mi_execute_command_wrapper (cmd);
328
329   /* Print a prompt, indicating we're ready for further input, unless
330      we just started a synchronous command.  In that case, we're about
331      to go back to the event loop and will output the prompt in the
332      'synchronous_command_done' observer when the target next
333      stops.  */
334   if (!sync_execution)
335     {
336       fputs_unfiltered ("(gdb) \n", raw_stdout);
337       gdb_flush (raw_stdout);
338     }
339 }
340
341 static void
342 mi_command_loop (void *data)
343 {
344   /* Turn off 8 bit strings in quoted output.  Any character with the
345      high bit set is printed using C's octal format.  */
346   sevenbit_strings = 1;
347
348   /* Tell the world that we're alive.  */
349   fputs_unfiltered ("(gdb) \n", raw_stdout);
350   gdb_flush (raw_stdout);
351
352   start_event_loop ();
353 }
354
355 static void
356 mi_new_thread (struct thread_info *t)
357 {
358   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
359   struct inferior *inf = find_inferior_ptid (t->ptid);
360
361   gdb_assert (inf);
362
363   fprintf_unfiltered (mi->event_channel, 
364                       "thread-created,id=\"%d\",group-id=\"i%d\"",
365                       t->global_num, inf->num);
366   gdb_flush (mi->event_channel);
367 }
368
369 static void
370 mi_thread_exit (struct thread_info *t, int silent)
371 {
372   struct mi_interp *mi;
373   struct inferior *inf;
374   struct cleanup *old_chain;
375
376   if (silent)
377     return;
378
379   inf = find_inferior_ptid (t->ptid);
380
381   mi = (struct mi_interp *) top_level_interpreter_data ();
382   old_chain = make_cleanup_restore_target_terminal ();
383   target_terminal_ours ();
384   fprintf_unfiltered (mi->event_channel, 
385                       "thread-exited,id=\"%d\",group-id=\"i%d\"",
386                       t->global_num, inf->num);
387   gdb_flush (mi->event_channel);
388
389   do_cleanups (old_chain);
390 }
391
392 /* Emit notification on changing the state of record.  */
393
394 static void
395 mi_record_changed (struct inferior *inferior, int started)
396 {
397   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
398
399   fprintf_unfiltered (mi->event_channel,  "record-%s,thread-group=\"i%d\"",
400                       started ? "started" : "stopped", inferior->num);
401
402   gdb_flush (mi->event_channel);
403 }
404
405 static void
406 mi_inferior_added (struct inferior *inf)
407 {
408   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
409
410   target_terminal_ours ();
411   fprintf_unfiltered (mi->event_channel,
412                       "thread-group-added,id=\"i%d\"",
413                       inf->num);
414   gdb_flush (mi->event_channel);
415 }
416
417 static void
418 mi_inferior_appeared (struct inferior *inf)
419 {
420   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
421
422   target_terminal_ours ();
423   fprintf_unfiltered (mi->event_channel,
424                       "thread-group-started,id=\"i%d\",pid=\"%d\"",
425                       inf->num, inf->pid);
426   gdb_flush (mi->event_channel);
427 }
428
429 static void
430 mi_inferior_exit (struct inferior *inf)
431 {
432   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
433
434   target_terminal_ours ();
435   if (inf->has_exit_code)
436     fprintf_unfiltered (mi->event_channel,
437                         "thread-group-exited,id=\"i%d\",exit-code=\"%s\"",
438                         inf->num, int_string (inf->exit_code, 8, 0, 0, 1));
439   else
440     fprintf_unfiltered (mi->event_channel,
441                         "thread-group-exited,id=\"i%d\"", inf->num);
442
443   gdb_flush (mi->event_channel);  
444 }
445
446 static void
447 mi_inferior_removed (struct inferior *inf)
448 {
449   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
450
451   target_terminal_ours ();
452   fprintf_unfiltered (mi->event_channel,
453                       "thread-group-removed,id=\"i%d\"",
454                       inf->num);
455   gdb_flush (mi->event_channel);
456 }
457
458 /* Return the MI interpreter, if it is active -- either because it's
459    the top-level interpreter or the interpreter executing the current
460    command.  Returns NULL if the MI interpreter is not being used.  */
461
462 static struct interp *
463 find_mi_interpreter (void)
464 {
465   struct interp *interp;
466
467   interp = top_level_interpreter ();
468   if (ui_out_is_mi_like_p (interp_ui_out (interp)))
469     return interp;
470
471   interp = command_interp ();
472   if (ui_out_is_mi_like_p (interp_ui_out (interp)))
473     return interp;
474
475   return NULL;
476 }
477
478 /* Return the MI_INTERP structure of the active MI interpreter.
479    Returns NULL if MI is not active.  */
480
481 static struct mi_interp *
482 mi_interp_data (void)
483 {
484   struct interp *interp = find_mi_interpreter ();
485
486   if (interp != NULL)
487     return (struct mi_interp *) interp_data (interp);
488   return NULL;
489 }
490
491 /* Observers for several run control events that print why the
492    inferior has stopped to both the the MI event channel and to the MI
493    console.  If the MI interpreter is not active, print nothing.  */
494
495 /* Observer for the signal_received notification.  */
496
497 static void
498 mi_on_signal_received (enum gdb_signal siggnal)
499 {
500   struct mi_interp *mi = mi_interp_data ();
501
502   if (mi == NULL)
503     return;
504
505   print_signal_received_reason (mi->mi_uiout, siggnal);
506   print_signal_received_reason (mi->cli_uiout, siggnal);
507 }
508
509 /* Observer for the end_stepping_range notification.  */
510
511 static void
512 mi_on_end_stepping_range (void)
513 {
514   struct mi_interp *mi = mi_interp_data ();
515
516   if (mi == NULL)
517     return;
518
519   print_end_stepping_range_reason (mi->mi_uiout);
520   print_end_stepping_range_reason (mi->cli_uiout);
521 }
522
523 /* Observer for the signal_exited notification.  */
524
525 static void
526 mi_on_signal_exited (enum gdb_signal siggnal)
527 {
528   struct mi_interp *mi = mi_interp_data ();
529
530   if (mi == NULL)
531     return;
532
533   print_signal_exited_reason (mi->mi_uiout, siggnal);
534   print_signal_exited_reason (mi->cli_uiout, siggnal);
535 }
536
537 /* Observer for the exited notification.  */
538
539 static void
540 mi_on_exited (int exitstatus)
541 {
542   struct mi_interp *mi = mi_interp_data ();
543
544   if (mi == NULL)
545     return;
546
547   print_exited_reason (mi->mi_uiout, exitstatus);
548   print_exited_reason (mi->cli_uiout, exitstatus);
549 }
550
551 /* Observer for the no_history notification.  */
552
553 static void
554 mi_on_no_history (void)
555 {
556   struct mi_interp *mi = mi_interp_data ();
557
558   if (mi == NULL)
559     return;
560
561   print_no_history_reason (mi->mi_uiout);
562   print_no_history_reason (mi->cli_uiout);
563 }
564
565 static void
566 mi_on_normal_stop (struct bpstats *bs, int print_frame)
567 {
568   /* Since this can be called when CLI command is executing,
569      using cli interpreter, be sure to use MI uiout for output,
570      not the current one.  */
571   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
572
573   if (print_frame)
574     {
575       struct thread_info *tp;
576       int core;
577
578       tp = inferior_thread ();
579
580       if (tp->thread_fsm != NULL
581           && thread_fsm_finished_p (tp->thread_fsm))
582         {
583           enum async_reply_reason reason;
584
585           reason = thread_fsm_async_reply_reason (tp->thread_fsm);
586           ui_out_field_string (mi_uiout, "reason",
587                                async_reason_lookup (reason));
588         }
589       print_stop_event (mi_uiout);
590
591       /* Breakpoint hits should always be mirrored to the console.
592          Deciding what to mirror to the console wrt to breakpoints and
593          random stops gets messy real fast.  E.g., say "s" trips on a
594          breakpoint.  We'd clearly want to mirror the event to the
595          console in this case.  But what about more complicated cases
596          like "s&; thread n; s&", and one of those steps spawning a
597          new thread, and that thread hitting a breakpoint?  It's
598          impossible in general to track whether the thread had any
599          relation to the commands that had been executed.  So we just
600          simplify and always mirror breakpoints and random events to
601          the console.
602
603          OTOH, we should print the source line to the console when
604          stepping or other similar commands, iff the step was started
605          by a console command, but not if it was started with
606          -exec-step or similar.  */
607       if ((bpstat_what (tp->control.stop_bpstat).main_action
608            == BPSTAT_WHAT_STOP_NOISY)
609           || !(tp->thread_fsm != NULL
610                && thread_fsm_finished_p (tp->thread_fsm))
611           || (tp->control.command_interp != NULL
612               && tp->control.command_interp != top_level_interpreter ()))
613         {
614           struct mi_interp *mi
615             = (struct mi_interp *) top_level_interpreter_data ();
616
617           print_stop_event (mi->cli_uiout);
618         }
619
620       tp = inferior_thread ();
621       ui_out_field_int (mi_uiout, "thread-id", tp->global_num);
622       if (non_stop)
623         {
624           struct cleanup *back_to = make_cleanup_ui_out_list_begin_end 
625             (mi_uiout, "stopped-threads");
626
627           ui_out_field_int (mi_uiout, NULL, tp->global_num);
628           do_cleanups (back_to);
629         }
630       else
631         ui_out_field_string (mi_uiout, "stopped-threads", "all");
632
633       core = target_core_of_thread (inferior_ptid);
634       if (core != -1)
635         ui_out_field_int (mi_uiout, "core", core);
636     }
637   
638   fputs_unfiltered ("*stopped", raw_stdout);
639   mi_out_put (mi_uiout, raw_stdout);
640   mi_out_rewind (mi_uiout);
641   mi_print_timing_maybe ();
642   fputs_unfiltered ("\n", raw_stdout);
643   gdb_flush (raw_stdout);
644 }
645
646 static void
647 mi_about_to_proceed (void)
648 {
649   /* Suppress output while calling an inferior function.  */
650
651   if (!ptid_equal (inferior_ptid, null_ptid))
652     {
653       struct thread_info *tp = inferior_thread ();
654
655       if (tp->control.in_infcall)
656         return;
657     }
658
659   mi_proceeded = 1;
660 }
661
662 /* When the element is non-zero, no MI notifications will be emitted in
663    response to the corresponding observers.  */
664
665 struct mi_suppress_notification mi_suppress_notification =
666   {
667     0,
668     0,
669     0,
670   };
671
672 /* Emit notification on changing a traceframe.  */
673
674 static void
675 mi_traceframe_changed (int tfnum, int tpnum)
676 {
677   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
678
679   if (mi_suppress_notification.traceframe)
680     return;
681
682   target_terminal_ours ();
683
684   if (tfnum >= 0)
685     fprintf_unfiltered (mi->event_channel, "traceframe-changed,"
686                         "num=\"%d\",tracepoint=\"%d\"\n",
687                         tfnum, tpnum);
688   else
689     fprintf_unfiltered (mi->event_channel, "traceframe-changed,end");
690
691   gdb_flush (mi->event_channel);
692 }
693
694 /* Emit notification on creating a trace state variable.  */
695
696 static void
697 mi_tsv_created (const struct trace_state_variable *tsv)
698 {
699   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
700
701   target_terminal_ours ();
702
703   fprintf_unfiltered (mi->event_channel, "tsv-created,"
704                       "name=\"%s\",initial=\"%s\"\n",
705                       tsv->name, plongest (tsv->initial_value));
706
707   gdb_flush (mi->event_channel);
708 }
709
710 /* Emit notification on deleting a trace state variable.  */
711
712 static void
713 mi_tsv_deleted (const struct trace_state_variable *tsv)
714 {
715   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
716
717   target_terminal_ours ();
718
719   if (tsv != NULL)
720     fprintf_unfiltered (mi->event_channel, "tsv-deleted,"
721                         "name=\"%s\"\n", tsv->name);
722   else
723     fprintf_unfiltered (mi->event_channel, "tsv-deleted\n");
724
725   gdb_flush (mi->event_channel);
726 }
727
728 /* Emit notification on modifying a trace state variable.  */
729
730 static void
731 mi_tsv_modified (const struct trace_state_variable *tsv)
732 {
733   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
734   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
735
736   target_terminal_ours ();
737
738   fprintf_unfiltered (mi->event_channel,
739                       "tsv-modified");
740
741   ui_out_redirect (mi_uiout, mi->event_channel);
742
743   ui_out_field_string (mi_uiout, "name", tsv->name);
744   ui_out_field_string (mi_uiout, "initial",
745                        plongest (tsv->initial_value));
746   if (tsv->value_known)
747     ui_out_field_string (mi_uiout, "current", plongest (tsv->value));
748
749   ui_out_redirect (mi_uiout, NULL);
750
751   gdb_flush (mi->event_channel);
752 }
753
754 /* Emit notification about a created breakpoint.  */
755
756 static void
757 mi_breakpoint_created (struct breakpoint *b)
758 {
759   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
760   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
761
762   if (mi_suppress_notification.breakpoint)
763     return;
764
765   if (b->number <= 0)
766     return;
767
768   target_terminal_ours ();
769   fprintf_unfiltered (mi->event_channel,
770                       "breakpoint-created");
771   /* We want the output from gdb_breakpoint_query to go to
772      mi->event_channel.  One approach would be to just call
773      gdb_breakpoint_query, and then use mi_out_put to send the current
774      content of mi_outout into mi->event_channel.  However, that will
775      break if anything is output to mi_uiout prior to calling the
776      breakpoint_created notifications.  So, we use
777      ui_out_redirect.  */
778   ui_out_redirect (mi_uiout, mi->event_channel);
779   TRY
780     {
781       gdb_breakpoint_query (mi_uiout, b->number, NULL);
782     }
783   CATCH (e, RETURN_MASK_ERROR)
784     {
785     }
786   END_CATCH
787
788   ui_out_redirect (mi_uiout, NULL);
789
790   gdb_flush (mi->event_channel);
791 }
792
793 /* Emit notification about deleted breakpoint.  */
794
795 static void
796 mi_breakpoint_deleted (struct breakpoint *b)
797 {
798   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
799
800   if (mi_suppress_notification.breakpoint)
801     return;
802
803   if (b->number <= 0)
804     return;
805
806   target_terminal_ours ();
807
808   fprintf_unfiltered (mi->event_channel, "breakpoint-deleted,id=\"%d\"",
809                       b->number);
810
811   gdb_flush (mi->event_channel);
812 }
813
814 /* Emit notification about modified breakpoint.  */
815
816 static void
817 mi_breakpoint_modified (struct breakpoint *b)
818 {
819   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
820   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
821
822   if (mi_suppress_notification.breakpoint)
823     return;
824
825   if (b->number <= 0)
826     return;
827
828   target_terminal_ours ();
829   fprintf_unfiltered (mi->event_channel,
830                       "breakpoint-modified");
831   /* We want the output from gdb_breakpoint_query to go to
832      mi->event_channel.  One approach would be to just call
833      gdb_breakpoint_query, and then use mi_out_put to send the current
834      content of mi_outout into mi->event_channel.  However, that will
835      break if anything is output to mi_uiout prior to calling the
836      breakpoint_created notifications.  So, we use
837      ui_out_redirect.  */
838   ui_out_redirect (mi_uiout, mi->event_channel);
839   TRY
840     {
841       gdb_breakpoint_query (mi_uiout, b->number, NULL);
842     }
843   CATCH (e, RETURN_MASK_ERROR)
844     {
845     }
846   END_CATCH
847
848   ui_out_redirect (mi_uiout, NULL);
849
850   gdb_flush (mi->event_channel);
851 }
852
853 static int
854 mi_output_running_pid (struct thread_info *info, void *arg)
855 {
856   ptid_t *ptid = (ptid_t *) arg;
857
858   if (ptid_get_pid (*ptid) == ptid_get_pid (info->ptid))
859     fprintf_unfiltered (raw_stdout,
860                         "*running,thread-id=\"%d\"\n",
861                         info->global_num);
862
863   return 0;
864 }
865
866 static int
867 mi_inferior_count (struct inferior *inf, void *arg)
868 {
869   if (inf->pid != 0)
870     {
871       int *count_p = (int *) arg;
872       (*count_p)++;
873     }
874
875   return 0;
876 }
877
878 static void
879 mi_on_resume (ptid_t ptid)
880 {
881   struct thread_info *tp = NULL;
882
883   if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
884     tp = inferior_thread ();
885   else
886     tp = find_thread_ptid (ptid);
887
888   /* Suppress output while calling an inferior function.  */
889   if (tp->control.in_infcall)
890     return;
891
892   /* To cater for older frontends, emit ^running, but do it only once
893      per each command.  We do it here, since at this point we know
894      that the target was successfully resumed, and in non-async mode,
895      we won't return back to MI interpreter code until the target
896      is done running, so delaying the output of "^running" until then
897      will make it impossible for frontend to know what's going on.
898
899      In future (MI3), we'll be outputting "^done" here.  */
900   if (!running_result_record_printed && mi_proceeded)
901     {
902       fprintf_unfiltered (raw_stdout, "%s^running\n",
903                           current_token ? current_token : "");
904     }
905
906   if (ptid_get_pid (ptid) == -1)
907     fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
908   else if (ptid_is_pid (ptid))
909     {
910       int count = 0;
911
912       /* Backwards compatibility.  If there's only one inferior,
913          output "all", otherwise, output each resumed thread
914          individually.  */
915       iterate_over_inferiors (mi_inferior_count, &count);
916
917       if (count == 1)
918         fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
919       else
920         iterate_over_threads (mi_output_running_pid, &ptid);
921     }
922   else
923     {
924       struct thread_info *ti = find_thread_ptid (ptid);
925
926       gdb_assert (ti);
927       fprintf_unfiltered (raw_stdout, "*running,thread-id=\"%d\"\n",
928                           ti->global_num);
929     }
930
931   if (!running_result_record_printed && mi_proceeded)
932     {
933       running_result_record_printed = 1;
934       /* This is what gdb used to do historically -- printing prompt even if
935          it cannot actually accept any input.  This will be surely removed
936          for MI3, and may be removed even earlier.  SYNC_EXECUTION is
937          checked here because we only need to emit a prompt if a
938          synchronous command was issued when the target is async.  */
939       if (!target_is_async_p () || sync_execution)
940         fputs_unfiltered ("(gdb) \n", raw_stdout);
941     }
942   gdb_flush (raw_stdout);
943 }
944
945 static void
946 mi_solib_loaded (struct so_list *solib)
947 {
948   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
949   struct ui_out *uiout = interp_ui_out (top_level_interpreter ());
950
951   target_terminal_ours ();
952
953   fprintf_unfiltered (mi->event_channel, "library-loaded");
954
955   ui_out_redirect (uiout, mi->event_channel);
956
957   ui_out_field_string (uiout, "id", solib->so_original_name);
958   ui_out_field_string (uiout, "target-name", solib->so_original_name);
959   ui_out_field_string (uiout, "host-name", solib->so_name);
960   ui_out_field_int (uiout, "symbols-loaded", solib->symbols_loaded);
961   if (!gdbarch_has_global_solist (target_gdbarch ()))
962     {
963       ui_out_field_fmt (uiout, "thread-group", "i%d", current_inferior ()->num);
964     }
965
966   ui_out_redirect (uiout, NULL);
967
968   gdb_flush (mi->event_channel);
969 }
970
971 static void
972 mi_solib_unloaded (struct so_list *solib)
973 {
974   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
975   struct ui_out *uiout = interp_ui_out (top_level_interpreter ());
976
977   target_terminal_ours ();
978
979   fprintf_unfiltered (mi->event_channel, "library-unloaded");
980
981   ui_out_redirect (uiout, mi->event_channel);
982
983   ui_out_field_string (uiout, "id", solib->so_original_name);
984   ui_out_field_string (uiout, "target-name", solib->so_original_name);
985   ui_out_field_string (uiout, "host-name", solib->so_name);
986   if (!gdbarch_has_global_solist (target_gdbarch ()))
987     {
988       ui_out_field_fmt (uiout, "thread-group", "i%d", current_inferior ()->num);
989     }
990
991   ui_out_redirect (uiout, NULL);
992
993   gdb_flush (mi->event_channel);
994 }
995
996 /* Emit notification about the command parameter change.  */
997
998 static void
999 mi_command_param_changed (const char *param, const char *value)
1000 {
1001   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
1002   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
1003
1004   if (mi_suppress_notification.cmd_param_changed)
1005     return;
1006
1007   target_terminal_ours ();
1008
1009   fprintf_unfiltered (mi->event_channel,
1010                       "cmd-param-changed");
1011
1012   ui_out_redirect (mi_uiout, mi->event_channel);
1013
1014   ui_out_field_string (mi_uiout, "param", param);
1015   ui_out_field_string (mi_uiout, "value", value);
1016
1017   ui_out_redirect (mi_uiout, NULL);
1018
1019   gdb_flush (mi->event_channel);
1020 }
1021
1022 /* Emit notification about the target memory change.  */
1023
1024 static void
1025 mi_memory_changed (struct inferior *inferior, CORE_ADDR memaddr,
1026                    ssize_t len, const bfd_byte *myaddr)
1027 {
1028   struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
1029   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
1030   struct obj_section *sec;
1031
1032   if (mi_suppress_notification.memory)
1033     return;
1034
1035   target_terminal_ours ();
1036
1037   fprintf_unfiltered (mi->event_channel,
1038                       "memory-changed");
1039
1040   ui_out_redirect (mi_uiout, mi->event_channel);
1041
1042   ui_out_field_fmt (mi_uiout, "thread-group", "i%d", inferior->num);
1043   ui_out_field_core_addr (mi_uiout, "addr", target_gdbarch (), memaddr);
1044   ui_out_field_fmt (mi_uiout, "len", "%s", hex_string (len));
1045
1046   /* Append 'type=code' into notification if MEMADDR falls in the range of
1047      sections contain code.  */
1048   sec = find_pc_section (memaddr);
1049   if (sec != NULL && sec->objfile != NULL)
1050     {
1051       flagword flags = bfd_get_section_flags (sec->objfile->obfd,
1052                                               sec->the_bfd_section);
1053
1054       if (flags & SEC_CODE)
1055         ui_out_field_string (mi_uiout, "type", "code");
1056     }
1057
1058   ui_out_redirect (mi_uiout, NULL);
1059
1060   gdb_flush (mi->event_channel);
1061 }
1062
1063 static int
1064 report_initial_inferior (struct inferior *inf, void *closure)
1065 {
1066   /* This function is called from mi_intepreter_init, and since
1067      mi_inferior_added assumes that inferior is fully initialized
1068      and top_level_interpreter_data is set, we cannot call
1069      it here.  */
1070   struct mi_interp *mi = (struct mi_interp *) closure;
1071
1072   target_terminal_ours ();
1073   fprintf_unfiltered (mi->event_channel,
1074                       "thread-group-added,id=\"i%d\"",
1075                       inf->num);
1076   gdb_flush (mi->event_channel);
1077   return 0;
1078 }
1079
1080 static struct ui_out *
1081 mi_ui_out (struct interp *interp)
1082 {
1083   struct mi_interp *mi = (struct mi_interp *) interp_data (interp);
1084
1085   return mi->mi_uiout;
1086 }
1087
1088 /* Save the original value of raw_stdout here when logging, so we can
1089    restore correctly when done.  */
1090
1091 static struct ui_file *saved_raw_stdout;
1092
1093 /* Do MI-specific logging actions; save raw_stdout, and change all
1094    the consoles to use the supplied ui-file(s).  */
1095
1096 static int
1097 mi_set_logging (struct interp *interp, int start_log,
1098                 struct ui_file *out, struct ui_file *logfile)
1099 {
1100   struct mi_interp *mi = (struct mi_interp *) interp_data (interp);
1101
1102   if (!mi)
1103     return 0;
1104
1105   if (start_log)
1106     {
1107       /* The tee created already is based on gdb_stdout, which for MI
1108          is a console and so we end up in an infinite loop of console
1109          writing to ui_file writing to console etc.  So discard the
1110          existing tee (it hasn't been used yet, and MI won't ever use
1111          it), and create one based on raw_stdout instead.  */
1112       if (logfile)
1113         {
1114           ui_file_delete (out);
1115           out = tee_file_new (raw_stdout, 0, logfile, 0);
1116         }
1117
1118       saved_raw_stdout = raw_stdout;
1119       raw_stdout = out;
1120     }
1121   else
1122     {
1123       raw_stdout = saved_raw_stdout;
1124       saved_raw_stdout = NULL;
1125     }
1126   
1127   mi_console_set_raw (mi->out, raw_stdout);
1128   mi_console_set_raw (mi->err, raw_stdout);
1129   mi_console_set_raw (mi->log, raw_stdout);
1130   mi_console_set_raw (mi->targ, raw_stdout);
1131   mi_console_set_raw (mi->event_channel, raw_stdout);
1132
1133   return 1;
1134 }
1135
1136 extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
1137
1138 void
1139 _initialize_mi_interp (void)
1140 {
1141   static const struct interp_procs procs =
1142     {
1143       mi_interpreter_init,      /* init_proc */
1144       mi_interpreter_resume,    /* resume_proc */
1145       mi_interpreter_suspend,   /* suspend_proc */
1146       mi_interpreter_exec,      /* exec_proc */
1147       mi_ui_out,                /* ui_out_proc */
1148       mi_set_logging,           /* set_logging_proc */
1149       mi_command_loop           /* command_loop_proc */
1150     };
1151
1152   /* The various interpreter levels.  */
1153   interp_add (interp_new (INTERP_MI1, &procs));
1154   interp_add (interp_new (INTERP_MI2, &procs));
1155   interp_add (interp_new (INTERP_MI3, &procs));
1156   interp_add (interp_new (INTERP_MI, &procs));
1157 }