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