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