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