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