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