PR gdb/13860: make "-exec-foo"'s MI output equal to "foo"'s MI output.
[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 "ui-out.h"
27 #include "top.h"
28 #include "exceptions.h"
29 #include "mi-main.h"
30 #include "mi-cmds.h"
31 #include "mi-out.h"
32 #include "mi-console.h"
33 #include "mi-common.h"
34 #include "observer.h"
35 #include "gdbthread.h"
36 #include "solist.h"
37 #include "gdb.h"
38 #include "objfiles.h"
39 #include "tracepoint.h"
40
41 /* These are the interpreter setup, etc. functions for the MI
42    interpreter.  */
43
44 static void mi_execute_command_wrapper (const char *cmd);
45 static void mi_execute_command_input_handler (char *cmd);
46 static void mi_command_loop (void *data);
47
48 /* These are hooks that we put in place while doing interpreter_exec
49    so we can report interesting things that happened "behind the MI's
50    back" in this command.  */
51
52 static int mi_interp_query_hook (const char *ctlstr, va_list ap)
53   ATTRIBUTE_PRINTF (1, 0);
54
55 static void mi_insert_notify_hooks (void);
56 static void mi_remove_notify_hooks (void);
57 static void mi_on_normal_stop (struct bpstats *bs, int print_frame);
58
59 static void mi_new_thread (struct thread_info *t);
60 static void mi_thread_exit (struct thread_info *t, int silent);
61 static void mi_record_changed (struct inferior*, int);
62 static void mi_inferior_added (struct inferior *inf);
63 static void mi_inferior_appeared (struct inferior *inf);
64 static void mi_inferior_exit (struct inferior *inf);
65 static void mi_inferior_removed (struct inferior *inf);
66 static void mi_on_resume (ptid_t ptid);
67 static void mi_solib_loaded (struct so_list *solib);
68 static void mi_solib_unloaded (struct so_list *solib);
69 static void mi_about_to_proceed (void);
70 static void mi_traceframe_changed (int tfnum, int tpnum);
71 static void mi_tsv_created (const struct trace_state_variable *tsv);
72 static void mi_tsv_deleted (const struct trace_state_variable *tsv);
73 static void mi_tsv_modified (const struct trace_state_variable *tsv);
74 static void mi_breakpoint_created (struct breakpoint *b);
75 static void mi_breakpoint_deleted (struct breakpoint *b);
76 static void mi_breakpoint_modified (struct breakpoint *b);
77 static void mi_command_param_changed (const char *param, const char *value);
78 static void mi_memory_changed (struct inferior *inf, CORE_ADDR memaddr,
79                                ssize_t len, const bfd_byte *myaddr);
80
81 static int report_initial_inferior (struct inferior *inf, void *closure);
82
83 static void *
84 mi_interpreter_init (struct interp *interp, int top_level)
85 {
86   struct mi_interp *mi = XNEW (struct mi_interp);
87   const char *name;
88   int mi_version;
89
90   /* Assign the output channel created at startup to its own global,
91      so that we can create a console channel that encapsulates and
92      prefixes all gdb_output-type bits coming from the rest of the
93      debugger.  */
94
95   raw_stdout = gdb_stdout;
96
97   /* Create MI console channels, each with a different prefix so they
98      can be distinguished.  */
99   mi->out = mi_console_file_new (raw_stdout, "~", '"');
100   mi->err = mi_console_file_new (raw_stdout, "&", '"');
101   mi->log = mi->err;
102   mi->targ = mi_console_file_new (raw_stdout, "@", '"');
103   mi->event_channel = mi_console_file_new (raw_stdout, "=", 0);
104
105   name = interp_name (interp);
106   /* INTERP_MI selects the most recent released version.  "mi2" was
107      released as part of GDB 6.0.  */
108   if (strcmp (name, INTERP_MI) == 0)
109     mi_version = 2;
110   else if (strcmp (name, INTERP_MI1) == 0)
111     mi_version = 1;
112   else if (strcmp (name, INTERP_MI2) == 0)
113     mi_version = 2;
114   else if (strcmp (name, INTERP_MI3) == 0)
115     mi_version = 3;
116   else
117     gdb_assert_not_reached ("unhandled MI version");
118
119   mi->uiout = mi_out_new (mi_version);
120
121   if (top_level)
122     {
123       observer_attach_new_thread (mi_new_thread);
124       observer_attach_thread_exit (mi_thread_exit);
125       observer_attach_inferior_added (mi_inferior_added);
126       observer_attach_inferior_appeared (mi_inferior_appeared);
127       observer_attach_inferior_exit (mi_inferior_exit);
128       observer_attach_inferior_removed (mi_inferior_removed);
129       observer_attach_record_changed (mi_record_changed);
130       observer_attach_normal_stop (mi_on_normal_stop);
131       observer_attach_target_resumed (mi_on_resume);
132       observer_attach_solib_loaded (mi_solib_loaded);
133       observer_attach_solib_unloaded (mi_solib_unloaded);
134       observer_attach_about_to_proceed (mi_about_to_proceed);
135       observer_attach_traceframe_changed (mi_traceframe_changed);
136       observer_attach_tsv_created (mi_tsv_created);
137       observer_attach_tsv_deleted (mi_tsv_deleted);
138       observer_attach_tsv_modified (mi_tsv_modified);
139       observer_attach_breakpoint_created (mi_breakpoint_created);
140       observer_attach_breakpoint_deleted (mi_breakpoint_deleted);
141       observer_attach_breakpoint_modified (mi_breakpoint_modified);
142       observer_attach_command_param_changed (mi_command_param_changed);
143       observer_attach_memory_changed (mi_memory_changed);
144
145       /* The initial inferior is created before this function is
146          called, so we need to report it explicitly.  Use iteration in
147          case future version of GDB creates more than one inferior
148          up-front.  */
149       iterate_over_inferiors (report_initial_inferior, mi);
150     }
151
152   return mi;
153 }
154
155 static int
156 mi_interpreter_resume (void *data)
157 {
158   struct mi_interp *mi = data;
159
160   /* As per hack note in mi_interpreter_init, swap in the output
161      channels... */
162   gdb_setup_readline ();
163
164   /* These overwrite some of the initialization done in
165      _intialize_event_loop.  */
166   call_readline = gdb_readline2;
167   input_handler = mi_execute_command_input_handler;
168   async_command_editing_p = 0;
169   /* FIXME: This is a total hack for now.  PB's use of the MI
170      implicitly relies on a bug in the async support which allows
171      asynchronous commands to leak through the commmand loop.  The bug
172      involves (but is not limited to) the fact that sync_execution was
173      erroneously initialized to 0.  Duplicate by initializing it thus
174      here...  */
175   sync_execution = 0;
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 /* Never display the default GDB prompt in MI case.  */
210
211 static int
212 mi_interpreter_prompt_p (void *data)
213 {
214   return 0;
215 }
216
217 void
218 mi_cmd_interpreter_exec (char *command, char **argv, int argc)
219 {
220   struct interp *interp_to_use;
221   int i;
222   char *mi_error_message = NULL;
223   struct cleanup *old_chain;
224
225   if (argc < 2)
226     error (_("-interpreter-exec: "
227              "Usage: -interpreter-exec interp command"));
228
229   interp_to_use = interp_lookup (argv[0]);
230   if (interp_to_use == NULL)
231     error (_("-interpreter-exec: could not find interpreter \"%s\""),
232            argv[0]);
233
234   /* Insert the MI out hooks, making sure to also call the
235      interpreter's hooks if it has any.  */
236   /* KRS: We shouldn't need this... Events should be installed and
237      they should just ALWAYS fire something out down the MI
238      channel.  */
239   mi_insert_notify_hooks ();
240
241   /* Now run the code.  */
242
243   old_chain = make_cleanup (null_cleanup, 0);
244   for (i = 1; i < argc; i++)
245     {
246       struct gdb_exception e = interp_exec (interp_to_use, argv[i]);
247
248       if (e.reason < 0)
249         {
250           mi_error_message = xstrdup (e.message);
251           make_cleanup (xfree, mi_error_message);
252           break;
253         }
254     }
255
256   mi_remove_notify_hooks ();
257
258   if (mi_error_message != NULL)
259     error ("%s", mi_error_message);
260   do_cleanups (old_chain);
261 }
262
263 /* This inserts a number of hooks that are meant to produce
264    async-notify ("=") MI messages while running commands in another
265    interpreter using mi_interpreter_exec.  The canonical use for this
266    is to allow access to the gdb CLI interpreter from within the MI,
267    while still producing MI style output when actions in the CLI
268    command change GDB's state.  */
269
270 static void
271 mi_insert_notify_hooks (void)
272 {
273   deprecated_query_hook = mi_interp_query_hook;
274 }
275
276 static void
277 mi_remove_notify_hooks (void)
278 {
279   deprecated_query_hook = NULL;
280 }
281
282 static int
283 mi_interp_query_hook (const char *ctlstr, va_list ap)
284 {
285   return 1;
286 }
287
288 static void
289 mi_execute_command_wrapper (const char *cmd)
290 {
291   mi_execute_command (cmd, stdin == instream);
292 }
293
294 /* mi_execute_command_wrapper wrapper suitable for INPUT_HANDLER.  */
295
296 static void
297 mi_execute_command_input_handler (char *cmd)
298 {
299   mi_execute_command_wrapper (cmd);
300
301   fputs_unfiltered ("(gdb) \n", raw_stdout);
302   gdb_flush (raw_stdout);
303 }
304
305 static void
306 mi_command_loop (void *data)
307 {
308   /* Turn off 8 bit strings in quoted output.  Any character with the
309      high bit set is printed using C's octal format.  */
310   sevenbit_strings = 1;
311
312   /* Tell the world that we're alive.  */
313   fputs_unfiltered ("(gdb) \n", raw_stdout);
314   gdb_flush (raw_stdout);
315
316   start_event_loop ();
317 }
318
319 static void
320 mi_new_thread (struct thread_info *t)
321 {
322   struct mi_interp *mi = top_level_interpreter_data ();
323   struct inferior *inf = find_inferior_pid (ptid_get_pid (t->ptid));
324
325   gdb_assert (inf);
326
327   fprintf_unfiltered (mi->event_channel, 
328                       "thread-created,id=\"%d\",group-id=\"i%d\"",
329                       t->num, inf->num);
330   gdb_flush (mi->event_channel);
331 }
332
333 static void
334 mi_thread_exit (struct thread_info *t, int silent)
335 {
336   struct mi_interp *mi;
337   struct inferior *inf;
338
339   if (silent)
340     return;
341
342   inf = find_inferior_pid (ptid_get_pid (t->ptid));
343
344   mi = top_level_interpreter_data ();
345   target_terminal_ours ();
346   fprintf_unfiltered (mi->event_channel, 
347                       "thread-exited,id=\"%d\",group-id=\"i%d\"",
348                       t->num, inf->num);
349   gdb_flush (mi->event_channel);
350 }
351
352 /* Emit notification on changing the state of record.  */
353
354 static void
355 mi_record_changed (struct inferior *inferior, int started)
356 {
357   struct mi_interp *mi = top_level_interpreter_data ();
358
359   fprintf_unfiltered (mi->event_channel,  "record-%s,thread-group=\"i%d\"",
360                       started ? "started" : "stopped", inferior->num);
361
362   gdb_flush (mi->event_channel);
363 }
364
365 static void
366 mi_inferior_added (struct inferior *inf)
367 {
368   struct mi_interp *mi = top_level_interpreter_data ();
369
370   target_terminal_ours ();
371   fprintf_unfiltered (mi->event_channel,
372                       "thread-group-added,id=\"i%d\"",
373                       inf->num);
374   gdb_flush (mi->event_channel);
375 }
376
377 static void
378 mi_inferior_appeared (struct inferior *inf)
379 {
380   struct mi_interp *mi = top_level_interpreter_data ();
381
382   target_terminal_ours ();
383   fprintf_unfiltered (mi->event_channel,
384                       "thread-group-started,id=\"i%d\",pid=\"%d\"",
385                       inf->num, inf->pid);
386   gdb_flush (mi->event_channel);
387 }
388
389 static void
390 mi_inferior_exit (struct inferior *inf)
391 {
392   struct mi_interp *mi = top_level_interpreter_data ();
393
394   target_terminal_ours ();
395   if (inf->has_exit_code)
396     fprintf_unfiltered (mi->event_channel,
397                         "thread-group-exited,id=\"i%d\",exit-code=\"%s\"",
398                         inf->num, int_string (inf->exit_code, 8, 0, 0, 1));
399   else
400     fprintf_unfiltered (mi->event_channel,
401                         "thread-group-exited,id=\"i%d\"", inf->num);
402
403   gdb_flush (mi->event_channel);  
404 }
405
406 static void
407 mi_inferior_removed (struct inferior *inf)
408 {
409   struct mi_interp *mi = top_level_interpreter_data ();
410
411   target_terminal_ours ();
412   fprintf_unfiltered (mi->event_channel,
413                       "thread-group-removed,id=\"i%d\"",
414                       inf->num);
415   gdb_flush (mi->event_channel);
416 }
417
418 static void
419 mi_on_normal_stop (struct bpstats *bs, int print_frame)
420 {
421   /* Since this can be called when CLI command is executing,
422      using cli interpreter, be sure to use MI uiout for output,
423      not the current one.  */
424   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
425
426   if (print_frame)
427     {
428       int core;
429
430       if (current_uiout != mi_uiout)
431         {
432           /* The normal_stop function has printed frame information
433              into CLI uiout, or some other non-MI uiout.  There's no
434              way we can extract proper fields from random uiout
435              object, so we print the frame again.  In practice, this
436              can only happen when running a CLI command in MI.  */
437           struct ui_out *saved_uiout = current_uiout;
438           struct target_waitstatus last;
439           ptid_t last_ptid;
440
441           current_uiout = mi_uiout;
442
443           get_last_target_status (&last_ptid, &last);
444           print_stop_event (&last);
445
446           current_uiout = saved_uiout;
447         }
448
449       ui_out_field_int (mi_uiout, "thread-id",
450                         pid_to_thread_id (inferior_ptid));
451       if (non_stop)
452         {
453           struct cleanup *back_to = make_cleanup_ui_out_list_begin_end 
454             (mi_uiout, "stopped-threads");
455
456           ui_out_field_int (mi_uiout, NULL,
457                             pid_to_thread_id (inferior_ptid));
458           do_cleanups (back_to);
459         }
460       else
461         ui_out_field_string (mi_uiout, "stopped-threads", "all");
462
463       core = target_core_of_thread (inferior_ptid);
464       if (core != -1)
465         ui_out_field_int (mi_uiout, "core", core);
466     }
467   
468   fputs_unfiltered ("*stopped", raw_stdout);
469   mi_out_put (mi_uiout, raw_stdout);
470   mi_out_rewind (mi_uiout);
471   mi_print_timing_maybe ();
472   fputs_unfiltered ("\n", raw_stdout);
473   gdb_flush (raw_stdout);
474 }
475
476 static void
477 mi_about_to_proceed (void)
478 {
479   /* Suppress output while calling an inferior function.  */
480
481   if (!ptid_equal (inferior_ptid, null_ptid))
482     {
483       struct thread_info *tp = inferior_thread ();
484
485       if (tp->control.in_infcall)
486         return;
487     }
488
489   mi_proceeded = 1;
490 }
491
492 /* When the element is non-zero, no MI notifications will be emitted in
493    response to the corresponding observers.  */
494
495 struct mi_suppress_notification mi_suppress_notification =
496   {
497     0,
498     0,
499     0,
500   };
501
502 /* Emit notification on changing a traceframe.  */
503
504 static void
505 mi_traceframe_changed (int tfnum, int tpnum)
506 {
507   struct mi_interp *mi = top_level_interpreter_data ();
508
509   if (mi_suppress_notification.traceframe)
510     return;
511
512   target_terminal_ours ();
513
514   if (tfnum >= 0)
515     fprintf_unfiltered (mi->event_channel, "traceframe-changed,"
516                         "num=\"%d\",tracepoint=\"%d\"\n",
517                         tfnum, tpnum);
518   else
519     fprintf_unfiltered (mi->event_channel, "traceframe-changed,end");
520
521   gdb_flush (mi->event_channel);
522 }
523
524 /* Emit notification on creating a trace state variable.  */
525
526 static void
527 mi_tsv_created (const struct trace_state_variable *tsv)
528 {
529   struct mi_interp *mi = top_level_interpreter_data ();
530
531   target_terminal_ours ();
532
533   fprintf_unfiltered (mi->event_channel, "tsv-created,"
534                       "name=\"%s\",initial=\"%s\"\n",
535                       tsv->name, plongest (tsv->initial_value));
536
537   gdb_flush (mi->event_channel);
538 }
539
540 /* Emit notification on deleting a trace state variable.  */
541
542 static void
543 mi_tsv_deleted (const struct trace_state_variable *tsv)
544 {
545   struct mi_interp *mi = top_level_interpreter_data ();
546
547   target_terminal_ours ();
548
549   if (tsv != NULL)
550     fprintf_unfiltered (mi->event_channel, "tsv-deleted,"
551                         "name=\"%s\"\n", tsv->name);
552   else
553     fprintf_unfiltered (mi->event_channel, "tsv-deleted\n");
554
555   gdb_flush (mi->event_channel);
556 }
557
558 /* Emit notification on modifying a trace state variable.  */
559
560 static void
561 mi_tsv_modified (const struct trace_state_variable *tsv)
562 {
563   struct mi_interp *mi = top_level_interpreter_data ();
564   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
565
566   target_terminal_ours ();
567
568   fprintf_unfiltered (mi->event_channel,
569                       "tsv-modified");
570
571   ui_out_redirect (mi_uiout, mi->event_channel);
572
573   ui_out_field_string (mi_uiout, "name", tsv->name);
574   ui_out_field_string (mi_uiout, "initial",
575                        plongest (tsv->initial_value));
576   if (tsv->value_known)
577     ui_out_field_string (mi_uiout, "current", plongest (tsv->value));
578
579   ui_out_redirect (mi_uiout, NULL);
580
581   gdb_flush (mi->event_channel);
582 }
583
584 /* Emit notification about a created breakpoint.  */
585
586 static void
587 mi_breakpoint_created (struct breakpoint *b)
588 {
589   struct mi_interp *mi = top_level_interpreter_data ();
590   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
591   volatile struct gdb_exception e;
592
593   if (mi_suppress_notification.breakpoint)
594     return;
595
596   if (b->number <= 0)
597     return;
598
599   target_terminal_ours ();
600   fprintf_unfiltered (mi->event_channel,
601                       "breakpoint-created");
602   /* We want the output from gdb_breakpoint_query to go to
603      mi->event_channel.  One approach would be to just call
604      gdb_breakpoint_query, and then use mi_out_put to send the current
605      content of mi_outout into mi->event_channel.  However, that will
606      break if anything is output to mi_uiout prior to calling the
607      breakpoint_created notifications.  So, we use
608      ui_out_redirect.  */
609   ui_out_redirect (mi_uiout, mi->event_channel);
610   TRY_CATCH (e, RETURN_MASK_ERROR)
611     gdb_breakpoint_query (mi_uiout, b->number, NULL);
612   ui_out_redirect (mi_uiout, NULL);
613
614   gdb_flush (mi->event_channel);
615 }
616
617 /* Emit notification about deleted breakpoint.  */
618
619 static void
620 mi_breakpoint_deleted (struct breakpoint *b)
621 {
622   struct mi_interp *mi = top_level_interpreter_data ();
623
624   if (mi_suppress_notification.breakpoint)
625     return;
626
627   if (b->number <= 0)
628     return;
629
630   target_terminal_ours ();
631
632   fprintf_unfiltered (mi->event_channel, "breakpoint-deleted,id=\"%d\"",
633                       b->number);
634
635   gdb_flush (mi->event_channel);
636 }
637
638 /* Emit notification about modified breakpoint.  */
639
640 static void
641 mi_breakpoint_modified (struct breakpoint *b)
642 {
643   struct mi_interp *mi = top_level_interpreter_data ();
644   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
645   volatile struct gdb_exception e;
646
647   if (mi_suppress_notification.breakpoint)
648     return;
649
650   if (b->number <= 0)
651     return;
652
653   target_terminal_ours ();
654   fprintf_unfiltered (mi->event_channel,
655                       "breakpoint-modified");
656   /* We want the output from gdb_breakpoint_query to go to
657      mi->event_channel.  One approach would be to just call
658      gdb_breakpoint_query, and then use mi_out_put to send the current
659      content of mi_outout into mi->event_channel.  However, that will
660      break if anything is output to mi_uiout prior to calling the
661      breakpoint_created notifications.  So, we use
662      ui_out_redirect.  */
663   ui_out_redirect (mi_uiout, mi->event_channel);
664   TRY_CATCH (e, RETURN_MASK_ERROR)
665     gdb_breakpoint_query (mi_uiout, b->number, NULL);
666   ui_out_redirect (mi_uiout, NULL);
667
668   gdb_flush (mi->event_channel);
669 }
670
671 static int
672 mi_output_running_pid (struct thread_info *info, void *arg)
673 {
674   ptid_t *ptid = arg;
675
676   if (ptid_get_pid (*ptid) == ptid_get_pid (info->ptid))
677     fprintf_unfiltered (raw_stdout,
678                         "*running,thread-id=\"%d\"\n",
679                         info->num);
680
681   return 0;
682 }
683
684 static int
685 mi_inferior_count (struct inferior *inf, void *arg)
686 {
687   if (inf->pid != 0)
688     {
689       int *count_p = arg;
690       (*count_p)++;
691     }
692
693   return 0;
694 }
695
696 static void
697 mi_on_resume (ptid_t ptid)
698 {
699   struct thread_info *tp = NULL;
700
701   if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
702     tp = inferior_thread ();
703   else
704     tp = find_thread_ptid (ptid);
705
706   /* Suppress output while calling an inferior function.  */
707   if (tp->control.in_infcall)
708     return;
709
710   /* To cater for older frontends, emit ^running, but do it only once
711      per each command.  We do it here, since at this point we know
712      that the target was successfully resumed, and in non-async mode,
713      we won't return back to MI interpreter code until the target
714      is done running, so delaying the output of "^running" until then
715      will make it impossible for frontend to know what's going on.
716
717      In future (MI3), we'll be outputting "^done" here.  */
718   if (!running_result_record_printed && mi_proceeded)
719     {
720       fprintf_unfiltered (raw_stdout, "%s^running\n",
721                           current_token ? current_token : "");
722     }
723
724   if (ptid_get_pid (ptid) == -1)
725     fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
726   else if (ptid_is_pid (ptid))
727     {
728       int count = 0;
729
730       /* Backwards compatibility.  If there's only one inferior,
731          output "all", otherwise, output each resumed thread
732          individually.  */
733       iterate_over_inferiors (mi_inferior_count, &count);
734
735       if (count == 1)
736         fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
737       else
738         iterate_over_threads (mi_output_running_pid, &ptid);
739     }
740   else
741     {
742       struct thread_info *ti = find_thread_ptid (ptid);
743
744       gdb_assert (ti);
745       fprintf_unfiltered (raw_stdout, "*running,thread-id=\"%d\"\n", ti->num);
746     }
747
748   if (!running_result_record_printed && mi_proceeded)
749     {
750       running_result_record_printed = 1;
751       /* This is what gdb used to do historically -- printing prompt even if
752          it cannot actually accept any input.  This will be surely removed
753          for MI3, and may be removed even earler.  */
754       /* FIXME: review the use of target_is_async_p here -- is that
755          what we want? */
756       if (!target_is_async_p ())
757         fputs_unfiltered ("(gdb) \n", raw_stdout);
758     }
759   gdb_flush (raw_stdout);
760 }
761
762 static void
763 mi_solib_loaded (struct so_list *solib)
764 {
765   struct mi_interp *mi = top_level_interpreter_data ();
766
767   target_terminal_ours ();
768   if (gdbarch_has_global_solist (target_gdbarch ()))
769     fprintf_unfiltered (mi->event_channel,
770                         "library-loaded,id=\"%s\",target-name=\"%s\","
771                         "host-name=\"%s\",symbols-loaded=\"%d\"",
772                         solib->so_original_name, solib->so_original_name,
773                         solib->so_name, solib->symbols_loaded);
774   else
775     fprintf_unfiltered (mi->event_channel,
776                         "library-loaded,id=\"%s\",target-name=\"%s\","
777                         "host-name=\"%s\",symbols-loaded=\"%d\","
778                         "thread-group=\"i%d\"",
779                         solib->so_original_name, solib->so_original_name,
780                         solib->so_name, solib->symbols_loaded,
781                         current_inferior ()->num);
782
783   gdb_flush (mi->event_channel);
784 }
785
786 static void
787 mi_solib_unloaded (struct so_list *solib)
788 {
789   struct mi_interp *mi = top_level_interpreter_data ();
790
791   target_terminal_ours ();
792   if (gdbarch_has_global_solist (target_gdbarch ()))
793     fprintf_unfiltered (mi->event_channel,
794                         "library-unloaded,id=\"%s\",target-name=\"%s\","
795                         "host-name=\"%s\"",
796                         solib->so_original_name, solib->so_original_name,
797                         solib->so_name);
798   else
799     fprintf_unfiltered (mi->event_channel,
800                         "library-unloaded,id=\"%s\",target-name=\"%s\","
801                         "host-name=\"%s\",thread-group=\"i%d\"",
802                         solib->so_original_name, solib->so_original_name,
803                         solib->so_name, current_inferior ()->num);
804
805   gdb_flush (mi->event_channel);
806 }
807
808 /* Emit notification about the command parameter change.  */
809
810 static void
811 mi_command_param_changed (const char *param, const char *value)
812 {
813   struct mi_interp *mi = top_level_interpreter_data ();
814   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
815
816   if (mi_suppress_notification.cmd_param_changed)
817     return;
818
819   target_terminal_ours ();
820
821   fprintf_unfiltered (mi->event_channel,
822                       "cmd-param-changed");
823
824   ui_out_redirect (mi_uiout, mi->event_channel);
825
826   ui_out_field_string (mi_uiout, "param", param);
827   ui_out_field_string (mi_uiout, "value", value);
828
829   ui_out_redirect (mi_uiout, NULL);
830
831   gdb_flush (mi->event_channel);
832 }
833
834 /* Emit notification about the target memory change.  */
835
836 static void
837 mi_memory_changed (struct inferior *inferior, CORE_ADDR memaddr,
838                    ssize_t len, const bfd_byte *myaddr)
839 {
840   struct mi_interp *mi = top_level_interpreter_data ();
841   struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
842   struct obj_section *sec;
843
844   if (mi_suppress_notification.memory)
845     return;
846
847   target_terminal_ours ();
848
849   fprintf_unfiltered (mi->event_channel,
850                       "memory-changed");
851
852   ui_out_redirect (mi_uiout, mi->event_channel);
853
854   ui_out_field_fmt (mi_uiout, "thread-group", "i%d", inferior->num);
855   ui_out_field_core_addr (mi_uiout, "addr", target_gdbarch (), memaddr);
856   ui_out_field_fmt (mi_uiout, "len", "0x%zx", len);
857
858   /* Append 'type=code' into notification if MEMADDR falls in the range of
859      sections contain code.  */
860   sec = find_pc_section (memaddr);
861   if (sec != NULL && sec->objfile != NULL)
862     {
863       flagword flags = bfd_get_section_flags (sec->objfile->obfd,
864                                               sec->the_bfd_section);
865
866       if (flags & SEC_CODE)
867         ui_out_field_string (mi_uiout, "type", "code");
868     }
869
870   ui_out_redirect (mi_uiout, NULL);
871
872   gdb_flush (mi->event_channel);
873 }
874
875 static int
876 report_initial_inferior (struct inferior *inf, void *closure)
877 {
878   /* This function is called from mi_intepreter_init, and since
879      mi_inferior_added assumes that inferior is fully initialized
880      and top_level_interpreter_data is set, we cannot call
881      it here.  */
882   struct mi_interp *mi = closure;
883
884   target_terminal_ours ();
885   fprintf_unfiltered (mi->event_channel,
886                       "thread-group-added,id=\"i%d\"",
887                       inf->num);
888   gdb_flush (mi->event_channel);
889   return 0;
890 }
891
892 static struct ui_out *
893 mi_ui_out (struct interp *interp)
894 {
895   struct mi_interp *mi = interp_data (interp);
896
897   return mi->uiout;
898 }
899
900 /* Save the original value of raw_stdout here when logging, so we can
901    restore correctly when done.  */
902
903 static struct ui_file *saved_raw_stdout;
904
905 /* Do MI-specific logging actions; save raw_stdout, and change all
906    the consoles to use the supplied ui-file(s).  */
907
908 static int
909 mi_set_logging (struct interp *interp, int start_log,
910                 struct ui_file *out, struct ui_file *logfile)
911 {
912   struct mi_interp *mi = interp_data (interp);
913
914   if (!mi)
915     return 0;
916
917   if (start_log)
918     {
919       /* The tee created already is based on gdb_stdout, which for MI
920          is a console and so we end up in an infinite loop of console
921          writing to ui_file writing to console etc.  So discard the
922          existing tee (it hasn't been used yet, and MI won't ever use
923          it), and create one based on raw_stdout instead.  */
924       if (logfile)
925         {
926           ui_file_delete (out);
927           out = tee_file_new (raw_stdout, 0, logfile, 0);
928         }
929
930       saved_raw_stdout = raw_stdout;
931       raw_stdout = out;
932     }
933   else
934     {
935       raw_stdout = saved_raw_stdout;
936       saved_raw_stdout = NULL;
937     }
938   
939   mi_console_set_raw (mi->out, raw_stdout);
940   mi_console_set_raw (mi->err, raw_stdout);
941   mi_console_set_raw (mi->log, raw_stdout);
942   mi_console_set_raw (mi->targ, raw_stdout);
943   mi_console_set_raw (mi->event_channel, raw_stdout);
944
945   return 1;
946 }
947
948 extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
949
950 void
951 _initialize_mi_interp (void)
952 {
953   static const struct interp_procs procs =
954     {
955       mi_interpreter_init,      /* init_proc */
956       mi_interpreter_resume,    /* resume_proc */
957       mi_interpreter_suspend,   /* suspend_proc */
958       mi_interpreter_exec,      /* exec_proc */
959       mi_interpreter_prompt_p,  /* prompt_proc_p */
960       mi_ui_out,                /* ui_out_proc */
961       mi_set_logging,           /* set_logging_proc */
962       mi_command_loop           /* command_loop_proc */
963     };
964
965   /* The various interpreter levels.  */
966   interp_add (interp_new (INTERP_MI1, &procs));
967   interp_add (interp_new (INTERP_MI2, &procs));
968   interp_add (interp_new (INTERP_MI3, &procs));
969   interp_add (interp_new (INTERP_MI, &procs));
970 }