Per-inferior/Inferior-qualified thread IDs
[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
2175               target_terminal_ours ();
2176               fprintf_unfiltered (mi->event_channel,
2177                                   "thread-selected,id=\"%d\"",
2178                                   ti->global_num);
2179               gdb_flush (mi->event_channel);
2180             }
2181         }
2182
2183       mi_parse_free (command);
2184     }
2185 }
2186
2187 static void
2188 mi_cmd_execute (struct mi_parse *parse)
2189 {
2190   struct cleanup *cleanup;
2191   enum language saved_language;
2192
2193   cleanup = prepare_execute_command ();
2194
2195   if (parse->all && parse->thread_group != -1)
2196     error (_("Cannot specify --thread-group together with --all"));
2197
2198   if (parse->all && parse->thread != -1)
2199     error (_("Cannot specify --thread together with --all"));
2200
2201   if (parse->thread_group != -1 && parse->thread != -1)
2202     error (_("Cannot specify --thread together with --thread-group"));
2203
2204   if (parse->frame != -1 && parse->thread == -1)
2205     error (_("Cannot specify --frame without --thread"));
2206
2207   if (parse->thread_group != -1)
2208     {
2209       struct inferior *inf = find_inferior_id (parse->thread_group);
2210       struct thread_info *tp = 0;
2211
2212       if (!inf)
2213         error (_("Invalid thread group for the --thread-group option"));
2214
2215       set_current_inferior (inf);
2216       /* This behaviour means that if --thread-group option identifies
2217          an inferior with multiple threads, then a random one will be
2218          picked.  This is not a problem -- frontend should always
2219          provide --thread if it wishes to operate on a specific
2220          thread.  */
2221       if (inf->pid != 0)
2222         tp = any_live_thread_of_process (inf->pid);
2223       switch_to_thread (tp ? tp->ptid : null_ptid);
2224       set_current_program_space (inf->pspace);
2225     }
2226
2227   if (parse->thread != -1)
2228     {
2229       struct thread_info *tp = find_thread_global_id (parse->thread);
2230
2231       if (!tp)
2232         error (_("Invalid thread id: %d"), parse->thread);
2233
2234       if (is_exited (tp->ptid))
2235         error (_("Thread id: %d has terminated"), parse->thread);
2236
2237       switch_to_thread (tp->ptid);
2238     }
2239
2240   if (parse->frame != -1)
2241     {
2242       struct frame_info *fid;
2243       int frame = parse->frame;
2244
2245       fid = find_relative_frame (get_current_frame (), &frame);
2246       if (frame == 0)
2247         /* find_relative_frame was successful */
2248         select_frame (fid);
2249       else
2250         error (_("Invalid frame id: %d"), frame);
2251     }
2252
2253   if (parse->language != language_unknown)
2254     {
2255       make_cleanup_restore_current_language ();
2256       set_language (parse->language);
2257     }
2258
2259   current_context = parse;
2260
2261   if (parse->cmd->suppress_notification != NULL)
2262     {
2263       make_cleanup_restore_integer (parse->cmd->suppress_notification);
2264       *parse->cmd->suppress_notification = 1;
2265     }
2266
2267   if (parse->cmd->argv_func != NULL)
2268     {
2269       parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
2270     }
2271   else if (parse->cmd->cli.cmd != 0)
2272     {
2273       /* FIXME: DELETE THIS. */
2274       /* The operation is still implemented by a cli command.  */
2275       /* Must be a synchronous one.  */
2276       mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
2277                               parse->args);
2278     }
2279   else
2280     {
2281       /* FIXME: DELETE THIS.  */
2282       struct ui_file *stb;
2283
2284       stb = mem_fileopen ();
2285
2286       fputs_unfiltered ("Undefined mi command: ", stb);
2287       fputstr_unfiltered (parse->command, '"', stb);
2288       fputs_unfiltered (" (missing implementation)", stb);
2289
2290       make_cleanup_ui_file_delete (stb);
2291       error_stream (stb);
2292     }
2293   do_cleanups (cleanup);
2294 }
2295
2296 /* FIXME: This is just a hack so we can get some extra commands going.
2297    We don't want to channel things through the CLI, but call libgdb directly.
2298    Use only for synchronous commands.  */
2299
2300 void
2301 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
2302 {
2303   if (cmd != 0)
2304     {
2305       struct cleanup *old_cleanups;
2306       char *run;
2307
2308       if (args_p)
2309         run = xstrprintf ("%s %s", cmd, args);
2310       else
2311         run = xstrdup (cmd);
2312       if (mi_debug_p)
2313         /* FIXME: gdb_???? */
2314         fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
2315                             cmd, run);
2316       old_cleanups = make_cleanup (xfree, run);
2317       execute_command (run, 0 /* from_tty */ );
2318       do_cleanups (old_cleanups);
2319       return;
2320     }
2321 }
2322
2323 void
2324 mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
2325 {
2326   struct cleanup *old_cleanups;
2327   char *run;
2328
2329   if (mi_async_p ())
2330     run = xstrprintf ("%s %s&", cli_command, argc ? *argv : "");
2331   else
2332     run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
2333   old_cleanups = make_cleanup (xfree, run);
2334
2335   execute_command (run, 0 /* from_tty */ );
2336
2337   /* Do this before doing any printing.  It would appear that some
2338      print code leaves garbage around in the buffer.  */
2339   do_cleanups (old_cleanups);
2340 }
2341
2342 void
2343 mi_load_progress (const char *section_name,
2344                   unsigned long sent_so_far,
2345                   unsigned long total_section,
2346                   unsigned long total_sent,
2347                   unsigned long grand_total)
2348 {
2349   struct timeval time_now, delta, update_threshold;
2350   static struct timeval last_update;
2351   static char *previous_sect_name = NULL;
2352   int new_section;
2353   struct ui_out *saved_uiout;
2354   struct ui_out *uiout;
2355
2356   /* This function is called through deprecated_show_load_progress
2357      which means uiout may not be correct.  Fix it for the duration
2358      of this function.  */
2359   saved_uiout = current_uiout;
2360
2361   if (current_interp_named_p (INTERP_MI)
2362       || current_interp_named_p (INTERP_MI2))
2363     current_uiout = mi_out_new (2);
2364   else if (current_interp_named_p (INTERP_MI1))
2365     current_uiout = mi_out_new (1);
2366   else if (current_interp_named_p (INTERP_MI3))
2367     current_uiout = mi_out_new (3);
2368   else
2369     return;
2370
2371   uiout = current_uiout;
2372
2373   update_threshold.tv_sec = 0;
2374   update_threshold.tv_usec = 500000;
2375   gettimeofday (&time_now, NULL);
2376
2377   delta.tv_usec = time_now.tv_usec - last_update.tv_usec;
2378   delta.tv_sec = time_now.tv_sec - last_update.tv_sec;
2379
2380   if (delta.tv_usec < 0)
2381     {
2382       delta.tv_sec -= 1;
2383       delta.tv_usec += 1000000L;
2384     }
2385
2386   new_section = (previous_sect_name ?
2387                  strcmp (previous_sect_name, section_name) : 1);
2388   if (new_section)
2389     {
2390       struct cleanup *cleanup_tuple;
2391
2392       xfree (previous_sect_name);
2393       previous_sect_name = xstrdup (section_name);
2394
2395       if (current_token)
2396         fputs_unfiltered (current_token, raw_stdout);
2397       fputs_unfiltered ("+download", raw_stdout);
2398       cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2399       ui_out_field_string (uiout, "section", section_name);
2400       ui_out_field_int (uiout, "section-size", total_section);
2401       ui_out_field_int (uiout, "total-size", grand_total);
2402       do_cleanups (cleanup_tuple);
2403       mi_out_put (uiout, raw_stdout);
2404       fputs_unfiltered ("\n", raw_stdout);
2405       gdb_flush (raw_stdout);
2406     }
2407
2408   if (delta.tv_sec >= update_threshold.tv_sec &&
2409       delta.tv_usec >= update_threshold.tv_usec)
2410     {
2411       struct cleanup *cleanup_tuple;
2412
2413       last_update.tv_sec = time_now.tv_sec;
2414       last_update.tv_usec = time_now.tv_usec;
2415       if (current_token)
2416         fputs_unfiltered (current_token, raw_stdout);
2417       fputs_unfiltered ("+download", raw_stdout);
2418       cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2419       ui_out_field_string (uiout, "section", section_name);
2420       ui_out_field_int (uiout, "section-sent", sent_so_far);
2421       ui_out_field_int (uiout, "section-size", total_section);
2422       ui_out_field_int (uiout, "total-sent", total_sent);
2423       ui_out_field_int (uiout, "total-size", grand_total);
2424       do_cleanups (cleanup_tuple);
2425       mi_out_put (uiout, raw_stdout);
2426       fputs_unfiltered ("\n", raw_stdout);
2427       gdb_flush (raw_stdout);
2428     }
2429
2430   xfree (uiout);
2431   current_uiout = saved_uiout;
2432 }
2433
2434 static void
2435 timestamp (struct mi_timestamp *tv)
2436 {
2437   gettimeofday (&tv->wallclock, NULL);
2438 #ifdef HAVE_GETRUSAGE
2439   getrusage (RUSAGE_SELF, &rusage);
2440   tv->utime.tv_sec = rusage.ru_utime.tv_sec;
2441   tv->utime.tv_usec = rusage.ru_utime.tv_usec;
2442   tv->stime.tv_sec = rusage.ru_stime.tv_sec;
2443   tv->stime.tv_usec = rusage.ru_stime.tv_usec;
2444 #else
2445   {
2446     long usec = get_run_time ();
2447
2448     tv->utime.tv_sec = usec/1000000L;
2449     tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
2450     tv->stime.tv_sec = 0;
2451     tv->stime.tv_usec = 0;
2452   }
2453 #endif
2454 }
2455
2456 static void
2457 print_diff_now (struct mi_timestamp *start)
2458 {
2459   struct mi_timestamp now;
2460
2461   timestamp (&now);
2462   print_diff (start, &now);
2463 }
2464
2465 void
2466 mi_print_timing_maybe (void)
2467 {
2468   /* If the command is -enable-timing then do_timings may be true
2469      whilst current_command_ts is not initialized.  */
2470   if (do_timings && current_command_ts)
2471     print_diff_now (current_command_ts);
2472 }
2473
2474 static long
2475 timeval_diff (struct timeval start, struct timeval end)
2476 {
2477   return ((end.tv_sec - start.tv_sec) * 1000000L)
2478     + (end.tv_usec - start.tv_usec);
2479 }
2480
2481 static void
2482 print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
2483 {
2484   fprintf_unfiltered
2485     (raw_stdout,
2486      ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
2487      timeval_diff (start->wallclock, end->wallclock) / 1000000.0,
2488      timeval_diff (start->utime, end->utime) / 1000000.0,
2489      timeval_diff (start->stime, end->stime) / 1000000.0);
2490 }
2491
2492 void
2493 mi_cmd_trace_define_variable (char *command, char **argv, int argc)
2494 {
2495   struct expression *expr;
2496   LONGEST initval = 0;
2497   struct trace_state_variable *tsv;
2498   char *name = 0;
2499
2500   if (argc != 1 && argc != 2)
2501     error (_("Usage: -trace-define-variable VARIABLE [VALUE]"));
2502
2503   name = argv[0];
2504   if (*name++ != '$')
2505     error (_("Name of trace variable should start with '$'"));
2506
2507   validate_trace_state_variable_name (name);
2508
2509   tsv = find_trace_state_variable (name);
2510   if (!tsv)
2511     tsv = create_trace_state_variable (name);
2512
2513   if (argc == 2)
2514     initval = value_as_long (parse_and_eval (argv[1]));
2515
2516   tsv->initial_value = initval;
2517 }
2518
2519 void
2520 mi_cmd_trace_list_variables (char *command, char **argv, int argc)
2521 {
2522   if (argc != 0)
2523     error (_("-trace-list-variables: no arguments allowed"));
2524
2525   tvariables_info_1 ();
2526 }
2527
2528 void
2529 mi_cmd_trace_find (char *command, char **argv, int argc)
2530 {
2531   char *mode;
2532
2533   if (argc == 0)
2534     error (_("trace selection mode is required"));
2535
2536   mode = argv[0];
2537
2538   if (strcmp (mode, "none") == 0)
2539     {
2540       tfind_1 (tfind_number, -1, 0, 0, 0);
2541       return;
2542     }
2543
2544   check_trace_running (current_trace_status ());
2545
2546   if (strcmp (mode, "frame-number") == 0)
2547     {
2548       if (argc != 2)
2549         error (_("frame number is required"));
2550       tfind_1 (tfind_number, atoi (argv[1]), 0, 0, 0);
2551     }
2552   else if (strcmp (mode, "tracepoint-number") == 0)
2553     {
2554       if (argc != 2)
2555         error (_("tracepoint number is required"));
2556       tfind_1 (tfind_tp, atoi (argv[1]), 0, 0, 0);
2557     }
2558   else if (strcmp (mode, "pc") == 0)
2559     {
2560       if (argc != 2)
2561         error (_("PC is required"));
2562       tfind_1 (tfind_pc, 0, parse_and_eval_address (argv[1]), 0, 0);
2563     }
2564   else if (strcmp (mode, "pc-inside-range") == 0)
2565     {
2566       if (argc != 3)
2567         error (_("Start and end PC are required"));
2568       tfind_1 (tfind_range, 0, parse_and_eval_address (argv[1]),
2569                parse_and_eval_address (argv[2]), 0);
2570     }
2571   else if (strcmp (mode, "pc-outside-range") == 0)
2572     {
2573       if (argc != 3)
2574         error (_("Start and end PC are required"));
2575       tfind_1 (tfind_outside, 0, parse_and_eval_address (argv[1]),
2576                parse_and_eval_address (argv[2]), 0);
2577     }
2578   else if (strcmp (mode, "line") == 0)
2579     {
2580       struct symtabs_and_lines sals;
2581       struct symtab_and_line sal;
2582       static CORE_ADDR start_pc, end_pc;
2583       struct cleanup *back_to;
2584
2585       if (argc != 2)
2586         error (_("Line is required"));
2587
2588       sals = decode_line_with_current_source (argv[1],
2589                                               DECODE_LINE_FUNFIRSTLINE);
2590       back_to = make_cleanup (xfree, sals.sals);
2591
2592       sal = sals.sals[0];
2593
2594       if (sal.symtab == 0)
2595         error (_("Could not find the specified line"));
2596
2597       if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc))
2598         tfind_1 (tfind_range, 0, start_pc, end_pc - 1, 0);
2599       else
2600         error (_("Could not find the specified line"));
2601
2602       do_cleanups (back_to);
2603     }
2604   else
2605     error (_("Invalid mode '%s'"), mode);
2606
2607   if (has_stack_frames () || get_traceframe_number () >= 0)
2608     print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1);
2609 }
2610
2611 void
2612 mi_cmd_trace_save (char *command, char **argv, int argc)
2613 {
2614   int target_saves = 0;
2615   int generate_ctf = 0;
2616   char *filename;
2617   int oind = 0;
2618   char *oarg;
2619
2620   enum opt
2621   {
2622     TARGET_SAVE_OPT, CTF_OPT
2623   };
2624   static const struct mi_opt opts[] =
2625     {
2626       {"r", TARGET_SAVE_OPT, 0},
2627       {"ctf", CTF_OPT, 0},
2628       { 0, 0, 0 }
2629     };
2630
2631   while (1)
2632     {
2633       int opt = mi_getopt ("-trace-save", argc, argv, opts,
2634                            &oind, &oarg);
2635
2636       if (opt < 0)
2637         break;
2638       switch ((enum opt) opt)
2639         {
2640         case TARGET_SAVE_OPT:
2641           target_saves = 1;
2642           break;
2643         case CTF_OPT:
2644           generate_ctf = 1;
2645           break;
2646         }
2647     }
2648   filename = argv[oind];
2649
2650   if (generate_ctf)
2651     trace_save_ctf (filename, target_saves);
2652   else
2653     trace_save_tfile (filename, target_saves);
2654 }
2655
2656 void
2657 mi_cmd_trace_start (char *command, char **argv, int argc)
2658 {
2659   start_tracing (NULL);
2660 }
2661
2662 void
2663 mi_cmd_trace_status (char *command, char **argv, int argc)
2664 {
2665   trace_status_mi (0);
2666 }
2667
2668 void
2669 mi_cmd_trace_stop (char *command, char **argv, int argc)
2670 {
2671   stop_tracing (NULL);
2672   trace_status_mi (1);
2673 }
2674
2675 /* Implement the "-ada-task-info" command.  */
2676
2677 void
2678 mi_cmd_ada_task_info (char *command, char **argv, int argc)
2679 {
2680   if (argc != 0 && argc != 1)
2681     error (_("Invalid MI command"));
2682
2683   print_ada_task_info (current_uiout, argv[0], current_inferior ());
2684 }
2685
2686 /* Print EXPRESSION according to VALUES.  */
2687
2688 static void
2689 print_variable_or_computed (char *expression, enum print_values values)
2690 {
2691   struct expression *expr;
2692   struct cleanup *old_chain;
2693   struct value *val;
2694   struct ui_file *stb;
2695   struct value_print_options opts;
2696   struct type *type;
2697   struct ui_out *uiout = current_uiout;
2698
2699   stb = mem_fileopen ();
2700   old_chain = make_cleanup_ui_file_delete (stb);
2701
2702   expr = parse_expression (expression);
2703
2704   make_cleanup (free_current_contents, &expr);
2705
2706   if (values == PRINT_SIMPLE_VALUES)
2707     val = evaluate_type (expr);
2708   else
2709     val = evaluate_expression (expr);
2710
2711   if (values != PRINT_NO_VALUES)
2712     make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2713   ui_out_field_string (uiout, "name", expression);
2714
2715   switch (values)
2716     {
2717     case PRINT_SIMPLE_VALUES:
2718       type = check_typedef (value_type (val));
2719       type_print (value_type (val), "", stb, -1);
2720       ui_out_field_stream (uiout, "type", stb);
2721       if (TYPE_CODE (type) != TYPE_CODE_ARRAY
2722           && TYPE_CODE (type) != TYPE_CODE_STRUCT
2723           && TYPE_CODE (type) != TYPE_CODE_UNION)
2724         {
2725           struct value_print_options opts;
2726
2727           get_no_prettyformat_print_options (&opts);
2728           opts.deref_ref = 1;
2729           common_val_print (val, stb, 0, &opts, current_language);
2730           ui_out_field_stream (uiout, "value", stb);
2731         }
2732       break;
2733     case PRINT_ALL_VALUES:
2734       {
2735         struct value_print_options opts;
2736
2737         get_no_prettyformat_print_options (&opts);
2738         opts.deref_ref = 1;
2739         common_val_print (val, stb, 0, &opts, current_language);
2740         ui_out_field_stream (uiout, "value", stb);
2741       }
2742       break;
2743     }
2744
2745   do_cleanups (old_chain);
2746 }
2747
2748 /* Implement the "-trace-frame-collected" command.  */
2749
2750 void
2751 mi_cmd_trace_frame_collected (char *command, char **argv, int argc)
2752 {
2753   struct cleanup *old_chain;
2754   struct bp_location *tloc;
2755   int stepping_frame;
2756   struct collection_list *clist;
2757   struct collection_list tracepoint_list, stepping_list;
2758   struct traceframe_info *tinfo;
2759   int oind = 0;
2760   enum print_values var_print_values = PRINT_ALL_VALUES;
2761   enum print_values comp_print_values = PRINT_ALL_VALUES;
2762   int registers_format = 'x';
2763   int memory_contents = 0;
2764   struct ui_out *uiout = current_uiout;
2765   enum opt
2766   {
2767     VAR_PRINT_VALUES,
2768     COMP_PRINT_VALUES,
2769     REGISTERS_FORMAT,
2770     MEMORY_CONTENTS,
2771   };
2772   static const struct mi_opt opts[] =
2773     {
2774       {"-var-print-values", VAR_PRINT_VALUES, 1},
2775       {"-comp-print-values", COMP_PRINT_VALUES, 1},
2776       {"-registers-format", REGISTERS_FORMAT, 1},
2777       {"-memory-contents", MEMORY_CONTENTS, 0},
2778       { 0, 0, 0 }
2779     };
2780
2781   while (1)
2782     {
2783       char *oarg;
2784       int opt = mi_getopt ("-trace-frame-collected", argc, argv, opts,
2785                            &oind, &oarg);
2786       if (opt < 0)
2787         break;
2788       switch ((enum opt) opt)
2789         {
2790         case VAR_PRINT_VALUES:
2791           var_print_values = mi_parse_print_values (oarg);
2792           break;
2793         case COMP_PRINT_VALUES:
2794           comp_print_values = mi_parse_print_values (oarg);
2795           break;
2796         case REGISTERS_FORMAT:
2797           registers_format = oarg[0];
2798         case MEMORY_CONTENTS:
2799           memory_contents = 1;
2800           break;
2801         }
2802     }
2803
2804   if (oind != argc)
2805     error (_("Usage: -trace-frame-collected "
2806              "[--var-print-values PRINT_VALUES] "
2807              "[--comp-print-values PRINT_VALUES] "
2808              "[--registers-format FORMAT]"
2809              "[--memory-contents]"));
2810
2811   /* This throws an error is not inspecting a trace frame.  */
2812   tloc = get_traceframe_location (&stepping_frame);
2813
2814   /* This command only makes sense for the current frame, not the
2815      selected frame.  */
2816   old_chain = make_cleanup_restore_current_thread ();
2817   select_frame (get_current_frame ());
2818
2819   encode_actions_and_make_cleanup (tloc, &tracepoint_list,
2820                                    &stepping_list);
2821
2822   if (stepping_frame)
2823     clist = &stepping_list;
2824   else
2825     clist = &tracepoint_list;
2826
2827   tinfo = get_traceframe_info ();
2828
2829   /* Explicitly wholly collected variables.  */
2830   {
2831     struct cleanup *list_cleanup;
2832     char *p;
2833     int i;
2834
2835     list_cleanup = make_cleanup_ui_out_list_begin_end (uiout,
2836                                                        "explicit-variables");
2837     for (i = 0; VEC_iterate (char_ptr, clist->wholly_collected, i, p); i++)
2838       print_variable_or_computed (p, var_print_values);
2839     do_cleanups (list_cleanup);
2840   }
2841
2842   /* Computed expressions.  */
2843   {
2844     struct cleanup *list_cleanup;
2845     char *p;
2846     int i;
2847
2848     list_cleanup
2849       = make_cleanup_ui_out_list_begin_end (uiout,
2850                                             "computed-expressions");
2851     for (i = 0; VEC_iterate (char_ptr, clist->computed, i, p); i++)
2852       print_variable_or_computed (p, comp_print_values);
2853     do_cleanups (list_cleanup);
2854   }
2855
2856   /* Registers.  Given pseudo-registers, and that some architectures
2857      (like MIPS) actually hide the raw registers, we don't go through
2858      the trace frame info, but instead consult the register cache for
2859      register availability.  */
2860   {
2861     struct cleanup *list_cleanup;
2862     struct frame_info *frame;
2863     struct gdbarch *gdbarch;
2864     int regnum;
2865     int numregs;
2866
2867     list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "registers");
2868
2869     frame = get_selected_frame (NULL);
2870     gdbarch = get_frame_arch (frame);
2871     numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
2872
2873     for (regnum = 0; regnum < numregs; regnum++)
2874       {
2875         if (gdbarch_register_name (gdbarch, regnum) == NULL
2876             || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
2877           continue;
2878
2879         output_register (frame, regnum, registers_format, 1);
2880       }
2881
2882     do_cleanups (list_cleanup);
2883   }
2884
2885   /* Trace state variables.  */
2886   {
2887     struct cleanup *list_cleanup;
2888     int tvar;
2889     char *tsvname;
2890     int i;
2891
2892     list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "tvars");
2893
2894     tsvname = NULL;
2895     make_cleanup (free_current_contents, &tsvname);
2896
2897     for (i = 0; VEC_iterate (int, tinfo->tvars, i, tvar); i++)
2898       {
2899         struct cleanup *cleanup_child;
2900         struct trace_state_variable *tsv;
2901
2902         tsv = find_trace_state_variable_by_number (tvar);
2903
2904         cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2905
2906         if (tsv != NULL)
2907           {
2908             tsvname = (char *) xrealloc (tsvname, strlen (tsv->name) + 2);
2909             tsvname[0] = '$';
2910             strcpy (tsvname + 1, tsv->name);
2911             ui_out_field_string (uiout, "name", tsvname);
2912
2913             tsv->value_known = target_get_trace_state_variable_value (tsv->number,
2914                                                                       &tsv->value);
2915             ui_out_field_int (uiout, "current", tsv->value);
2916           }
2917         else
2918           {
2919             ui_out_field_skip (uiout, "name");
2920             ui_out_field_skip (uiout, "current");
2921           }
2922
2923         do_cleanups (cleanup_child);
2924       }
2925
2926     do_cleanups (list_cleanup);
2927   }
2928
2929   /* Memory.  */
2930   {
2931     struct cleanup *list_cleanup;
2932     VEC(mem_range_s) *available_memory = NULL;
2933     struct mem_range *r;
2934     int i;
2935
2936     traceframe_available_memory (&available_memory, 0, ULONGEST_MAX);
2937     make_cleanup (VEC_cleanup(mem_range_s), &available_memory);
2938
2939     list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "memory");
2940
2941     for (i = 0; VEC_iterate (mem_range_s, available_memory, i, r); i++)
2942       {
2943         struct cleanup *cleanup_child;
2944         gdb_byte *data;
2945         struct gdbarch *gdbarch = target_gdbarch ();
2946
2947         cleanup_child = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2948
2949         ui_out_field_core_addr (uiout, "address", gdbarch, r->start);
2950         ui_out_field_int (uiout, "length", r->length);
2951
2952         data = (gdb_byte *) xmalloc (r->length);
2953         make_cleanup (xfree, data);
2954
2955         if (memory_contents)
2956           {
2957             if (target_read_memory (r->start, data, r->length) == 0)
2958               {
2959                 int m;
2960                 char *data_str, *p;
2961
2962                 data_str = (char *) xmalloc (r->length * 2 + 1);
2963                 make_cleanup (xfree, data_str);
2964
2965                 for (m = 0, p = data_str; m < r->length; ++m, p += 2)
2966                   sprintf (p, "%02x", data[m]);
2967                 ui_out_field_string (uiout, "contents", data_str);
2968               }
2969             else
2970               ui_out_field_skip (uiout, "contents");
2971           }
2972         do_cleanups (cleanup_child);
2973       }
2974
2975     do_cleanups (list_cleanup);
2976   }
2977
2978   do_cleanups (old_chain);
2979 }
2980
2981 void
2982 _initialize_mi_main (void)
2983 {
2984   struct cmd_list_element *c;
2985
2986   add_setshow_boolean_cmd ("mi-async", class_run,
2987                            &mi_async_1, _("\
2988 Set whether MI asynchronous mode is enabled."), _("\
2989 Show whether MI asynchronous mode is enabled."), _("\
2990 Tells GDB whether MI should be in asynchronous mode."),
2991                            set_mi_async_command,
2992                            show_mi_async_command,
2993                            &setlist,
2994                            &showlist);
2995
2996   /* Alias old "target-async" to "mi-async".  */
2997   c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &setlist);
2998   deprecate_cmd (c, "set mi-async");
2999   c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &showlist);
3000   deprecate_cmd (c, "show mi-async");
3001 }