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