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