1 /* MI Interpreter Definitions and Commands for GDB, the GNU debugger.
3 Copyright (C) 2002-2005, 2007-2012 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/>. */
21 #include "gdb_string.h"
23 #include "event-top.h"
24 #include "event-loop.h"
28 #include "exceptions.h"
32 #include "mi-console.h"
33 #include "mi-common.h"
35 #include "gdbthread.h"
39 /* These are the interpreter setup, etc. functions for the MI interpreter */
40 static void mi_execute_command_wrapper (char *cmd);
41 static void mi_command_loop (int mi_version);
43 /* These are hooks that we put in place while doing interpreter_exec
44 so we can report interesting things that happened "behind the mi's
45 back" in this command */
46 static int mi_interp_query_hook (const char *ctlstr, va_list ap)
47 ATTRIBUTE_PRINTF (1, 0);
49 static void mi3_command_loop (void);
50 static void mi2_command_loop (void);
51 static void mi1_command_loop (void);
53 static void mi_insert_notify_hooks (void);
54 static void mi_remove_notify_hooks (void);
55 static void mi_on_normal_stop (struct bpstats *bs, int print_frame);
57 static void mi_new_thread (struct thread_info *t);
58 static void mi_thread_exit (struct thread_info *t, int silent);
59 static void mi_inferior_added (struct inferior *inf);
60 static void mi_inferior_appeared (struct inferior *inf);
61 static void mi_inferior_exit (struct inferior *inf);
62 static void mi_inferior_removed (struct inferior *inf);
63 static void mi_on_resume (ptid_t ptid);
64 static void mi_solib_loaded (struct so_list *solib);
65 static void mi_solib_unloaded (struct so_list *solib);
66 static void mi_about_to_proceed (void);
67 static void mi_breakpoint_created (struct breakpoint *b);
68 static void mi_breakpoint_deleted (struct breakpoint *b);
69 static void mi_breakpoint_modified (struct breakpoint *b);
71 static int report_initial_inferior (struct inferior *inf, void *closure);
74 mi_interpreter_init (struct interp *interp, int top_level)
76 struct mi_interp *mi = XMALLOC (struct mi_interp);
80 /* HACK: We need to force stdout/stderr to point at the console. This avoids
81 any potential side effects caused by legacy code that is still
82 using the TUI / fputs_unfiltered_hook. So we set up output channels for
83 this now, and swap them in when we are run. */
85 raw_stdout = stdio_fileopen (stdout);
87 /* Create MI channels */
88 mi->out = mi_console_file_new (raw_stdout, "~", '"');
89 mi->err = mi_console_file_new (raw_stdout, "&", '"');
91 mi->targ = mi_console_file_new (raw_stdout, "@", '"');
92 mi->event_channel = mi_console_file_new (raw_stdout, "=", 0);
94 name = interp_name (interp);
95 /* INTERP_MI selects the most recent released version. "mi2" was
96 released as part of GDB 6.0. */
97 if (strcmp (name, INTERP_MI) == 0)
99 else if (strcmp (name, INTERP_MI1) == 0)
101 else if (strcmp (name, INTERP_MI2) == 0)
103 else if (strcmp (name, INTERP_MI3) == 0)
106 gdb_assert_not_reached ("unhandled MI version");
108 mi->uiout = mi_out_new (mi_version);
112 observer_attach_new_thread (mi_new_thread);
113 observer_attach_thread_exit (mi_thread_exit);
114 observer_attach_inferior_added (mi_inferior_added);
115 observer_attach_inferior_appeared (mi_inferior_appeared);
116 observer_attach_inferior_exit (mi_inferior_exit);
117 observer_attach_inferior_removed (mi_inferior_removed);
118 observer_attach_normal_stop (mi_on_normal_stop);
119 observer_attach_target_resumed (mi_on_resume);
120 observer_attach_solib_loaded (mi_solib_loaded);
121 observer_attach_solib_unloaded (mi_solib_unloaded);
122 observer_attach_about_to_proceed (mi_about_to_proceed);
123 observer_attach_breakpoint_created (mi_breakpoint_created);
124 observer_attach_breakpoint_deleted (mi_breakpoint_deleted);
125 observer_attach_breakpoint_modified (mi_breakpoint_modified);
127 /* The initial inferior is created before this function is called, so we
128 need to report it explicitly. Use iteration in case future version
129 of GDB creates more than one inferior up-front. */
130 iterate_over_inferiors (report_initial_inferior, mi);
137 mi_interpreter_resume (void *data)
139 struct mi_interp *mi = data;
141 /* As per hack note in mi_interpreter_init, swap in the output channels... */
142 gdb_setup_readline ();
144 /* These overwrite some of the initialization done in
145 _intialize_event_loop. */
146 call_readline = gdb_readline2;
147 input_handler = mi_execute_command_wrapper;
148 add_file_handler (input_fd, stdin_event_handler, 0);
149 async_command_editing_p = 0;
150 /* FIXME: This is a total hack for now. PB's use of the MI
151 implicitly relies on a bug in the async support which allows
152 asynchronous commands to leak through the commmand loop. The bug
153 involves (but is not limited to) the fact that sync_execution was
154 erroneously initialized to 0. Duplicate by initializing it thus
158 gdb_stdout = mi->out;
159 /* Route error and log output through the MI */
160 gdb_stderr = mi->err;
161 gdb_stdlog = mi->log;
162 /* Route target output through the MI. */
163 gdb_stdtarg = mi->targ;
164 /* Route target error through the MI as well. */
165 gdb_stdtargerr = mi->targ;
167 /* Replace all the hooks that we know about. There really needs to
168 be a better way of doing this... */
169 clear_interpreter_hooks ();
171 deprecated_show_load_progress = mi_load_progress;
173 /* If we're _the_ interpreter, take control. */
174 if (current_interp_named_p (INTERP_MI1))
175 deprecated_command_loop_hook = mi1_command_loop;
176 else if (current_interp_named_p (INTERP_MI2))
177 deprecated_command_loop_hook = mi2_command_loop;
178 else if (current_interp_named_p (INTERP_MI3))
179 deprecated_command_loop_hook = mi3_command_loop;
181 deprecated_command_loop_hook = mi2_command_loop;
187 mi_interpreter_suspend (void *data)
189 gdb_disable_readline ();
193 static struct gdb_exception
194 mi_interpreter_exec (void *data, const char *command)
196 char *tmp = alloca (strlen (command) + 1);
198 strcpy (tmp, command);
199 mi_execute_command_wrapper (tmp);
200 return exception_none;
203 /* Never display the default gdb prompt in mi case. */
205 mi_interpreter_prompt_p (void *data)
211 mi_cmd_interpreter_exec (char *command, char **argv, int argc)
213 struct interp *interp_to_use;
215 char *mi_error_message = NULL;
216 struct cleanup *old_chain;
219 error (_("-interpreter-exec: "
220 "Usage: -interpreter-exec interp command"));
222 interp_to_use = interp_lookup (argv[0]);
223 if (interp_to_use == NULL)
224 error (_("-interpreter-exec: could not find interpreter \"%s\""),
227 if (!interp_exec_p (interp_to_use))
228 error (_("-interpreter-exec: interpreter \"%s\" "
229 "does not support command execution"),
232 /* Insert the MI out hooks, making sure to also call the interpreter's hooks
234 /* KRS: We shouldn't need this... Events should be installed and they should
235 just ALWAYS fire something out down the MI channel... */
236 mi_insert_notify_hooks ();
238 /* Now run the code... */
240 old_chain = make_cleanup (null_cleanup, 0);
241 for (i = 1; i < argc; i++)
243 struct gdb_exception e = interp_exec (interp_to_use, argv[i]);
247 mi_error_message = xstrdup (e.message);
248 make_cleanup (xfree, mi_error_message);
253 mi_remove_notify_hooks ();
255 if (mi_error_message != NULL)
256 error ("%s", mi_error_message);
257 do_cleanups (old_chain);
261 * mi_insert_notify_hooks - This inserts a number of hooks that are
262 * meant to produce async-notify ("=") MI messages while running
263 * commands in another interpreter using mi_interpreter_exec. The
264 * canonical use for this is to allow access to the gdb CLI
265 * interpreter from within the MI, while still producing MI style
266 * output when actions in the CLI command change gdb's state.
270 mi_insert_notify_hooks (void)
272 deprecated_query_hook = mi_interp_query_hook;
276 mi_remove_notify_hooks (void)
278 deprecated_query_hook = NULL;
282 mi_interp_query_hook (const char *ctlstr, va_list ap)
288 mi_execute_command_wrapper (char *cmd)
290 mi_execute_command (cmd, stdin == instream);
294 mi1_command_loop (void)
300 mi2_command_loop (void)
306 mi3_command_loop (void)
312 mi_command_loop (int mi_version)
314 /* Turn off 8 bit strings in quoted output. Any character with the
315 high bit set is printed using C's octal format. */
316 sevenbit_strings = 1;
317 /* Tell the world that we're alive */
318 fputs_unfiltered ("(gdb) \n", raw_stdout);
319 gdb_flush (raw_stdout);
324 mi_new_thread (struct thread_info *t)
326 struct mi_interp *mi = top_level_interpreter_data ();
327 struct inferior *inf = find_inferior_pid (ptid_get_pid (t->ptid));
331 fprintf_unfiltered (mi->event_channel,
332 "thread-created,id=\"%d\",group-id=\"i%d\"",
334 gdb_flush (mi->event_channel);
338 mi_thread_exit (struct thread_info *t, int silent)
340 struct mi_interp *mi;
341 struct inferior *inf;
346 inf = find_inferior_pid (ptid_get_pid (t->ptid));
348 mi = top_level_interpreter_data ();
349 target_terminal_ours ();
350 fprintf_unfiltered (mi->event_channel,
351 "thread-exited,id=\"%d\",group-id=\"i%d\"",
353 gdb_flush (mi->event_channel);
357 mi_inferior_added (struct inferior *inf)
359 struct mi_interp *mi = top_level_interpreter_data ();
361 target_terminal_ours ();
362 fprintf_unfiltered (mi->event_channel,
363 "thread-group-added,id=\"i%d\"",
365 gdb_flush (mi->event_channel);
369 mi_inferior_appeared (struct inferior *inf)
371 struct mi_interp *mi = top_level_interpreter_data ();
373 target_terminal_ours ();
374 fprintf_unfiltered (mi->event_channel,
375 "thread-group-started,id=\"i%d\",pid=\"%d\"",
377 gdb_flush (mi->event_channel);
381 mi_inferior_exit (struct inferior *inf)
383 struct mi_interp *mi = top_level_interpreter_data ();
385 target_terminal_ours ();
386 if (inf->has_exit_code)
387 fprintf_unfiltered (mi->event_channel,
388 "thread-group-exited,id=\"i%d\",exit-code=\"%s\"",
389 inf->num, int_string (inf->exit_code, 8, 0, 0, 1));
391 fprintf_unfiltered (mi->event_channel,
392 "thread-group-exited,id=\"i%d\"", inf->num);
394 gdb_flush (mi->event_channel);
398 mi_inferior_removed (struct inferior *inf)
400 struct mi_interp *mi = top_level_interpreter_data ();
402 target_terminal_ours ();
403 fprintf_unfiltered (mi->event_channel,
404 "thread-group-removed,id=\"i%d\"",
406 gdb_flush (mi->event_channel);
410 mi_on_normal_stop (struct bpstats *bs, int print_frame)
412 /* Since this can be called when CLI command is executing,
413 using cli interpreter, be sure to use MI uiout for output,
414 not the current one. */
415 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
421 if (current_uiout != mi_uiout)
423 /* The normal_stop function has printed frame information into
424 CLI uiout, or some other non-MI uiout. There's no way we
425 can extract proper fields from random uiout object, so we print
426 the frame again. In practice, this can only happen when running
427 a CLI command in MI. */
428 struct ui_out *saved_uiout = current_uiout;
429 struct target_waitstatus last;
432 current_uiout = mi_uiout;
434 get_last_target_status (&last_ptid, &last);
435 bpstat_print (bs, last.kind);
437 print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
438 current_uiout = saved_uiout;
441 ui_out_field_int (mi_uiout, "thread-id",
442 pid_to_thread_id (inferior_ptid));
445 struct cleanup *back_to = make_cleanup_ui_out_list_begin_end
446 (mi_uiout, "stopped-threads");
448 ui_out_field_int (mi_uiout, NULL,
449 pid_to_thread_id (inferior_ptid));
450 do_cleanups (back_to);
453 ui_out_field_string (mi_uiout, "stopped-threads", "all");
455 core = target_core_of_thread (inferior_ptid);
457 ui_out_field_int (mi_uiout, "core", core);
460 fputs_unfiltered ("*stopped", raw_stdout);
461 mi_out_put (mi_uiout, raw_stdout);
462 mi_out_rewind (mi_uiout);
463 mi_print_timing_maybe ();
464 fputs_unfiltered ("\n", raw_stdout);
465 gdb_flush (raw_stdout);
469 mi_about_to_proceed (void)
471 /* Suppress output while calling an inferior function. */
473 if (!ptid_equal (inferior_ptid, null_ptid))
475 struct thread_info *tp = inferior_thread ();
477 if (tp->control.in_infcall)
484 /* When non-zero, no MI notifications will be emitted in
485 response to breakpoint change observers. */
486 int mi_suppress_breakpoint_notifications = 0;
488 /* Emit notification about a created breakpoint. */
490 mi_breakpoint_created (struct breakpoint *b)
492 struct mi_interp *mi = top_level_interpreter_data ();
493 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
494 struct gdb_exception e;
496 if (mi_suppress_breakpoint_notifications)
502 target_terminal_ours ();
503 fprintf_unfiltered (mi->event_channel,
504 "breakpoint-created");
505 /* We want the output from gdb_breakpoint_query to go to
506 mi->event_channel. One approach would be to just
507 call gdb_breakpoint_query, and then use mi_out_put to
508 send the current content of mi_outout into mi->event_channel.
509 However, that will break if anything is output to mi_uiout
510 prior the calling the breakpoint_created notifications.
511 So, we use ui_out_redirect. */
512 ui_out_redirect (mi_uiout, mi->event_channel);
513 TRY_CATCH (e, RETURN_MASK_ERROR)
514 gdb_breakpoint_query (mi_uiout, b->number, NULL);
515 ui_out_redirect (mi_uiout, NULL);
517 gdb_flush (mi->event_channel);
520 /* Emit notification about deleted breakpoint. */
522 mi_breakpoint_deleted (struct breakpoint *b)
524 struct mi_interp *mi = top_level_interpreter_data ();
526 if (mi_suppress_breakpoint_notifications)
532 target_terminal_ours ();
534 fprintf_unfiltered (mi->event_channel, "breakpoint-deleted,id=\"%d\"",
537 gdb_flush (mi->event_channel);
540 /* Emit notification about modified breakpoint. */
542 mi_breakpoint_modified (struct breakpoint *b)
544 struct mi_interp *mi = top_level_interpreter_data ();
545 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
546 struct gdb_exception e;
548 if (mi_suppress_breakpoint_notifications)
554 target_terminal_ours ();
555 fprintf_unfiltered (mi->event_channel,
556 "breakpoint-modified");
557 /* We want the output from gdb_breakpoint_query to go to
558 mi->event_channel. One approach would be to just
559 call gdb_breakpoint_query, and then use mi_out_put to
560 send the current content of mi_outout into mi->event_channel.
561 However, that will break if anything is output to mi_uiout
562 prior the calling the breakpoint_created notifications.
563 So, we use ui_out_redirect. */
564 ui_out_redirect (mi_uiout, mi->event_channel);
565 TRY_CATCH (e, RETURN_MASK_ERROR)
566 gdb_breakpoint_query (mi_uiout, b->number, NULL);
567 ui_out_redirect (mi_uiout, NULL);
569 gdb_flush (mi->event_channel);
574 mi_output_running_pid (struct thread_info *info, void *arg)
578 if (ptid_get_pid (*ptid) == ptid_get_pid (info->ptid))
579 fprintf_unfiltered (raw_stdout,
580 "*running,thread-id=\"%d\"\n",
587 mi_inferior_count (struct inferior *inf, void *arg)
599 mi_on_resume (ptid_t ptid)
601 struct thread_info *tp = NULL;
603 if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
604 tp = inferior_thread ();
606 tp = find_thread_ptid (ptid);
608 /* Suppress output while calling an inferior function. */
609 if (tp->control.in_infcall)
612 /* To cater for older frontends, emit ^running, but do it only once
613 per each command. We do it here, since at this point we know
614 that the target was successfully resumed, and in non-async mode,
615 we won't return back to MI interpreter code until the target
616 is done running, so delaying the output of "^running" until then
617 will make it impossible for frontend to know what's going on.
619 In future (MI3), we'll be outputting "^done" here. */
620 if (!running_result_record_printed && mi_proceeded)
622 fprintf_unfiltered (raw_stdout, "%s^running\n",
623 current_token ? current_token : "");
626 if (PIDGET (ptid) == -1)
627 fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
628 else if (ptid_is_pid (ptid))
632 /* Backwards compatibility. If there's only one inferior,
633 output "all", otherwise, output each resumed thread
635 iterate_over_inferiors (mi_inferior_count, &count);
638 fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
640 iterate_over_threads (mi_output_running_pid, &ptid);
644 struct thread_info *ti = find_thread_ptid (ptid);
647 fprintf_unfiltered (raw_stdout, "*running,thread-id=\"%d\"\n", ti->num);
650 if (!running_result_record_printed && mi_proceeded)
652 running_result_record_printed = 1;
653 /* This is what gdb used to do historically -- printing prompt even if
654 it cannot actually accept any input. This will be surely removed
655 for MI3, and may be removed even earler. */
656 /* FIXME: review the use of target_is_async_p here -- is that
658 if (!target_is_async_p ())
659 fputs_unfiltered ("(gdb) \n", raw_stdout);
661 gdb_flush (raw_stdout);
665 mi_solib_loaded (struct so_list *solib)
667 struct mi_interp *mi = top_level_interpreter_data ();
669 target_terminal_ours ();
670 if (gdbarch_has_global_solist (target_gdbarch))
671 fprintf_unfiltered (mi->event_channel,
672 "library-loaded,id=\"%s\",target-name=\"%s\","
673 "host-name=\"%s\",symbols-loaded=\"%d\"",
674 solib->so_original_name, solib->so_original_name,
675 solib->so_name, solib->symbols_loaded);
677 fprintf_unfiltered (mi->event_channel,
678 "library-loaded,id=\"%s\",target-name=\"%s\","
679 "host-name=\"%s\",symbols-loaded=\"%d\","
680 "thread-group=\"i%d\"",
681 solib->so_original_name, solib->so_original_name,
682 solib->so_name, solib->symbols_loaded,
683 current_inferior ()->num);
685 gdb_flush (mi->event_channel);
689 mi_solib_unloaded (struct so_list *solib)
691 struct mi_interp *mi = top_level_interpreter_data ();
693 target_terminal_ours ();
694 if (gdbarch_has_global_solist (target_gdbarch))
695 fprintf_unfiltered (mi->event_channel,
696 "library-unloaded,id=\"%s\",target-name=\"%s\","
698 solib->so_original_name, solib->so_original_name,
701 fprintf_unfiltered (mi->event_channel,
702 "library-unloaded,id=\"%s\",target-name=\"%s\","
703 "host-name=\"%s\",thread-group=\"i%d\"",
704 solib->so_original_name, solib->so_original_name,
705 solib->so_name, current_inferior ()->num);
707 gdb_flush (mi->event_channel);
711 report_initial_inferior (struct inferior *inf, void *closure)
713 /* This function is called from mi_intepreter_init, and since
714 mi_inferior_added assumes that inferior is fully initialized
715 and top_level_interpreter_data is set, we cannot call
717 struct mi_interp *mi = closure;
719 target_terminal_ours ();
720 fprintf_unfiltered (mi->event_channel,
721 "thread-group-added,id=\"i%d\"",
723 gdb_flush (mi->event_channel);
727 static struct ui_out *
728 mi_ui_out (struct interp *interp)
730 struct mi_interp *mi = interp_data (interp);
735 extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
738 _initialize_mi_interp (void)
740 static const struct interp_procs procs =
742 mi_interpreter_init, /* init_proc */
743 mi_interpreter_resume, /* resume_proc */
744 mi_interpreter_suspend, /* suspend_proc */
745 mi_interpreter_exec, /* exec_proc */
746 mi_interpreter_prompt_p, /* prompt_proc_p */
747 mi_ui_out /* ui_out_proc */
750 /* The various interpreter levels. */
751 interp_add (interp_new (INTERP_MI1, &procs));
752 interp_add (interp_new (INTERP_MI2, &procs));
753 interp_add (interp_new (INTERP_MI3, &procs));
754 interp_add (interp_new (INTERP_MI, &procs));