Make display_gdb_prompt CLI-only.
[deliverable/binutils-gdb.git] / gdb / mi / mi-interp.c
CommitLineData
4a8f6654
AC
1/* MI Interpreter Definitions and Commands for GDB, the GNU debugger.
2
ecd75fc8 3 Copyright (C) 2002-2014 Free Software Foundation, Inc.
4a8f6654
AC
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
4a8f6654
AC
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
4a8f6654
AC
19
20#include "defs.h"
0e9f083f 21#include <string.h>
4a8f6654
AC
22#include "interps.h"
23#include "event-top.h"
24#include "event-loop.h"
25#include "inferior.h"
45741a9c 26#include "infrun.h"
4a8f6654
AC
27#include "ui-out.h"
28#include "top.h"
c1043fc2 29#include "exceptions.h"
4a8f6654
AC
30#include "mi-main.h"
31#include "mi-cmds.h"
32#include "mi-out.h"
33#include "mi-console.h"
66bb093b 34#include "mi-common.h"
683f2885
VP
35#include "observer.h"
36#include "gdbthread.h"
c86cf029 37#include "solist.h"
8d3788bd 38#include "gdb.h"
8de0566d 39#include "objfiles.h"
134a2066 40#include "tracepoint.h"
17b2616c 41#include "cli-out.h"
4a8f6654 42
2b03b41d
SS
43/* These are the interpreter setup, etc. functions for the MI
44 interpreter. */
45
ee047554 46static void mi_execute_command_wrapper (const char *cmd);
e837f12a 47static void mi_execute_command_input_handler (char *cmd);
1af12a7d 48static void mi_command_loop (void *data);
4a8f6654
AC
49
50/* These are hooks that we put in place while doing interpreter_exec
2b03b41d
SS
51 so we can report interesting things that happened "behind the MI's
52 back" in this command. */
53
bee0189a 54static int mi_interp_query_hook (const char *ctlstr, va_list ap)
2b03b41d 55 ATTRIBUTE_PRINTF (1, 0);
4a8f6654 56
4a8f6654
AC
57static void mi_insert_notify_hooks (void);
58static void mi_remove_notify_hooks (void);
fd664c91
PA
59
60static void mi_on_signal_received (enum gdb_signal siggnal);
61static void mi_on_end_stepping_range (void);
62static void mi_on_signal_exited (enum gdb_signal siggnal);
63static void mi_on_exited (int exitstatus);
1d33d6ba 64static void mi_on_normal_stop (struct bpstats *bs, int print_frame);
fd664c91 65static void mi_on_no_history (void);
4a8f6654 66
683f2885 67static void mi_new_thread (struct thread_info *t);
a07daef3 68static void mi_thread_exit (struct thread_info *t, int silent);
82a90ccf 69static void mi_record_changed (struct inferior*, int);
a79b8f6e
VP
70static void mi_inferior_added (struct inferior *inf);
71static void mi_inferior_appeared (struct inferior *inf);
72static void mi_inferior_exit (struct inferior *inf);
73static void mi_inferior_removed (struct inferior *inf);
e1ac3328 74static void mi_on_resume (ptid_t ptid);
c86cf029
VP
75static void mi_solib_loaded (struct so_list *solib);
76static void mi_solib_unloaded (struct so_list *solib);
f3b1572e 77static void mi_about_to_proceed (void);
201b4506 78static void mi_traceframe_changed (int tfnum, int tpnum);
134a2066
YQ
79static void mi_tsv_created (const struct trace_state_variable *tsv);
80static void mi_tsv_deleted (const struct trace_state_variable *tsv);
81static void mi_tsv_modified (const struct trace_state_variable *tsv);
8d3788bd
VP
82static void mi_breakpoint_created (struct breakpoint *b);
83static void mi_breakpoint_deleted (struct breakpoint *b);
84static void mi_breakpoint_modified (struct breakpoint *b);
5b9afe8a 85static void mi_command_param_changed (const char *param, const char *value);
8de0566d
YQ
86static void mi_memory_changed (struct inferior *inf, CORE_ADDR memaddr,
87 ssize_t len, const bfd_byte *myaddr);
683f2885 88
a79b8f6e
VP
89static int report_initial_inferior (struct inferior *inf, void *closure);
90
4a8f6654 91static void *
4801a9a3 92mi_interpreter_init (struct interp *interp, int top_level)
4a8f6654 93{
70ba0933 94 struct mi_interp *mi = XNEW (struct mi_interp);
4801a9a3
PA
95 const char *name;
96 int mi_version;
4a8f6654 97
bf6309af
SS
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. */
4a8f6654 102
bf6309af 103 raw_stdout = gdb_stdout;
4a8f6654 104
2b03b41d
SS
105 /* Create MI console channels, each with a different prefix so they
106 can be distinguished. */
4a8f6654
AC
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
4801a9a3
PA
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
fd664c91
PA
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);
4801a9a3 137
683f2885 138 if (top_level)
063bfe2e
VP
139 {
140 observer_attach_new_thread (mi_new_thread);
141 observer_attach_thread_exit (mi_thread_exit);
a79b8f6e 142 observer_attach_inferior_added (mi_inferior_added);
6c95b8df 143 observer_attach_inferior_appeared (mi_inferior_appeared);
4a92f99b 144 observer_attach_inferior_exit (mi_inferior_exit);
a79b8f6e 145 observer_attach_inferior_removed (mi_inferior_removed);
82a90ccf 146 observer_attach_record_changed (mi_record_changed);
f7f9a841 147 observer_attach_normal_stop (mi_on_normal_stop);
e1ac3328 148 observer_attach_target_resumed (mi_on_resume);
c86cf029
VP
149 observer_attach_solib_loaded (mi_solib_loaded);
150 observer_attach_solib_unloaded (mi_solib_unloaded);
f3b1572e 151 observer_attach_about_to_proceed (mi_about_to_proceed);
201b4506 152 observer_attach_traceframe_changed (mi_traceframe_changed);
bb25a15c
YQ
153 observer_attach_tsv_created (mi_tsv_created);
154 observer_attach_tsv_deleted (mi_tsv_deleted);
134a2066 155 observer_attach_tsv_modified (mi_tsv_modified);
8d3788bd
VP
156 observer_attach_breakpoint_created (mi_breakpoint_created);
157 observer_attach_breakpoint_deleted (mi_breakpoint_deleted);
158 observer_attach_breakpoint_modified (mi_breakpoint_modified);
5b9afe8a 159 observer_attach_command_param_changed (mi_command_param_changed);
8de0566d 160 observer_attach_memory_changed (mi_memory_changed);
a79b8f6e 161
2b03b41d
SS
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. */
a79b8f6e 166 iterate_over_inferiors (report_initial_inferior, mi);
063bfe2e 167 }
683f2885 168
4a8f6654
AC
169 return mi;
170}
171
172static int
173mi_interpreter_resume (void *data)
174{
175 struct mi_interp *mi = data;
4a8f6654 176
2b03b41d
SS
177 /* As per hack note in mi_interpreter_init, swap in the output
178 channels... */
4a8f6654
AC
179 gdb_setup_readline ();
180
362646f5
AC
181 /* These overwrite some of the initialization done in
182 _intialize_event_loop. */
183 call_readline = gdb_readline2;
e837f12a 184 input_handler = mi_execute_command_input_handler;
362646f5
AC
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;
4a8f6654
AC
193
194 gdb_stdout = mi->out;
2b03b41d 195 /* Route error and log output through the MI. */
4a8f6654
AC
196 gdb_stderr = mi->err;
197 gdb_stdlog = mi->log;
2b03b41d 198 /* Route target output through the MI. */
4a8f6654 199 gdb_stdtarg = mi->targ;
2b03b41d 200 /* Route target error through the MI as well. */
1f20321b 201 gdb_stdtargerr = mi->targ;
4a8f6654
AC
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
9a4105ab 207 deprecated_show_load_progress = mi_load_progress;
4a8f6654 208
4a8f6654
AC
209 return 1;
210}
211
212static int
213mi_interpreter_suspend (void *data)
214{
215 gdb_disable_readline ();
216 return 1;
217}
218
71fff37b 219static struct gdb_exception
4a8f6654
AC
220mi_interpreter_exec (void *data, const char *command)
221{
ee047554 222 mi_execute_command_wrapper (command);
c1043fc2 223 return exception_none;
4a8f6654
AC
224}
225
ce8f13f8 226void
4a8f6654
AC
227mi_cmd_interpreter_exec (char *command, char **argv, int argc)
228{
229 struct interp *interp_to_use;
4a8f6654 230 int i;
a13e061a
PA
231 char *mi_error_message = NULL;
232 struct cleanup *old_chain;
4a8f6654
AC
233
234 if (argc < 2)
1b05df00 235 error (_("-interpreter-exec: "
9b20d036 236 "Usage: -interpreter-exec interp command"));
4a8f6654
AC
237
238 interp_to_use = interp_lookup (argv[0]);
239 if (interp_to_use == NULL)
1b05df00 240 error (_("-interpreter-exec: could not find interpreter \"%s\""),
9a2b4c1b 241 argv[0]);
4a8f6654 242
17b2616c
PA
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
2b03b41d
SS
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. */
4a8f6654
AC
252 mi_insert_notify_hooks ();
253
2b03b41d 254 /* Now run the code. */
4a8f6654 255
a13e061a 256 old_chain = make_cleanup (null_cleanup, 0);
4a8f6654
AC
257 for (i = 1; i < argc; i++)
258 {
32c1e744 259 struct gdb_exception e = interp_exec (interp_to_use, argv[i]);
102040f0 260
32c1e744
VP
261 if (e.reason < 0)
262 {
263 mi_error_message = xstrdup (e.message);
a13e061a 264 make_cleanup (xfree, mi_error_message);
32c1e744
VP
265 break;
266 }
4a8f6654
AC
267 }
268
269 mi_remove_notify_hooks ();
270
a13e061a
PA
271 if (mi_error_message != NULL)
272 error ("%s", mi_error_message);
273 do_cleanups (old_chain);
4a8f6654
AC
274}
275
2b03b41d
SS
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. */
4a8f6654
AC
282
283static void
284mi_insert_notify_hooks (void)
285{
9a4105ab 286 deprecated_query_hook = mi_interp_query_hook;
4a8f6654
AC
287}
288
289static void
11308a41 290mi_remove_notify_hooks (void)
4a8f6654 291{
9a4105ab 292 deprecated_query_hook = NULL;
4a8f6654
AC
293}
294
295static int
296mi_interp_query_hook (const char *ctlstr, va_list ap)
297{
298 return 1;
299}
300
4a8f6654 301static void
ee047554 302mi_execute_command_wrapper (const char *cmd)
4a8f6654
AC
303{
304 mi_execute_command (cmd, stdin == instream);
305}
306
e837f12a
JK
307/* mi_execute_command_wrapper wrapper suitable for INPUT_HANDLER. */
308
309static void
310mi_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
4a8f6654 318static void
1af12a7d 319mi_command_loop (void *data)
4a8f6654 320{
4a8f6654 321 /* Turn off 8 bit strings in quoted output. Any character with the
2b03b41d 322 high bit set is printed using C's octal format. */
4a8f6654 323 sevenbit_strings = 1;
2b03b41d
SS
324
325 /* Tell the world that we're alive. */
4a8f6654
AC
326 fputs_unfiltered ("(gdb) \n", raw_stdout);
327 gdb_flush (raw_stdout);
2b03b41d 328
362646f5 329 start_event_loop ();
4a8f6654
AC
330}
331
683f2885
VP
332static void
333mi_new_thread (struct thread_info *t)
334{
335 struct mi_interp *mi = top_level_interpreter_data ();
a79b8f6e
VP
336 struct inferior *inf = find_inferior_pid (ptid_get_pid (t->ptid));
337
338 gdb_assert (inf);
683f2885 339
3d043ef6 340 fprintf_unfiltered (mi->event_channel,
a79b8f6e
VP
341 "thread-created,id=\"%d\",group-id=\"i%d\"",
342 t->num, inf->num);
683f2885
VP
343 gdb_flush (mi->event_channel);
344}
345
063bfe2e 346static void
a07daef3 347mi_thread_exit (struct thread_info *t, int silent)
063bfe2e 348{
a07daef3 349 struct mi_interp *mi;
a79b8f6e 350 struct inferior *inf;
a07daef3
PA
351
352 if (silent)
353 return;
354
a79b8f6e
VP
355 inf = find_inferior_pid (ptid_get_pid (t->ptid));
356
a07daef3 357 mi = top_level_interpreter_data ();
063bfe2e 358 target_terminal_ours ();
3d043ef6 359 fprintf_unfiltered (mi->event_channel,
a79b8f6e
VP
360 "thread-exited,id=\"%d\",group-id=\"i%d\"",
361 t->num, inf->num);
063bfe2e
VP
362 gdb_flush (mi->event_channel);
363}
364
82a90ccf
YQ
365/* Emit notification on changing the state of record. */
366
367static void
368mi_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
a79b8f6e
VP
378static void
379mi_inferior_added (struct inferior *inf)
380{
381 struct mi_interp *mi = top_level_interpreter_data ();
102040f0 382
a79b8f6e
VP
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
390static void
391mi_inferior_appeared (struct inferior *inf)
4a92f99b
VP
392{
393 struct mi_interp *mi = top_level_interpreter_data ();
102040f0 394
4a92f99b 395 target_terminal_ours ();
a79b8f6e
VP
396 fprintf_unfiltered (mi->event_channel,
397 "thread-group-started,id=\"i%d\",pid=\"%d\"",
398 inf->num, inf->pid);
4a92f99b
VP
399 gdb_flush (mi->event_channel);
400}
401
402static void
a79b8f6e 403mi_inferior_exit (struct inferior *inf)
4a92f99b
VP
404{
405 struct mi_interp *mi = top_level_interpreter_data ();
102040f0 406
4a92f99b 407 target_terminal_ours ();
8cf64490
TT
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
4a92f99b
VP
416 gdb_flush (mi->event_channel);
417}
418
a79b8f6e
VP
419static void
420mi_inferior_removed (struct inferior *inf)
421{
422 struct mi_interp *mi = top_level_interpreter_data ();
102040f0 423
a79b8f6e
VP
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
17b2616c
PA
431/* Cleanup that restores a previous current uiout. */
432
433static void
434restore_current_uiout_cleanup (void *arg)
435{
436 struct ui_out *saved_uiout = arg;
437
438 current_uiout = saved_uiout;
439}
440
fd664c91
PA
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
445static struct interp *
446find_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
464static struct mi_interp *
465mi_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
480static void
481mi_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
494static void
495mi_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. */
17b2616c
PA
507
508static void
fd664c91 509mi_on_signal_exited (enum gdb_signal siggnal)
17b2616c 510{
fd664c91 511 struct mi_interp *mi = mi_interp_data ();
17b2616c 512
fd664c91
PA
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
522static void
523mi_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
536static void
537mi_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);
17b2616c
PA
546}
547
f7f9a841 548static void
1d33d6ba 549mi_on_normal_stop (struct bpstats *bs, int print_frame)
f7f9a841
VP
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. */
1d33d6ba 554 struct ui_out *mi_uiout = interp_ui_out (top_level_interpreter ());
f7f9a841 555
1d33d6ba
VP
556 if (print_frame)
557 {
dc146f7c 558 int core;
102040f0 559
79a45e25 560 if (current_uiout != mi_uiout)
1d33d6ba 561 {
2b03b41d
SS
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. */
79a45e25 567 struct ui_out *saved_uiout = current_uiout;
36dfb11c
TT
568 struct target_waitstatus last;
569 ptid_t last_ptid;
102040f0 570
79a45e25 571 current_uiout = mi_uiout;
36dfb11c
TT
572
573 get_last_target_status (&last_ptid, &last);
0c7e1a46 574 print_stop_event (&last);
36dfb11c 575
79a45e25 576 current_uiout = saved_uiout;
1d33d6ba 577 }
17b2616c
PA
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;
17b2616c
PA
613 struct cleanup *old_chain;
614
fd664c91
PA
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;
17b2616c
PA
619
620 get_last_target_status (&last_ptid, &last);
621 print_stop_event (&last);
622
623 do_cleanups (old_chain);
624 }
625 }
1d33d6ba
VP
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");
102040f0 633
1d33d6ba 634 ui_out_field_int (mi_uiout, NULL,
102040f0 635 pid_to_thread_id (inferior_ptid));
1d33d6ba
VP
636 do_cleanups (back_to);
637 }
638 else
639 ui_out_field_string (mi_uiout, "stopped-threads", "all");
dc146f7c
VP
640
641 core = target_core_of_thread (inferior_ptid);
642 if (core != -1)
643 ui_out_field_int (mi_uiout, "core", core);
1d33d6ba
VP
644 }
645
f7f9a841 646 fputs_unfiltered ("*stopped", raw_stdout);
1d33d6ba
VP
647 mi_out_put (mi_uiout, raw_stdout);
648 mi_out_rewind (mi_uiout);
4333ada3 649 mi_print_timing_maybe ();
f7f9a841
VP
650 fputs_unfiltered ("\n", raw_stdout);
651 gdb_flush (raw_stdout);
652}
653
f3b1572e
PA
654static void
655mi_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 ();
102040f0 662
16c381f0 663 if (tp->control.in_infcall)
f3b1572e
PA
664 return;
665 }
666
667 mi_proceeded = 1;
668}
669
5b9afe8a
YQ
670/* When the element is non-zero, no MI notifications will be emitted in
671 response to the corresponding observers. */
2b03b41d 672
5b9afe8a
YQ
673struct mi_suppress_notification mi_suppress_notification =
674 {
675 0,
676 0,
201b4506 677 0,
5b9afe8a 678 };
8d3788bd 679
201b4506
YQ
680/* Emit notification on changing a traceframe. */
681
682static void
683mi_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
bb25a15c
YQ
702/* Emit notification on creating a trace state variable. */
703
704static void
134a2066 705mi_tsv_created (const struct trace_state_variable *tsv)
bb25a15c
YQ
706{
707 struct mi_interp *mi = top_level_interpreter_data ();
708
709 target_terminal_ours ();
710
711 fprintf_unfiltered (mi->event_channel, "tsv-created,"
134a2066
YQ
712 "name=\"%s\",initial=\"%s\"\n",
713 tsv->name, plongest (tsv->initial_value));
bb25a15c
YQ
714
715 gdb_flush (mi->event_channel);
716}
717
718/* Emit notification on deleting a trace state variable. */
719
720static void
134a2066 721mi_tsv_deleted (const struct trace_state_variable *tsv)
bb25a15c
YQ
722{
723 struct mi_interp *mi = top_level_interpreter_data ();
724
725 target_terminal_ours ();
726
134a2066 727 if (tsv != NULL)
bb25a15c 728 fprintf_unfiltered (mi->event_channel, "tsv-deleted,"
134a2066 729 "name=\"%s\"\n", tsv->name);
bb25a15c
YQ
730 else
731 fprintf_unfiltered (mi->event_channel, "tsv-deleted\n");
732
733 gdb_flush (mi->event_channel);
734}
735
134a2066
YQ
736/* Emit notification on modifying a trace state variable. */
737
738static void
739mi_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
8d3788bd 762/* Emit notification about a created breakpoint. */
2b03b41d 763
8d3788bd
VP
764static void
765mi_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 ());
bfd189b1 769 volatile struct gdb_exception e;
8d3788bd 770
5b9afe8a 771 if (mi_suppress_notification.breakpoint)
8d3788bd
VP
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
2b03b41d
SS
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. */
8d3788bd
VP
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. */
2b03b41d 796
8d3788bd
VP
797static void
798mi_breakpoint_deleted (struct breakpoint *b)
799{
800 struct mi_interp *mi = top_level_interpreter_data ();
801
5b9afe8a 802 if (mi_suppress_notification.breakpoint)
8d3788bd
VP
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. */
2b03b41d 817
8d3788bd
VP
818static void
819mi_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 ());
bfd189b1 823 volatile struct gdb_exception e;
8d3788bd 824
5b9afe8a 825 if (mi_suppress_notification.breakpoint)
8d3788bd
VP
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
2b03b41d
SS
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. */
8d3788bd
VP
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
d90e17a7
PA
849static int
850mi_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
862static int
863mi_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
e1ac3328
VP
874static void
875mi_on_resume (ptid_t ptid)
876{
c5a4d20b
PA
877 struct thread_info *tp = NULL;
878
9944e9c2 879 if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
c5a4d20b
PA
880 tp = inferior_thread ();
881 else
e09875d4 882 tp = find_thread_ptid (ptid);
c5a4d20b
PA
883
884 /* Suppress output while calling an inferior function. */
16c381f0 885 if (tp->control.in_infcall)
c5a4d20b
PA
886 return;
887
a2840c35
VP
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. */
f3b1572e 896 if (!running_result_record_printed && mi_proceeded)
a2840c35 897 {
c271b6e2
VP
898 fprintf_unfiltered (raw_stdout, "%s^running\n",
899 current_token ? current_token : "");
a2840c35
VP
900 }
901
dfd4cc63 902 if (ptid_get_pid (ptid) == -1)
e1ac3328 903 fprintf_unfiltered (raw_stdout, "*running,thread-id=\"all\"\n");
d90e17a7 904 else if (ptid_is_pid (ptid))
bb599c81 905 {
ab730e72 906 int count = 0;
d90e17a7
PA
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);
bb599c81 917 }
e1ac3328
VP
918 else
919 {
e09875d4 920 struct thread_info *ti = find_thread_ptid (ptid);
102040f0 921
e1ac3328
VP
922 gdb_assert (ti);
923 fprintf_unfiltered (raw_stdout, "*running,thread-id=\"%d\"\n", ti->num);
924 }
a2840c35 925
f3b1572e 926 if (!running_result_record_printed && mi_proceeded)
a2840c35
VP
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 }
c1828f25 937 gdb_flush (raw_stdout);
e1ac3328
VP
938}
939
c86cf029
VP
940static void
941mi_solib_loaded (struct so_list *solib)
942{
943 struct mi_interp *mi = top_level_interpreter_data ();
102040f0 944
c86cf029 945 target_terminal_ours ();
f5656ead 946 if (gdbarch_has_global_solist (target_gdbarch ()))
a79b8f6e
VP
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
c86cf029
VP
961 gdb_flush (mi->event_channel);
962}
963
964static void
965mi_solib_unloaded (struct so_list *solib)
966{
967 struct mi_interp *mi = top_level_interpreter_data ();
102040f0 968
c86cf029 969 target_terminal_ours ();
f5656ead 970 if (gdbarch_has_global_solist (target_gdbarch ()))
a79b8f6e
VP
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
c86cf029
VP
983 gdb_flush (mi->event_channel);
984}
985
5b9afe8a
YQ
986/* Emit notification about the command parameter change. */
987
988static void
989mi_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
8de0566d
YQ
1012/* Emit notification about the target memory change. */
1013
1014static void
1015mi_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);
f5656ead 1033 ui_out_field_core_addr (mi_uiout, "addr", target_gdbarch (), memaddr);
deba7593 1034 ui_out_field_fmt (mi_uiout, "len", "%s", hex_string (len));
8de0566d
YQ
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
a79b8f6e
VP
1053static int
1054report_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;
102040f0 1061
a79b8f6e
VP
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}
c86cf029 1069
4801a9a3
PA
1070static struct ui_out *
1071mi_ui_out (struct interp *interp)
1072{
1073 struct mi_interp *mi = interp_data (interp);
1074
fd664c91 1075 return mi->mi_uiout;
4801a9a3
PA
1076}
1077
37ce89eb
SS
1078/* Save the original value of raw_stdout here when logging, so we can
1079 restore correctly when done. */
1080
1081static 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
1086static int
1087mi_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
b9362cc7
AC
1126extern initialize_file_ftype _initialize_mi_interp; /* -Wmissing-prototypes */
1127
4a8f6654
AC
1128void
1129_initialize_mi_interp (void)
1130{
1131 static const struct interp_procs procs =
2b03b41d
SS
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 */
37ce89eb 1137 mi_ui_out, /* ui_out_proc */
1af12a7d
AB
1138 mi_set_logging, /* set_logging_proc */
1139 mi_command_loop /* command_loop_proc */
2b03b41d 1140 };
4a8f6654 1141
2fcf52f0 1142 /* The various interpreter levels. */
4801a9a3
PA
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));
4a8f6654 1147}
This page took 1.062465 seconds and 4 git commands to generate.