2010-02-18 Harald Koenig <H.Koenig@science-computing.de>
[external/binutils.git] / gdb / mi / mi-main.c
1 /* MI Command Set.
2
3    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5
6    Contributed by Cygnus Solutions (a Red Hat company).
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 /* Work in progress.  */
24
25 #include "defs.h"
26 #include "arch-utils.h"
27 #include "target.h"
28 #include "inferior.h"
29 #include "gdb_string.h"
30 #include "exceptions.h"
31 #include "top.h"
32 #include "gdbthread.h"
33 #include "mi-cmds.h"
34 #include "mi-parse.h"
35 #include "mi-getopt.h"
36 #include "mi-console.h"
37 #include "ui-out.h"
38 #include "mi-out.h"
39 #include "interps.h"
40 #include "event-loop.h"
41 #include "event-top.h"
42 #include "gdbcore.h"            /* For write_memory().  */
43 #include "value.h"
44 #include "regcache.h"
45 #include "gdb.h"
46 #include "frame.h"
47 #include "mi-main.h"
48 #include "mi-common.h"
49 #include "language.h"
50 #include "valprint.h"
51 #include "inferior.h"
52 #include "osdata.h"
53 #include "splay-tree.h"
54
55 #include <ctype.h>
56 #include <sys/time.h>
57
58 #if defined HAVE_SYS_RESOURCE_H
59 #include <sys/resource.h>
60 #endif
61
62 #ifdef HAVE_GETRUSAGE
63 struct rusage rusage;
64 #endif
65
66 enum
67   {
68     FROM_TTY = 0
69   };
70
71 int mi_debug_p;
72 struct ui_file *raw_stdout;
73
74 /* This is used to pass the current command timestamp
75    down to continuation routines.  */
76 static struct mi_timestamp *current_command_ts;
77
78 static int do_timings = 0;
79
80 char *current_token;
81 int running_result_record_printed = 1;
82
83 /* Flag indicating that the target has proceeded since the last
84    command was issued.  */
85 int mi_proceeded;
86
87 extern void _initialize_mi_main (void);
88 static void mi_cmd_execute (struct mi_parse *parse);
89
90 static void mi_execute_cli_command (const char *cmd, int args_p,
91                                     const char *args);
92 static void mi_execute_async_cli_command (char *cli_command, 
93                                                         char **argv, int argc);
94 static int register_changed_p (int regnum, struct regcache *,
95                                struct regcache *);
96 static void get_register (struct frame_info *, int regnum, int format);
97
98 /* Command implementations.  FIXME: Is this libgdb?  No.  This is the MI
99    layer that calls libgdb.  Any operation used in the below should be
100    formalized.  */
101
102 static void timestamp (struct mi_timestamp *tv);
103
104 static void print_diff_now (struct mi_timestamp *start);
105 static void print_diff (struct mi_timestamp *start, struct mi_timestamp *end);
106
107 void
108 mi_cmd_gdb_exit (char *command, char **argv, int argc)
109 {
110   /* We have to print everything right here because we never return.  */
111   if (current_token)
112     fputs_unfiltered (current_token, raw_stdout);
113   fputs_unfiltered ("^exit\n", raw_stdout);
114   mi_out_put (uiout, raw_stdout);
115   gdb_flush (raw_stdout);
116   /* FIXME: The function called is not yet a formal libgdb function.  */
117   quit_force (NULL, FROM_TTY);
118 }
119
120 void
121 mi_cmd_exec_next (char *command, char **argv, int argc)
122 {
123   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
124   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
125     mi_execute_async_cli_command ("reverse-next", argv + 1, argc - 1);
126   else
127     mi_execute_async_cli_command ("next", argv, argc);
128 }
129
130 void
131 mi_cmd_exec_next_instruction (char *command, char **argv, int argc)
132 {
133   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
134   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
135     mi_execute_async_cli_command ("reverse-nexti", argv + 1, argc - 1);
136   else
137     mi_execute_async_cli_command ("nexti", argv, argc);
138 }
139
140 void
141 mi_cmd_exec_step (char *command, char **argv, int argc)
142 {
143   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
144   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
145     mi_execute_async_cli_command ("reverse-step", argv + 1, argc - 1);
146   else
147     mi_execute_async_cli_command ("step", argv, argc);
148 }
149
150 void
151 mi_cmd_exec_step_instruction (char *command, char **argv, int argc)
152 {
153   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
154   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
155     mi_execute_async_cli_command ("reverse-stepi", argv + 1, argc - 1);
156   else
157     mi_execute_async_cli_command ("stepi", argv, argc);
158 }
159
160 void
161 mi_cmd_exec_finish (char *command, char **argv, int argc)
162 {
163   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
164   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
165     mi_execute_async_cli_command ("reverse-finish", argv + 1, argc - 1);
166   else
167     mi_execute_async_cli_command ("finish", argv, argc);
168 }
169
170 void
171 mi_cmd_exec_return (char *command, char **argv, int argc)
172 {
173   /* This command doesn't really execute the target, it just pops the
174      specified number of frames. */
175   if (argc)
176     /* Call return_command with from_tty argument equal to 0 so as to
177        avoid being queried.  */
178     return_command (*argv, 0);
179   else
180     /* Call return_command with from_tty argument equal to 0 so as to
181        avoid being queried.  */
182     return_command (NULL, 0);
183
184   /* Because we have called return_command with from_tty = 0, we need
185      to print the frame here.  */
186   print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS);
187 }
188
189 void
190 mi_cmd_exec_jump (char *args, char **argv, int argc)
191 {
192   /* FIXME: Should call a libgdb function, not a cli wrapper.  */
193   mi_execute_async_cli_command ("jump", argv, argc);
194 }
195  
196 static int
197 proceed_thread_callback (struct thread_info *thread, void *arg)
198 {
199   int pid = *(int *)arg;
200
201   if (!is_stopped (thread->ptid))
202     return 0;
203
204   if (PIDGET (thread->ptid) != pid)
205     return 0;
206
207   switch_to_thread (thread->ptid);
208   clear_proceed_status ();
209   proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
210   return 0;
211 }
212
213 static void
214 exec_continue (char **argv, int argc)
215 {
216   if (argc == 0)
217     continue_1 (0);
218   else if (argc == 1 && strcmp (argv[0], "--all") == 0)
219     continue_1 (1);
220   else if (argc == 2 && strcmp (argv[0], "--thread-group") == 0)
221     {
222       struct cleanup *old_chain;
223       int pid;
224       if (argv[1] == NULL || argv[1] == '\0')
225         error ("Thread group id not specified");
226       pid = atoi (argv[1]);
227       if (!in_inferior_list (pid))
228         error ("Invalid thread group id '%s'", argv[1]);
229
230       old_chain = make_cleanup_restore_current_thread ();
231       iterate_over_threads (proceed_thread_callback, &pid);
232       do_cleanups (old_chain);            
233     }
234   else
235     error ("Usage: -exec-continue [--reverse] [--all|--thread-group id]");
236 }
237
238 /* continue in reverse direction:
239    XXX: code duplicated from reverse.c */
240
241 static void
242 exec_direction_default (void *notused)
243 {
244   /* Return execution direction to default state.  */
245   execution_direction = EXEC_FORWARD;
246 }
247
248 static void
249 exec_reverse_continue (char **argv, int argc)
250 {
251   enum exec_direction_kind dir = execution_direction;
252   struct cleanup *old_chain;
253
254   if (dir == EXEC_ERROR)
255     error (_("Target %s does not support this command."), target_shortname);
256
257   if (dir == EXEC_REVERSE)
258     error (_("Already in reverse mode."));
259
260   if (!target_can_execute_reverse)
261     error (_("Target %s does not support this command."), target_shortname);
262
263   old_chain = make_cleanup (exec_direction_default, NULL);
264   execution_direction = EXEC_REVERSE;
265   exec_continue (argv, argc);
266   do_cleanups (old_chain);
267 }
268
269 void
270 mi_cmd_exec_continue (char *command, char **argv, int argc)
271 {
272   if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
273     exec_reverse_continue (argv + 1, argc - 1);
274   else
275     exec_continue (argv, argc);
276 }
277
278 static int
279 interrupt_thread_callback (struct thread_info *thread, void *arg)
280 {
281   int pid = *(int *)arg;
282
283   if (!is_running (thread->ptid))
284     return 0;
285
286   if (PIDGET (thread->ptid) != pid)
287     return 0;
288
289   target_stop (thread->ptid);
290   return 0;
291 }
292
293 /* Interrupt the execution of the target.  Note how we must play around
294    with the token variables, in order to display the current token in
295    the result of the interrupt command, and the previous execution
296    token when the target finally stops.  See comments in
297    mi_cmd_execute.  */
298 void
299 mi_cmd_exec_interrupt (char *command, char **argv, int argc)
300 {
301   if (argc == 0)
302     {
303       if (!is_running (inferior_ptid))
304         error ("Current thread is not running.");
305
306       interrupt_target_1 (0);
307     }
308   else if (argc == 1 && strcmp (argv[0], "--all") == 0)
309     {
310       if (!any_running ())
311         error ("Inferior not running.");
312       
313       interrupt_target_1 (1);
314     }
315   else if (argc == 2 && strcmp (argv[0], "--thread-group") == 0)
316     {
317       struct cleanup *old_chain;
318       int pid;
319       if (argv[1] == NULL || argv[1] == '\0')
320         error ("Thread group id not specified");
321       pid = atoi (argv[1]);
322       if (!in_inferior_list (pid))
323         error ("Invalid thread group id '%s'", argv[1]);
324
325       old_chain = make_cleanup_restore_current_thread ();
326       iterate_over_threads (interrupt_thread_callback, &pid);
327       do_cleanups (old_chain);
328     }
329   else
330     error ("Usage: -exec-interrupt [--all|--thread-group id]");
331 }
332
333 static int
334 find_thread_of_process (struct thread_info *ti, void *p)
335 {
336   int pid = *(int *)p;
337   if (PIDGET (ti->ptid) == pid && !is_exited (ti->ptid))
338     return 1;
339
340   return 0;
341 }
342
343 void
344 mi_cmd_target_detach (char *command, char **argv, int argc)
345 {
346   if (argc != 0 && argc != 1)
347     error ("Usage: -target-detach [thread-group]");
348
349   if (argc == 1)
350     {
351       struct thread_info *tp;
352       char *end = argv[0];
353       int pid = strtol (argv[0], &end, 10);
354       if (*end != '\0')
355         error (_("Cannot parse thread group id '%s'"), argv[0]);
356
357       /* Pick any thread in the desired process.  Current
358          target_detach deteches from the parent of inferior_ptid.  */
359       tp = iterate_over_threads (find_thread_of_process, &pid);
360       if (!tp)
361         error (_("Thread group is empty"));
362
363       switch_to_thread (tp->ptid);
364     }
365
366   detach_command (NULL, 0);
367 }
368
369 void
370 mi_cmd_thread_select (char *command, char **argv, int argc)
371 {
372   enum gdb_rc rc;
373   char *mi_error_message;
374
375   if (argc != 1)
376     error ("mi_cmd_thread_select: USAGE: threadnum.");
377
378   rc = gdb_thread_select (uiout, argv[0], &mi_error_message);
379
380   if (rc == GDB_RC_FAIL)
381     {
382       make_cleanup (xfree, mi_error_message);
383       error ("%s", mi_error_message);
384     }
385 }
386
387 void
388 mi_cmd_thread_list_ids (char *command, char **argv, int argc)
389 {
390   enum gdb_rc rc;
391   char *mi_error_message;
392
393   if (argc != 0)
394     error ("mi_cmd_thread_list_ids: No arguments required.");
395
396   rc = gdb_list_thread_ids (uiout, &mi_error_message);
397
398   if (rc == GDB_RC_FAIL)
399     {
400       make_cleanup (xfree, mi_error_message);
401       error ("%s", mi_error_message);
402     }
403 }
404
405 void
406 mi_cmd_thread_info (char *command, char **argv, int argc)
407 {
408   int thread = -1;
409   
410   if (argc != 0 && argc != 1)
411     error ("Invalid MI command");
412
413   if (argc == 1)
414     thread = atoi (argv[0]);
415
416   print_thread_info (uiout, thread, -1);
417 }
418
419 struct collect_cores_data
420 {
421   int pid;
422
423   VEC (int) *cores;
424 };
425
426 static int
427 collect_cores (struct thread_info *ti, void *xdata)
428 {
429   struct collect_cores_data *data = xdata;
430
431   if (ptid_get_pid (ti->ptid) == data->pid)
432     {
433       int core = target_core_of_thread (ti->ptid);
434       if (core != -1)
435         VEC_safe_push (int, data->cores, core);
436     }
437
438   return 0;
439 }
440
441 static int *
442 unique (int *b, int *e)
443 {
444   int *d = b;
445   while (++b != e)
446     if (*d != *b)
447       *++d = *b;
448   return ++d;
449 }
450
451 struct print_one_inferior_data
452 {
453   int recurse;
454   VEC (int) *inferiors;
455 };
456
457 static int
458 print_one_inferior (struct inferior *inferior, void *xdata)
459 {
460   struct print_one_inferior_data *top_data = xdata;
461
462   if (VEC_empty (int, top_data->inferiors)
463       || bsearch (&(inferior->pid), VEC_address (int, top_data->inferiors),
464                   VEC_length (int, top_data->inferiors), sizeof (int),
465                   compare_positive_ints))
466     {
467       struct collect_cores_data data;
468       struct cleanup *back_to
469         = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
470
471       ui_out_field_fmt (uiout, "id", "%d", inferior->pid);
472       ui_out_field_string (uiout, "type", "process");
473       ui_out_field_int (uiout, "pid", inferior->pid);
474
475       data.pid = inferior->pid;
476       data.cores = 0;
477       iterate_over_threads (collect_cores, &data);
478
479       if (!VEC_empty (int, data.cores))
480         {
481           int elt;
482           int i;
483           int *b, *e;
484           struct cleanup *back_to_2 =
485             make_cleanup_ui_out_list_begin_end (uiout, "cores");
486
487           qsort (VEC_address (int, data.cores),
488                  VEC_length (int, data.cores), sizeof (int),
489                  compare_positive_ints);
490
491           b = VEC_address (int, data.cores);
492           e = b + VEC_length (int, data.cores);
493           e = unique (b, e);
494
495           for (; b != e; ++b)
496             ui_out_field_int (uiout, NULL, *b);
497
498           do_cleanups (back_to_2);
499         }
500
501       if (top_data->recurse)
502         print_thread_info (uiout, -1, inferior->pid);
503
504       do_cleanups (back_to);
505     }
506
507   return 0;
508 }
509
510 /* Output a field named 'cores' with a list as the value.  The elements of
511    the list are obtained by splitting 'cores' on comma.  */
512
513 static void
514 output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
515 {
516   struct cleanup *back_to = make_cleanup_ui_out_list_begin_end (uiout,
517                                                                 field_name);
518   char *cores = xstrdup (xcores);
519   char *p = cores;
520
521   make_cleanup (xfree, cores);
522
523   for (p = strtok (p, ","); p;  p = strtok (NULL, ","))
524     ui_out_field_string (uiout, NULL, p);
525
526   do_cleanups (back_to);
527 }
528
529 static void
530 free_vector_of_ints (void *xvector)
531 {
532   VEC (int) **vector = xvector;
533   VEC_free (int, *vector);
534 }
535
536 static void
537 do_nothing (splay_tree_key k)
538 {
539 }
540
541 static void
542 free_vector_of_osdata_items (splay_tree_value xvalue)
543 {
544   VEC (osdata_item_s) *value = (VEC (osdata_item_s) *) xvalue;
545   /* We don't free the items itself, it will be done separately.  */
546   VEC_free (osdata_item_s, value);
547 }
548
549 static int
550 splay_tree_int_comparator (splay_tree_key xa, splay_tree_key xb)
551 {
552   int a = xa;
553   int b = xb;
554   return a - b;
555 }
556
557 static void
558 free_splay_tree (void *xt)
559 {
560   splay_tree t = xt;
561   splay_tree_delete (t);
562 }
563
564 static void
565 list_available_thread_groups (VEC (int) *ids, int recurse)
566 {
567   struct osdata *data;
568   struct osdata_item *item;
569   int ix_items;
570   /* This keeps a map from integer (pid) to VEC (struct osdata_item *)*
571      The vector contains information about all threads for the given pid.
572      This is assigned an initial value to avoid "may be used uninitialized"
573      warning from gcc.  */
574   splay_tree tree = NULL;
575
576   /* get_osdata will throw if it cannot return data.  */
577   data = get_osdata ("processes");
578   make_cleanup_osdata_free (data);
579
580   if (recurse)
581     {
582       struct osdata *threads = get_osdata ("threads");
583       make_cleanup_osdata_free (threads);
584
585       tree = splay_tree_new (splay_tree_int_comparator,
586                              do_nothing,
587                              free_vector_of_osdata_items);
588       make_cleanup (free_splay_tree, tree);
589
590       for (ix_items = 0;
591            VEC_iterate (osdata_item_s, threads->items,
592                         ix_items, item);
593            ix_items++)
594         {
595           const char *pid = get_osdata_column (item, "pid");
596           int pid_i = strtoul (pid, NULL, 0);
597           VEC (osdata_item_s) *vec = 0;
598
599           splay_tree_node n = splay_tree_lookup (tree, pid_i);
600           if (!n)
601             {
602               VEC_safe_push (osdata_item_s, vec, item);
603               splay_tree_insert (tree, pid_i, (splay_tree_value)vec);
604             }
605           else
606             {
607               vec = (VEC (osdata_item_s) *) n->value;
608               VEC_safe_push (osdata_item_s, vec, item);
609               n->value = (splay_tree_value) vec;
610             }
611         }
612     }
613
614   make_cleanup_ui_out_list_begin_end (uiout, "groups");
615
616   for (ix_items = 0;
617        VEC_iterate (osdata_item_s, data->items,
618                     ix_items, item);
619        ix_items++)
620     {
621       struct cleanup *back_to;
622
623       const char *pid = get_osdata_column (item, "pid");
624       const char *cmd = get_osdata_column (item, "command");
625       const char *user = get_osdata_column (item, "user");
626       const char *cores = get_osdata_column (item, "cores");
627
628       int pid_i = strtoul (pid, NULL, 0);
629
630       /* At present, the target will return all available processes
631          and if information about specific ones was required, we filter
632          undesired processes here.  */
633       if (ids && bsearch (&pid_i, VEC_address (int, ids),
634                           VEC_length (int, ids),
635                           sizeof (int), compare_positive_ints) == NULL)
636         continue;
637
638
639       back_to = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
640
641       ui_out_field_fmt (uiout, "id", "%s", pid);
642       ui_out_field_string (uiout, "type", "process");
643       if (cmd)
644         ui_out_field_string (uiout, "description", cmd);
645       if (user)
646         ui_out_field_string (uiout, "user", user);
647       if (cores)
648         output_cores (uiout, "cores", cores);
649
650       if (recurse)
651         {
652           splay_tree_node n = splay_tree_lookup (tree, pid_i);
653           if (n)
654             {
655               VEC (osdata_item_s) *children = (VEC (osdata_item_s) *) n->value;
656               struct osdata_item *child;
657               int ix_child;
658
659               make_cleanup_ui_out_list_begin_end (uiout, "threads");
660
661               for (ix_child = 0;
662                    VEC_iterate (osdata_item_s, children, ix_child, child);
663                    ++ix_child)
664                 {
665                   struct cleanup *back_to_2 =
666                     make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
667
668                   const char *tid = get_osdata_column (child, "tid");
669                   const char *tcore = get_osdata_column (child, "core");
670                   ui_out_field_string (uiout, "id", tid);
671                   if (tcore)
672                     ui_out_field_string (uiout, "core", tcore);
673
674                   do_cleanups (back_to_2);
675                 }
676             }
677         }
678
679       do_cleanups (back_to);
680     }
681 }
682
683 void
684 mi_cmd_list_thread_groups (char *command, char **argv, int argc)
685 {
686   struct cleanup *back_to;
687   int available = 0;
688   int recurse = 0;
689   VEC (int) *ids = 0;
690
691   enum opt
692     {
693       AVAILABLE_OPT, RECURSE_OPT
694     };
695   static struct mi_opt opts[] =
696   {
697     {"-available", AVAILABLE_OPT, 0},
698     {"-recurse", RECURSE_OPT, 1},
699     { 0, 0, 0 }
700   };
701
702   int optind = 0;
703   char *optarg;
704
705   while (1)
706     {
707       int opt = mi_getopt ("-list-thread-groups", argc, argv, opts,
708                            &optind, &optarg);
709       if (opt < 0)
710         break;
711       switch ((enum opt) opt)
712         {
713         case AVAILABLE_OPT:
714           available = 1;
715           break;
716         case RECURSE_OPT:
717           if (strcmp (optarg, "0") == 0)
718             ;
719           else if (strcmp (optarg, "1") == 0)
720             recurse = 1;
721           else
722             error ("only '0' and '1' are valid values for the '--recurse' option");
723           break;
724         }
725     }
726
727   for (; optind < argc; ++optind)
728     {
729       char *end;
730       int inf = strtoul (argv[optind], &end, 0);
731       if (*end != '\0')
732         error ("invalid group id '%s'", argv[optind]);
733       VEC_safe_push (int, ids, inf);
734     }
735   if (VEC_length (int, ids) > 1)
736     qsort (VEC_address (int, ids),
737            VEC_length (int, ids),
738            sizeof (int), compare_positive_ints);
739
740   back_to = make_cleanup (free_vector_of_ints, &ids);
741
742   if (available)
743     {
744       list_available_thread_groups (ids, recurse);
745     }
746   else if (VEC_length (int, ids) == 1)
747     {
748       /* Local thread groups, single id. */
749       int pid = *VEC_address (int, ids);
750       if (!in_inferior_list (pid))
751         error ("Invalid thread group id '%d'", pid);
752       print_thread_info (uiout, -1, pid);
753     }
754   else
755     {
756       struct print_one_inferior_data data;
757       data.recurse = recurse;
758       data.inferiors = ids;
759
760       /* Local thread groups.  Either no explicit ids -- and we
761          print everything, or several explicit ids.  In both cases,
762          we print more than one group, and have to use 'groups'
763          as the top-level element.  */
764       make_cleanup_ui_out_list_begin_end (uiout, "groups");
765       update_thread_list ();
766       iterate_over_inferiors (print_one_inferior, &data);
767     }
768
769   do_cleanups (back_to);
770 }
771
772 void
773 mi_cmd_data_list_register_names (char *command, char **argv, int argc)
774 {
775   struct frame_info *frame;
776   struct gdbarch *gdbarch;
777   int regnum, numregs;
778   int i;
779   struct cleanup *cleanup;
780
781   /* Note that the test for a valid register must include checking the
782      gdbarch_register_name because gdbarch_num_regs may be allocated for
783      the union of the register sets within a family of related processors.
784      In this case, some entries of gdbarch_register_name will change depending
785      upon the particular processor being debugged.  */
786
787   frame = get_selected_frame (NULL);
788   gdbarch = get_frame_arch (frame);
789   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
790
791   cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-names");
792
793   if (argc == 0)                /* No args, just do all the regs.  */
794     {
795       for (regnum = 0;
796            regnum < numregs;
797            regnum++)
798         {
799           if (gdbarch_register_name (gdbarch, regnum) == NULL
800               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
801             ui_out_field_string (uiout, NULL, "");
802           else
803             ui_out_field_string (uiout, NULL,
804                                  gdbarch_register_name (gdbarch, regnum));
805         }
806     }
807
808   /* Else, list of register #s, just do listed regs.  */
809   for (i = 0; i < argc; i++)
810     {
811       regnum = atoi (argv[i]);
812       if (regnum < 0 || regnum >= numregs)
813         error ("bad register number");
814
815       if (gdbarch_register_name (gdbarch, regnum) == NULL
816           || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
817         ui_out_field_string (uiout, NULL, "");
818       else
819         ui_out_field_string (uiout, NULL,
820                              gdbarch_register_name (gdbarch, regnum));
821     }
822   do_cleanups (cleanup);
823 }
824
825 void
826 mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
827 {
828   static struct regcache *this_regs = NULL;
829   struct regcache *prev_regs;
830   struct gdbarch *gdbarch;
831   int regnum, numregs, changed;
832   int i;
833   struct cleanup *cleanup;
834
835   /* The last time we visited this function, the current frame's register
836      contents were saved in THIS_REGS.  Move THIS_REGS over to PREV_REGS,
837      and refresh THIS_REGS with the now-current register contents.  */
838
839   prev_regs = this_regs;
840   this_regs = frame_save_as_regcache (get_selected_frame (NULL));
841   cleanup = make_cleanup_regcache_xfree (prev_regs);
842
843   /* Note that the test for a valid register must include checking the
844      gdbarch_register_name because gdbarch_num_regs may be allocated for
845      the union of the register sets within a family of related processors.
846      In this  case, some entries of gdbarch_register_name will change depending
847      upon the particular processor being debugged.  */
848
849   gdbarch = get_regcache_arch (this_regs);
850   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
851
852   make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
853
854   if (argc == 0)                /* No args, just do all the regs.  */
855     {
856       for (regnum = 0;
857            regnum < numregs;
858            regnum++)
859         {
860           if (gdbarch_register_name (gdbarch, regnum) == NULL
861               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
862             continue;
863           changed = register_changed_p (regnum, prev_regs, this_regs);
864           if (changed < 0)
865             error ("mi_cmd_data_list_changed_registers: Unable to read register contents.");
866           else if (changed)
867             ui_out_field_int (uiout, NULL, regnum);
868         }
869     }
870
871   /* Else, list of register #s, just do listed regs.  */
872   for (i = 0; i < argc; i++)
873     {
874       regnum = atoi (argv[i]);
875
876       if (regnum >= 0
877           && regnum < numregs
878           && gdbarch_register_name (gdbarch, regnum) != NULL
879           && *gdbarch_register_name (gdbarch, regnum) != '\000')
880         {
881           changed = register_changed_p (regnum, prev_regs, this_regs);
882           if (changed < 0)
883             error ("mi_cmd_data_list_register_change: Unable to read register contents.");
884           else if (changed)
885             ui_out_field_int (uiout, NULL, regnum);
886         }
887       else
888         error ("bad register number");
889     }
890   do_cleanups (cleanup);
891 }
892
893 static int
894 register_changed_p (int regnum, struct regcache *prev_regs,
895                     struct regcache *this_regs)
896 {
897   struct gdbarch *gdbarch = get_regcache_arch (this_regs);
898   gdb_byte prev_buffer[MAX_REGISTER_SIZE];
899   gdb_byte this_buffer[MAX_REGISTER_SIZE];
900
901   /* Registers not valid in this frame return count as unchanged.  */
902   if (!regcache_valid_p (this_regs, regnum))
903     return 0;
904
905   /* First time through or after gdbarch change consider all registers as
906      changed.  Same for registers not valid in the previous frame.  */
907   if (!prev_regs || get_regcache_arch (prev_regs) != gdbarch
908       || !regcache_valid_p (prev_regs, regnum))
909     return 1;
910
911   /* Get register contents and compare.  */
912   regcache_cooked_read (prev_regs, regnum, prev_buffer);
913   regcache_cooked_read (this_regs, regnum, this_buffer);
914
915   return memcmp (prev_buffer, this_buffer,
916                  register_size (gdbarch, regnum)) != 0;
917 }
918
919 /* Return a list of register number and value pairs.  The valid
920    arguments expected are: a letter indicating the format in which to
921    display the registers contents.  This can be one of: x (hexadecimal), d
922    (decimal), N (natural), t (binary), o (octal), r (raw).  After the
923    format argumetn there can be a sequence of numbers, indicating which
924    registers to fetch the content of.  If the format is the only argument,
925    a list of all the registers with their values is returned.  */
926 void
927 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
928 {
929   struct frame_info *frame;
930   struct gdbarch *gdbarch;
931   int regnum, numregs, format;
932   int i;
933   struct cleanup *list_cleanup, *tuple_cleanup;
934
935   /* Note that the test for a valid register must include checking the
936      gdbarch_register_name because gdbarch_num_regs may be allocated for
937      the union of the register sets within a family of related processors.
938      In this case, some entries of gdbarch_register_name will change depending
939      upon the particular processor being debugged.  */
940
941   if (argc == 0)
942     error ("mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
943
944   format = (int) argv[0][0];
945
946   frame = get_selected_frame (NULL);
947   gdbarch = get_frame_arch (frame);
948   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
949
950   list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
951
952   if (argc == 1)            /* No args, beside the format: do all the regs.  */
953     {
954       for (regnum = 0;
955            regnum < numregs;
956            regnum++)
957         {
958           if (gdbarch_register_name (gdbarch, regnum) == NULL
959               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
960             continue;
961           tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
962           ui_out_field_int (uiout, "number", regnum);
963           get_register (frame, regnum, format);
964           do_cleanups (tuple_cleanup);
965         }
966     }
967
968   /* Else, list of register #s, just do listed regs.  */
969   for (i = 1; i < argc; i++)
970     {
971       regnum = atoi (argv[i]);
972
973       if (regnum >= 0
974           && regnum < numregs
975           && gdbarch_register_name (gdbarch, regnum) != NULL
976           && *gdbarch_register_name (gdbarch, regnum) != '\000')
977         {
978           tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
979           ui_out_field_int (uiout, "number", regnum);
980           get_register (frame, regnum, format);
981           do_cleanups (tuple_cleanup);
982         }
983       else
984         error ("bad register number");
985     }
986   do_cleanups (list_cleanup);
987 }
988
989 /* Output one register's contents in the desired format.  */
990 static void
991 get_register (struct frame_info *frame, int regnum, int format)
992 {
993   struct gdbarch *gdbarch = get_frame_arch (frame);
994   gdb_byte buffer[MAX_REGISTER_SIZE];
995   int optim;
996   int realnum;
997   CORE_ADDR addr;
998   enum lval_type lval;
999   static struct ui_stream *stb = NULL;
1000
1001   stb = ui_out_stream_new (uiout);
1002
1003   if (format == 'N')
1004     format = 0;
1005
1006   frame_register (frame, regnum, &optim, &lval, &addr, &realnum, buffer);
1007
1008   if (optim)
1009     error ("Optimized out");
1010
1011   if (format == 'r')
1012     {
1013       int j;
1014       char *ptr, buf[1024];
1015
1016       strcpy (buf, "0x");
1017       ptr = buf + 2;
1018       for (j = 0; j < register_size (gdbarch, regnum); j++)
1019         {
1020           int idx = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ?
1021                     j : register_size (gdbarch, regnum) - 1 - j;
1022           sprintf (ptr, "%02x", (unsigned char) buffer[idx]);
1023           ptr += 2;
1024         }
1025       ui_out_field_string (uiout, "value", buf);
1026       /*fputs_filtered (buf, gdb_stdout); */
1027     }
1028   else
1029     {
1030       struct value_print_options opts;
1031       get_formatted_print_options (&opts, format);
1032       opts.deref_ref = 1;
1033       val_print (register_type (gdbarch, regnum), buffer, 0, 0,
1034                  stb->stream, 0, &opts, current_language);
1035       ui_out_field_stream (uiout, "value", stb);
1036       ui_out_stream_delete (stb);
1037     }
1038 }
1039
1040 /* Write given values into registers. The registers and values are
1041    given as pairs.  The corresponding MI command is 
1042    -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]*/
1043 void
1044 mi_cmd_data_write_register_values (char *command, char **argv, int argc)
1045 {
1046   struct regcache *regcache;
1047   struct gdbarch *gdbarch;
1048   int numregs, i;
1049   char format;
1050
1051   /* Note that the test for a valid register must include checking the
1052      gdbarch_register_name because gdbarch_num_regs may be allocated for
1053      the union of the register sets within a family of related processors.
1054      In this case, some entries of gdbarch_register_name will change depending
1055      upon the particular processor being debugged.  */
1056
1057   regcache = get_current_regcache ();
1058   gdbarch = get_regcache_arch (regcache);
1059   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1060
1061   if (argc == 0)
1062     error ("mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
1063
1064   format = (int) argv[0][0];
1065
1066   if (!target_has_registers)
1067     error ("mi_cmd_data_write_register_values: No registers.");
1068
1069   if (!(argc - 1))
1070     error ("mi_cmd_data_write_register_values: No regs and values specified.");
1071
1072   if ((argc - 1) % 2)
1073     error ("mi_cmd_data_write_register_values: Regs and vals are not in pairs.");
1074
1075   for (i = 1; i < argc; i = i + 2)
1076     {
1077       int regnum = atoi (argv[i]);
1078
1079       if (regnum >= 0 && regnum < numregs
1080           && gdbarch_register_name (gdbarch, regnum)
1081           && *gdbarch_register_name (gdbarch, regnum))
1082         {
1083           LONGEST value;
1084
1085           /* Get the value as a number.  */
1086           value = parse_and_eval_address (argv[i + 1]);
1087
1088           /* Write it down.  */
1089           regcache_cooked_write_signed (regcache, regnum, value);
1090         }
1091       else
1092         error ("bad register number");
1093     }
1094 }
1095
1096 /* Evaluate the value of the argument.  The argument is an
1097    expression. If the expression contains spaces it needs to be
1098    included in double quotes.  */
1099 void
1100 mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
1101 {
1102   struct expression *expr;
1103   struct cleanup *old_chain = NULL;
1104   struct value *val;
1105   struct ui_stream *stb = NULL;
1106   struct value_print_options opts;
1107
1108   stb = ui_out_stream_new (uiout);
1109
1110   if (argc != 1)
1111     {
1112       ui_out_stream_delete (stb);
1113       error ("mi_cmd_data_evaluate_expression: Usage: -data-evaluate-expression expression");
1114     }
1115
1116   expr = parse_expression (argv[0]);
1117
1118   old_chain = make_cleanup (free_current_contents, &expr);
1119
1120   val = evaluate_expression (expr);
1121
1122   /* Print the result of the expression evaluation.  */
1123   get_user_print_options (&opts);
1124   opts.deref_ref = 0;
1125   val_print (value_type (val), value_contents (val),
1126              value_embedded_offset (val), value_address (val),
1127              stb->stream, 0, &opts, current_language);
1128
1129   ui_out_field_stream (uiout, "value", stb);
1130   ui_out_stream_delete (stb);
1131
1132   do_cleanups (old_chain);
1133 }
1134
1135 /* DATA-MEMORY-READ:
1136
1137    ADDR: start address of data to be dumped.
1138    WORD-FORMAT: a char indicating format for the ``word''.  See 
1139    the ``x'' command.
1140    WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes.
1141    NR_ROW: Number of rows.
1142    NR_COL: The number of colums (words per row).
1143    ASCHAR: (OPTIONAL) Append an ascii character dump to each row.  Use
1144    ASCHAR for unprintable characters.
1145
1146    Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
1147    displayes them.  Returns:
1148
1149    {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
1150
1151    Returns: 
1152    The number of bytes read is SIZE*ROW*COL. */
1153
1154 void
1155 mi_cmd_data_read_memory (char *command, char **argv, int argc)
1156 {
1157   struct gdbarch *gdbarch = get_current_arch ();
1158   struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
1159   CORE_ADDR addr;
1160   long total_bytes;
1161   long nr_cols;
1162   long nr_rows;
1163   char word_format;
1164   struct type *word_type;
1165   long word_size;
1166   char word_asize;
1167   char aschar;
1168   gdb_byte *mbuf;
1169   int nr_bytes;
1170   long offset = 0;
1171   int optind = 0;
1172   char *optarg;
1173   enum opt
1174     {
1175       OFFSET_OPT
1176     };
1177   static struct mi_opt opts[] =
1178   {
1179     {"o", OFFSET_OPT, 1},
1180     { 0, 0, 0 }
1181   };
1182
1183   while (1)
1184     {
1185       int opt = mi_getopt ("mi_cmd_data_read_memory", argc, argv, opts,
1186                            &optind, &optarg);
1187       if (opt < 0)
1188         break;
1189       switch ((enum opt) opt)
1190         {
1191         case OFFSET_OPT:
1192           offset = atol (optarg);
1193           break;
1194         }
1195     }
1196   argv += optind;
1197   argc -= optind;
1198
1199   if (argc < 5 || argc > 6)
1200     error ("mi_cmd_data_read_memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].");
1201
1202   /* Extract all the arguments. */
1203
1204   /* Start address of the memory dump.  */
1205   addr = parse_and_eval_address (argv[0]) + offset;
1206   /* The format character to use when displaying a memory word.  See
1207      the ``x'' command. */
1208   word_format = argv[1][0];
1209   /* The size of the memory word.  */
1210   word_size = atol (argv[2]);
1211   switch (word_size)
1212     {
1213     case 1:
1214       word_type = builtin_type (gdbarch)->builtin_int8;
1215       word_asize = 'b';
1216       break;
1217     case 2:
1218       word_type = builtin_type (gdbarch)->builtin_int16;
1219       word_asize = 'h';
1220       break;
1221     case 4:
1222       word_type = builtin_type (gdbarch)->builtin_int32;
1223       word_asize = 'w';
1224       break;
1225     case 8:
1226       word_type = builtin_type (gdbarch)->builtin_int64;
1227       word_asize = 'g';
1228       break;
1229     default:
1230       word_type = builtin_type (gdbarch)->builtin_int8;
1231       word_asize = 'b';
1232     }
1233   /* The number of rows.  */
1234   nr_rows = atol (argv[3]);
1235   if (nr_rows <= 0)
1236     error ("mi_cmd_data_read_memory: invalid number of rows.");
1237
1238   /* Number of bytes per row.  */
1239   nr_cols = atol (argv[4]);
1240   if (nr_cols <= 0)
1241     error ("mi_cmd_data_read_memory: invalid number of columns.");
1242
1243   /* The un-printable character when printing ascii.  */
1244   if (argc == 6)
1245     aschar = *argv[5];
1246   else
1247     aschar = 0;
1248
1249   /* Create a buffer and read it in.  */
1250   total_bytes = word_size * nr_rows * nr_cols;
1251   mbuf = xcalloc (total_bytes, 1);
1252   make_cleanup (xfree, mbuf);
1253
1254   /* Dispatch memory reads to the topmost target, not the flattened
1255      current_target.  */
1256   nr_bytes = target_read_until_error (current_target.beneath,
1257                                       TARGET_OBJECT_MEMORY, NULL, mbuf,
1258                                       addr, total_bytes);
1259   if (nr_bytes <= 0)
1260     error ("Unable to read memory.");
1261
1262   /* Output the header information.  */
1263   ui_out_field_core_addr (uiout, "addr", gdbarch, addr);
1264   ui_out_field_int (uiout, "nr-bytes", nr_bytes);
1265   ui_out_field_int (uiout, "total-bytes", total_bytes);
1266   ui_out_field_core_addr (uiout, "next-row",
1267                           gdbarch, addr + word_size * nr_cols);
1268   ui_out_field_core_addr (uiout, "prev-row",
1269                           gdbarch, addr - word_size * nr_cols);
1270   ui_out_field_core_addr (uiout, "next-page", gdbarch, addr + total_bytes);
1271   ui_out_field_core_addr (uiout, "prev-page", gdbarch, addr - total_bytes);
1272
1273   /* Build the result as a two dimentional table.  */
1274   {
1275     struct ui_stream *stream = ui_out_stream_new (uiout);
1276     struct cleanup *cleanup_list_memory;
1277     int row;
1278     int row_byte;
1279     cleanup_list_memory = make_cleanup_ui_out_list_begin_end (uiout, "memory");
1280     for (row = 0, row_byte = 0;
1281          row < nr_rows;
1282          row++, row_byte += nr_cols * word_size)
1283       {
1284         int col;
1285         int col_byte;
1286         struct cleanup *cleanup_tuple;
1287         struct cleanup *cleanup_list_data;
1288         struct value_print_options opts;
1289
1290         cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1291         ui_out_field_core_addr (uiout, "addr", gdbarch, addr + row_byte);
1292         /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */
1293         cleanup_list_data = make_cleanup_ui_out_list_begin_end (uiout, "data");
1294         get_formatted_print_options (&opts, word_format);
1295         for (col = 0, col_byte = row_byte;
1296              col < nr_cols;
1297              col++, col_byte += word_size)
1298           {
1299             if (col_byte + word_size > nr_bytes)
1300               {
1301                 ui_out_field_string (uiout, NULL, "N/A");
1302               }
1303             else
1304               {
1305                 ui_file_rewind (stream->stream);
1306                 print_scalar_formatted (mbuf + col_byte, word_type, &opts,
1307                                         word_asize, stream->stream);
1308                 ui_out_field_stream (uiout, NULL, stream);
1309               }
1310           }
1311         do_cleanups (cleanup_list_data);
1312         if (aschar)
1313           {
1314             int byte;
1315             ui_file_rewind (stream->stream);
1316             for (byte = row_byte; byte < row_byte + word_size * nr_cols; byte++)
1317               {
1318                 if (byte >= nr_bytes)
1319                   {
1320                     fputc_unfiltered ('X', stream->stream);
1321                   }
1322                 else if (mbuf[byte] < 32 || mbuf[byte] > 126)
1323                   {
1324                     fputc_unfiltered (aschar, stream->stream);
1325                   }
1326                 else
1327                   fputc_unfiltered (mbuf[byte], stream->stream);
1328               }
1329             ui_out_field_stream (uiout, "ascii", stream);
1330           }
1331         do_cleanups (cleanup_tuple);
1332       }
1333     ui_out_stream_delete (stream);
1334     do_cleanups (cleanup_list_memory);
1335   }
1336   do_cleanups (cleanups);
1337 }
1338
1339 /* DATA-MEMORY-WRITE:
1340
1341    COLUMN_OFFSET: optional argument. Must be preceeded by '-o'. The
1342    offset from the beginning of the memory grid row where the cell to
1343    be written is.
1344    ADDR: start address of the row in the memory grid where the memory
1345    cell is, if OFFSET_COLUMN is specified.  Otherwise, the address of
1346    the location to write to.
1347    FORMAT: a char indicating format for the ``word''.  See 
1348    the ``x'' command.
1349    WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
1350    VALUE: value to be written into the memory address.
1351
1352    Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
1353
1354    Prints nothing.  */
1355 void
1356 mi_cmd_data_write_memory (char *command, char **argv, int argc)
1357 {
1358   struct gdbarch *gdbarch = get_current_arch ();
1359   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1360   CORE_ADDR addr;
1361   char word_format;
1362   long word_size;
1363   /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
1364      enough when using a compiler other than GCC.  */
1365   LONGEST value;
1366   void *buffer;
1367   struct cleanup *old_chain;
1368   long offset = 0;
1369   int optind = 0;
1370   char *optarg;
1371   enum opt
1372     {
1373       OFFSET_OPT
1374     };
1375   static struct mi_opt opts[] =
1376   {
1377     {"o", OFFSET_OPT, 1},
1378     { 0, 0, 0 }
1379   };
1380
1381   while (1)
1382     {
1383       int opt = mi_getopt ("mi_cmd_data_write_memory", argc, argv, opts,
1384                            &optind, &optarg);
1385       if (opt < 0)
1386         break;
1387       switch ((enum opt) opt)
1388         {
1389         case OFFSET_OPT:
1390           offset = atol (optarg);
1391           break;
1392         }
1393     }
1394   argv += optind;
1395   argc -= optind;
1396
1397   if (argc != 4)
1398     error ("mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
1399
1400   /* Extract all the arguments.  */
1401   /* Start address of the memory dump.  */
1402   addr = parse_and_eval_address (argv[0]);
1403   /* The format character to use when displaying a memory word.  See
1404      the ``x'' command.  */
1405   word_format = argv[1][0];
1406   /* The size of the memory word. */
1407   word_size = atol (argv[2]);
1408
1409   /* Calculate the real address of the write destination.  */
1410   addr += (offset * word_size);
1411
1412   /* Get the value as a number.  */
1413   value = parse_and_eval_address (argv[3]);
1414   /* Get the value into an array.  */
1415   buffer = xmalloc (word_size);
1416   old_chain = make_cleanup (xfree, buffer);
1417   store_signed_integer (buffer, word_size, byte_order, value);
1418   /* Write it down to memory.  */
1419   write_memory (addr, buffer, word_size);
1420   /* Free the buffer.  */
1421   do_cleanups (old_chain);
1422 }
1423
1424 void
1425 mi_cmd_enable_timings (char *command, char **argv, int argc)
1426 {
1427   if (argc == 0)
1428     do_timings = 1;
1429   else if (argc == 1)
1430     {
1431       if (strcmp (argv[0], "yes") == 0)
1432         do_timings = 1;
1433       else if (strcmp (argv[0], "no") == 0)
1434         do_timings = 0;
1435       else
1436         goto usage_error;
1437     }
1438   else
1439     goto usage_error;
1440     
1441   return;
1442
1443  usage_error:
1444   error ("mi_cmd_enable_timings: Usage: %s {yes|no}", command);
1445 }
1446
1447 void
1448 mi_cmd_list_features (char *command, char **argv, int argc)
1449 {
1450   if (argc == 0)
1451     {
1452       struct cleanup *cleanup = NULL;
1453       cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");      
1454
1455       ui_out_field_string (uiout, NULL, "frozen-varobjs");
1456       ui_out_field_string (uiout, NULL, "pending-breakpoints");
1457       ui_out_field_string (uiout, NULL, "thread-info");
1458       
1459 #if HAVE_PYTHON
1460       ui_out_field_string (uiout, NULL, "python");
1461 #endif
1462       
1463       do_cleanups (cleanup);
1464       return;
1465     }
1466
1467   error ("-list-features should be passed no arguments");
1468 }
1469
1470 void
1471 mi_cmd_list_target_features (char *command, char **argv, int argc)
1472 {
1473   if (argc == 0)
1474     {
1475       struct cleanup *cleanup = NULL;
1476       cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");      
1477
1478       if (target_can_async_p ())
1479         ui_out_field_string (uiout, NULL, "async");
1480       
1481       do_cleanups (cleanup);
1482       return;
1483     }
1484
1485   error ("-list-target-features should be passed no arguments");
1486 }
1487
1488 /* Execute a command within a safe environment.
1489    Return <0 for error; >=0 for ok.
1490
1491    args->action will tell mi_execute_command what action
1492    to perfrom after the given command has executed (display/suppress
1493    prompt, display error). */
1494
1495 static void
1496 captured_mi_execute_command (struct ui_out *uiout, void *data)
1497 {
1498   struct cleanup *cleanup;
1499   struct mi_parse *context = (struct mi_parse *) data;
1500
1501   if (do_timings)
1502     current_command_ts = context->cmd_start;
1503
1504   current_token = xstrdup (context->token);
1505   cleanup = make_cleanup (free_current_contents, &current_token);
1506
1507   running_result_record_printed = 0;
1508   mi_proceeded = 0;
1509   switch (context->op)
1510     {
1511     case MI_COMMAND:
1512       /* A MI command was read from the input stream.  */
1513       if (mi_debug_p)
1514         /* FIXME: gdb_???? */
1515         fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
1516                             context->token, context->command, context->args);
1517
1518
1519       mi_cmd_execute (context);
1520
1521       /* Print the result if there were no errors.
1522
1523          Remember that on the way out of executing a command, you have
1524          to directly use the mi_interp's uiout, since the command could 
1525          have reset the interpreter, in which case the current uiout 
1526          will most likely crash in the mi_out_* routines.  */
1527       if (!running_result_record_printed)
1528         {
1529           fputs_unfiltered (context->token, raw_stdout);
1530           /* There's no particularly good reason why target-connect results
1531              in not ^done.  Should kill ^connected for MI3.  */
1532           fputs_unfiltered (strcmp (context->command, "target-select") == 0
1533                             ? "^connected" : "^done", raw_stdout);
1534           mi_out_put (uiout, raw_stdout);
1535           mi_out_rewind (uiout);
1536           mi_print_timing_maybe ();
1537           fputs_unfiltered ("\n", raw_stdout);
1538         }
1539       else
1540             /* The command does not want anything to be printed.  In that
1541                case, the command probably should not have written anything
1542                to uiout, but in case it has written something, discard it.  */
1543         mi_out_rewind (uiout);
1544       break;
1545
1546     case CLI_COMMAND:
1547       {
1548         char *argv[2];
1549         /* A CLI command was read from the input stream.  */
1550         /* This "feature" will be removed as soon as we have a
1551            complete set of mi commands.  */
1552         /* Echo the command on the console.  */
1553         fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
1554         /* Call the "console" interpreter.  */
1555         argv[0] = "console";
1556         argv[1] = context->command;
1557         mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
1558
1559         /* If we changed interpreters, DON'T print out anything.  */
1560         if (current_interp_named_p (INTERP_MI)
1561             || current_interp_named_p (INTERP_MI1)
1562             || current_interp_named_p (INTERP_MI2)
1563             || current_interp_named_p (INTERP_MI3))
1564           {
1565             if (!running_result_record_printed)
1566               {
1567                 fputs_unfiltered (context->token, raw_stdout);
1568                 fputs_unfiltered ("^done", raw_stdout);
1569                 mi_out_put (uiout, raw_stdout);
1570                 mi_out_rewind (uiout);
1571                 mi_print_timing_maybe ();
1572                 fputs_unfiltered ("\n", raw_stdout);            
1573               }
1574             else
1575               mi_out_rewind (uiout);
1576           }
1577         break;
1578       }
1579
1580     }
1581
1582   do_cleanups (cleanup);
1583
1584   return;
1585 }
1586
1587
1588 void
1589 mi_execute_command (char *cmd, int from_tty)
1590 {
1591   struct mi_parse *command;
1592   struct ui_out *saved_uiout = uiout;
1593
1594   /* This is to handle EOF (^D). We just quit gdb.  */
1595   /* FIXME: we should call some API function here.  */
1596   if (cmd == 0)
1597     quit_force (NULL, from_tty);
1598
1599   target_log_command (cmd);
1600
1601   command = mi_parse (cmd);
1602
1603   if (command != NULL)
1604     {
1605       struct gdb_exception result;
1606       ptid_t previous_ptid = inferior_ptid;
1607
1608       if (do_timings)
1609         {
1610           command->cmd_start = (struct mi_timestamp *)
1611             xmalloc (sizeof (struct mi_timestamp));
1612           timestamp (command->cmd_start);
1613         }
1614
1615       result = catch_exception (uiout, captured_mi_execute_command, command,
1616                                 RETURN_MASK_ALL);
1617       if (result.reason < 0)
1618         {
1619           /* The command execution failed and error() was called
1620              somewhere.  */
1621           fputs_unfiltered (command->token, raw_stdout);
1622           fputs_unfiltered ("^error,msg=\"", raw_stdout);
1623           if (result.message == NULL)
1624             fputs_unfiltered ("unknown error", raw_stdout);
1625           else
1626             fputstr_unfiltered (result.message, '"', raw_stdout);
1627           fputs_unfiltered ("\"\n", raw_stdout);
1628           mi_out_rewind (uiout);
1629         }
1630
1631       bpstat_do_actions ();
1632
1633       if (/* The notifications are only output when the top-level
1634              interpreter (specified on the command line) is MI.  */      
1635           ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
1636           /* Don't try report anything if there are no threads -- 
1637              the program is dead.  */
1638           && thread_count () != 0
1639           /* -thread-select explicitly changes thread. If frontend uses that
1640              internally, we don't want to emit =thread-selected, since
1641              =thread-selected is supposed to indicate user's intentions.  */
1642           && strcmp (command->command, "thread-select") != 0)
1643         {
1644           struct mi_interp *mi = top_level_interpreter_data ();
1645           int report_change = 0;
1646
1647           if (command->thread == -1)
1648             {
1649               report_change = (!ptid_equal (previous_ptid, null_ptid)
1650                                && !ptid_equal (inferior_ptid, previous_ptid)
1651                                && !ptid_equal (inferior_ptid, null_ptid));
1652             }
1653           else if (!ptid_equal (inferior_ptid, null_ptid))
1654             {
1655               struct thread_info *ti = inferior_thread ();
1656               report_change = (ti->num != command->thread);
1657             }
1658
1659           if (report_change)
1660             {     
1661               struct thread_info *ti = inferior_thread ();
1662               target_terminal_ours ();
1663               fprintf_unfiltered (mi->event_channel, 
1664                                   "thread-selected,id=\"%d\"",
1665                                   ti->num);
1666               gdb_flush (mi->event_channel);
1667             }
1668         }
1669
1670       mi_parse_free (command);
1671     }
1672
1673   fputs_unfiltered ("(gdb) \n", raw_stdout);
1674   gdb_flush (raw_stdout);
1675   /* Print any buffered hook code.  */
1676   /* ..... */
1677 }
1678
1679 static void
1680 mi_cmd_execute (struct mi_parse *parse)
1681 {
1682   struct cleanup *cleanup;
1683   int i;
1684
1685   prepare_execute_command ();
1686
1687   cleanup = make_cleanup (null_cleanup, NULL);
1688
1689   if (parse->frame != -1 && parse->thread == -1)
1690     error (_("Cannot specify --frame without --thread"));
1691
1692   if (parse->thread != -1)
1693     {
1694       struct thread_info *tp = find_thread_id (parse->thread);
1695       if (!tp)
1696         error (_("Invalid thread id: %d"), parse->thread);
1697
1698       if (is_exited (tp->ptid))
1699         error (_("Thread id: %d has terminated"), parse->thread);
1700
1701       switch_to_thread (tp->ptid);
1702     }
1703
1704   if (parse->frame != -1)
1705     {
1706       struct frame_info *fid;
1707       int frame = parse->frame;
1708       fid = find_relative_frame (get_current_frame (), &frame);
1709       if (frame == 0)
1710         /* find_relative_frame was successful */
1711         select_frame (fid);
1712       else
1713         error (_("Invalid frame id: %d"), frame);
1714     }
1715
1716   if (parse->cmd->argv_func != NULL)
1717     parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
1718   else if (parse->cmd->cli.cmd != 0)
1719     {
1720       /* FIXME: DELETE THIS. */
1721       /* The operation is still implemented by a cli command.  */
1722       /* Must be a synchronous one.  */
1723       mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
1724                               parse->args);
1725     }
1726   else
1727     {
1728       /* FIXME: DELETE THIS.  */
1729       struct ui_file *stb;
1730
1731       stb = mem_fileopen ();
1732
1733       fputs_unfiltered ("Undefined mi command: ", stb);
1734       fputstr_unfiltered (parse->command, '"', stb);
1735       fputs_unfiltered (" (missing implementation)", stb);
1736
1737       make_cleanup_ui_file_delete (stb);
1738       error_stream (stb);
1739     }
1740   do_cleanups (cleanup);
1741 }
1742
1743 /* FIXME: This is just a hack so we can get some extra commands going.
1744    We don't want to channel things through the CLI, but call libgdb directly.
1745    Use only for synchronous commands.  */
1746
1747 void
1748 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
1749 {
1750   if (cmd != 0)
1751     {
1752       struct cleanup *old_cleanups;
1753       char *run;
1754       if (args_p)
1755         run = xstrprintf ("%s %s", cmd, args);
1756       else
1757         run = xstrdup (cmd);
1758       if (mi_debug_p)
1759         /* FIXME: gdb_???? */
1760         fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
1761                             cmd, run);
1762       old_cleanups = make_cleanup (xfree, run);
1763       execute_command ( /*ui */ run, 0 /*from_tty */ );
1764       do_cleanups (old_cleanups);
1765       return;
1766     }
1767 }
1768
1769 void
1770 mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
1771 {
1772   struct cleanup *old_cleanups;
1773   char *run;
1774
1775   if (target_can_async_p ())
1776     run = xstrprintf ("%s %s&", cli_command, argc ? *argv : "");
1777   else
1778     run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
1779   old_cleanups = make_cleanup (xfree, run);  
1780
1781   execute_command ( /*ui */ run, 0 /*from_tty */ );
1782
1783   if (target_can_async_p ())
1784     {
1785       /* If we're not executing, an exception should have been throw.  */
1786       gdb_assert (is_running (inferior_ptid));
1787       do_cleanups (old_cleanups);
1788     }
1789   else
1790     {
1791       /* Do this before doing any printing.  It would appear that some
1792          print code leaves garbage around in the buffer.  */
1793       do_cleanups (old_cleanups);
1794     }
1795 }
1796
1797 void
1798 mi_load_progress (const char *section_name,
1799                   unsigned long sent_so_far,
1800                   unsigned long total_section,
1801                   unsigned long total_sent,
1802                   unsigned long grand_total)
1803 {
1804   struct timeval time_now, delta, update_threshold;
1805   static struct timeval last_update;
1806   static char *previous_sect_name = NULL;
1807   int new_section;
1808   struct ui_out *saved_uiout;
1809
1810   /* This function is called through deprecated_show_load_progress
1811      which means uiout may not be correct.  Fix it for the duration
1812      of this function.  */
1813   saved_uiout = uiout;
1814
1815   if (current_interp_named_p (INTERP_MI)
1816       || current_interp_named_p (INTERP_MI2))
1817     uiout = mi_out_new (2);
1818   else if (current_interp_named_p (INTERP_MI1))
1819     uiout = mi_out_new (1);
1820   else if (current_interp_named_p (INTERP_MI3))
1821     uiout = mi_out_new (3);
1822   else
1823     return;
1824
1825   update_threshold.tv_sec = 0;
1826   update_threshold.tv_usec = 500000;
1827   gettimeofday (&time_now, NULL);
1828
1829   delta.tv_usec = time_now.tv_usec - last_update.tv_usec;
1830   delta.tv_sec = time_now.tv_sec - last_update.tv_sec;
1831
1832   if (delta.tv_usec < 0)
1833     {
1834       delta.tv_sec -= 1;
1835       delta.tv_usec += 1000000L;
1836     }
1837
1838   new_section = (previous_sect_name ?
1839                  strcmp (previous_sect_name, section_name) : 1);
1840   if (new_section)
1841     {
1842       struct cleanup *cleanup_tuple;
1843       xfree (previous_sect_name);
1844       previous_sect_name = xstrdup (section_name);
1845
1846       if (current_token)
1847         fputs_unfiltered (current_token, raw_stdout);
1848       fputs_unfiltered ("+download", raw_stdout);
1849       cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1850       ui_out_field_string (uiout, "section", section_name);
1851       ui_out_field_int (uiout, "section-size", total_section);
1852       ui_out_field_int (uiout, "total-size", grand_total);
1853       do_cleanups (cleanup_tuple);
1854       mi_out_put (uiout, raw_stdout);
1855       fputs_unfiltered ("\n", raw_stdout);
1856       gdb_flush (raw_stdout);
1857     }
1858
1859   if (delta.tv_sec >= update_threshold.tv_sec &&
1860       delta.tv_usec >= update_threshold.tv_usec)
1861     {
1862       struct cleanup *cleanup_tuple;
1863       last_update.tv_sec = time_now.tv_sec;
1864       last_update.tv_usec = time_now.tv_usec;
1865       if (current_token)
1866         fputs_unfiltered (current_token, raw_stdout);
1867       fputs_unfiltered ("+download", raw_stdout);
1868       cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1869       ui_out_field_string (uiout, "section", section_name);
1870       ui_out_field_int (uiout, "section-sent", sent_so_far);
1871       ui_out_field_int (uiout, "section-size", total_section);
1872       ui_out_field_int (uiout, "total-sent", total_sent);
1873       ui_out_field_int (uiout, "total-size", grand_total);
1874       do_cleanups (cleanup_tuple);
1875       mi_out_put (uiout, raw_stdout);
1876       fputs_unfiltered ("\n", raw_stdout);
1877       gdb_flush (raw_stdout);
1878     }
1879
1880   xfree (uiout);
1881   uiout = saved_uiout;
1882 }
1883
1884 static void 
1885 timestamp (struct mi_timestamp *tv)
1886   {
1887     long usec;
1888     gettimeofday (&tv->wallclock, NULL);
1889 #ifdef HAVE_GETRUSAGE
1890     getrusage (RUSAGE_SELF, &rusage);
1891     tv->utime.tv_sec = rusage.ru_utime.tv_sec;
1892     tv->utime.tv_usec = rusage.ru_utime.tv_usec;
1893     tv->stime.tv_sec = rusage.ru_stime.tv_sec;
1894     tv->stime.tv_usec = rusage.ru_stime.tv_usec;
1895 #else
1896     usec = get_run_time ();
1897     tv->utime.tv_sec = usec/1000000L;
1898     tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
1899     tv->stime.tv_sec = 0;
1900     tv->stime.tv_usec = 0;
1901 #endif
1902   }
1903
1904 static void 
1905 print_diff_now (struct mi_timestamp *start)
1906   {
1907     struct mi_timestamp now;
1908     timestamp (&now);
1909     print_diff (start, &now);
1910   }
1911
1912 void
1913 mi_print_timing_maybe (void)
1914 {
1915   /* If the command is -enable-timing then do_timings may be
1916      true whilst current_command_ts is not initialized.  */
1917   if (do_timings && current_command_ts)
1918     print_diff_now (current_command_ts);
1919 }
1920
1921 static long 
1922 timeval_diff (struct timeval start, struct timeval end)
1923   {
1924     return ((end.tv_sec - start.tv_sec) * 1000000L)
1925       + (end.tv_usec - start.tv_usec);
1926   }
1927
1928 static void 
1929 print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
1930   {
1931     fprintf_unfiltered
1932       (raw_stdout,
1933        ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}", 
1934        timeval_diff (start->wallclock, end->wallclock) / 1000000.0, 
1935        timeval_diff (start->utime, end->utime) / 1000000.0, 
1936        timeval_diff (start->stime, end->stime) / 1000000.0);
1937   }