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