enable target async by default; separate MI and target notions of async
[external/binutils.git] / gdb / mi / mi-main.c
1 /* MI Command Set.
2
3    Copyright (C) 2000-2014 Free Software Foundation, Inc.
4
5    Contributed by Cygnus Solutions (a Red Hat company).
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "arch-utils.h"
24 #include "target.h"
25 #include "inferior.h"
26 #include "infrun.h"
27 #include <string.h>
28 #include "exceptions.h"
29 #include "top.h"
30 #include "gdbthread.h"
31 #include "mi-cmds.h"
32 #include "mi-parse.h"
33 #include "mi-getopt.h"
34 #include "mi-console.h"
35 #include "ui-out.h"
36 #include "mi-out.h"
37 #include "interps.h"
38 #include "event-loop.h"
39 #include "event-top.h"
40 #include "gdbcore.h"            /* For write_memory().  */
41 #include "value.h"
42 #include "regcache.h"
43 #include "gdb.h"
44 #include "frame.h"
45 #include "mi-main.h"
46 #include "mi-common.h"
47 #include "language.h"
48 #include "valprint.h"
49 #include "inferior.h"
50 #include "osdata.h"
51 #include "splay-tree.h"
52 #include "tracepoint.h"
53 #include "ctf.h"
54 #include "ada-lang.h"
55 #include "linespec.h"
56 #include "extension.h"
57 #include "gdbcmd.h"
58
59 #include <ctype.h>
60 #include <sys/time.h>
61
62 #if defined HAVE_SYS_RESOURCE_H
63 #include <sys/resource.h>
64 #endif
65
66 #ifdef HAVE_GETRUSAGE
67 struct rusage rusage;
68 #endif
69
70 enum
71   {
72     FROM_TTY = 0
73   };
74
75 int mi_debug_p;
76
77 struct ui_file *raw_stdout;
78
79 /* This is used to pass the current command timestamp down to
80    continuation routines.  */
81 static struct mi_timestamp *current_command_ts;
82
83 static int do_timings = 0;
84
85 char *current_token;
86 /* Few commands would like to know if options like --thread-group were
87    explicitly specified.  This variable keeps the current parsed
88    command including all option, and make it possible.  */
89 static struct mi_parse *current_context;
90
91 int running_result_record_printed = 1;
92
93 /* Flag indicating that the target has proceeded since the last
94    command was issued.  */
95 int mi_proceeded;
96
97 extern void _initialize_mi_main (void);
98 static void mi_cmd_execute (struct mi_parse *parse);
99
100 static void mi_execute_cli_command (const char *cmd, int args_p,
101                                     const char *args);
102 static void mi_execute_async_cli_command (char *cli_command,
103                                           char **argv, int argc);
104 static int register_changed_p (int regnum, struct regcache *,
105                                struct regcache *);
106 static void output_register (struct frame_info *, int regnum, int format,
107                              int skip_unavailable);
108
109 /* Controls whether the frontend wants MI in async mode.  */
110 static int mi_async = 0;
111
112 /* The set command writes to this variable.  If the inferior is
113    executing, mi_async is *not* updated.  */
114 static int mi_async_1 = 0;
115
116 static void
117 set_mi_async_command (char *args, int from_tty,
118                       struct cmd_list_element *c)
119 {
120   if (have_live_inferiors ())
121     {
122       mi_async_1 = mi_async;
123       error (_("Cannot change this setting while the inferior is running."));
124     }
125
126   mi_async = mi_async_1;
127 }
128
129 static void
130 show_mi_async_command (struct ui_file *file, int from_tty,
131                        struct cmd_list_element *c,
132                        const char *value)
133 {
134   fprintf_filtered (file,
135                     _("Whether MI is in asynchronous mode is %s.\n"),
136                     value);
137 }
138
139 /* A wrapper for target_can_async_p that takes the MI setting into
140    account.  */
141
142 int
143 mi_async_p (void)
144 {
145   return mi_async && target_can_async_p ();
146 }
147
148 /* Command implementations.  FIXME: Is this libgdb?  No.  This is the MI
149    layer that calls libgdb.  Any operation used in the below should be
150    formalized.  */
151
152 static void timestamp (struct mi_timestamp *tv);
153
154 static void print_diff_now (struct mi_timestamp *start);
155 static void print_diff (struct mi_timestamp *start, struct mi_timestamp *end);
156
157 void
158 mi_cmd_gdb_exit (char *command, char **argv, int argc)
159 {
160   /* We have to print everything right here because we never return.  */
161   if (current_token)
162     fputs_unfiltered (current_token, raw_stdout);
163   fputs_unfiltered ("^exit\n", raw_stdout);
164   mi_out_put (current_uiout, raw_stdout);
165   gdb_flush (raw_stdout);
166   /* FIXME: The function called is not yet a formal libgdb function.  */
167   quit_force (NULL, FROM_TTY);
168 }
169
170 void
171 mi_cmd_exec_next (char *command, char **argv, int argc)
172 {
173   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
174   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
175     mi_execute_async_cli_command ("reverse-next", argv + 1, argc - 1);
176   else
177     mi_execute_async_cli_command ("next", argv, argc);
178 }
179
180 void
181 mi_cmd_exec_next_instruction (char *command, char **argv, int argc)
182 {
183   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
184   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
185     mi_execute_async_cli_command ("reverse-nexti", argv + 1, argc - 1);
186   else
187     mi_execute_async_cli_command ("nexti", argv, argc);
188 }
189
190 void
191 mi_cmd_exec_step (char *command, char **argv, int argc)
192 {
193   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
194   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
195     mi_execute_async_cli_command ("reverse-step", argv + 1, argc - 1);
196   else
197     mi_execute_async_cli_command ("step", argv, argc);
198 }
199
200 void
201 mi_cmd_exec_step_instruction (char *command, char **argv, int argc)
202 {
203   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
204   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
205     mi_execute_async_cli_command ("reverse-stepi", argv + 1, argc - 1);
206   else
207     mi_execute_async_cli_command ("stepi", argv, argc);
208 }
209
210 void
211 mi_cmd_exec_finish (char *command, char **argv, int argc)
212 {
213   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
214   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
215     mi_execute_async_cli_command ("reverse-finish", argv + 1, argc - 1);
216   else
217     mi_execute_async_cli_command ("finish", argv, argc);
218 }
219
220 void
221 mi_cmd_exec_return (char *command, char **argv, int argc)
222 {
223   /* This command doesn't really execute the target, it just pops the
224      specified number of frames.  */
225   if (argc)
226     /* Call return_command with from_tty argument equal to 0 so as to
227        avoid being queried.  */
228     return_command (*argv, 0);
229   else
230     /* Call return_command with from_tty argument equal to 0 so as to
231        avoid being queried.  */
232     return_command (NULL, 0);
233
234   /* Because we have called return_command with from_tty = 0, we need
235      to print the frame here.  */
236   print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1);
237 }
238
239 void
240 mi_cmd_exec_jump (char *args, char **argv, int argc)
241 {
242   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
243   mi_execute_async_cli_command ("jump", argv, argc);
244 }
245
246 static void
247 proceed_thread (struct thread_info *thread, int pid)
248 {
249   if (!is_stopped (thread->ptid))
250     return;
251
252   if (pid != 0 && ptid_get_pid (thread->ptid) != pid)
253     return;
254
255   switch_to_thread (thread->ptid);
256   clear_proceed_status ();
257   proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT, 0);
258 }
259
260 static int
261 proceed_thread_callback (struct thread_info *thread, void *arg)
262 {
263   int pid = *(int *)arg;
264
265   proceed_thread (thread, pid);
266   return 0;
267 }
268
269 static void
270 exec_continue (char **argv, int argc)
271 {
272   prepare_execution_command (&current_target, mi_async_p ());
273
274   if (non_stop)
275     {
276       /* In non-stop mode, 'resume' always resumes a single thread.
277          Therefore, to resume all threads of the current inferior, or
278          all threads in all inferiors, we need to iterate over
279          threads.
280
281          See comment on infcmd.c:proceed_thread_callback for rationale.  */
282       if (current_context->all || current_context->thread_group != -1)
283         {
284           int pid = 0;
285           struct cleanup *back_to = make_cleanup_restore_current_thread ();
286
287           if (!current_context->all)
288             {
289               struct inferior *inf
290                 = find_inferior_id (current_context->thread_group);
291
292               pid = inf->pid;
293             }
294           iterate_over_threads (proceed_thread_callback, &pid);
295           do_cleanups (back_to);
296         }
297       else
298         {
299           continue_1 (0);
300         }
301     }
302   else
303     {
304       struct cleanup *back_to = make_cleanup_restore_integer (&sched_multi);
305
306       if (current_context->all)
307         {
308           sched_multi = 1;
309           continue_1 (0);
310         }
311       else
312         {
313           /* In all-stop mode, -exec-continue traditionally resumed
314              either all threads, or one thread, depending on the
315              'scheduler-locking' variable.  Let's continue to do the
316              same.  */
317           continue_1 (1);
318         }
319       do_cleanups (back_to);
320     }
321 }
322
323 static void
324 exec_direction_forward (void *notused)
325 {
326   execution_direction = EXEC_FORWARD;
327 }
328
329 static void
330 exec_reverse_continue (char **argv, int argc)
331 {
332   enum exec_direction_kind dir = execution_direction;
333   struct cleanup *old_chain;
334
335   if (dir == EXEC_REVERSE)
336     error (_("Already in reverse mode."));
337
338   if (!target_can_execute_reverse)
339     error (_("Target %s does not support this command."), target_shortname);
340
341   old_chain = make_cleanup (exec_direction_forward, NULL);
342   execution_direction = EXEC_REVERSE;
343   exec_continue (argv, argc);
344   do_cleanups (old_chain);
345 }
346
347 void
348 mi_cmd_exec_continue (char *command, char **argv, int argc)
349 {
350   if (argc > 0 && strcmp (argv[0], "--reverse") == 0)
351     exec_reverse_continue (argv + 1, argc - 1);
352   else
353     exec_continue (argv, argc);
354 }
355
356 static int
357 interrupt_thread_callback (struct thread_info *thread, void *arg)
358 {
359   int pid = *(int *)arg;
360
361   if (!is_running (thread->ptid))
362     return 0;
363
364   if (ptid_get_pid (thread->ptid) != pid)
365     return 0;
366
367   target_stop (thread->ptid);
368   return 0;
369 }
370
371 /* Interrupt the execution of the target.  Note how we must play
372    around with the token variables, in order to display the current
373    token in the result of the interrupt command, and the previous
374    execution token when the target finally stops.  See comments in
375    mi_cmd_execute.  */
376
377 void
378 mi_cmd_exec_interrupt (char *command, char **argv, int argc)
379 {
380   /* In all-stop mode, everything stops, so we don't need to try
381      anything specific.  */
382   if (!non_stop)
383     {
384       interrupt_target_1 (0);
385       return;
386     }
387
388   if (current_context->all)
389     {
390       /* This will interrupt all threads in all inferiors.  */
391       interrupt_target_1 (1);
392     }
393   else if (current_context->thread_group != -1)
394     {
395       struct inferior *inf = find_inferior_id (current_context->thread_group);
396
397       iterate_over_threads (interrupt_thread_callback, &inf->pid);
398     }
399   else
400     {
401       /* Interrupt just the current thread -- either explicitly
402          specified via --thread or whatever was current before
403          MI command was sent.  */
404       interrupt_target_1 (0);
405     }
406 }
407
408 /* Callback for iterate_over_inferiors which starts the execution
409    of the given inferior.
410
411    ARG is a pointer to an integer whose value, if non-zero, indicates
412    that the program should be stopped when reaching the main subprogram
413    (similar to what the CLI "start" command does).  */
414
415 static int
416 run_one_inferior (struct inferior *inf, void *arg)
417 {
418   int start_p = *(int *) arg;
419   const char *run_cmd = start_p ? "start" : "run";
420
421   if (inf->pid != 0)
422     {
423       if (inf->pid != ptid_get_pid (inferior_ptid))
424         {
425           struct thread_info *tp;
426
427           tp = any_thread_of_process (inf->pid);
428           if (!tp)
429             error (_("Inferior has no threads."));
430
431           switch_to_thread (tp->ptid);
432         }
433     }
434   else
435     {
436       set_current_inferior (inf);
437       switch_to_thread (null_ptid);
438       set_current_program_space (inf->pspace);
439     }
440   mi_execute_cli_command (run_cmd, mi_async_p (),
441                           mi_async_p () ? "&" : NULL);
442   return 0;
443 }
444
445 void
446 mi_cmd_exec_run (char *command, char **argv, int argc)
447 {
448   int i;
449   int start_p = 0;
450
451   /* Parse the command options.  */
452   enum opt
453     {
454       START_OPT,
455     };
456   static const struct mi_opt opts[] =
457     {
458         {"-start", START_OPT, 0},
459         {NULL, 0, 0},
460     };
461
462   int oind = 0;
463   char *oarg;
464
465   while (1)
466     {
467       int opt = mi_getopt ("-exec-run", argc, argv, opts, &oind, &oarg);
468
469       if (opt < 0)
470         break;
471       switch ((enum opt) opt)
472         {
473         case START_OPT:
474           start_p = 1;
475           break;
476         }
477     }
478
479   /* This command does not accept any argument.  Make sure the user
480      did not provide any.  */
481   if (oind != argc)
482     error (_("Invalid argument: %s"), argv[oind]);
483
484   if (current_context->all)
485     {
486       struct cleanup *back_to = save_current_space_and_thread ();
487
488       iterate_over_inferiors (run_one_inferior, &start_p);
489       do_cleanups (back_to);
490     }
491   else
492     {
493       const char *run_cmd = start_p ? "start" : "run";
494
495       mi_execute_cli_command (run_cmd, mi_async_p (),
496                               mi_async_p () ? "&" : NULL);
497     }
498 }
499
500
501 static int
502 find_thread_of_process (struct thread_info *ti, void *p)
503 {
504   int pid = *(int *)p;
505
506   if (ptid_get_pid (ti->ptid) == pid && !is_exited (ti->ptid))
507     return 1;
508
509   return 0;
510 }
511
512 void
513 mi_cmd_target_detach (char *command, char **argv, int argc)
514 {
515   if (argc != 0 && argc != 1)
516     error (_("Usage: -target-detach [pid | thread-group]"));
517
518   if (argc == 1)
519     {
520       struct thread_info *tp;
521       char *end = argv[0];
522       int pid;
523
524       /* First see if we are dealing with a thread-group id.  */
525       if (*argv[0] == 'i')
526         {
527           struct inferior *inf;
528           int id = strtoul (argv[0] + 1, &end, 0);
529
530           if (*end != '\0')
531             error (_("Invalid syntax of thread-group id '%s'"), argv[0]);
532
533           inf = find_inferior_id (id);
534           if (!inf)
535             error (_("Non-existent thread-group id '%d'"), id);
536
537           pid = inf->pid;
538         }
539       else
540         {
541           /* We must be dealing with a pid.  */
542           pid = strtol (argv[0], &end, 10);
543
544           if (*end != '\0')
545             error (_("Invalid identifier '%s'"), argv[0]);
546         }
547
548       /* Pick any thread in the desired process.  Current
549          target_detach detaches from the parent of inferior_ptid.  */
550       tp = iterate_over_threads (find_thread_of_process, &pid);
551       if (!tp)
552         error (_("Thread group is empty"));
553
554       switch_to_thread (tp->ptid);
555     }
556
557   detach_command (NULL, 0);
558 }
559
560 void
561 mi_cmd_thread_select (char *command, char **argv, int argc)
562 {
563   enum gdb_rc rc;
564   char *mi_error_message;
565
566   if (argc != 1)
567     error (_("-thread-select: USAGE: threadnum."));
568
569   rc = gdb_thread_select (current_uiout, argv[0], &mi_error_message);
570
571   if (rc == GDB_RC_FAIL)
572     {
573       make_cleanup (xfree, mi_error_message);
574       error ("%s", mi_error_message);
575     }
576 }
577
578 void
579 mi_cmd_thread_list_ids (char *command, char **argv, int argc)
580 {
581   enum gdb_rc rc;
582   char *mi_error_message;
583
584   if (argc != 0)
585     error (_("-thread-list-ids: No arguments required."));
586
587   rc = gdb_list_thread_ids (current_uiout, &mi_error_message);
588
589   if (rc == GDB_RC_FAIL)
590     {
591       make_cleanup (xfree, mi_error_message);
592       error ("%s", mi_error_message);
593     }
594 }
595
596 void
597 mi_cmd_thread_info (char *command, char **argv, int argc)
598 {
599   if (argc != 0 && argc != 1)
600     error (_("Invalid MI command"));
601
602   print_thread_info (current_uiout, argv[0], -1);
603 }
604
605 struct collect_cores_data
606 {
607   int pid;
608
609   VEC (int) *cores;
610 };
611
612 static int
613 collect_cores (struct thread_info *ti, void *xdata)
614 {
615   struct collect_cores_data *data = xdata;
616
617   if (ptid_get_pid (ti->ptid) == data->pid)
618     {
619       int core = target_core_of_thread (ti->ptid);
620
621       if (core != -1)
622         VEC_safe_push (int, data->cores, core);
623     }
624
625   return 0;
626 }
627
628 static int *
629 unique (int *b, int *e)
630 {
631   int *d = b;
632
633   while (++b != e)
634     if (*d != *b)
635       *++d = *b;
636   return ++d;
637 }
638
639 struct print_one_inferior_data
640 {
641   int recurse;
642   VEC (int) *inferiors;
643 };
644
645 static int
646 print_one_inferior (struct inferior *inferior, void *xdata)
647 {
648   struct print_one_inferior_data *top_data = xdata;
649   struct ui_out *uiout = current_uiout;
650
651   if (VEC_empty (int, top_data->inferiors)
652       || bsearch (&(inferior->pid), VEC_address (int, top_data->inferiors),
653                   VEC_length (int, top_data->inferiors), sizeof (int),
654                   compare_positive_ints))
655     {
656       struct collect_cores_data data;
657       struct cleanup *back_to
658         = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
659
660       ui_out_field_fmt (uiout, "id", "i%d", inferior->num);
661       ui_out_field_string (uiout, "type", "process");
662       if (inferior->pid != 0)
663         ui_out_field_int (uiout, "pid", inferior->pid);
664
665       if (inferior->pspace->pspace_exec_filename != NULL)
666         {
667           ui_out_field_string (uiout, "executable",
668                                inferior->pspace->pspace_exec_filename);
669         }
670
671       data.cores = 0;
672       if (inferior->pid != 0)
673         {
674           data.pid = inferior->pid;
675           iterate_over_threads (collect_cores, &data);
676         }
677
678       if (!VEC_empty (int, data.cores))
679         {
680           int *b, *e;
681           struct cleanup *back_to_2 =
682             make_cleanup_ui_out_list_begin_end (uiout, "cores");
683
684           qsort (VEC_address (int, data.cores),
685                  VEC_length (int, data.cores), sizeof (int),
686                  compare_positive_ints);
687
688           b = VEC_address (int, data.cores);
689           e = b + VEC_length (int, data.cores);
690           e = unique (b, e);
691
692           for (; b != e; ++b)
693             ui_out_field_int (uiout, NULL, *b);
694
695           do_cleanups (back_to_2);
696         }
697
698       if (top_data->recurse)
699         print_thread_info (uiout, NULL, inferior->pid);
700
701       do_cleanups (back_to);
702     }
703
704   return 0;
705 }
706
707 /* Output a field named 'cores' with a list as the value.  The
708    elements of the list are obtained by splitting 'cores' on
709    comma.  */
710
711 static void
712 output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
713 {
714   struct cleanup *back_to = make_cleanup_ui_out_list_begin_end (uiout,
715                                                                 field_name);
716   char *cores = xstrdup (xcores);
717   char *p = cores;
718
719   make_cleanup (xfree, cores);
720
721   for (p = strtok (p, ","); p;  p = strtok (NULL, ","))
722     ui_out_field_string (uiout, NULL, p);
723
724   do_cleanups (back_to);
725 }
726
727 static void
728 free_vector_of_ints (void *xvector)
729 {
730   VEC (int) **vector = xvector;
731
732   VEC_free (int, *vector);
733 }
734
735 static void
736 do_nothing (splay_tree_key k)
737 {
738 }
739
740 static void
741 free_vector_of_osdata_items (splay_tree_value xvalue)
742 {
743   VEC (osdata_item_s) *value = (VEC (osdata_item_s) *) xvalue;
744
745   /* We don't free the items itself, it will be done separately.  */
746   VEC_free (osdata_item_s, value);
747 }
748
749 static int
750 splay_tree_int_comparator (splay_tree_key xa, splay_tree_key xb)
751 {
752   int a = xa;
753   int b = xb;
754
755   return a - b;
756 }
757
758 static void
759 free_splay_tree (void *xt)
760 {
761   splay_tree t = xt;
762   splay_tree_delete (t);
763 }
764
765 static void
766 list_available_thread_groups (VEC (int) *ids, int recurse)
767 {
768   struct osdata *data;
769   struct osdata_item *item;
770   int ix_items;
771   struct ui_out *uiout = current_uiout;
772   struct cleanup *cleanup;
773
774   /* This keeps a map from integer (pid) to VEC (struct osdata_item *)*
775      The vector contains information about all threads for the given pid.
776      This is assigned an initial value to avoid "may be used uninitialized"
777      warning from gcc.  */
778   splay_tree tree = NULL;
779
780   /* get_osdata will throw if it cannot return data.  */
781   data = get_osdata ("processes");
782   cleanup = make_cleanup_osdata_free (data);
783
784   if (recurse)
785     {
786       struct osdata *threads = get_osdata ("threads");
787
788       make_cleanup_osdata_free (threads);
789       tree = splay_tree_new (splay_tree_int_comparator,
790                              do_nothing,
791                              free_vector_of_osdata_items);
792       make_cleanup (free_splay_tree, tree);
793
794       for (ix_items = 0;
795            VEC_iterate (osdata_item_s, threads->items,
796                         ix_items, item);
797            ix_items++)
798         {
799           const char *pid = get_osdata_column (item, "pid");
800           int pid_i = strtoul (pid, NULL, 0);
801           VEC (osdata_item_s) *vec = 0;
802
803           splay_tree_node n = splay_tree_lookup (tree, pid_i);
804           if (!n)
805             {
806               VEC_safe_push (osdata_item_s, vec, item);
807               splay_tree_insert (tree, pid_i, (splay_tree_value)vec);
808             }
809           else
810             {
811               vec = (VEC (osdata_item_s) *) n->value;
812               VEC_safe_push (osdata_item_s, vec, item);
813               n->value = (splay_tree_value) vec;
814             }
815         }
816     }
817
818   make_cleanup_ui_out_list_begin_end (uiout, "groups");
819
820   for (ix_items = 0;
821        VEC_iterate (osdata_item_s, data->items,
822                     ix_items, item);
823        ix_items++)
824     {
825       struct cleanup *back_to;
826
827       const char *pid = get_osdata_column (item, "pid");
828       const char *cmd = get_osdata_column (item, "command");
829       const char *user = get_osdata_column (item, "user");
830       const char *cores = get_osdata_column (item, "cores");
831
832       int pid_i = strtoul (pid, NULL, 0);
833
834       /* At present, the target will return all available processes
835          and if information about specific ones was required, we filter
836          undesired processes here.  */
837       if (ids && bsearch (&pid_i, VEC_address (int, ids),
838                           VEC_length (int, ids),
839                           sizeof (int), compare_positive_ints) == NULL)
840         continue;
841
842
843       back_to = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
844
845       ui_out_field_fmt (uiout, "id", "%s", pid);
846       ui_out_field_string (uiout, "type", "process");
847       if (cmd)
848         ui_out_field_string (uiout, "description", cmd);
849       if (user)
850         ui_out_field_string (uiout, "user", user);
851       if (cores)
852         output_cores (uiout, "cores", cores);
853
854       if (recurse)
855         {
856           splay_tree_node n = splay_tree_lookup (tree, pid_i);
857           if (n)
858             {
859               VEC (osdata_item_s) *children = (VEC (osdata_item_s) *) n->value;
860               struct osdata_item *child;
861               int ix_child;
862
863               make_cleanup_ui_out_list_begin_end (uiout, "threads");
864
865               for (ix_child = 0;
866                    VEC_iterate (osdata_item_s, children, ix_child, child);
867                    ++ix_child)
868                 {
869                   struct cleanup *back_to_2 =
870                     make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
871                   const char *tid = get_osdata_column (child, "tid");
872                   const char *tcore = get_osdata_column (child, "core");
873
874                   ui_out_field_string (uiout, "id", tid);
875                   if (tcore)
876                     ui_out_field_string (uiout, "core", tcore);
877
878                   do_cleanups (back_to_2);
879                 }
880             }
881         }
882
883       do_cleanups (back_to);
884     }
885
886   do_cleanups (cleanup);
887 }
888
889 void
890 mi_cmd_list_thread_groups (char *command, char **argv, int argc)
891 {
892   struct ui_out *uiout = current_uiout;
893   struct cleanup *back_to;
894   int available = 0;
895   int recurse = 0;
896   VEC (int) *ids = 0;
897
898   enum opt
899   {
900     AVAILABLE_OPT, RECURSE_OPT
901   };
902   static const struct mi_opt opts[] =
903     {
904       {"-available", AVAILABLE_OPT, 0},
905       {"-recurse", RECURSE_OPT, 1},
906       { 0, 0, 0 }
907     };
908
909   int oind = 0;
910   char *oarg;
911
912   while (1)
913     {
914       int opt = mi_getopt ("-list-thread-groups", argc, argv, opts,
915                            &oind, &oarg);
916
917       if (opt < 0)
918         break;
919       switch ((enum opt) opt)
920         {
921         case AVAILABLE_OPT:
922           available = 1;
923           break;
924         case RECURSE_OPT:
925           if (strcmp (oarg, "0") == 0)
926             ;
927           else if (strcmp (oarg, "1") == 0)
928             recurse = 1;
929           else
930             error (_("only '0' and '1' are valid values "
931                      "for the '--recurse' option"));
932           break;
933         }
934     }
935
936   for (; oind < argc; ++oind)
937     {
938       char *end;
939       int inf;
940
941       if (*(argv[oind]) != 'i')
942         error (_("invalid syntax of group id '%s'"), argv[oind]);
943
944       inf = strtoul (argv[oind] + 1, &end, 0);
945
946       if (*end != '\0')
947         error (_("invalid syntax of group id '%s'"), argv[oind]);
948       VEC_safe_push (int, ids, inf);
949     }
950   if (VEC_length (int, ids) > 1)
951     qsort (VEC_address (int, ids),
952            VEC_length (int, ids),
953            sizeof (int), compare_positive_ints);
954
955   back_to = make_cleanup (free_vector_of_ints, &ids);
956
957   if (available)
958     {
959       list_available_thread_groups (ids, recurse);
960     }
961   else if (VEC_length (int, ids) == 1)
962     {
963       /* Local thread groups, single id.  */
964       int id = *VEC_address (int, ids);
965       struct inferior *inf = find_inferior_id (id);
966
967       if (!inf)
968         error (_("Non-existent thread group id '%d'"), id);
969
970       print_thread_info (uiout, NULL, inf->pid);
971     }
972   else
973     {
974       struct print_one_inferior_data data;
975
976       data.recurse = recurse;
977       data.inferiors = ids;
978
979       /* Local thread groups.  Either no explicit ids -- and we
980          print everything, or several explicit ids.  In both cases,
981          we print more than one group, and have to use 'groups'
982          as the top-level element.  */
983       make_cleanup_ui_out_list_begin_end (uiout, "groups");
984       update_thread_list ();
985       iterate_over_inferiors (print_one_inferior, &data);
986     }
987
988   do_cleanups (back_to);
989 }
990
991 void
992 mi_cmd_data_list_register_names (char *command, char **argv, int argc)
993 {
994   struct gdbarch *gdbarch;
995   struct ui_out *uiout = current_uiout;
996   int regnum, numregs;
997   int i;
998   struct cleanup *cleanup;
999
1000   /* Note that the test for a valid register must include checking the
1001      gdbarch_register_name because gdbarch_num_regs may be allocated
1002      for the union of the register sets within a family of related
1003      processors.  In this case, some entries of gdbarch_register_name
1004      will change depending upon the particular processor being
1005      debugged.  */
1006
1007   gdbarch = get_current_arch ();
1008   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1009
1010   cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-names");
1011
1012   if (argc == 0)                /* No args, just do all the regs.  */
1013     {
1014       for (regnum = 0;
1015            regnum < numregs;
1016            regnum++)
1017         {
1018           if (gdbarch_register_name (gdbarch, regnum) == NULL
1019               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
1020             ui_out_field_string (uiout, NULL, "");
1021           else
1022             ui_out_field_string (uiout, NULL,
1023                                  gdbarch_register_name (gdbarch, regnum));
1024         }
1025     }
1026
1027   /* Else, list of register #s, just do listed regs.  */
1028   for (i = 0; i < argc; i++)
1029     {
1030       regnum = atoi (argv[i]);
1031       if (regnum < 0 || regnum >= numregs)
1032         error (_("bad register number"));
1033
1034       if (gdbarch_register_name (gdbarch, regnum) == NULL
1035           || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
1036         ui_out_field_string (uiout, NULL, "");
1037       else
1038         ui_out_field_string (uiout, NULL,
1039                              gdbarch_register_name (gdbarch, regnum));
1040     }
1041   do_cleanups (cleanup);
1042 }
1043
1044 void
1045 mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
1046 {
1047   static struct regcache *this_regs = NULL;
1048   struct ui_out *uiout = current_uiout;
1049   struct regcache *prev_regs;
1050   struct gdbarch *gdbarch;
1051   int regnum, numregs, changed;
1052   int i;
1053   struct cleanup *cleanup;
1054
1055   /* The last time we visited this function, the current frame's
1056      register contents were saved in THIS_REGS.  Move THIS_REGS over
1057      to PREV_REGS, and refresh THIS_REGS with the now-current register
1058      contents.  */
1059
1060   prev_regs = this_regs;
1061   this_regs = frame_save_as_regcache (get_selected_frame (NULL));
1062   cleanup = make_cleanup_regcache_xfree (prev_regs);
1063
1064   /* Note that the test for a valid register must include checking the
1065      gdbarch_register_name because gdbarch_num_regs may be allocated
1066      for the union of the register sets within a family of related
1067      processors.  In this case, some entries of gdbarch_register_name
1068      will change depending upon the particular processor being
1069      debugged.  */
1070
1071   gdbarch = get_regcache_arch (this_regs);
1072   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1073
1074   make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
1075
1076   if (argc == 0)
1077     {
1078       /* No args, just do all the regs.  */
1079       for (regnum = 0;
1080            regnum < numregs;
1081            regnum++)
1082         {
1083           if (gdbarch_register_name (gdbarch, regnum) == NULL
1084               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
1085             continue;
1086           changed = register_changed_p (regnum, prev_regs, this_regs);
1087           if (changed < 0)
1088             error (_("-data-list-changed-registers: "
1089                      "Unable to read register contents."));
1090           else if (changed)
1091             ui_out_field_int (uiout, NULL, regnum);
1092         }
1093     }
1094
1095   /* Else, list of register #s, just do listed regs.  */
1096   for (i = 0; i < argc; i++)
1097     {
1098       regnum = atoi (argv[i]);
1099
1100       if (regnum >= 0
1101           && regnum < numregs
1102           && gdbarch_register_name (gdbarch, regnum) != NULL
1103           && *gdbarch_register_name (gdbarch, regnum) != '\000')
1104         {
1105           changed = register_changed_p (regnum, prev_regs, this_regs);
1106           if (changed < 0)
1107             error (_("-data-list-changed-registers: "
1108                      "Unable to read register contents."));
1109           else if (changed)
1110             ui_out_field_int (uiout, NULL, regnum);
1111         }
1112       else
1113         error (_("bad register number"));
1114     }
1115   do_cleanups (cleanup);
1116 }
1117
1118 static int
1119 register_changed_p (int regnum, struct regcache *prev_regs,
1120                     struct regcache *this_regs)
1121 {
1122   struct gdbarch *gdbarch = get_regcache_arch (this_regs);
1123   gdb_byte prev_buffer[MAX_REGISTER_SIZE];
1124   gdb_byte this_buffer[MAX_REGISTER_SIZE];
1125   enum register_status prev_status;
1126   enum register_status this_status;
1127
1128   /* First time through or after gdbarch change consider all registers
1129      as changed.  */
1130   if (!prev_regs || get_regcache_arch (prev_regs) != gdbarch)
1131     return 1;
1132
1133   /* Get register contents and compare.  */
1134   prev_status = regcache_cooked_read (prev_regs, regnum, prev_buffer);
1135   this_status = regcache_cooked_read (this_regs, regnum, this_buffer);
1136
1137   if (this_status != prev_status)
1138     return 1;
1139   else if (this_status == REG_VALID)
1140     return memcmp (prev_buffer, this_buffer,
1141                    register_size (gdbarch, regnum)) != 0;
1142   else
1143     return 0;
1144 }
1145
1146 /* Return a list of register number and value pairs.  The valid
1147    arguments expected are: a letter indicating the format in which to
1148    display the registers contents.  This can be one of: x
1149    (hexadecimal), d (decimal), N (natural), t (binary), o (octal), r
1150    (raw).  After the format argument there can be a sequence of
1151    numbers, indicating which registers to fetch the content of.  If
1152    the format is the only argument, a list of all the registers with
1153    their values is returned.  */
1154
1155 void
1156 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
1157 {
1158   struct ui_out *uiout = current_uiout;
1159   struct frame_info *frame;
1160   struct gdbarch *gdbarch;
1161   int regnum, numregs, format;
1162   int i;
1163   struct cleanup *list_cleanup;
1164   int skip_unavailable = 0;
1165   int oind = 0;
1166   enum opt
1167   {
1168     SKIP_UNAVAILABLE,
1169   };
1170   static const struct mi_opt opts[] =
1171     {
1172       {"-skip-unavailable", SKIP_UNAVAILABLE, 0},
1173       { 0, 0, 0 }
1174     };
1175
1176   /* Note that the test for a valid register must include checking the
1177      gdbarch_register_name because gdbarch_num_regs may be allocated
1178      for the union of the register sets within a family of related
1179      processors.  In this case, some entries of gdbarch_register_name
1180      will change depending upon the particular processor being
1181      debugged.  */
1182
1183   while (1)
1184     {
1185       char *oarg;
1186       int opt = mi_getopt ("-data-list-register-values", argc, argv,
1187                            opts, &oind, &oarg);
1188
1189       if (opt < 0)
1190         break;
1191       switch ((enum opt) opt)
1192         {
1193         case SKIP_UNAVAILABLE:
1194           skip_unavailable = 1;
1195           break;
1196         }
1197     }
1198
1199   if (argc - oind < 1)
1200     error (_("-data-list-register-values: Usage: "
1201              "-data-list-register-values [--skip-unavailable] <format>"
1202              " [<regnum1>...<regnumN>]"));
1203
1204   format = (int) argv[oind][0];
1205
1206   frame = get_selected_frame (NULL);
1207   gdbarch = get_frame_arch (frame);
1208   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1209
1210   list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
1211
1212   if (argc - oind == 1)
1213     {
1214       /* No args, beside the format: do all the regs.  */
1215       for (regnum = 0;
1216            regnum < numregs;
1217            regnum++)
1218         {
1219           if (gdbarch_register_name (gdbarch, regnum) == NULL
1220               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
1221             continue;
1222
1223           output_register (frame, regnum, format, skip_unavailable);
1224         }
1225     }
1226
1227   /* Else, list of register #s, just do listed regs.  */
1228   for (i = 1 + oind; i < argc; i++)
1229     {
1230       regnum = atoi (argv[i]);
1231
1232       if (regnum >= 0
1233           && regnum < numregs
1234           && gdbarch_register_name (gdbarch, regnum) != NULL
1235           && *gdbarch_register_name (gdbarch, regnum) != '\000')
1236         output_register (frame, regnum, format, skip_unavailable);
1237       else
1238         error (_("bad register number"));
1239     }
1240   do_cleanups (list_cleanup);
1241 }
1242
1243 /* Output one register REGNUM's contents in the desired FORMAT.  If
1244    SKIP_UNAVAILABLE is true, skip the register if it is
1245    unavailable.  */
1246
1247 static void
1248 output_register (struct frame_info *frame, int regnum, int format,
1249                  int skip_unavailable)
1250 {
1251   struct gdbarch *gdbarch = get_frame_arch (frame);
1252   struct ui_out *uiout = current_uiout;
1253   struct value *val = value_of_register (regnum, frame);
1254   struct cleanup *tuple_cleanup;
1255   struct value_print_options opts;
1256   struct ui_file *stb;
1257
1258   if (skip_unavailable && !value_entirely_available (val))
1259     return;
1260
1261   tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1262   ui_out_field_int (uiout, "number", regnum);
1263
1264   if (format == 'N')
1265     format = 0;
1266
1267   if (format == 'r')
1268     format = 'z';
1269
1270   stb = mem_fileopen ();
1271   make_cleanup_ui_file_delete (stb);
1272
1273   get_formatted_print_options (&opts, format);
1274   opts.deref_ref = 1;
1275   val_print (value_type (val),
1276              value_contents_for_printing (val),
1277              value_embedded_offset (val), 0,
1278              stb, 0, val, &opts, current_language);
1279   ui_out_field_stream (uiout, "value", stb);
1280
1281   do_cleanups (tuple_cleanup);
1282 }
1283
1284 /* Write given values into registers. The registers and values are
1285    given as pairs.  The corresponding MI command is
1286    -data-write-register-values <format>
1287                                [<regnum1> <value1>...<regnumN> <valueN>] */
1288 void
1289 mi_cmd_data_write_register_values (char *command, char **argv, int argc)
1290 {
1291   struct regcache *regcache;
1292   struct gdbarch *gdbarch;
1293   int numregs, i;
1294
1295   /* Note that the test for a valid register must include checking the
1296      gdbarch_register_name because gdbarch_num_regs may be allocated
1297      for the union of the register sets within a family of related
1298      processors.  In this case, some entries of gdbarch_register_name
1299      will change depending upon the particular processor being
1300      debugged.  */
1301
1302   regcache = get_current_regcache ();
1303   gdbarch = get_regcache_arch (regcache);
1304   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1305
1306   if (argc == 0)
1307     error (_("-data-write-register-values: Usage: -data-write-register-"
1308              "values <format> [<regnum1> <value1>...<regnumN> <valueN>]"));
1309
1310   if (!target_has_registers)
1311     error (_("-data-write-register-values: No registers."));
1312
1313   if (!(argc - 1))
1314     error (_("-data-write-register-values: No regs and values specified."));
1315
1316   if ((argc - 1) % 2)
1317     error (_("-data-write-register-values: "
1318              "Regs and vals are not in pairs."));
1319
1320   for (i = 1; i < argc; i = i + 2)
1321     {
1322       int regnum = atoi (argv[i]);
1323
1324       if (regnum >= 0 && regnum < numregs
1325           && gdbarch_register_name (gdbarch, regnum)
1326           && *gdbarch_register_name (gdbarch, regnum))
1327         {
1328           LONGEST value;
1329
1330           /* Get the value as a number.  */
1331           value = parse_and_eval_address (argv[i + 1]);
1332
1333           /* Write it down.  */
1334           regcache_cooked_write_signed (regcache, regnum, value);
1335         }
1336       else
1337         error (_("bad register number"));
1338     }
1339 }
1340
1341 /* Evaluate the value of the argument.  The argument is an
1342    expression. If the expression contains spaces it needs to be
1343    included in double quotes.  */
1344
1345 void
1346 mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
1347 {
1348   struct expression *expr;
1349   struct cleanup *old_chain;
1350   struct value *val;
1351   struct ui_file *stb;
1352   struct value_print_options opts;
1353   struct ui_out *uiout = current_uiout;
1354
1355   stb = mem_fileopen ();
1356   old_chain = make_cleanup_ui_file_delete (stb);
1357
1358   if (argc != 1)
1359     error (_("-data-evaluate-expression: "
1360              "Usage: -data-evaluate-expression expression"));
1361
1362   expr = parse_expression (argv[0]);
1363
1364   make_cleanup (free_current_contents, &expr);
1365
1366   val = evaluate_expression (expr);
1367
1368   /* Print the result of the expression evaluation.  */
1369   get_user_print_options (&opts);
1370   opts.deref_ref = 0;
1371   common_val_print (val, stb, 0, &opts, current_language);
1372
1373   ui_out_field_stream (uiout, "value", stb);
1374
1375   do_cleanups (old_chain);
1376 }
1377
1378 /* This is the -data-read-memory command.
1379
1380    ADDR: start address of data to be dumped.
1381    WORD-FORMAT: a char indicating format for the ``word''.  See
1382    the ``x'' command.
1383    WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes.
1384    NR_ROW: Number of rows.
1385    NR_COL: The number of colums (words per row).
1386    ASCHAR: (OPTIONAL) Append an ascii character dump to each row.  Use
1387    ASCHAR for unprintable characters.
1388
1389    Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
1390    displayes them.  Returns:
1391
1392    {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
1393
1394    Returns:
1395    The number of bytes read is SIZE*ROW*COL.  */
1396
1397 void
1398 mi_cmd_data_read_memory (char *command, char **argv, int argc)
1399 {
1400   struct gdbarch *gdbarch = get_current_arch ();
1401   struct ui_out *uiout = current_uiout;
1402   struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
1403   CORE_ADDR addr;
1404   long total_bytes, nr_cols, nr_rows;
1405   char word_format;
1406   struct type *word_type;
1407   long word_size;
1408   char word_asize;
1409   char aschar;
1410   gdb_byte *mbuf;
1411   int nr_bytes;
1412   long offset = 0;
1413   int oind = 0;
1414   char *oarg;
1415   enum opt
1416   {
1417     OFFSET_OPT
1418   };
1419   static const struct mi_opt opts[] =
1420     {
1421       {"o", OFFSET_OPT, 1},
1422       { 0, 0, 0 }
1423     };
1424
1425   while (1)
1426     {
1427       int opt = mi_getopt ("-data-read-memory", argc, argv, opts,
1428                            &oind, &oarg);
1429
1430       if (opt < 0)
1431         break;
1432       switch ((enum opt) opt)
1433         {
1434         case OFFSET_OPT:
1435           offset = atol (oarg);
1436           break;
1437         }
1438     }
1439   argv += oind;
1440   argc -= oind;
1441
1442   if (argc < 5 || argc > 6)
1443     error (_("-data-read-memory: Usage: "
1444              "ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR]."));
1445
1446   /* Extract all the arguments. */
1447
1448   /* Start address of the memory dump.  */
1449   addr = parse_and_eval_address (argv[0]) + offset;
1450   /* The format character to use when displaying a memory word.  See
1451      the ``x'' command.  */
1452   word_format = argv[1][0];
1453   /* The size of the memory word.  */
1454   word_size = atol (argv[2]);
1455   switch (word_size)
1456     {
1457     case 1:
1458       word_type = builtin_type (gdbarch)->builtin_int8;
1459       word_asize = 'b';
1460       break;
1461     case 2:
1462       word_type = builtin_type (gdbarch)->builtin_int16;
1463       word_asize = 'h';
1464       break;
1465     case 4:
1466       word_type = builtin_type (gdbarch)->builtin_int32;
1467       word_asize = 'w';
1468       break;
1469     case 8:
1470       word_type = builtin_type (gdbarch)->builtin_int64;
1471       word_asize = 'g';
1472       break;
1473     default:
1474       word_type = builtin_type (gdbarch)->builtin_int8;
1475       word_asize = 'b';
1476     }
1477   /* The number of rows.  */
1478   nr_rows = atol (argv[3]);
1479   if (nr_rows <= 0)
1480     error (_("-data-read-memory: invalid number of rows."));
1481
1482   /* Number of bytes per row.  */
1483   nr_cols = atol (argv[4]);
1484   if (nr_cols <= 0)
1485     error (_("-data-read-memory: invalid number of columns."));
1486
1487   /* The un-printable character when printing ascii.  */
1488   if (argc == 6)
1489     aschar = *argv[5];
1490   else
1491     aschar = 0;
1492
1493   /* Create a buffer and read it in.  */
1494   total_bytes = word_size * nr_rows * nr_cols;
1495   mbuf = xcalloc (total_bytes, 1);
1496   make_cleanup (xfree, mbuf);
1497
1498   /* Dispatch memory reads to the topmost target, not the flattened
1499      current_target.  */
1500   nr_bytes = target_read (current_target.beneath,
1501                           TARGET_OBJECT_MEMORY, NULL, mbuf,
1502                           addr, total_bytes);
1503   if (nr_bytes <= 0)
1504     error (_("Unable to read memory."));
1505
1506   /* Output the header information.  */
1507   ui_out_field_core_addr (uiout, "addr", gdbarch, addr);
1508   ui_out_field_int (uiout, "nr-bytes", nr_bytes);
1509   ui_out_field_int (uiout, "total-bytes", total_bytes);
1510   ui_out_field_core_addr (uiout, "next-row",
1511                           gdbarch, addr + word_size * nr_cols);
1512   ui_out_field_core_addr (uiout, "prev-row",
1513                           gdbarch, addr - word_size * nr_cols);
1514   ui_out_field_core_addr (uiout, "next-page", gdbarch, addr + total_bytes);
1515   ui_out_field_core_addr (uiout, "prev-page", gdbarch, addr - total_bytes);
1516
1517   /* Build the result as a two dimentional table.  */
1518   {
1519     struct ui_file *stream;
1520     struct cleanup *cleanup_stream;
1521     int row;
1522     int row_byte;
1523
1524     stream = mem_fileopen ();
1525     cleanup_stream = make_cleanup_ui_file_delete (stream);
1526
1527     make_cleanup_ui_out_list_begin_end (uiout, "memory");
1528     for (row = 0, row_byte = 0;
1529          row < nr_rows;
1530          row++, row_byte += nr_cols * word_size)
1531       {
1532         int col;
1533         int col_byte;
1534         struct cleanup *cleanup_tuple;
1535         struct cleanup *cleanup_list_data;
1536         struct value_print_options opts;
1537
1538         cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1539         ui_out_field_core_addr (uiout, "addr", gdbarch, addr + row_byte);
1540         /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr +
1541            row_byte); */
1542         cleanup_list_data = make_cleanup_ui_out_list_begin_end (uiout, "data");
1543         get_formatted_print_options (&opts, word_format);
1544         for (col = 0, col_byte = row_byte;
1545              col < nr_cols;
1546              col++, col_byte += word_size)
1547           {
1548             if (col_byte + word_size > nr_bytes)
1549               {
1550                 ui_out_field_string (uiout, NULL, "N/A");
1551               }
1552             else
1553               {
1554                 ui_file_rewind (stream);
1555                 print_scalar_formatted (mbuf + col_byte, word_type, &opts,
1556                                         word_asize, stream);
1557                 ui_out_field_stream (uiout, NULL, stream);
1558               }
1559           }
1560         do_cleanups (cleanup_list_data);
1561         if (aschar)
1562           {
1563             int byte;
1564
1565             ui_file_rewind (stream);
1566             for (byte = row_byte;
1567                  byte < row_byte + word_size * nr_cols; byte++)
1568               {
1569                 if (byte >= nr_bytes)
1570                   fputc_unfiltered ('X', stream);
1571                 else if (mbuf[byte] < 32 || mbuf[byte] > 126)
1572                   fputc_unfiltered (aschar, stream);
1573                 else
1574                   fputc_unfiltered (mbuf[byte], stream);
1575               }
1576             ui_out_field_stream (uiout, "ascii", stream);
1577           }
1578         do_cleanups (cleanup_tuple);
1579       }
1580     do_cleanups (cleanup_stream);
1581   }
1582   do_cleanups (cleanups);
1583 }
1584
1585 void
1586 mi_cmd_data_read_memory_bytes (char *command, char **argv, int argc)
1587 {
1588   struct gdbarch *gdbarch = get_current_arch ();
1589   struct ui_out *uiout = current_uiout;
1590   struct cleanup *cleanups;
1591   CORE_ADDR addr;
1592   LONGEST length;
1593   memory_read_result_s *read_result;
1594   int ix;
1595   VEC(memory_read_result_s) *result;
1596   long offset = 0;
1597   int oind = 0;
1598   char *oarg;
1599   enum opt
1600   {
1601     OFFSET_OPT
1602   };
1603   static const struct mi_opt opts[] =
1604     {
1605       {"o", OFFSET_OPT, 1},
1606       { 0, 0, 0 }
1607     };
1608
1609   while (1)
1610     {
1611       int opt = mi_getopt ("-data-read-memory-bytes", argc, argv, opts,
1612                            &oind, &oarg);
1613       if (opt < 0)
1614         break;
1615       switch ((enum opt) opt)
1616         {
1617         case OFFSET_OPT:
1618           offset = atol (oarg);
1619           break;
1620         }
1621     }
1622   argv += oind;
1623   argc -= oind;
1624
1625   if (argc != 2)
1626     error (_("Usage: [ -o OFFSET ] ADDR LENGTH."));
1627
1628   addr = parse_and_eval_address (argv[0]) + offset;
1629   length = atol (argv[1]);
1630
1631   result = read_memory_robust (current_target.beneath, addr, length);
1632
1633   cleanups = make_cleanup (free_memory_read_result_vector, result);
1634
1635   if (VEC_length (memory_read_result_s, result) == 0)
1636     error (_("Unable to read memory."));
1637
1638   make_cleanup_ui_out_list_begin_end (uiout, "memory");
1639   for (ix = 0;
1640        VEC_iterate (memory_read_result_s, result, ix, read_result);
1641        ++ix)
1642     {
1643       struct cleanup *t = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1644       char *data, *p;
1645       int i;
1646
1647       ui_out_field_core_addr (uiout, "begin", gdbarch, read_result->begin);
1648       ui_out_field_core_addr (uiout, "offset", gdbarch, read_result->begin
1649                               - addr);
1650       ui_out_field_core_addr (uiout, "end", gdbarch, read_result->end);
1651
1652       data = xmalloc ((read_result->end - read_result->begin) * 2 + 1);
1653
1654       for (i = 0, p = data;
1655            i < (read_result->end - read_result->begin);
1656            ++i, p += 2)
1657         {
1658           sprintf (p, "%02x", read_result->data[i]);
1659         }
1660       ui_out_field_string (uiout, "contents", data);
1661       xfree (data);
1662       do_cleanups (t);
1663     }
1664   do_cleanups (cleanups);
1665 }
1666
1667 /* Implementation of the -data-write_memory command.
1668
1669    COLUMN_OFFSET: optional argument. Must be preceded by '-o'. The
1670    offset from the beginning of the memory grid row where the cell to
1671    be written is.
1672    ADDR: start address of the row in the memory grid where the memory
1673    cell is, if OFFSET_COLUMN is specified.  Otherwise, the address of
1674    the location to write to.
1675    FORMAT: a char indicating format for the ``word''.  See
1676    the ``x'' command.
1677    WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
1678    VALUE: value to be written into the memory address.
1679
1680    Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
1681
1682    Prints nothing.  */
1683
1684 void
1685 mi_cmd_data_write_memory (char *command, char **argv, int argc)
1686 {
1687   struct gdbarch *gdbarch = get_current_arch ();
1688   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1689   CORE_ADDR addr;
1690   long word_size;
1691   /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
1692      enough when using a compiler other than GCC.  */
1693   LONGEST value;
1694   void *buffer;
1695   struct cleanup *old_chain;
1696   long offset = 0;
1697   int oind = 0;
1698   char *oarg;
1699   enum opt
1700   {
1701     OFFSET_OPT
1702   };
1703   static const struct mi_opt opts[] =
1704     {
1705       {"o", OFFSET_OPT, 1},
1706       { 0, 0, 0 }
1707     };
1708
1709   while (1)
1710     {
1711       int opt = mi_getopt ("-data-write-memory", argc, argv, opts,
1712                            &oind, &oarg);
1713
1714       if (opt < 0)
1715         break;
1716       switch ((enum opt) opt)
1717         {
1718         case OFFSET_OPT:
1719           offset = atol (oarg);
1720           break;
1721         }
1722     }
1723   argv += oind;
1724   argc -= oind;
1725
1726   if (argc != 4)
1727     error (_("-data-write-memory: Usage: "
1728              "[-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE."));
1729
1730   /* Extract all the arguments.  */
1731   /* Start address of the memory dump.  */
1732   addr = parse_and_eval_address (argv[0]);
1733   /* The size of the memory word.  */
1734   word_size = atol (argv[2]);
1735
1736   /* Calculate the real address of the write destination.  */
1737   addr += (offset * word_size);
1738
1739   /* Get the value as a number.  */
1740   value = parse_and_eval_address (argv[3]);
1741   /* Get the value into an array.  */
1742   buffer = xmalloc (word_size);
1743   old_chain = make_cleanup (xfree, buffer);
1744   store_signed_integer (buffer, word_size, byte_order, value);
1745   /* Write it down to memory.  */
1746   write_memory_with_notification (addr, buffer, word_size);
1747   /* Free the buffer.  */
1748   do_cleanups (old_chain);
1749 }
1750
1751 /* Implementation of the -data-write-memory-bytes command.
1752
1753    ADDR: start address
1754    DATA: string of bytes to write at that address
1755    COUNT: number of bytes to be filled (decimal integer).  */
1756
1757 void
1758 mi_cmd_data_write_memory_bytes (char *command, char **argv, int argc)
1759 {
1760   CORE_ADDR addr;
1761   char *cdata;
1762   gdb_byte *data;
1763   gdb_byte *databuf;
1764   size_t len, i, steps, remainder;
1765   long int count, j;
1766   struct cleanup *back_to;
1767
1768   if (argc != 2 && argc != 3)
1769     error (_("Usage: ADDR DATA [COUNT]."));
1770
1771   addr = parse_and_eval_address (argv[0]);
1772   cdata = argv[1];
1773   if (strlen (cdata) % 2)
1774     error (_("Hex-encoded '%s' must have an even number of characters."),
1775            cdata);
1776
1777   len = strlen (cdata)/2;
1778   if (argc == 3)
1779     count = strtoul (argv[2], NULL, 10);
1780   else
1781     count = len;
1782
1783   databuf = xmalloc (len * sizeof (gdb_byte));
1784   back_to = make_cleanup (xfree, databuf);
1785
1786   for (i = 0; i < len; ++i)
1787     {
1788       int x;
1789       if (sscanf (cdata + i * 2, "%02x", &x) != 1)
1790         error (_("Invalid argument"));
1791       databuf[i] = (gdb_byte) x;
1792     }
1793
1794   if (len < count)
1795     {
1796       /* Pattern is made of less bytes than count:
1797          repeat pattern to fill memory.  */
1798       data = xmalloc (count);
1799       make_cleanup (xfree, data);
1800
1801       steps = count / len;
1802       remainder = count % len;
1803       for (j = 0; j < steps; j++)
1804         memcpy (data + j * len, databuf, len);
1805
1806       if (remainder > 0)
1807         memcpy (data + steps * len, databuf, remainder);
1808     }
1809   else
1810     {
1811       /* Pattern is longer than or equal to count:
1812          just copy count bytes.  */
1813       data = databuf;
1814     }
1815
1816   write_memory_with_notification (addr, data, count);
1817
1818   do_cleanups (back_to);
1819 }
1820
1821 void
1822 mi_cmd_enable_timings (char *command, char **argv, int argc)
1823 {
1824   if (argc == 0)
1825     do_timings = 1;
1826   else if (argc == 1)
1827     {
1828       if (strcmp (argv[0], "yes") == 0)
1829         do_timings = 1;
1830       else if (strcmp (argv[0], "no") == 0)
1831         do_timings = 0;
1832       else
1833         goto usage_error;
1834     }
1835   else
1836     goto usage_error;
1837
1838   return;
1839
1840  usage_error:
1841   error (_("-enable-timings: Usage: %s {yes|no}"), command);
1842 }
1843
1844 void
1845 mi_cmd_list_features (char *command, char **argv, int argc)
1846 {
1847   if (argc == 0)
1848     {
1849       struct cleanup *cleanup = NULL;
1850       struct ui_out *uiout = current_uiout;
1851
1852       cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");
1853       ui_out_field_string (uiout, NULL, "frozen-varobjs");
1854       ui_out_field_string (uiout, NULL, "pending-breakpoints");
1855       ui_out_field_string (uiout, NULL, "thread-info");
1856       ui_out_field_string (uiout, NULL, "data-read-memory-bytes");
1857       ui_out_field_string (uiout, NULL, "breakpoint-notifications");
1858       ui_out_field_string (uiout, NULL, "ada-task-info");
1859       ui_out_field_string (uiout, NULL, "language-option");
1860       ui_out_field_string (uiout, NULL, "info-gdb-mi-command");
1861       ui_out_field_string (uiout, NULL, "undefined-command-error-code");
1862       ui_out_field_string (uiout, NULL, "exec-run-start-option");
1863
1864       if (ext_lang_initialized_p (get_ext_lang_defn (EXT_LANG_PYTHON)))
1865         ui_out_field_string (uiout, NULL, "python");
1866
1867       do_cleanups (cleanup);
1868       return;
1869     }
1870
1871   error (_("-list-features should be passed no arguments"));
1872 }
1873
1874 void
1875 mi_cmd_list_target_features (char *command, char **argv, int argc)
1876 {
1877   if (argc == 0)
1878     {
1879       struct cleanup *cleanup = NULL;
1880       struct ui_out *uiout = current_uiout;
1881
1882       cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");
1883       if (mi_async_p ())
1884         ui_out_field_string (uiout, NULL, "async");
1885       if (target_can_execute_reverse)
1886         ui_out_field_string (uiout, NULL, "reverse");
1887       do_cleanups (cleanup);
1888       return;
1889     }
1890
1891   error (_("-list-target-features should be passed no arguments"));
1892 }
1893
1894 void
1895 mi_cmd_add_inferior (char *command, char **argv, int argc)
1896 {
1897   struct inferior *inf;
1898
1899   if (argc != 0)
1900     error (_("-add-inferior should be passed no arguments"));
1901
1902   inf = add_inferior_with_spaces ();
1903
1904   ui_out_field_fmt (current_uiout, "inferior", "i%d", inf->num);
1905 }
1906
1907 /* Callback used to find the first inferior other than the current
1908    one.  */
1909
1910 static int
1911 get_other_inferior (struct inferior *inf, void *arg)
1912 {
1913   if (inf == current_inferior ())
1914     return 0;
1915
1916   return 1;
1917 }
1918
1919 void
1920 mi_cmd_remove_inferior (char *command, char **argv, int argc)
1921 {
1922   int id;
1923   struct inferior *inf;
1924
1925   if (argc != 1)
1926     error (_("-remove-inferior should be passed a single argument"));
1927
1928   if (sscanf (argv[0], "i%d", &id) != 1)
1929     error (_("the thread group id is syntactically invalid"));
1930
1931   inf = find_inferior_id (id);
1932   if (!inf)
1933     error (_("the specified thread group does not exist"));
1934
1935   if (inf->pid != 0)
1936     error (_("cannot remove an active inferior"));
1937
1938   if (inf == current_inferior ())
1939     {
1940       struct thread_info *tp = 0;
1941       struct inferior *new_inferior
1942         = iterate_over_inferiors (get_other_inferior, NULL);
1943
1944       if (new_inferior == NULL)
1945         error (_("Cannot remove last inferior"));
1946
1947       set_current_inferior (new_inferior);
1948       if (new_inferior->pid != 0)
1949         tp = any_thread_of_process (new_inferior->pid);
1950       switch_to_thread (tp ? tp->ptid : null_ptid);
1951       set_current_program_space (new_inferior->pspace);
1952     }
1953
1954   delete_inferior_1 (inf, 1 /* silent */);
1955 }
1956
1957 \f
1958
1959 /* Execute a command within a safe environment.
1960    Return <0 for error; >=0 for ok.
1961
1962    args->action will tell mi_execute_command what action
1963    to perfrom after the given command has executed (display/suppress
1964    prompt, display error).  */
1965
1966 static void
1967 captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
1968 {
1969   struct cleanup *cleanup;
1970
1971   if (do_timings)
1972     current_command_ts = context->cmd_start;
1973
1974   current_token = xstrdup (context->token);
1975   cleanup = make_cleanup (free_current_contents, &current_token);
1976
1977   running_result_record_printed = 0;
1978   mi_proceeded = 0;
1979   switch (context->op)
1980     {
1981     case MI_COMMAND:
1982       /* A MI command was read from the input stream.  */
1983       if (mi_debug_p)
1984         /* FIXME: gdb_???? */
1985         fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
1986                             context->token, context->command, context->args);
1987
1988       mi_cmd_execute (context);
1989
1990       /* Print the result if there were no errors.
1991
1992          Remember that on the way out of executing a command, you have
1993          to directly use the mi_interp's uiout, since the command
1994          could have reset the interpreter, in which case the current
1995          uiout will most likely crash in the mi_out_* routines.  */
1996       if (!running_result_record_printed)
1997         {
1998           fputs_unfiltered (context->token, raw_stdout);
1999           /* There's no particularly good reason why target-connect results
2000              in not ^done.  Should kill ^connected for MI3.  */
2001           fputs_unfiltered (strcmp (context->command, "target-select") == 0
2002                             ? "^connected" : "^done", raw_stdout);
2003           mi_out_put (uiout, raw_stdout);
2004           mi_out_rewind (uiout);
2005           mi_print_timing_maybe ();
2006           fputs_unfiltered ("\n", raw_stdout);
2007         }
2008       else
2009         /* The command does not want anything to be printed.  In that
2010            case, the command probably should not have written anything
2011            to uiout, but in case it has written something, discard it.  */
2012         mi_out_rewind (uiout);
2013       break;
2014
2015     case CLI_COMMAND:
2016       {
2017         char *argv[2];
2018
2019         /* A CLI command was read from the input stream.  */
2020         /* This "feature" will be removed as soon as we have a
2021            complete set of mi commands.  */
2022         /* Echo the command on the console.  */
2023         fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
2024         /* Call the "console" interpreter.  */
2025         argv[0] = "console";
2026         argv[1] = context->command;
2027         mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
2028
2029         /* If we changed interpreters, DON'T print out anything.  */
2030         if (current_interp_named_p (INTERP_MI)
2031             || current_interp_named_p (INTERP_MI1)
2032             || current_interp_named_p (INTERP_MI2)
2033             || current_interp_named_p (INTERP_MI3))
2034           {
2035             if (!running_result_record_printed)
2036               {
2037                 fputs_unfiltered (context->token, raw_stdout);
2038                 fputs_unfiltered ("^done", raw_stdout);
2039                 mi_out_put (uiout, raw_stdout);
2040                 mi_out_rewind (uiout);
2041                 mi_print_timing_maybe ();
2042                 fputs_unfiltered ("\n", raw_stdout);
2043               }
2044             else
2045               mi_out_rewind (uiout);
2046           }
2047         break;
2048       }
2049     }
2050
2051   do_cleanups (cleanup);
2052 }
2053
2054 /* Print a gdb exception to the MI output stream.  */
2055
2056 static void
2057 mi_print_exception (const char *token, struct gdb_exception exception)
2058 {
2059   fputs_unfiltered (token, raw_stdout);
2060   fputs_unfiltered ("^error,msg=\"", raw_stdout);
2061   if (exception.message == NULL)
2062     fputs_unfiltered ("unknown error", raw_stdout);
2063   else
2064     fputstr_unfiltered (exception.message, '"', raw_stdout);
2065   fputs_unfiltered ("\"", raw_stdout);
2066
2067   switch (exception.error)
2068     {
2069       case UNDEFINED_COMMAND_ERROR:
2070         fputs_unfiltered (",code=\"undefined-command\"", raw_stdout);
2071         break;
2072     }
2073
2074   fputs_unfiltered ("\n", raw_stdout);
2075 }
2076
2077 void
2078 mi_execute_command (const char *cmd, int from_tty)
2079 {
2080   char *token;
2081   struct mi_parse *command = NULL;
2082   volatile struct gdb_exception exception;
2083
2084   /* This is to handle EOF (^D). We just quit gdb.  */
2085   /* FIXME: we should call some API function here.  */
2086   if (cmd == 0)
2087     quit_force (NULL, from_tty);
2088
2089   target_log_command (cmd);
2090
2091   TRY_CATCH (exception, RETURN_MASK_ALL)
2092     {
2093       command = mi_parse (cmd, &token);
2094     }
2095   if (exception.reason < 0)
2096     {
2097       mi_print_exception (token, exception);
2098       xfree (token);
2099     }
2100   else
2101     {
2102       volatile struct gdb_exception result;
2103       ptid_t previous_ptid = inferior_ptid;
2104
2105       command->token = token;
2106
2107       if (do_timings)
2108         {
2109           command->cmd_start = (struct mi_timestamp *)
2110             xmalloc (sizeof (struct mi_timestamp));
2111           timestamp (command->cmd_start);
2112         }
2113
2114       TRY_CATCH (result, RETURN_MASK_ALL)
2115         {
2116           captured_mi_execute_command (current_uiout, command);
2117         }
2118       if (result.reason < 0)
2119         {
2120           /* The command execution failed and error() was called
2121              somewhere.  */
2122           mi_print_exception (command->token, result);
2123           mi_out_rewind (current_uiout);
2124         }
2125
2126       bpstat_do_actions ();
2127
2128       if (/* The notifications are only output when the top-level
2129              interpreter (specified on the command line) is MI.  */
2130           ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
2131           /* Don't try report anything if there are no threads --
2132              the program is dead.  */
2133           && thread_count () != 0
2134           /* -thread-select explicitly changes thread. If frontend uses that
2135              internally, we don't want to emit =thread-selected, since
2136              =thread-selected is supposed to indicate user's intentions.  */
2137           && strcmp (command->command, "thread-select") != 0)
2138         {
2139           struct mi_interp *mi = top_level_interpreter_data ();
2140           int report_change = 0;
2141
2142           if (command->thread == -1)
2143             {
2144               report_change = (!ptid_equal (previous_ptid, null_ptid)
2145                                && !ptid_equal (inferior_ptid, previous_ptid)
2146                                && !ptid_equal (inferior_ptid, null_ptid));
2147             }
2148           else if (!ptid_equal (inferior_ptid, null_ptid))
2149             {
2150               struct thread_info *ti = inferior_thread ();
2151
2152               report_change = (ti->num != command->thread);
2153             }
2154
2155           if (report_change)
2156             {
2157               struct thread_info *ti = inferior_thread ();
2158
2159               target_terminal_ours ();
2160               fprintf_unfiltered (mi->event_channel,
2161                                   "thread-selected,id=\"%d\"",
2162                                   ti->num);
2163               gdb_flush (mi->event_channel);
2164             }
2165         }
2166
2167       mi_parse_free (command);
2168     }
2169 }
2170
2171 static void
2172 mi_cmd_execute (struct mi_parse *parse)
2173 {
2174   struct cleanup *cleanup;
2175   enum language saved_language;
2176
2177   cleanup = prepare_execute_command ();
2178
2179   if (parse->all && parse->thread_group != -1)
2180     error (_("Cannot specify --thread-group together with --all"));
2181
2182   if (parse->all && parse->thread != -1)
2183     error (_("Cannot specify --thread together with --all"));
2184
2185   if (parse->thread_group != -1 && parse->thread != -1)
2186     error (_("Cannot specify --thread together with --thread-group"));
2187
2188   if (parse->frame != -1 && parse->thread == -1)
2189     error (_("Cannot specify --frame without --thread"));
2190
2191   if (parse->thread_group != -1)
2192     {
2193       struct inferior *inf = find_inferior_id (parse->thread_group);
2194       struct thread_info *tp = 0;
2195
2196       if (!inf)
2197         error (_("Invalid thread group for the --thread-group option"));
2198
2199       set_current_inferior (inf);
2200       /* This behaviour means that if --thread-group option identifies
2201          an inferior with multiple threads, then a random one will be
2202          picked.  This is not a problem -- frontend should always
2203          provide --thread if it wishes to operate on a specific
2204          thread.  */
2205       if (inf->pid != 0)
2206         tp = any_live_thread_of_process (inf->pid);
2207       switch_to_thread (tp ? tp->ptid : null_ptid);
2208       set_current_program_space (inf->pspace);
2209     }
2210
2211   if (parse->thread != -1)
2212     {
2213       struct thread_info *tp = find_thread_id (parse->thread);
2214
2215       if (!tp)
2216         error (_("Invalid thread id: %d"), parse->thread);
2217
2218       if (is_exited (tp->ptid))
2219         error (_("Thread id: %d has terminated"), parse->thread);
2220
2221       switch_to_thread (tp->ptid);
2222     }
2223
2224   if (parse->frame != -1)
2225     {
2226       struct frame_info *fid;
2227       int frame = parse->frame;
2228
2229       fid = find_relative_frame (get_current_frame (), &frame);
2230       if (frame == 0)
2231         /* find_relative_frame was successful */
2232         select_frame (fid);
2233       else
2234         error (_("Invalid frame id: %d"), frame);
2235     }
2236
2237   if (parse->language != language_unknown)
2238     {
2239       make_cleanup_restore_current_language ();
2240       set_language (parse->language);
2241     }
2242
2243   current_context = parse;
2244
2245   if (parse->cmd->suppress_notification != NULL)
2246     {
2247       make_cleanup_restore_integer (parse->cmd->suppress_notification);
2248       *parse->cmd->suppress_notification = 1;
2249     }
2250
2251   if (parse->cmd->argv_func != NULL)
2252     {
2253       parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
2254     }
2255   else if (parse->cmd->cli.cmd != 0)
2256     {
2257       /* FIXME: DELETE THIS. */
2258       /* The operation is still implemented by a cli command.  */
2259       /* Must be a synchronous one.  */
2260       mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
2261                               parse->args);
2262     }
2263   else
2264     {
2265       /* FIXME: DELETE THIS.  */
2266       struct ui_file *stb;
2267
2268       stb = mem_fileopen ();
2269
2270       fputs_unfiltered ("Undefined mi command: ", stb);
2271       fputstr_unfiltered (parse->command, '"', stb);
2272       fputs_unfiltered (" (missing implementation)", stb);
2273
2274       make_cleanup_ui_file_delete (stb);
2275       error_stream (stb);
2276     }
2277   do_cleanups (cleanup);
2278 }
2279
2280 /* FIXME: This is just a hack so we can get some extra commands going.
2281    We don't want to channel things through the CLI, but call libgdb directly.
2282    Use only for synchronous commands.  */
2283
2284 void
2285 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
2286 {
2287   if (cmd != 0)
2288     {
2289       struct cleanup *old_cleanups;
2290       char *run;
2291
2292       if (args_p)
2293         run = xstrprintf ("%s %s", cmd, args);
2294       else
2295         run = xstrdup (cmd);
2296       if (mi_debug_p)
2297         /* FIXME: gdb_???? */
2298         fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
2299                             cmd, run);
2300       old_cleanups = make_cleanup (xfree, run);
2301       execute_command (run, 0 /* from_tty */ );
2302       do_cleanups (old_cleanups);
2303       return;
2304     }
2305 }
2306
2307 void
2308 mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
2309 {
2310   struct cleanup *old_cleanups;
2311   char *run;
2312
2313   if (mi_async_p ())
2314     run = xstrprintf ("%s %s&", cli_command, argc ? *argv : "");
2315   else
2316     run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
2317   old_cleanups = make_cleanup (xfree, run);
2318
2319   execute_command (run, 0 /* from_tty */ );
2320
2321   /* Do this before doing any printing.  It would appear that some
2322      print code leaves garbage around in the buffer.  */
2323   do_cleanups (old_cleanups);
2324 }
2325
2326 void
2327 mi_load_progress (const char *section_name,
2328                   unsigned long sent_so_far,
2329                   unsigned long total_section,
2330                   unsigned long total_sent,
2331                   unsigned long grand_total)
2332 {
2333   struct timeval time_now, delta, update_threshold;
2334   static struct timeval last_update;
2335   static char *previous_sect_name = NULL;
2336   int new_section;
2337   struct ui_out *saved_uiout;
2338   struct ui_out *uiout;
2339
2340   /* This function is called through deprecated_show_load_progress
2341      which means uiout may not be correct.  Fix it for the duration
2342      of this function.  */
2343   saved_uiout = current_uiout;
2344
2345   if (current_interp_named_p (INTERP_MI)
2346       || current_interp_named_p (INTERP_MI2))
2347     current_uiout = mi_out_new (2);
2348   else if (current_interp_named_p (INTERP_MI1))
2349     current_uiout = mi_out_new (1);
2350   else if (current_interp_named_p (INTERP_MI3))
2351     current_uiout = mi_out_new (3);
2352   else
2353     return;
2354
2355   uiout = current_uiout;
2356
2357   update_threshold.tv_sec = 0;
2358   update_threshold.tv_usec = 500000;
2359   gettimeofday (&time_now, NULL);
2360
2361   delta.tv_usec = time_now.tv_usec - last_update.tv_usec;
2362   delta.tv_sec = time_now.tv_sec - last_update.tv_sec;
2363
2364   if (delta.tv_usec < 0)
2365     {
2366       delta.tv_sec -= 1;
2367       delta.tv_usec += 1000000L;
2368     }
2369
2370   new_section = (previous_sect_name ?
2371                  strcmp (previous_sect_name, section_name) : 1);
2372   if (new_section)
2373     {
2374       struct cleanup *cleanup_tuple;
2375
2376       xfree (previous_sect_name);
2377       previous_sect_name = xstrdup (section_name);
2378
2379       if (current_token)
2380         fputs_unfiltered (current_token, raw_stdout);
2381       fputs_unfiltered ("+download", raw_stdout);
2382       cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2383       ui_out_field_string (uiout, "section", section_name);
2384       ui_out_field_int (uiout, "section-size", total_section);
2385       ui_out_field_int (uiout, "total-size", grand_total);
2386       do_cleanups (cleanup_tuple);
2387       mi_out_put (uiout, raw_stdout);
2388       fputs_unfiltered ("\n", raw_stdout);
2389       gdb_flush (raw_stdout);
2390     }
2391
2392   if (delta.tv_sec >= update_threshold.tv_sec &&
2393       delta.tv_usec >= update_threshold.tv_usec)
2394     {
2395       struct cleanup *cleanup_tuple;
2396
2397       last_update.tv_sec = time_now.tv_sec;
2398       last_update.tv_usec = time_now.tv_usec;
2399       if (current_token)
2400         fputs_unfiltered (current_token, raw_stdout);
2401       fputs_unfiltered ("+download", raw_stdout);
2402       cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2403       ui_out_field_string (uiout, "section", section_name);
2404       ui_out_field_int (uiout, "section-sent", sent_so_far);
2405       ui_out_field_int (uiout, "section-size", total_section);
2406       ui_out_field_int (uiout, "total-sent", total_sent);
2407       ui_out_field_int (uiout, "total-size", grand_total);
2408       do_cleanups (cleanup_tuple);
2409       mi_out_put (uiout, raw_stdout);
2410       fputs_unfiltered ("\n", raw_stdout);
2411       gdb_flush (raw_stdout);
2412     }
2413
2414   xfree (uiout);
2415   current_uiout = saved_uiout;
2416 }
2417
2418 static void
2419 timestamp (struct mi_timestamp *tv)
2420 {
2421   gettimeofday (&tv->wallclock, NULL);
2422 #ifdef HAVE_GETRUSAGE
2423   getrusage (RUSAGE_SELF, &rusage);
2424   tv->utime.tv_sec = rusage.ru_utime.tv_sec;
2425   tv->utime.tv_usec = rusage.ru_utime.tv_usec;
2426   tv->stime.tv_sec = rusage.ru_stime.tv_sec;
2427   tv->stime.tv_usec = rusage.ru_stime.tv_usec;
2428 #else
2429   {
2430     long usec = get_run_time ();
2431
2432     tv->utime.tv_sec = usec/1000000L;
2433     tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
2434     tv->stime.tv_sec = 0;
2435     tv->stime.tv_usec = 0;
2436   }
2437 #endif
2438 }
2439
2440 static void
2441 print_diff_now (struct mi_timestamp *start)
2442 {
2443   struct mi_timestamp now;
2444
2445   timestamp (&now);
2446   print_diff (start, &now);
2447 }
2448
2449 void
2450 mi_print_timing_maybe (void)
2451 {
2452   /* If the command is -enable-timing then do_timings may be true
2453      whilst current_command_ts is not initialized.  */
2454   if (do_timings && current_command_ts)
2455     print_diff_now (current_command_ts);
2456 }
2457
2458 static long
2459 timeval_diff (struct timeval start, struct timeval end)
2460 {
2461   return ((end.tv_sec - start.tv_sec) * 1000000L)
2462     + (end.tv_usec - start.tv_usec);
2463 }
2464
2465 static void
2466 print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
2467 {
2468   fprintf_unfiltered
2469     (raw_stdout,
2470      ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
2471      timeval_diff (start->wallclock, end->wallclock) / 1000000.0,
2472      timeval_diff (start->utime, end->utime) / 1000000.0,
2473      timeval_diff (start->stime, end->stime) / 1000000.0);
2474 }
2475
2476 void
2477 mi_cmd_trace_define_variable (char *command, char **argv, int argc)
2478 {
2479   struct expression *expr;
2480   LONGEST initval = 0;
2481   struct trace_state_variable *tsv;
2482   char *name = 0;
2483
2484   if (argc != 1 && argc != 2)
2485     error (_("Usage: -trace-define-variable VARIABLE [VALUE]"));
2486
2487   name = argv[0];
2488   if (*name++ != '$')
2489     error (_("Name of trace variable should start with '$'"));
2490
2491   validate_trace_state_variable_name (name);
2492
2493   tsv = find_trace_state_variable (name);
2494   if (!tsv)
2495     tsv = create_trace_state_variable (name);
2496
2497   if (argc == 2)
2498     initval = value_as_long (parse_and_eval (argv[1]));
2499
2500   tsv->initial_value = initval;
2501 }
2502
2503 void
2504 mi_cmd_trace_list_variables (char *command, char **argv, int argc)
2505 {
2506   if (argc != 0)
2507     error (_("-trace-list-variables: no arguments allowed"));
2508
2509   tvariables_info_1 ();
2510 }
2511
2512 void
2513 mi_cmd_trace_find (char *command, char **argv, int argc)
2514 {
2515   char *mode;
2516
2517   if (argc == 0)
2518     error (_("trace selection mode is required"));
2519
2520   mode = argv[0];
2521
2522   if (strcmp (mode, "none") == 0)
2523     {
2524       tfind_1 (tfind_number, -1, 0, 0, 0);
2525       return;
2526     }
2527
2528   check_trace_running (current_trace_status ());
2529
2530   if (strcmp (mode, "frame-number") == 0)
2531     {
2532       if (argc != 2)
2533         error (_("frame number is required"));
2534       tfind_1 (tfind_number, atoi (argv[1]), 0, 0, 0);
2535     }
2536   else if (strcmp (mode, "tracepoint-number") == 0)
2537     {
2538       if (argc != 2)
2539         error (_("tracepoint number is required"));
2540       tfind_1 (tfind_tp, atoi (argv[1]), 0, 0, 0);
2541     }
2542   else if (strcmp (mode, "pc") == 0)
2543     {
2544       if (argc != 2)
2545         error (_("PC is required"));
2546       tfind_1 (tfind_pc, 0, parse_and_eval_address (argv[1]), 0, 0);
2547     }
2548   else if (strcmp (mode, "pc-inside-range") == 0)
2549     {
2550       if (argc != 3)
2551         error (_("Start and end PC are required"));
2552       tfind_1 (tfind_range, 0, parse_and_eval_address (argv[1]),
2553                parse_and_eval_address (argv[2]), 0);
2554     }
2555   else if (strcmp (mode, "pc-outside-range") == 0)
2556     {
2557       if (argc != 3)
2558         error (_("Start and end PC are required"));
2559       tfind_1 (tfind_outside, 0, parse_and_eval_address (argv[1]),
2560                parse_and_eval_address (argv[2]), 0);
2561     }
2562   else if (strcmp (mode, "line") == 0)
2563     {
2564       struct symtabs_and_lines sals;
2565       struct symtab_and_line sal;
2566       static CORE_ADDR start_pc, end_pc;
2567       struct cleanup *back_to;
2568
2569       if (argc != 2)
2570         error (_("Line is required"));
2571
2572       sals = decode_line_with_current_source (argv[1],
2573                                               DECODE_LINE_FUNFIRSTLINE);
2574       back_to = make_cleanup (xfree, sals.sals);
2575
2576       sal = sals.sals[0];
2577
2578       if (sal.symtab == 0)
2579         error (_("Could not find the specified line"));
2580
2581       if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc))
2582         tfind_1 (tfind_range, 0, start_pc, end_pc - 1, 0);
2583       else
2584         error (_("Could not find the specified line"));
2585
2586       do_cleanups (back_to);
2587     }
2588   else
2589     error (_("Invalid mode '%s'"), mode);
2590
2591   if (has_stack_frames () || get_traceframe_number () >= 0)
2592     print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1);
2593 }
2594
2595 void
2596 mi_cmd_trace_save (char *command, char **argv, int argc)
2597 {
2598   int target_saves = 0;
2599   int generate_ctf = 0;
2600   char *filename;
2601   int oind = 0;
2602   char *oarg;
2603
2604   enum opt
2605   {
2606     TARGET_SAVE_OPT, CTF_OPT
2607   };
2608   static const struct mi_opt opts[] =
2609     {
2610       {"r", TARGET_SAVE_OPT, 0},
2611       {"ctf", CTF_OPT, 0},
2612       { 0, 0, 0 }
2613     };
2614
2615   while (1)
2616     {
2617       int opt = mi_getopt ("-trace-save", argc, argv, opts,
2618                            &oind, &oarg);
2619
2620       if (opt < 0)
2621         break;
2622       switch ((enum opt) opt)
2623         {
2624         case TARGET_SAVE_OPT:
2625           target_saves = 1;
2626           break;
2627         case CTF_OPT:
2628           generate_ctf = 1;
2629           break;
2630         }
2631     }
2632   filename = argv[oind];
2633
2634   if (generate_ctf)
2635     trace_save_ctf (filename, target_saves);
2636   else
2637     trace_save_tfile (filename, target_saves);
2638 }
2639
2640 void
2641 mi_cmd_trace_start (char *command, char **argv, int argc)
2642 {
2643   start_tracing (NULL);
2644 }
2645
2646 void
2647 mi_cmd_trace_status (char *command, char **argv, int argc)
2648 {
2649   trace_status_mi (0);
2650 }
2651
2652 void
2653 mi_cmd_trace_stop (char *command, char **argv, int argc)
2654 {
2655   stop_tracing (NULL);
2656   trace_status_mi (1);
2657 }
2658
2659 /* Implement the "-ada-task-info" command.  */
2660
2661 void
2662 mi_cmd_ada_task_info (char *command, char **argv, int argc)
2663 {
2664   if (argc != 0 && argc != 1)
2665     error (_("Invalid MI command"));
2666
2667   print_ada_task_info (current_uiout, argv[0], current_inferior ());
2668 }
2669
2670 /* Print EXPRESSION according to VALUES.  */
2671
2672 static void
2673 print_variable_or_computed (char *expression, enum print_values values)
2674 {
2675   struct expression *expr;
2676   struct cleanup *old_chain;
2677   struct value *val;
2678   struct ui_file *stb;
2679   struct value_print_options opts;
2680   struct type *type;
2681   struct ui_out *uiout = current_uiout;
2682
2683   stb = mem_fileopen ();
2684   old_chain = make_cleanup_ui_file_delete (stb);
2685
2686   expr = parse_expression (expression);
2687
2688   make_cleanup (free_current_contents, &expr);
2689
2690   if (values == PRINT_SIMPLE_VALUES)
2691     val = evaluate_type (expr);
2692   else
2693     val = evaluate_expression (expr);
2694
2695   if (values != PRINT_NO_VALUES)
2696     make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2697   ui_out_field_string (uiout, "name", expression);
2698
2699   switch (values)
2700     {
2701     case PRINT_SIMPLE_VALUES:
2702       type = check_typedef (value_type (val));
2703       type_print (value_type (val), "", stb, -1);
2704       ui_out_field_stream (uiout, "type", stb);
2705       if (TYPE_CODE (type) != TYPE_CODE_ARRAY
2706           && TYPE_CODE (type) != TYPE_CODE_STRUCT
2707           && TYPE_CODE (type) != TYPE_CODE_UNION)
2708         {
2709           struct value_print_options opts;
2710
2711           get_no_prettyformat_print_options (&opts);
2712           opts.deref_ref = 1;
2713           common_val_print (val, stb, 0, &opts, current_language);
2714           ui_out_field_stream (uiout, "value", stb);
2715         }
2716       break;
2717     case PRINT_ALL_VALUES:
2718       {
2719         struct value_print_options opts;
2720
2721         get_no_prettyformat_print_options (&opts);
2722         opts.deref_ref = 1;
2723         common_val_print (val, stb, 0, &opts, current_language);
2724         ui_out_field_stream (uiout, "value", stb);
2725       }
2726       break;
2727     }
2728
2729   do_cleanups (old_chain);
2730 }
2731
2732 /* Implement the "-trace-frame-collected" command.  */
2733
2734 void
2735 mi_cmd_trace_frame_collected (char *command, char **argv, int argc)
2736 {
2737   struct cleanup *old_chain;
2738   struct bp_location *tloc;
2739   int stepping_frame;
2740   struct collection_list *clist;
2741   struct collection_list tracepoint_list, stepping_list;
2742   struct traceframe_info *tinfo;
2743   int oind = 0;
2744   int var_print_values = PRINT_ALL_VALUES;
2745   int comp_print_values = PRINT_ALL_VALUES;
2746   int registers_format = 'x';
2747   int memory_contents = 0;
2748   struct ui_out *uiout = current_uiout;
2749   enum opt
2750   {
2751     VAR_PRINT_VALUES,
2752     COMP_PRINT_VALUES,
2753     REGISTERS_FORMAT,
2754     MEMORY_CONTENTS,
2755   };
2756   static const struct mi_opt opts[] =
2757     {
2758       {"-var-print-values", VAR_PRINT_VALUES, 1},
2759       {"-comp-print-values", COMP_PRINT_VALUES, 1},
2760       {"-registers-format", REGISTERS_FORMAT, 1},
2761       {"-memory-contents", MEMORY_CONTENTS, 0},
2762       { 0, 0, 0 }
2763     };
2764
2765   while (1)
2766     {
2767       char *oarg;
2768       int opt = mi_getopt ("-trace-frame-collected", argc, argv, opts,
2769                            &oind, &oarg);
2770       if (opt < 0)
2771         break;
2772       switch ((enum opt) opt)
2773         {
2774         case VAR_PRINT_VALUES:
2775           var_print_values = mi_parse_print_values (oarg);
2776           break;
2777         case COMP_PRINT_VALUES:
2778           comp_print_values = mi_parse_print_values (oarg);
2779           break;
2780         case REGISTERS_FORMAT:
2781           registers_format = oarg[0];
2782         case MEMORY_CONTENTS:
2783           memory_contents = 1;
2784           break;
2785         }
2786     }
2787
2788   if (oind != argc)
2789     error (_("Usage: -trace-frame-collected "
2790              "[--var-print-values PRINT_VALUES] "
2791              "[--comp-print-values PRINT_VALUES] "
2792              "[--registers-format FORMAT]"
2793              "[--memory-contents]"));
2794
2795   /* This throws an error is not inspecting a trace frame.  */
2796   tloc = get_traceframe_location (&stepping_frame);
2797
2798   /* This command only makes sense for the current frame, not the
2799      selected frame.  */
2800   old_chain = make_cleanup_restore_current_thread ();
2801   select_frame (get_current_frame ());
2802
2803   encode_actions_and_make_cleanup (tloc, &tracepoint_list,
2804                                    &stepping_list);
2805
2806   if (stepping_frame)
2807     clist = &stepping_list;
2808   else
2809     clist = &tracepoint_list;
2810
2811   tinfo = get_traceframe_info ();
2812
2813   /* Explicitly wholly collected variables.  */
2814   {
2815     struct cleanup *list_cleanup;
2816     char *p;
2817     int i;
2818
2819     list_cleanup = make_cleanup_ui_out_list_begin_end (uiout,
2820                                                        "explicit-variables");
2821     for (i = 0; VEC_iterate (char_ptr, clist->wholly_collected, i, p); i++)
2822       print_variable_or_computed (p, var_print_values);
2823     do_cleanups (list_cleanup);
2824   }
2825
2826   /* Computed expressions.  */
2827   {
2828     struct cleanup *list_cleanup;
2829     char *p;
2830     int i;
2831
2832     list_cleanup
2833       = make_cleanup_ui_out_list_begin_end (uiout,
2834                                             "computed-expressions");
2835     for (i = 0; VEC_iterate (char_ptr, clist->computed, i, p); i++)
2836       print_variable_or_computed (p, comp_print_values);
2837     do_cleanups (list_cleanup);
2838   }
2839
2840   /* Registers.  Given pseudo-registers, and that some architectures
2841      (like MIPS) actually hide the raw registers, we don't go through
2842      the trace frame info, but instead consult the register cache for
2843      register availability.  */
2844   {
2845     struct cleanup *list_cleanup;
2846     struct frame_info *frame;
2847     struct gdbarch *gdbarch;
2848     int regnum;
2849     int numregs;
2850
2851     list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "registers");
2852
2853     frame = get_selected_frame (NULL);
2854     gdbarch = get_frame_arch (frame);
2855     numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
2856
2857     for (regnum = 0; regnum < numregs; regnum++)
2858       {
2859         if (gdbarch_register_name (gdbarch, regnum) == NULL
2860             || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
2861           continue;
2862
2863         output_register (frame, regnum, registers_format, 1);
2864       }
2865
2866     do_cleanups (list_cleanup);
2867   }
2868
2869   /* Trace state variables.  */
2870   {
2871     struct cleanup *list_cleanup;
2872     int tvar;
2873     char *tsvname;
2874     int i;
2875
2876     list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "tvars");
2877
2878     tsvname = NULL;
2879     make_cleanup (free_current_contents, &tsvname);
2880
2881     for (i = 0; VEC_iterate (int, tinfo->tvars, i, tvar); i++)
2882       {
2883         struct cleanup *cleanup_child;
2884         struct trace_state_variable *tsv;
2885
2886         tsv = find_trace_state_variable_by_number (tvar);
2887
2888         cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2889
2890         if (tsv != NULL)
2891           {
2892             tsvname = xrealloc (tsvname, strlen (tsv->name) + 2);
2893             tsvname[0] = '$';
2894             strcpy (tsvname + 1, tsv->name);
2895             ui_out_field_string (uiout, "name", tsvname);
2896
2897             tsv->value_known = target_get_trace_state_variable_value (tsv->number,
2898                                                                       &tsv->value);
2899             ui_out_field_int (uiout, "current", tsv->value);
2900           }
2901         else
2902           {
2903             ui_out_field_skip (uiout, "name");
2904             ui_out_field_skip (uiout, "current");
2905           }
2906
2907         do_cleanups (cleanup_child);
2908       }
2909
2910     do_cleanups (list_cleanup);
2911   }
2912
2913   /* Memory.  */
2914   {
2915     struct cleanup *list_cleanup;
2916     VEC(mem_range_s) *available_memory = NULL;
2917     struct mem_range *r;
2918     int i;
2919
2920     traceframe_available_memory (&available_memory, 0, ULONGEST_MAX);
2921     make_cleanup (VEC_cleanup(mem_range_s), &available_memory);
2922
2923     list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "memory");
2924
2925     for (i = 0; VEC_iterate (mem_range_s, available_memory, i, r); i++)
2926       {
2927         struct cleanup *cleanup_child;
2928         gdb_byte *data;
2929         struct gdbarch *gdbarch = target_gdbarch ();
2930
2931         cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2932
2933         ui_out_field_core_addr (uiout, "address", gdbarch, r->start);
2934         ui_out_field_int (uiout, "length", r->length);
2935
2936         data = xmalloc (r->length);
2937         make_cleanup (xfree, data);
2938
2939         if (memory_contents)
2940           {
2941             if (target_read_memory (r->start, data, r->length) == 0)
2942               {
2943                 int m;
2944                 char *data_str, *p;
2945
2946                 data_str = xmalloc (r->length * 2 + 1);
2947                 make_cleanup (xfree, data_str);
2948
2949                 for (m = 0, p = data_str; m < r->length; ++m, p += 2)
2950                   sprintf (p, "%02x", data[m]);
2951                 ui_out_field_string (uiout, "contents", data_str);
2952               }
2953             else
2954               ui_out_field_skip (uiout, "contents");
2955           }
2956         do_cleanups (cleanup_child);
2957       }
2958
2959     do_cleanups (list_cleanup);
2960   }
2961
2962   do_cleanups (old_chain);
2963 }
2964
2965 void
2966 _initialize_mi_main (void)
2967 {
2968   struct cmd_list_element *c;
2969
2970   add_setshow_boolean_cmd ("mi-async", class_run,
2971                            &mi_async_1, _("\
2972 Set whether MI asynchronous mode is enabled."), _("\
2973 Show whether MI asynchronous mode is enabled."), _("\
2974 Tells GDB whether MI should be in asynchronous mode."),
2975                            set_mi_async_command,
2976                            show_mi_async_command,
2977                            &setlist,
2978                            &showlist);
2979
2980   /* Alias old "target-async" to "mi-async".  */
2981   c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &setlist);
2982   deprecate_cmd (c, "set mi-async");
2983   c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &showlist);
2984   deprecate_cmd (c, "show mi-async");
2985 }