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