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