xref: /netbsd/external/gpl3/gdb.old/dist/gdb/mi/mi-main.c (revision 184b2d41)
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
set_mi_async_command(const char * args,int from_tty,struct cmd_list_element * c)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
show_mi_async_command(struct ui_file * file,int from_tty,struct cmd_list_element * c,const char * value)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
mi_async_p(void)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
mi_cmd_gdb_exit(const char * command,char ** argv,int argc)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
mi_cmd_exec_next(const char * command,char ** argv,int argc)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
mi_cmd_exec_next_instruction(const char * command,char ** argv,int argc)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
mi_cmd_exec_step(const char * command,char ** argv,int argc)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
mi_cmd_exec_step_instruction(const char * command,char ** argv,int argc)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
mi_cmd_exec_finish(const char * command,char ** argv,int argc)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
mi_cmd_exec_return(const char * command,char ** argv,int argc)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
mi_cmd_exec_jump(const char * args,char ** argv,int argc)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
proceed_thread(struct thread_info * thread,int pid)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
proceed_thread_callback(struct thread_info * thread,void * arg)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
exec_continue(char ** argv,int argc)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
exec_reverse_continue(char ** argv,int argc)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
mi_cmd_exec_continue(const char * command,char ** argv,int argc)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
interrupt_thread_callback(struct thread_info * thread,void * arg)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
mi_cmd_exec_interrupt(const char * command,char ** argv,int argc)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
run_one_inferior(inferior * inf,bool start_p)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
mi_cmd_exec_run(const char * command,char ** argv,int argc)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
find_thread_of_process(struct thread_info * ti,void * p)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
mi_cmd_target_detach(const char * command,char ** argv,int argc)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
mi_cmd_target_flash_erase(const char * command,char ** argv,int argc)536 mi_cmd_target_flash_erase (const char *command, char **argv, int argc)
537 {
538   flash_erase_command (NULL, 0);
539 }
540 
541 void
mi_cmd_thread_select(const char * command,char ** argv,int argc)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
mi_cmd_thread_list_ids(const char * command,char ** argv,int argc)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
mi_cmd_thread_info(const char * command,char ** argv,int argc)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
collect_cores(struct thread_info * ti,void * xdata)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
print_one_inferior(struct inferior * inferior,bool recurse,const std::set<int> & ids)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
output_cores(struct ui_out * uiout,const char * field_name,const char * xcores)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
list_available_thread_groups(const std::set<int> & ids,int recurse)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
mi_cmd_list_thread_groups(const char * command,char ** argv,int argc)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
mi_cmd_data_list_register_names(const char * command,char ** argv,int argc)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
mi_cmd_data_list_changed_registers(const char * command,char ** argv,int argc)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
register_changed_p(int regnum,readonly_detached_regcache * prev_regs,readonly_detached_regcache * this_regs)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
mi_cmd_data_list_register_values(const char * command,char ** argv,int argc)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
output_register(struct frame_info * frame,int regnum,int format,int skip_unavailable)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
mi_cmd_data_write_register_values(const char * command,char ** argv,int argc)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
mi_cmd_data_evaluate_expression(const char * command,char ** argv,int argc)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
mi_cmd_data_read_memory(const char * command,char ** argv,int argc)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
mi_cmd_data_read_memory_bytes(const char * command,char ** argv,int argc)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
mi_cmd_data_write_memory(const char * command,char ** argv,int argc)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
mi_cmd_data_write_memory_bytes(const char * command,char ** argv,int argc)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
mi_cmd_enable_timings(const char * command,char ** argv,int argc)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
mi_cmd_list_features(const char * command,char ** argv,int argc)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
mi_cmd_list_target_features(const char * command,char ** argv,int argc)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
mi_cmd_add_inferior(const char * command,char ** argv,int argc)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
mi_cmd_remove_inferior(const char * command,char ** argv,int argc)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 
1756 /* Execute a command within a safe environment.
1757    Return <0 for error; >=0 for ok.
1758 
1759    args->action will tell mi_execute_command what action
1760    to perform after the given command has executed (display/suppress
1761    prompt, display error).  */
1762 
1763 static void
captured_mi_execute_command(struct ui_out * uiout,struct mi_parse * context)1764 captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
1765 {
1766   struct mi_interp *mi = (struct mi_interp *) command_interp ();
1767 
1768   if (do_timings)
1769     current_command_ts = context->cmd_start;
1770 
1771   scoped_restore save_token = make_scoped_restore (&current_token,
1772 						   context->token);
1773 
1774   running_result_record_printed = 0;
1775   mi_proceeded = 0;
1776   switch (context->op)
1777     {
1778     case MI_COMMAND:
1779       /* A MI command was read from the input stream.  */
1780       if (mi_debug_p)
1781 	/* FIXME: gdb_???? */
1782 	fprintf_unfiltered (mi->raw_stdout,
1783 			    " token=`%s' command=`%s' args=`%s'\n",
1784 			    context->token, context->command, context->args);
1785 
1786       mi_cmd_execute (context);
1787 
1788       /* Print the result if there were no errors.
1789 
1790 	 Remember that on the way out of executing a command, you have
1791 	 to directly use the mi_interp's uiout, since the command
1792 	 could have reset the interpreter, in which case the current
1793 	 uiout will most likely crash in the mi_out_* routines.  */
1794       if (!running_result_record_printed)
1795 	{
1796 	  fputs_unfiltered (context->token, mi->raw_stdout);
1797 	  /* There's no particularly good reason why target-connect results
1798 	     in not ^done.  Should kill ^connected for MI3.  */
1799 	  fputs_unfiltered (strcmp (context->command, "target-select") == 0
1800 			    ? "^connected" : "^done", mi->raw_stdout);
1801 	  mi_out_put (uiout, mi->raw_stdout);
1802 	  mi_out_rewind (uiout);
1803 	  mi_print_timing_maybe (mi->raw_stdout);
1804 	  fputs_unfiltered ("\n", mi->raw_stdout);
1805 	}
1806       else
1807 	/* The command does not want anything to be printed.  In that
1808 	   case, the command probably should not have written anything
1809 	   to uiout, but in case it has written something, discard it.  */
1810 	mi_out_rewind (uiout);
1811       break;
1812 
1813     case CLI_COMMAND:
1814       {
1815 	char *argv[2];
1816 
1817 	/* A CLI command was read from the input stream.  */
1818 	/* This "feature" will be removed as soon as we have a
1819 	   complete set of mi commands.  */
1820 	/* Echo the command on the console.  */
1821 	fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
1822 	/* Call the "console" interpreter.  */
1823 	argv[0] = (char *) INTERP_CONSOLE;
1824 	argv[1] = context->command;
1825 	mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
1826 
1827 	/* If we changed interpreters, DON'T print out anything.  */
1828 	if (current_interp_named_p (INTERP_MI)
1829 	    || current_interp_named_p (INTERP_MI1)
1830 	    || current_interp_named_p (INTERP_MI2)
1831 	    || current_interp_named_p (INTERP_MI3))
1832 	  {
1833 	    if (!running_result_record_printed)
1834 	      {
1835 		fputs_unfiltered (context->token, mi->raw_stdout);
1836 		fputs_unfiltered ("^done", mi->raw_stdout);
1837 		mi_out_put (uiout, mi->raw_stdout);
1838 		mi_out_rewind (uiout);
1839 		mi_print_timing_maybe (mi->raw_stdout);
1840 		fputs_unfiltered ("\n", mi->raw_stdout);
1841 	      }
1842 	    else
1843 	      mi_out_rewind (uiout);
1844 	  }
1845 	break;
1846       }
1847     }
1848 }
1849 
1850 /* Print a gdb exception to the MI output stream.  */
1851 
1852 static void
mi_print_exception(const char * token,const struct gdb_exception & exception)1853 mi_print_exception (const char *token, const struct gdb_exception &exception)
1854 {
1855   struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
1856 
1857   fputs_unfiltered (token, mi->raw_stdout);
1858   fputs_unfiltered ("^error,msg=\"", mi->raw_stdout);
1859   if (exception.message == NULL)
1860     fputs_unfiltered ("unknown error", mi->raw_stdout);
1861   else
1862     fputstr_unfiltered (exception.what (), '"', mi->raw_stdout);
1863   fputs_unfiltered ("\"", mi->raw_stdout);
1864 
1865   switch (exception.error)
1866     {
1867       case UNDEFINED_COMMAND_ERROR:
1868 	fputs_unfiltered (",code=\"undefined-command\"", mi->raw_stdout);
1869 	break;
1870     }
1871 
1872   fputs_unfiltered ("\n", mi->raw_stdout);
1873 }
1874 
1875 /* Determine whether the parsed command already notifies the
1876    user_selected_context_changed observer.  */
1877 
1878 static int
command_notifies_uscc_observer(struct mi_parse * command)1879 command_notifies_uscc_observer (struct mi_parse *command)
1880 {
1881   if (command->op == CLI_COMMAND)
1882     {
1883       /* CLI commands "thread" and "inferior" already send it.  */
1884       return (strncmp (command->command, "thread ", 7) == 0
1885 	      || strncmp (command->command, "inferior ", 9) == 0);
1886     }
1887   else /* MI_COMMAND */
1888     {
1889       if (strcmp (command->command, "interpreter-exec") == 0
1890 	  && command->argc > 1)
1891 	{
1892 	  /* "thread" and "inferior" again, but through -interpreter-exec.  */
1893 	  return (strncmp (command->argv[1], "thread ", 7) == 0
1894 		  || strncmp (command->argv[1], "inferior ", 9) == 0);
1895 	}
1896 
1897       else
1898 	/* -thread-select already sends it.  */
1899 	return strcmp (command->command, "thread-select") == 0;
1900     }
1901 }
1902 
1903 void
mi_execute_command(const char * cmd,int from_tty)1904 mi_execute_command (const char *cmd, int from_tty)
1905 {
1906   char *token;
1907   std::unique_ptr<struct mi_parse> command;
1908 
1909   /* This is to handle EOF (^D). We just quit gdb.  */
1910   /* FIXME: we should call some API function here.  */
1911   if (cmd == 0)
1912     quit_force (NULL, from_tty);
1913 
1914   target_log_command (cmd);
1915 
1916   try
1917     {
1918       command = mi_parse (cmd, &token);
1919     }
1920   catch (const gdb_exception &exception)
1921     {
1922       mi_print_exception (token, exception);
1923       xfree (token);
1924     }
1925 
1926   if (command != NULL)
1927     {
1928       ptid_t previous_ptid = inferior_ptid;
1929 
1930       gdb::optional<scoped_restore_tmpl<int>> restore_suppress;
1931 
1932       if (command->cmd != NULL && command->cmd->suppress_notification != NULL)
1933 	restore_suppress.emplace (command->cmd->suppress_notification, 1);
1934 
1935       command->token = token;
1936 
1937       if (do_timings)
1938 	{
1939 	  command->cmd_start = new mi_timestamp ();
1940 	  timestamp (command->cmd_start);
1941 	}
1942 
1943       try
1944 	{
1945 	  captured_mi_execute_command (current_uiout, command.get ());
1946 	}
1947       catch (const gdb_exception &result)
1948 	{
1949 	  /* Like in start_event_loop, enable input and force display
1950 	     of the prompt.  Otherwise, any command that calls
1951 	     async_disable_stdin, and then throws, will leave input
1952 	     disabled.  */
1953 	  async_enable_stdin ();
1954 	  current_ui->prompt_state = PROMPT_NEEDED;
1955 
1956 	  /* The command execution failed and error() was called
1957 	     somewhere.  */
1958 	  mi_print_exception (command->token, result);
1959 	  mi_out_rewind (current_uiout);
1960 	}
1961 
1962       bpstat_do_actions ();
1963 
1964       if (/* The notifications are only output when the top-level
1965 	     interpreter (specified on the command line) is MI.  */
1966 	  top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ()
1967 	  /* Don't try report anything if there are no threads --
1968 	     the program is dead.  */
1969 	  && any_thread_p ()
1970 	  /* If the command already reports the thread change, no need to do it
1971 	     again.  */
1972 	  && !command_notifies_uscc_observer (command.get ()))
1973 	{
1974 	  int report_change = 0;
1975 
1976 	  if (command->thread == -1)
1977 	    {
1978 	      report_change = (previous_ptid != null_ptid
1979 			       && inferior_ptid != previous_ptid
1980 			       && inferior_ptid != null_ptid);
1981 	    }
1982 	  else if (inferior_ptid != null_ptid)
1983 	    {
1984 	      struct thread_info *ti = inferior_thread ();
1985 
1986 	      report_change = (ti->global_num != command->thread);
1987 	    }
1988 
1989 	  if (report_change)
1990 	    {
1991 	      gdb::observers::user_selected_context_changed.notify
1992 		(USER_SELECTED_THREAD | USER_SELECTED_FRAME);
1993 	    }
1994 	}
1995     }
1996 }
1997 
1998 static void
mi_cmd_execute(struct mi_parse * parse)1999 mi_cmd_execute (struct mi_parse *parse)
2000 {
2001   scoped_value_mark cleanup = prepare_execute_command ();
2002 
2003   if (parse->all && parse->thread_group != -1)
2004     error (_("Cannot specify --thread-group together with --all"));
2005 
2006   if (parse->all && parse->thread != -1)
2007     error (_("Cannot specify --thread together with --all"));
2008 
2009   if (parse->thread_group != -1 && parse->thread != -1)
2010     error (_("Cannot specify --thread together with --thread-group"));
2011 
2012   if (parse->frame != -1 && parse->thread == -1)
2013     error (_("Cannot specify --frame without --thread"));
2014 
2015   if (parse->thread_group != -1)
2016     {
2017       struct inferior *inf = find_inferior_id (parse->thread_group);
2018       struct thread_info *tp = 0;
2019 
2020       if (!inf)
2021 	error (_("Invalid thread group for the --thread-group option"));
2022 
2023       set_current_inferior (inf);
2024       /* This behaviour means that if --thread-group option identifies
2025 	 an inferior with multiple threads, then a random one will be
2026 	 picked.  This is not a problem -- frontend should always
2027 	 provide --thread if it wishes to operate on a specific
2028 	 thread.  */
2029       if (inf->pid != 0)
2030 	tp = any_live_thread_of_inferior (inf);
2031       if (tp != NULL)
2032 	switch_to_thread (tp);
2033       else
2034 	switch_to_no_thread ();
2035       set_current_program_space (inf->pspace);
2036     }
2037 
2038   if (parse->thread != -1)
2039     {
2040       thread_info *tp = find_thread_global_id (parse->thread);
2041 
2042       if (tp == NULL)
2043 	error (_("Invalid thread id: %d"), parse->thread);
2044 
2045       if (tp->state == THREAD_EXITED)
2046 	error (_("Thread id: %d has terminated"), parse->thread);
2047 
2048       switch_to_thread (tp);
2049     }
2050 
2051   if (parse->frame != -1)
2052     {
2053       struct frame_info *fid;
2054       int frame = parse->frame;
2055 
2056       fid = find_relative_frame (get_current_frame (), &frame);
2057       if (frame == 0)
2058 	/* find_relative_frame was successful */
2059 	select_frame (fid);
2060       else
2061 	error (_("Invalid frame id: %d"), frame);
2062     }
2063 
2064   gdb::optional<scoped_restore_current_language> lang_saver;
2065   if (parse->language != language_unknown)
2066     {
2067       lang_saver.emplace ();
2068       set_language (parse->language);
2069     }
2070 
2071   current_context = parse;
2072 
2073   if (parse->cmd->argv_func != NULL)
2074     {
2075       parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
2076     }
2077   else if (parse->cmd->cli.cmd != 0)
2078     {
2079       /* FIXME: DELETE THIS. */
2080       /* The operation is still implemented by a cli command.  */
2081       /* Must be a synchronous one.  */
2082       mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
2083 			      parse->args);
2084     }
2085   else
2086     {
2087       /* FIXME: DELETE THIS.  */
2088       string_file stb;
2089 
2090       stb.puts ("Undefined mi command: ");
2091       stb.putstr (parse->command, '"');
2092       stb.puts (" (missing implementation)");
2093 
2094       error_stream (stb);
2095     }
2096 }
2097 
2098 /* FIXME: This is just a hack so we can get some extra commands going.
2099    We don't want to channel things through the CLI, but call libgdb directly.
2100    Use only for synchronous commands.  */
2101 
2102 void
mi_execute_cli_command(const char * cmd,int args_p,const char * args)2103 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
2104 {
2105   if (cmd != 0)
2106     {
2107       std::string run = cmd;
2108 
2109       if (args_p)
2110 	run = run + " " + args;
2111       if (mi_debug_p)
2112 	/* FIXME: gdb_???? */
2113 	fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
2114 			    cmd, run.c_str ());
2115       execute_command (run.c_str (), 0 /* from_tty */ );
2116     }
2117 }
2118 
2119 void
mi_execute_async_cli_command(const char * cli_command,char ** argv,int argc)2120 mi_execute_async_cli_command (const char *cli_command, char **argv, int argc)
2121 {
2122   std::string run = cli_command;
2123 
2124   if (argc)
2125     run = run + " " + *argv;
2126   if (mi_async_p ())
2127     run += "&";
2128 
2129   execute_command (run.c_str (), 0 /* from_tty */ );
2130 }
2131 
2132 void
mi_load_progress(const char * section_name,unsigned long sent_so_far,unsigned long total_section,unsigned long total_sent,unsigned long grand_total)2133 mi_load_progress (const char *section_name,
2134 		  unsigned long sent_so_far,
2135 		  unsigned long total_section,
2136 		  unsigned long total_sent,
2137 		  unsigned long grand_total)
2138 {
2139   using namespace std::chrono;
2140   static steady_clock::time_point last_update;
2141   static char *previous_sect_name = NULL;
2142   int new_section;
2143   struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
2144 
2145   /* This function is called through deprecated_show_load_progress
2146      which means uiout may not be correct.  Fix it for the duration
2147      of this function.  */
2148 
2149   std::unique_ptr<ui_out> uiout (mi_out_new (current_interpreter ()->name ()));
2150   if (uiout == nullptr)
2151     return;
2152 
2153   scoped_restore save_uiout
2154     = make_scoped_restore (&current_uiout, uiout.get ());
2155 
2156   new_section = (previous_sect_name ?
2157 		 strcmp (previous_sect_name, section_name) : 1);
2158   if (new_section)
2159     {
2160       xfree (previous_sect_name);
2161       previous_sect_name = xstrdup (section_name);
2162 
2163       if (current_token)
2164 	fputs_unfiltered (current_token, mi->raw_stdout);
2165       fputs_unfiltered ("+download", mi->raw_stdout);
2166       {
2167 	ui_out_emit_tuple tuple_emitter (uiout.get (), NULL);
2168 	uiout->field_string ("section", section_name);
2169 	uiout->field_signed ("section-size", total_section);
2170 	uiout->field_signed ("total-size", grand_total);
2171       }
2172       mi_out_put (uiout.get (), mi->raw_stdout);
2173       fputs_unfiltered ("\n", mi->raw_stdout);
2174       gdb_flush (mi->raw_stdout);
2175     }
2176 
2177   steady_clock::time_point time_now = steady_clock::now ();
2178   if (time_now - last_update > milliseconds (500))
2179     {
2180       last_update = time_now;
2181       if (current_token)
2182 	fputs_unfiltered (current_token, mi->raw_stdout);
2183       fputs_unfiltered ("+download", mi->raw_stdout);
2184       {
2185 	ui_out_emit_tuple tuple_emitter (uiout.get (), NULL);
2186 	uiout->field_string ("section", section_name);
2187 	uiout->field_signed ("section-sent", sent_so_far);
2188 	uiout->field_signed ("section-size", total_section);
2189 	uiout->field_signed ("total-sent", total_sent);
2190 	uiout->field_signed ("total-size", grand_total);
2191       }
2192       mi_out_put (uiout.get (), mi->raw_stdout);
2193       fputs_unfiltered ("\n", mi->raw_stdout);
2194       gdb_flush (mi->raw_stdout);
2195     }
2196 }
2197 
2198 static void
timestamp(struct mi_timestamp * tv)2199 timestamp (struct mi_timestamp *tv)
2200 {
2201   using namespace std::chrono;
2202 
2203   tv->wallclock = steady_clock::now ();
2204   run_time_clock::now (tv->utime, tv->stime);
2205 }
2206 
2207 static void
print_diff_now(struct ui_file * file,struct mi_timestamp * start)2208 print_diff_now (struct ui_file *file, struct mi_timestamp *start)
2209 {
2210   struct mi_timestamp now;
2211 
2212   timestamp (&now);
2213   print_diff (file, start, &now);
2214 }
2215 
2216 void
mi_print_timing_maybe(struct ui_file * file)2217 mi_print_timing_maybe (struct ui_file *file)
2218 {
2219   /* If the command is -enable-timing then do_timings may be true
2220      whilst current_command_ts is not initialized.  */
2221   if (do_timings && current_command_ts)
2222     print_diff_now (file, current_command_ts);
2223 }
2224 
2225 static void
print_diff(struct ui_file * file,struct mi_timestamp * start,struct mi_timestamp * end)2226 print_diff (struct ui_file *file, struct mi_timestamp *start,
2227 	    struct mi_timestamp *end)
2228 {
2229   using namespace std::chrono;
2230 
2231   duration<double> wallclock = end->wallclock - start->wallclock;
2232   duration<double> utime = end->utime - start->utime;
2233   duration<double> stime = end->stime - start->stime;
2234 
2235   fprintf_unfiltered
2236     (file,
2237      ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
2238      wallclock.count (), utime.count (), stime.count ());
2239 }
2240 
2241 void
mi_cmd_trace_define_variable(const char * command,char ** argv,int argc)2242 mi_cmd_trace_define_variable (const char *command, char **argv, int argc)
2243 {
2244   LONGEST initval = 0;
2245   struct trace_state_variable *tsv;
2246   char *name = 0;
2247 
2248   if (argc != 1 && argc != 2)
2249     error (_("Usage: -trace-define-variable VARIABLE [VALUE]"));
2250 
2251   name = argv[0];
2252   if (*name++ != '$')
2253     error (_("Name of trace variable should start with '$'"));
2254 
2255   validate_trace_state_variable_name (name);
2256 
2257   tsv = find_trace_state_variable (name);
2258   if (!tsv)
2259     tsv = create_trace_state_variable (name);
2260 
2261   if (argc == 2)
2262     initval = value_as_long (parse_and_eval (argv[1]));
2263 
2264   tsv->initial_value = initval;
2265 }
2266 
2267 void
mi_cmd_trace_list_variables(const char * command,char ** argv,int argc)2268 mi_cmd_trace_list_variables (const char *command, char **argv, int argc)
2269 {
2270   if (argc != 0)
2271     error (_("-trace-list-variables: no arguments allowed"));
2272 
2273   tvariables_info_1 ();
2274 }
2275 
2276 void
mi_cmd_trace_find(const char * command,char ** argv,int argc)2277 mi_cmd_trace_find (const char *command, char **argv, int argc)
2278 {
2279   char *mode;
2280 
2281   if (argc == 0)
2282     error (_("trace selection mode is required"));
2283 
2284   mode = argv[0];
2285 
2286   if (strcmp (mode, "none") == 0)
2287     {
2288       tfind_1 (tfind_number, -1, 0, 0, 0);
2289       return;
2290     }
2291 
2292   check_trace_running (current_trace_status ());
2293 
2294   if (strcmp (mode, "frame-number") == 0)
2295     {
2296       if (argc != 2)
2297 	error (_("frame number is required"));
2298       tfind_1 (tfind_number, atoi (argv[1]), 0, 0, 0);
2299     }
2300   else if (strcmp (mode, "tracepoint-number") == 0)
2301     {
2302       if (argc != 2)
2303 	error (_("tracepoint number is required"));
2304       tfind_1 (tfind_tp, atoi (argv[1]), 0, 0, 0);
2305     }
2306   else if (strcmp (mode, "pc") == 0)
2307     {
2308       if (argc != 2)
2309 	error (_("PC is required"));
2310       tfind_1 (tfind_pc, 0, parse_and_eval_address (argv[1]), 0, 0);
2311     }
2312   else if (strcmp (mode, "pc-inside-range") == 0)
2313     {
2314       if (argc != 3)
2315 	error (_("Start and end PC are required"));
2316       tfind_1 (tfind_range, 0, parse_and_eval_address (argv[1]),
2317 	       parse_and_eval_address (argv[2]), 0);
2318     }
2319   else if (strcmp (mode, "pc-outside-range") == 0)
2320     {
2321       if (argc != 3)
2322 	error (_("Start and end PC are required"));
2323       tfind_1 (tfind_outside, 0, parse_and_eval_address (argv[1]),
2324 	       parse_and_eval_address (argv[2]), 0);
2325     }
2326   else if (strcmp (mode, "line") == 0)
2327     {
2328       if (argc != 2)
2329 	error (_("Line is required"));
2330 
2331       std::vector<symtab_and_line> sals
2332 	= decode_line_with_current_source (argv[1],
2333 					   DECODE_LINE_FUNFIRSTLINE);
2334       const symtab_and_line &sal = sals[0];
2335 
2336       if (sal.symtab == 0)
2337 	error (_("Could not find the specified line"));
2338 
2339       CORE_ADDR start_pc, end_pc;
2340       if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc))
2341 	tfind_1 (tfind_range, 0, start_pc, end_pc - 1, 0);
2342       else
2343 	error (_("Could not find the specified line"));
2344     }
2345   else
2346     error (_("Invalid mode '%s'"), mode);
2347 
2348   if (has_stack_frames () || get_traceframe_number () >= 0)
2349     print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1);
2350 }
2351 
2352 void
mi_cmd_trace_save(const char * command,char ** argv,int argc)2353 mi_cmd_trace_save (const char *command, char **argv, int argc)
2354 {
2355   int target_saves = 0;
2356   int generate_ctf = 0;
2357   char *filename;
2358   int oind = 0;
2359   char *oarg;
2360 
2361   enum opt
2362   {
2363     TARGET_SAVE_OPT, CTF_OPT
2364   };
2365   static const struct mi_opt opts[] =
2366     {
2367       {"r", TARGET_SAVE_OPT, 0},
2368       {"ctf", CTF_OPT, 0},
2369       { 0, 0, 0 }
2370     };
2371 
2372   while (1)
2373     {
2374       int opt = mi_getopt ("-trace-save", argc, argv, opts,
2375 			   &oind, &oarg);
2376 
2377       if (opt < 0)
2378 	break;
2379       switch ((enum opt) opt)
2380 	{
2381 	case TARGET_SAVE_OPT:
2382 	  target_saves = 1;
2383 	  break;
2384 	case CTF_OPT:
2385 	  generate_ctf = 1;
2386 	  break;
2387 	}
2388     }
2389 
2390   if (argc - oind != 1)
2391     error (_("Exactly one argument required "
2392 	     "(file in which to save trace data)"));
2393 
2394   filename = argv[oind];
2395 
2396   if (generate_ctf)
2397     trace_save_ctf (filename, target_saves);
2398   else
2399     trace_save_tfile (filename, target_saves);
2400 }
2401 
2402 void
mi_cmd_trace_start(const char * command,char ** argv,int argc)2403 mi_cmd_trace_start (const char *command, char **argv, int argc)
2404 {
2405   start_tracing (NULL);
2406 }
2407 
2408 void
mi_cmd_trace_status(const char * command,char ** argv,int argc)2409 mi_cmd_trace_status (const char *command, char **argv, int argc)
2410 {
2411   trace_status_mi (0);
2412 }
2413 
2414 void
mi_cmd_trace_stop(const char * command,char ** argv,int argc)2415 mi_cmd_trace_stop (const char *command, char **argv, int argc)
2416 {
2417   stop_tracing (NULL);
2418   trace_status_mi (1);
2419 }
2420 
2421 /* Implement the "-ada-task-info" command.  */
2422 
2423 void
mi_cmd_ada_task_info(const char * command,char ** argv,int argc)2424 mi_cmd_ada_task_info (const char *command, char **argv, int argc)
2425 {
2426   if (argc != 0 && argc != 1)
2427     error (_("Invalid MI command"));
2428 
2429   print_ada_task_info (current_uiout, argv[0], current_inferior ());
2430 }
2431 
2432 /* Print EXPRESSION according to VALUES.  */
2433 
2434 static void
print_variable_or_computed(const char * expression,enum print_values values)2435 print_variable_or_computed (const char *expression, enum print_values values)
2436 {
2437   struct value *val;
2438   struct type *type;
2439   struct ui_out *uiout = current_uiout;
2440 
2441   string_file stb;
2442 
2443   expression_up expr = parse_expression (expression);
2444 
2445   if (values == PRINT_SIMPLE_VALUES)
2446     val = evaluate_type (expr.get ());
2447   else
2448     val = evaluate_expression (expr.get ());
2449 
2450   gdb::optional<ui_out_emit_tuple> tuple_emitter;
2451   if (values != PRINT_NO_VALUES)
2452     tuple_emitter.emplace (uiout, nullptr);
2453   uiout->field_string ("name", expression);
2454 
2455   switch (values)
2456     {
2457     case PRINT_SIMPLE_VALUES:
2458       type = check_typedef (value_type (val));
2459       type_print (value_type (val), "", &stb, -1);
2460       uiout->field_stream ("type", stb);
2461       if (type->code () != TYPE_CODE_ARRAY
2462 	  && type->code () != TYPE_CODE_STRUCT
2463 	  && type->code () != TYPE_CODE_UNION)
2464 	{
2465 	  struct value_print_options opts;
2466 
2467 	  get_no_prettyformat_print_options (&opts);
2468 	  opts.deref_ref = 1;
2469 	  common_val_print (val, &stb, 0, &opts, current_language);
2470 	  uiout->field_stream ("value", stb);
2471 	}
2472       break;
2473     case PRINT_ALL_VALUES:
2474       {
2475 	struct value_print_options opts;
2476 
2477 	get_no_prettyformat_print_options (&opts);
2478 	opts.deref_ref = 1;
2479 	common_val_print (val, &stb, 0, &opts, current_language);
2480 	uiout->field_stream ("value", stb);
2481       }
2482       break;
2483     }
2484 }
2485 
2486 /* Implement the "-trace-frame-collected" command.  */
2487 
2488 void
mi_cmd_trace_frame_collected(const char * command,char ** argv,int argc)2489 mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
2490 {
2491   struct bp_location *tloc;
2492   int stepping_frame;
2493   struct collection_list *clist;
2494   struct collection_list tracepoint_list, stepping_list;
2495   struct traceframe_info *tinfo;
2496   int oind = 0;
2497   enum print_values var_print_values = PRINT_ALL_VALUES;
2498   enum print_values comp_print_values = PRINT_ALL_VALUES;
2499   int registers_format = 'x';
2500   int memory_contents = 0;
2501   struct ui_out *uiout = current_uiout;
2502   enum opt
2503   {
2504     VAR_PRINT_VALUES,
2505     COMP_PRINT_VALUES,
2506     REGISTERS_FORMAT,
2507     MEMORY_CONTENTS,
2508   };
2509   static const struct mi_opt opts[] =
2510     {
2511       {"-var-print-values", VAR_PRINT_VALUES, 1},
2512       {"-comp-print-values", COMP_PRINT_VALUES, 1},
2513       {"-registers-format", REGISTERS_FORMAT, 1},
2514       {"-memory-contents", MEMORY_CONTENTS, 0},
2515       { 0, 0, 0 }
2516     };
2517 
2518   while (1)
2519     {
2520       char *oarg;
2521       int opt = mi_getopt ("-trace-frame-collected", argc, argv, opts,
2522 			   &oind, &oarg);
2523       if (opt < 0)
2524 	break;
2525       switch ((enum opt) opt)
2526 	{
2527 	case VAR_PRINT_VALUES:
2528 	  var_print_values = mi_parse_print_values (oarg);
2529 	  break;
2530 	case COMP_PRINT_VALUES:
2531 	  comp_print_values = mi_parse_print_values (oarg);
2532 	  break;
2533 	case REGISTERS_FORMAT:
2534 	  registers_format = oarg[0];
2535 	  break;
2536 	case MEMORY_CONTENTS:
2537 	  memory_contents = 1;
2538 	  break;
2539 	}
2540     }
2541 
2542   if (oind != argc)
2543     error (_("Usage: -trace-frame-collected "
2544 	     "[--var-print-values PRINT_VALUES] "
2545 	     "[--comp-print-values PRINT_VALUES] "
2546 	     "[--registers-format FORMAT]"
2547 	     "[--memory-contents]"));
2548 
2549   /* This throws an error is not inspecting a trace frame.  */
2550   tloc = get_traceframe_location (&stepping_frame);
2551 
2552   /* This command only makes sense for the current frame, not the
2553      selected frame.  */
2554   scoped_restore_current_thread restore_thread;
2555   select_frame (get_current_frame ());
2556 
2557   encode_actions (tloc, &tracepoint_list, &stepping_list);
2558 
2559   if (stepping_frame)
2560     clist = &stepping_list;
2561   else
2562     clist = &tracepoint_list;
2563 
2564   tinfo = get_traceframe_info ();
2565 
2566   /* Explicitly wholly collected variables.  */
2567   {
2568     ui_out_emit_list list_emitter (uiout, "explicit-variables");
2569     const std::vector<std::string> &wholly_collected
2570       = clist->wholly_collected ();
2571     for (size_t i = 0; i < wholly_collected.size (); i++)
2572       {
2573 	const std::string &str = wholly_collected[i];
2574 	print_variable_or_computed (str.c_str (), var_print_values);
2575       }
2576   }
2577 
2578   /* Computed expressions.  */
2579   {
2580     ui_out_emit_list list_emitter (uiout, "computed-expressions");
2581 
2582     const std::vector<std::string> &computed = clist->computed ();
2583     for (size_t i = 0; i < computed.size (); i++)
2584       {
2585 	const std::string &str = computed[i];
2586 	print_variable_or_computed (str.c_str (), comp_print_values);
2587       }
2588   }
2589 
2590   /* Registers.  Given pseudo-registers, and that some architectures
2591      (like MIPS) actually hide the raw registers, we don't go through
2592      the trace frame info, but instead consult the register cache for
2593      register availability.  */
2594   {
2595     struct frame_info *frame;
2596     struct gdbarch *gdbarch;
2597     int regnum;
2598     int numregs;
2599 
2600     ui_out_emit_list list_emitter (uiout, "registers");
2601 
2602     frame = get_selected_frame (NULL);
2603     gdbarch = get_frame_arch (frame);
2604     numregs = gdbarch_num_cooked_regs (gdbarch);
2605 
2606     for (regnum = 0; regnum < numregs; regnum++)
2607       {
2608 	if (gdbarch_register_name (gdbarch, regnum) == NULL
2609 	    || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
2610 	  continue;
2611 
2612 	output_register (frame, regnum, registers_format, 1);
2613       }
2614   }
2615 
2616   /* Trace state variables.  */
2617   {
2618     ui_out_emit_list list_emitter (uiout, "tvars");
2619 
2620     for (int tvar : tinfo->tvars)
2621       {
2622 	struct trace_state_variable *tsv;
2623 
2624 	tsv = find_trace_state_variable_by_number (tvar);
2625 
2626 	ui_out_emit_tuple tuple_emitter (uiout, NULL);
2627 
2628 	if (tsv != NULL)
2629 	  {
2630 	    uiout->field_fmt ("name", "$%s", tsv->name.c_str ());
2631 
2632 	    tsv->value_known = target_get_trace_state_variable_value (tsv->number,
2633 								      &tsv->value);
2634 	    uiout->field_signed ("current", tsv->value);
2635 	  }
2636 	else
2637 	  {
2638 	    uiout->field_skip ("name");
2639 	    uiout->field_skip ("current");
2640 	  }
2641       }
2642   }
2643 
2644   /* Memory.  */
2645   {
2646     std::vector<mem_range> available_memory;
2647 
2648     traceframe_available_memory (&available_memory, 0, ULONGEST_MAX);
2649 
2650     ui_out_emit_list list_emitter (uiout, "memory");
2651 
2652     for (const mem_range &r : available_memory)
2653       {
2654 	struct gdbarch *gdbarch = target_gdbarch ();
2655 
2656 	ui_out_emit_tuple tuple_emitter (uiout, NULL);
2657 
2658 	uiout->field_core_addr ("address", gdbarch, r.start);
2659 	uiout->field_signed ("length", r.length);
2660 
2661 	gdb::byte_vector data (r.length);
2662 
2663 	if (memory_contents)
2664 	  {
2665 	    if (target_read_memory (r.start, data.data (), r.length) == 0)
2666 	      {
2667 		std::string data_str = bin2hex (data.data (), r.length);
2668 		uiout->field_string ("contents", data_str.c_str ());
2669 	      }
2670 	    else
2671 	      uiout->field_skip ("contents");
2672 	  }
2673       }
2674   }
2675 }
2676 
2677 /* See mi/mi-main.h.  */
2678 
2679 void
mi_cmd_fix_multi_location_breakpoint_output(const char * command,char ** argv,int argc)2680 mi_cmd_fix_multi_location_breakpoint_output (const char *command, char **argv,
2681 					     int argc)
2682 {
2683   fix_multi_location_breakpoint_output_globally = true;
2684 }
2685 
2686 /* Implement the "-complete" command.  */
2687 
2688 void
mi_cmd_complete(const char * command,char ** argv,int argc)2689 mi_cmd_complete (const char *command, char **argv, int argc)
2690 {
2691   if (argc != 1)
2692     error (_("Usage: -complete COMMAND"));
2693 
2694   if (max_completions == 0)
2695     error (_("max-completions is zero, completion is disabled."));
2696 
2697   int quote_char = '\0';
2698   const char *word;
2699 
2700   completion_result result = complete (argv[0], &word, &quote_char);
2701 
2702   std::string arg_prefix (argv[0], word - argv[0]);
2703 
2704   struct ui_out *uiout = current_uiout;
2705 
2706   if (result.number_matches > 0)
2707     uiout->field_fmt ("completion", "%s%s",
2708                       arg_prefix.c_str (),result.match_list[0]);
2709 
2710   {
2711     ui_out_emit_list completions_emitter (uiout, "matches");
2712 
2713     if (result.number_matches == 1)
2714       uiout->field_fmt (NULL, "%s%s",
2715                         arg_prefix.c_str (), result.match_list[0]);
2716     else
2717       {
2718         result.sort_match_list ();
2719         for (size_t i = 0; i < result.number_matches; i++)
2720           {
2721             uiout->field_fmt (NULL, "%s%s",
2722                               arg_prefix.c_str (), result.match_list[i + 1]);
2723           }
2724       }
2725   }
2726   uiout->field_string ("max_completions_reached",
2727                        result.number_matches == max_completions ? "1" : "0");
2728 }
2729 
2730 
2731 void _initialize_mi_main ();
2732 void
_initialize_mi_main()2733 _initialize_mi_main ()
2734 {
2735   struct cmd_list_element *c;
2736 
2737   add_setshow_boolean_cmd ("mi-async", class_run,
2738 			   &mi_async_1, _("\
2739 Set whether MI asynchronous mode is enabled."), _("\
2740 Show whether MI asynchronous mode is enabled."), _("\
2741 Tells GDB whether MI should be in asynchronous mode."),
2742 			   set_mi_async_command,
2743 			   show_mi_async_command,
2744 			   &setlist,
2745 			   &showlist);
2746 
2747   /* Alias old "target-async" to "mi-async".  */
2748   c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &setlist);
2749   deprecate_cmd (c, "set mi-async");
2750   c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &showlist);
2751   deprecate_cmd (c, "show mi-async");
2752 }
2753