1 /* MI Interpreter Definitions and Commands for GDB, the GNU debugger.
3 Copyright (C) 2002-2014 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
23 #include "event-top.h"
24 #include "event-loop.h"
29 #include "exceptions.h"
33 #include "mi-console.h"
34 #include "mi-common.h"
36 #include "gdbthread.h"
40 #include "tracepoint.h"
43 /* These are the interpreter setup, etc. functions for the MI
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);
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. */
54 static int mi_interp_query_hook (const char *ctlstr, va_list ap)
55 ATTRIBUTE_PRINTF (1, 0);
57 static void mi_insert_notify_hooks (void);
58 static void mi_remove_notify_hooks (void);
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);
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);
89 static int report_initial_inferior (struct inferior *inf, void *closure);
92 mi_interpreter_init (struct interp *interp, int top_level)
94 struct mi_interp *mi = XNEW (struct mi_interp);
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
103 raw_stdout = gdb_stdout;
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, "&", '"');
110 mi->targ = mi_console_file_new (raw_stdout, "@", '"');
111 mi->event_channel = mi_console_file_new (raw_stdout, "=", 0);
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)
118 else if (strcmp (name, INTERP_MI1) == 0)
120 else if (strcmp (name, INTERP_MI2) == 0)
122 else if (strcmp (name, INTERP_MI3) == 0)
125 gdb_assert_not_reached ("unhandled MI version");
127 mi->mi_uiout = mi_out_new (mi_version);
128 mi->cli_uiout = cli_out_new (mi->out);
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);
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);
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
166 iterate_over_inferiors (report_initial_inferior, mi);
173 mi_interpreter_resume (void *data)
175 struct mi_interp *mi = data;
177 /* As per hack note in mi_interpreter_init, swap in the output
179 gdb_setup_readline ();
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
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;
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 ();
207 deprecated_show_load_progress = mi_load_progress;
213 mi_interpreter_suspend (void *data)
215 gdb_disable_readline ();
219 static struct gdb_exception
220 mi_interpreter_exec (void *data, const char *command)
222 mi_execute_command_wrapper (command);
223 return exception_none;
226 /* Never display the default GDB prompt in MI case. */
229 mi_interpreter_prompt_p (void *data)
235 mi_cmd_interpreter_exec (char *command, char **argv, int argc)
237 struct interp *interp_to_use;
239 char *mi_error_message = NULL;
240 struct cleanup *old_chain;
243 error (_("-interpreter-exec: "
244 "Usage: -interpreter-exec interp command"));
246 interp_to_use = interp_lookup (argv[0]);
247 if (interp_to_use == NULL)
248 error (_("-interpreter-exec: could not find interpreter \"%s\""),
251 /* Note that unlike the CLI version of this command, we don't
252 actually set INTERP_TO_USE as the current interpreter, as we
253 still want gdb_stdout, etc. to point at MI streams. */
255 /* Insert the MI out hooks, making sure to also call the
256 interpreter's hooks if it has any. */
257 /* KRS: We shouldn't need this... Events should be installed and
258 they should just ALWAYS fire something out down the MI
260 mi_insert_notify_hooks ();
262 /* Now run the code. */
264 old_chain = make_cleanup (null_cleanup, 0);
265 for (i = 1; i < argc; i++)
267 struct gdb_exception e = interp_exec (interp_to_use, argv[i]);
271 mi_error_message = xstrdup (e.message);
272 make_cleanup (xfree, mi_error_message);
277 mi_remove_notify_hooks ();
279 if (mi_error_message != NULL)
280 error ("%s", mi_error_message);
281 do_cleanups (old_chain);
284 /* This inserts a number of hooks that are meant to produce
285 async-notify ("=") MI messages while running commands in another
286 interpreter using mi_interpreter_exec. The canonical use for this
287 is to allow access to the gdb CLI interpreter from within the MI,
288 while still producing MI style output when actions in the CLI
289 command change GDB's state. */
292 mi_insert_notify_hooks (void)
294 deprecated_query_hook = mi_interp_query_hook;
298 mi_remove_notify_hooks (void)
300 deprecated_query_hook = NULL;
304 mi_interp_query_hook (const char *ctlstr, va_list ap)
310 mi_execute_command_wrapper (const char *cmd)
312 mi_execute_command (cmd, stdin == instream);
315 /* mi_execute_command_wrapper wrapper suitable for INPUT_HANDLER. */
318 mi_execute_command_input_handler (char *cmd)
320 mi_execute_command_wrapper (cmd);
322 fputs_unfiltered ("(gdb) \n", raw_stdout);
323 gdb_flush (raw_stdout);
327 mi_command_loop (void *data)
329 /* Turn off 8 bit strings in quoted output. Any character with the
330 high bit set is printed using C's octal format. */
331 sevenbit_strings = 1;
333 /* Tell the world that we're alive. */
334 fputs_unfiltered ("(gdb) \n", raw_stdout);
335 gdb_flush (raw_stdout);
341 mi_new_thread (struct thread_info *t)
343 struct mi_interp *mi = top_level_interpreter_data ();
344 struct inferior *inf = find_inferior_pid (ptid_get_pid (t->ptid));
348 fprintf_unfiltered (mi->event_channel,
349 "thread-created,id=\"%d\",group-id=\"i%d\"",
351 gdb_flush (mi->event_channel);
355 mi_thread_exit (struct thread_info *t, int silent)
357 struct mi_interp *mi;
358 struct inferior *inf;
363 inf = find_inferior_pid (ptid_get_pid (t->ptid));
365 mi = top_level_interpreter_data ();
366 target_terminal_ours ();
367 fprintf_unfiltered (mi->event_channel,
368 "thread-exited,id=\"%d\",group-id=\"i%d\"",
370 gdb_flush (mi->event_channel);
373 /* Emit notification on changing the state of record. */
376 mi_record_changed (struct inferior *inferior, int started)
378 struct mi_interp *mi = top_level_interpreter_data ();
380 fprintf_unfiltered (mi->event_channel, "record-%s,thread-group=\"i%d\"",
381 started ? "started" : "stopped", inferior->num);
383 gdb_flush (mi->event_channel);
387 mi_inferior_added (struct inferior *inf)
389 struct mi_interp *mi = top_level_interpreter_data ();
391 target_terminal_ours ();
392 fprintf_unfiltered (mi->event_channel,
393 "thread-group-added,id=\"i%d\"",
395 gdb_flush (mi->event_channel);
399 mi_inferior_appeared (struct inferior *inf)
401 struct mi_interp *mi = top_level_interpreter_data ();
403 target_terminal_ours ();
404 fprintf_unfiltered (mi->event_channel,
405 "thread-group-started,id=\"i%d\",pid=\"%d\"",
407 gdb_flush (mi->event_channel);
411 mi_inferior_exit (struct inferior *inf)
413 struct mi_interp *mi = top_level_interpreter_data ();
415 target_terminal_ours ();
416 if (inf->has_exit_code)
417 fprintf_unfiltered (mi->event_channel,
418 "thread-group-exited,id=\"i%d\",exit-code=\"%s\"",
419 inf->num, int_string (inf->exit_code, 8, 0, 0, 1));
421 fprintf_unfiltered (mi->event_channel,
422 "thread-group-exited,id=\"i%d\"", inf->num);
424 gdb_flush (mi->event_channel);
428 mi_inferior_removed (struct inferior *inf)
430 struct mi_interp *mi = top_level_interpreter_data ();
432 target_terminal_ours ();
433 fprintf_unfiltered (mi->event_channel,
434 "thread-group-removed,id=\"i%d\"",
436 gdb_flush (mi->event_channel);
439 /* Cleanup that restores a previous current uiout. */
442 restore_current_uiout_cleanup (void *arg)
444 struct ui_out *saved_uiout = arg;
446 current_uiout = saved_uiout;
449 /* Return the MI interpreter, if it is active -- either because it's
450 the top-level interpreter or the interpreter executing the current
451 command. Returns NULL if the MI interpreter is not being used. */
453 static struct interp *
454 find_mi_interpreter (void)
456 struct interp *interp;
458 interp = top_level_interpreter ();
459 if (ui_out_is_mi_like_p (interp_ui_out (interp)))
462 interp = command_interp ();
463 if (ui_out_is_mi_like_p (interp_ui_out (interp)))
469 /* Return the MI_INTERP structure of the active MI interpreter.
470 Returns NULL if MI is not active. */
472 static struct mi_interp *
473 mi_interp_data (void)
475 struct interp *interp = find_mi_interpreter ();
478 return interp_data (interp);
482 /* Observers for several run control events that print why the
483 inferior has stopped to both the the MI event channel and to the MI
484 console. If the MI interpreter is not active, print nothing. */
486 /* Observer for the signal_received notification. */
489 mi_on_signal_received (enum gdb_signal siggnal)
491 struct mi_interp *mi = mi_interp_data ();
496 print_signal_received_reason (mi->mi_uiout, siggnal);
497 print_signal_received_reason (mi->cli_uiout, siggnal);
500 /* Observer for the end_stepping_range notification. */
503 mi_on_end_stepping_range (void)
505 struct mi_interp *mi = mi_interp_data ();
510 print_end_stepping_range_reason (mi->mi_uiout);
511 print_end_stepping_range_reason (mi->cli_uiout);
514 /* Observer for the signal_exited notification. */
517 mi_on_signal_exited (enum gdb_signal siggnal)
519 struct mi_interp *mi = mi_interp_data ();
524 print_signal_exited_reason (mi->mi_uiout, siggnal);
525 print_signal_exited_reason (mi->cli_uiout, siggnal);
528 /* Observer for the exited notification. */
531 mi_on_exited (int exitstatus)
533 struct mi_interp *mi = mi_interp_data ();
538 print_exited_reason (mi->mi_uiout, exitstatus);
539 print_exited_reason (mi->cli_uiout, exitstatus);
542 /* Observer for the no_history notification. */
545 mi_on_no_history (void)
547 struct mi_interp *mi = mi_interp_data ();
552 print_no_history_reason (mi->mi_uiout);
553 print_no_history_reason (mi->cli_uiout);
557 mi_on_normal_stop (struct bpstats *bs, int print_frame)
559 /* Since this can be called when CLI command is executing,
560 using cli interpreter, be sure to use MI uiout for output,
561 not the current one. */
562 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
568 if (current_uiout != mi_uiout)
570 /* The normal_stop function has printed frame information
571 into CLI uiout, or some other non-MI uiout. There's no
572 way we can extract proper fields from random uiout
573 object, so we print the frame again. In practice, this
574 can only happen when running a CLI command in MI. */
575 struct ui_out *saved_uiout = current_uiout;
576 struct target_waitstatus last;
579 current_uiout = mi_uiout;
581 get_last_target_status (&last_ptid, &last);
582 print_stop_event (&last);
584 current_uiout = saved_uiout;
586 /* Otherwise, frame information has already been printed by
590 /* Breakpoint hits should always be mirrored to the console.
591 Deciding what to mirror to the console wrt to breakpoints
592 and random stops gets messy real fast. E.g., say "s"
593 trips on a breakpoint. We'd clearly want to mirror the
594 event to the console in this case. But what about more
595 complicated cases like "s&; thread n; s&", and one of
596 those steps spawning a new thread, and that thread
597 hitting a breakpoint? It's impossible in general to
598 track whether the thread had any relation to the commands
599 that had been executed. So we just simplify and always
600 mirror breakpoints and random events to the console.
602 Also, CLI execution commands (-interpreter-exec console
603 "next", for example) in async mode have the opposite
604 issue as described in the "then" branch above --
605 normal_stop has already printed frame information to MI
606 uiout, but nothing has printed the same information to
607 the CLI channel. We should print the source line to the
608 console when stepping or other similar commands, iff the
609 step was started by a console command (but not if it was
610 started with -exec-step or similar). */
611 struct thread_info *tp = inferior_thread ();
613 if ((!tp->control.stop_step
614 && !tp->control.proceed_to_finish)
615 || (tp->control.command_interp != NULL
616 && tp->control.command_interp != top_level_interpreter ()))
618 struct mi_interp *mi = top_level_interpreter_data ();
619 struct target_waitstatus last;
621 struct cleanup *old_chain;
623 /* Set the current uiout to CLI uiout temporarily. */
624 old_chain = make_cleanup (restore_current_uiout_cleanup,
626 current_uiout = mi->cli_uiout;
628 get_last_target_status (&last_ptid, &last);
629 print_stop_event (&last);
631 do_cleanups (old_chain);
635 ui_out_field_int (mi_uiout, "thread-id",
636 pid_to_thread_id (inferior_ptid));
639 struct cleanup *back_to = make_cleanup_ui_out_list_begin_end
640 (mi_uiout, "stopped-threads");
642 ui_out_field_int (mi_uiout, NULL,
643 pid_to_thread_id (inferior_ptid));
644 do_cleanups (back_to);
647 ui_out_field_string (mi_uiout, "stopped-threads", "all");
649 core = target_core_of_thread (inferior_ptid);
651 ui_out_field_int (mi_uiout, "core", core);
654 fputs_unfiltered ("*stopped", raw_stdout);
655 mi_out_put (mi_uiout, raw_stdout);
656 mi_out_rewind (mi_uiout);
657 mi_print_timing_maybe ();
658 fputs_unfiltered ("\n", raw_stdout);
659 gdb_flush (raw_stdout);
663 mi_about_to_proceed (void)
665 /* Suppress output while calling an inferior function. */
667 if (!ptid_equal (inferior_ptid, null_ptid))
669 struct thread_info *tp = inferior_thread ();
671 if (tp->control.in_infcall)
678 /* When the element is non-zero, no MI notifications will be emitted in
679 response to the corresponding observers. */
681 struct mi_suppress_notification mi_suppress_notification =
688 /* Emit notification on changing a traceframe. */
691 mi_traceframe_changed (int tfnum, int tpnum)
693 struct mi_interp *mi = top_level_interpreter_data ();
695 if (mi_suppress_notification.traceframe)
698 target_terminal_ours ();
701 fprintf_unfiltered (mi->event_channel, "traceframe-changed,"
702 "num=\"%d\",tracepoint=\"%d\"\n",
705 fprintf_unfiltered (mi->event_channel, "traceframe-changed,end");
707 gdb_flush (mi->event_channel);
710 /* Emit notification on creating a trace state variable. */
713 mi_tsv_created (const struct trace_state_variable *tsv)
715 struct mi_interp *mi = top_level_interpreter_data ();
717 target_terminal_ours ();
719 fprintf_unfiltered (mi->event_channel, "tsv-created,"
720 "name=\"%s\",initial=\"%s\"\n",
721 tsv->name, plongest (tsv->initial_value));
723 gdb_flush (mi->event_channel);
726 /* Emit notification on deleting a trace state variable. */
729 mi_tsv_deleted (const struct trace_state_variable *tsv)
731 struct mi_interp *mi = top_level_interpreter_data ();
733 target_terminal_ours ();
736 fprintf_unfiltered (mi->event_channel, "tsv-deleted,"
737 "name=\"%s\"\n", tsv->name);
739 fprintf_unfiltered (mi->event_channel, "tsv-deleted\n");
741 gdb_flush (mi->event_channel);
744 /* Emit notification on modifying a trace state variable. */
747 mi_tsv_modified (const struct trace_state_variable *tsv)
749 struct mi_interp *mi = top_level_interpreter_data ();
750 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
752 target_terminal_ours ();
754 fprintf_unfiltered (mi->event_channel,
757 ui_out_redirect (mi_uiout, mi->event_channel);
759 ui_out_field_string (mi_uiout, "name", tsv->name);
760 ui_out_field_string (mi_uiout, "initial",
761 plongest (tsv->initial_value));
762 if (tsv->value_known)
763 ui_out_field_string (mi_uiout, "current", plongest (tsv->value));
765 ui_out_redirect (mi_uiout, NULL);
767 gdb_flush (mi->event_channel);
770 /* Emit notification about a created breakpoint. */
773 mi_breakpoint_created (struct breakpoint *b)
775 struct mi_interp *mi = top_level_interpreter_data ();
776 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
777 volatile struct gdb_exception e;
779 if (mi_suppress_notification.breakpoint)
785 target_terminal_ours ();
786 fprintf_unfiltered (mi->event_channel,
787 "breakpoint-created");
788 /* We want the output from gdb_breakpoint_query to go to
789 mi->event_channel. One approach would be to just call
790 gdb_breakpoint_query, and then use mi_out_put to send the current
791 content of mi_outout into mi->event_channel. However, that will
792 break if anything is output to mi_uiout prior to calling the
793 breakpoint_created notifications. So, we use
795 ui_out_redirect (mi_uiout, mi->event_channel);
796 TRY_CATCH (e, RETURN_MASK_ERROR)
797 gdb_breakpoint_query (mi_uiout, b->number, NULL);
798 ui_out_redirect (mi_uiout, NULL);
800 gdb_flush (mi->event_channel);
803 /* Emit notification about deleted breakpoint. */
806 mi_breakpoint_deleted (struct breakpoint *b)
808 struct mi_interp *mi = top_level_interpreter_data ();
810 if (mi_suppress_notification.breakpoint)
816 target_terminal_ours ();
818 fprintf_unfiltered (mi->event_channel, "breakpoint-deleted,id=\"%d\"",
821 gdb_flush (mi->event_channel);
824 /* Emit notification about modified breakpoint. */
827 mi_breakpoint_modified (struct breakpoint *b)
829 struct mi_interp *mi = top_level_interpreter_data ();
830 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
831 volatile struct gdb_exception e;
833 if (mi_suppress_notification.breakpoint)
839 target_terminal_ours ();
840 fprintf_unfiltered (mi->event_channel,
841 "breakpoint-modified");
842 /* We want the output from gdb_breakpoint_query to go to
843 mi->event_channel. One approach would be to just call
844 gdb_breakpoint_query, and then use mi_out_put to send the current
845 content of mi_outout into mi->event_channel. However, that will
846 break if anything is output to mi_uiout prior to calling the
847 breakpoint_created notifications. So, we use
849 ui_out_redirect (mi_uiout, mi->event_channel);
850 TRY_CATCH (e, RETURN_MASK_ERROR)
851 gdb_breakpoint_query (mi_uiout, b->number, NULL);
852 ui_out_redirect (mi_uiout, NULL);
854 gdb_flush (mi->event_channel);
858 mi_output_running_pid (struct thread_info *info, void *arg)
862 if (ptid_get_pid (*ptid) == ptid_get_pid (info->ptid))
863 fprintf_unfiltered (raw_stdout,
864 "*running,thread-id=\"%d\"\n",
871 mi_inferior_count (struct inferior *inf, void *arg)
883 mi_on_resume (ptid_t ptid)
885 struct thread_info *tp = NULL;
887 if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
888 tp = inferior_thread ();
890 tp = find_thread_ptid (ptid);
892 /* Suppress output while calling an inferior function. */
893 if (tp->control.in_infcall)
896 /* To cater for older frontends, emit ^running, but do it only once
897 per each command. We do it here, since at this point we know
898 that the target was successfully resumed, and in non-async mode,
899 we won't return back to MI interpreter code until the target
900 is done running, so delaying the output of "^running" until then
901 will make it impossible for frontend to know what's going on.
903 In future (MI3), we'll be outputting "^done" here. */
904 if (!running_result_record_printed && mi_proceeded)
906 fprintf_unfiltered (raw_stdout, "%s^running\n",
907 current_token ? current_token : "");
910 if (ptid_get_pid (ptid) == -1)
911 fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
912 else if (ptid_is_pid (ptid))
916 /* Backwards compatibility. If there's only one inferior,
917 output "all", otherwise, output each resumed thread
919 iterate_over_inferiors (mi_inferior_count, &count);
922 fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
924 iterate_over_threads (mi_output_running_pid, &ptid);
928 struct thread_info *ti = find_thread_ptid (ptid);
931 fprintf_unfiltered (raw_stdout, "*running,thread-id=\"%d\"\n", ti->num);
934 if (!running_result_record_printed && mi_proceeded)
936 running_result_record_printed = 1;
937 /* This is what gdb used to do historically -- printing prompt even if
938 it cannot actually accept any input. This will be surely removed
939 for MI3, and may be removed even earler. */
940 /* FIXME: review the use of target_is_async_p here -- is that
942 if (!target_is_async_p ())
943 fputs_unfiltered ("(gdb) \n", raw_stdout);
945 gdb_flush (raw_stdout);
949 mi_solib_loaded (struct so_list *solib)
951 struct mi_interp *mi = top_level_interpreter_data ();
953 target_terminal_ours ();
954 if (gdbarch_has_global_solist (target_gdbarch ()))
955 fprintf_unfiltered (mi->event_channel,
956 "library-loaded,id=\"%s\",target-name=\"%s\","
957 "host-name=\"%s\",symbols-loaded=\"%d\"",
958 solib->so_original_name, solib->so_original_name,
959 solib->so_name, solib->symbols_loaded);
961 fprintf_unfiltered (mi->event_channel,
962 "library-loaded,id=\"%s\",target-name=\"%s\","
963 "host-name=\"%s\",symbols-loaded=\"%d\","
964 "thread-group=\"i%d\"",
965 solib->so_original_name, solib->so_original_name,
966 solib->so_name, solib->symbols_loaded,
967 current_inferior ()->num);
969 gdb_flush (mi->event_channel);
973 mi_solib_unloaded (struct so_list *solib)
975 struct mi_interp *mi = top_level_interpreter_data ();
977 target_terminal_ours ();
978 if (gdbarch_has_global_solist (target_gdbarch ()))
979 fprintf_unfiltered (mi->event_channel,
980 "library-unloaded,id=\"%s\",target-name=\"%s\","
982 solib->so_original_name, solib->so_original_name,
985 fprintf_unfiltered (mi->event_channel,
986 "library-unloaded,id=\"%s\",target-name=\"%s\","
987 "host-name=\"%s\",thread-group=\"i%d\"",
988 solib->so_original_name, solib->so_original_name,
989 solib->so_name, current_inferior ()->num);
991 gdb_flush (mi->event_channel);
994 /* Emit notification about the command parameter change. */
997 mi_command_param_changed (const char *param, const char *value)
999 struct mi_interp *mi = top_level_interpreter_data ();
1000 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
1002 if (mi_suppress_notification.cmd_param_changed)
1005 target_terminal_ours ();
1007 fprintf_unfiltered (mi->event_channel,
1008 "cmd-param-changed");
1010 ui_out_redirect (mi_uiout, mi->event_channel);
1012 ui_out_field_string (mi_uiout, "param", param);
1013 ui_out_field_string (mi_uiout, "value", value);
1015 ui_out_redirect (mi_uiout, NULL);
1017 gdb_flush (mi->event_channel);
1020 /* Emit notification about the target memory change. */
1023 mi_memory_changed (struct inferior *inferior, CORE_ADDR memaddr,
1024 ssize_t len, const bfd_byte *myaddr)
1026 struct mi_interp *mi = top_level_interpreter_data ();
1027 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
1028 struct obj_section *sec;
1030 if (mi_suppress_notification.memory)
1033 target_terminal_ours ();
1035 fprintf_unfiltered (mi->event_channel,
1038 ui_out_redirect (mi_uiout, mi->event_channel);
1040 ui_out_field_fmt (mi_uiout, "thread-group", "i%d", inferior->num);
1041 ui_out_field_core_addr (mi_uiout, "addr", target_gdbarch (), memaddr);
1042 ui_out_field_fmt (mi_uiout, "len", "%s", hex_string (len));
1044 /* Append 'type=code' into notification if MEMADDR falls in the range of
1045 sections contain code. */
1046 sec = find_pc_section (memaddr);
1047 if (sec != NULL && sec->objfile != NULL)
1049 flagword flags = bfd_get_section_flags (sec->objfile->obfd,
1050 sec->the_bfd_section);
1052 if (flags & SEC_CODE)
1053 ui_out_field_string (mi_uiout, "type", "code");
1056 ui_out_redirect (mi_uiout, NULL);
1058 gdb_flush (mi->event_channel);
1062 report_initial_inferior (struct inferior *inf, void *closure)
1064 /* This function is called from mi_intepreter_init, and since
1065 mi_inferior_added assumes that inferior is fully initialized
1066 and top_level_interpreter_data is set, we cannot call
1068 struct mi_interp *mi = closure;
1070 target_terminal_ours ();
1071 fprintf_unfiltered (mi->event_channel,
1072 "thread-group-added,id=\"i%d\"",
1074 gdb_flush (mi->event_channel);
1078 static struct ui_out *
1079 mi_ui_out (struct interp *interp)
1081 struct mi_interp *mi = interp_data (interp);
1083 return mi->mi_uiout;
1086 /* Save the original value of raw_stdout here when logging, so we can
1087 restore correctly when done. */
1089 static struct ui_file *saved_raw_stdout;
1091 /* Do MI-specific logging actions; save raw_stdout, and change all
1092 the consoles to use the supplied ui-file(s). */
1095 mi_set_logging (struct interp *interp, int start_log,
1096 struct ui_file *out, struct ui_file *logfile)
1098 struct mi_interp *mi = interp_data (interp);
1105 /* The tee created already is based on gdb_stdout, which for MI
1106 is a console and so we end up in an infinite loop of console
1107 writing to ui_file writing to console etc. So discard the
1108 existing tee (it hasn't been used yet, and MI won't ever use
1109 it), and create one based on raw_stdout instead. */
1112 ui_file_delete (out);
1113 out = tee_file_new (raw_stdout, 0, logfile, 0);
1116 saved_raw_stdout = raw_stdout;
1121 raw_stdout = saved_raw_stdout;
1122 saved_raw_stdout = NULL;
1125 mi_console_set_raw (mi->out, raw_stdout);
1126 mi_console_set_raw (mi->err, raw_stdout);
1127 mi_console_set_raw (mi->log, raw_stdout);
1128 mi_console_set_raw (mi->targ, raw_stdout);
1129 mi_console_set_raw (mi->event_channel, raw_stdout);
1134 extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
1137 _initialize_mi_interp (void)
1139 static const struct interp_procs procs =
1141 mi_interpreter_init, /* init_proc */
1142 mi_interpreter_resume, /* resume_proc */
1143 mi_interpreter_suspend, /* suspend_proc */
1144 mi_interpreter_exec, /* exec_proc */
1145 mi_interpreter_prompt_p, /* prompt_proc_p */
1146 mi_ui_out, /* ui_out_proc */
1147 mi_set_logging, /* set_logging_proc */
1148 mi_command_loop /* command_loop_proc */
1151 /* The various interpreter levels. */
1152 interp_add (interp_new (INTERP_MI1, &procs));
1153 interp_add (interp_new (INTERP_MI2, &procs));
1154 interp_add (interp_new (INTERP_MI3, &procs));
1155 interp_add (interp_new (INTERP_MI, &procs));