nm: Add --quiet to suppress "no symbols" diagnostic
[binutils-gdb.git] / gdb / mi / mi-main.c
blob9a14d78e1e27a2aac20cb33472a1fe983fa5b6fb
1 /* MI Command Set.
3 Copyright (C) 2000-2021 Free Software Foundation, Inc.
5 Contributed by Cygnus Solutions (a Red Hat company).
7 This file is part of GDB.
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.
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.
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/>. */
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"
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>
66 enum
68 FROM_TTY = 0
71 int mi_debug_p;
73 /* This is used to pass the current command timestamp down to
74 continuation routines. */
75 static struct mi_timestamp *current_command_ts;
77 static int do_timings = 0;
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;
85 int running_result_record_printed = 1;
87 /* Flag indicating that the target has proceeded since the last
88 command was issued. */
89 int mi_proceeded;
91 static void mi_cmd_execute (struct mi_parse *parse);
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);
102 /* Controls whether the frontend wants MI in async mode. */
103 static bool mi_async = false;
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;
109 static void
110 set_mi_async_command (const char *args, int from_tty,
111 struct cmd_list_element *c)
113 if (have_live_inferiors ())
115 mi_async_1 = mi_async;
116 error (_("Cannot change this setting while the inferior is running."));
119 mi_async = mi_async_1;
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)
127 fprintf_filtered (file,
128 _("Whether MI is in asynchronous mode is %s.\n"),
129 value);
132 /* A wrapper for target_can_async_p that takes the MI setting into
133 account. */
136 mi_async_p (void)
138 return mi_async && target_can_async_p ();
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. */
145 static void timestamp (struct mi_timestamp *tv);
147 static void print_diff (struct ui_file *file, struct mi_timestamp *start,
148 struct mi_timestamp *end);
150 void
151 mi_cmd_gdb_exit (const char *command, char **argv, int argc)
153 struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
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);
165 void
166 mi_cmd_exec_next (const char *command, char **argv, int argc)
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);
175 void
176 mi_cmd_exec_next_instruction (const char *command, char **argv, int argc)
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);
185 void
186 mi_cmd_exec_step (const char *command, char **argv, int argc)
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);
195 void
196 mi_cmd_exec_step_instruction (const char *command, char **argv, int argc)
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);
205 void
206 mi_cmd_exec_finish (const char *command, char **argv, int argc)
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);
215 void
216 mi_cmd_exec_return (const char *command, char **argv, int argc)
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);
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);
234 void
235 mi_cmd_exec_jump (const char *args, char **argv, int argc)
237 /* FIXME: Should call a libgdb function, not a cli wrapper. */
238 mi_execute_async_cli_command ("jump", argv, argc);
241 static void
242 proceed_thread (struct thread_info *thread, int pid)
244 if (thread->state != THREAD_STOPPED)
245 return;
247 if (pid != 0 && thread->ptid.pid () != pid)
248 return;
250 switch_to_thread (thread);
251 clear_proceed_status (0);
252 proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT);
255 static int
256 proceed_thread_callback (struct thread_info *thread, void *arg)
258 int pid = *(int *)arg;
260 proceed_thread (thread, pid);
261 return 0;
264 static void
265 exec_continue (char **argv, int argc)
267 prepare_execution_command (current_top_target (), mi_async_p ());
269 if (non_stop)
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.
276 See comment on infcmd.c:proceed_thread_callback for rationale. */
277 if (current_context->all || current_context->thread_group != -1)
279 scoped_restore_current_thread restore_thread;
280 int pid = 0;
282 if (!current_context->all)
284 struct inferior *inf
285 = find_inferior_id (current_context->thread_group);
287 pid = inf->pid;
289 iterate_over_threads (proceed_thread_callback, &pid);
291 else
293 continue_1 (0);
296 else
298 scoped_restore save_multi = make_scoped_restore (&sched_multi);
300 if (current_context->all)
302 sched_multi = 1;
303 continue_1 (0);
305 else
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);
316 static void
317 exec_reverse_continue (char **argv, int argc)
319 enum exec_direction_kind dir = execution_direction;
321 if (dir == EXEC_REVERSE)
322 error (_("Already in reverse mode."));
324 if (!target_can_execute_reverse ())
325 error (_("Target %s does not support this command."), target_shortname);
327 scoped_restore save_exec_dir = make_scoped_restore (&execution_direction,
328 EXEC_REVERSE);
329 exec_continue (argv, argc);
332 void
333 mi_cmd_exec_continue (const char *command, char **argv, int argc)
335 if (argc > 0 && strcmp (argv[0], "--reverse") == 0)
336 exec_reverse_continue (argv + 1, argc - 1);
337 else
338 exec_continue (argv, argc);
341 static int
342 interrupt_thread_callback (struct thread_info *thread, void *arg)
344 int pid = *(int *)arg;
346 if (thread->state != THREAD_RUNNING)
347 return 0;
349 if (thread->ptid.pid () != pid)
350 return 0;
352 target_stop (thread->ptid);
353 return 0;
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. */
362 void
363 mi_cmd_exec_interrupt (const char *command, char **argv, int argc)
365 /* In all-stop mode, everything stops, so we don't need to try
366 anything specific. */
367 if (!non_stop)
369 interrupt_target_1 (0);
370 return;
373 if (current_context->all)
375 /* This will interrupt all threads in all inferiors. */
376 interrupt_target_1 (1);
378 else if (current_context->thread_group != -1)
380 struct inferior *inf = find_inferior_id (current_context->thread_group);
382 iterate_over_threads (interrupt_thread_callback, &inf->pid);
384 else
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);
393 /* Start the execution of the given inferior.
395 START_P indicates whether the program should be stopped when reaching the
396 main subprogram (similar to what the CLI "start" command does). */
398 static void
399 run_one_inferior (inferior *inf, bool start_p)
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 ();
405 if (inf->pid != 0)
407 thread_info *tp = any_thread_of_inferior (inf);
408 if (tp == NULL)
409 error (_("Inferior has no threads."));
411 switch_to_thread (tp);
413 else
414 switch_to_inferior_no_thread (inf);
415 mi_execute_cli_command (run_cmd, async_p,
416 async_p ? "&" : NULL);
419 void
420 mi_cmd_exec_run (const char *command, char **argv, int argc)
422 int start_p = 0;
424 /* Parse the command options. */
425 enum opt
427 START_OPT,
429 static const struct mi_opt opts[] =
431 {"-start", START_OPT, 0},
432 {NULL, 0, 0},
435 int oind = 0;
436 char *oarg;
438 while (1)
440 int opt = mi_getopt ("-exec-run", argc, argv, opts, &oind, &oarg);
442 if (opt < 0)
443 break;
444 switch ((enum opt) opt)
446 case START_OPT:
447 start_p = 1;
448 break;
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]);
457 if (current_context->all)
459 scoped_restore_current_pspace_and_thread restore_pspace_thread;
461 for (inferior *inf : all_inferiors ())
462 run_one_inferior (inf, start_p);
464 else
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 ();
470 mi_execute_cli_command (run_cmd, async_p,
471 async_p ? "&" : NULL);
476 static int
477 find_thread_of_process (struct thread_info *ti, void *p)
479 int pid = *(int *)p;
481 if (ti->ptid.pid () == pid && ti->state != THREAD_EXITED)
482 return 1;
484 return 0;
487 void
488 mi_cmd_target_detach (const char *command, char **argv, int argc)
490 if (argc != 0 && argc != 1)
491 error (_("Usage: -target-detach [pid | thread-group]"));
493 if (argc == 1)
495 struct thread_info *tp;
496 char *end = argv[0];
497 int pid;
499 /* First see if we are dealing with a thread-group id. */
500 if (*argv[0] == 'i')
502 struct inferior *inf;
503 int id = strtoul (argv[0] + 1, &end, 0);
505 if (*end != '\0')
506 error (_("Invalid syntax of thread-group id '%s'"), argv[0]);
508 inf = find_inferior_id (id);
509 if (!inf)
510 error (_("Non-existent thread-group id '%d'"), id);
512 pid = inf->pid;
514 else
516 /* We must be dealing with a pid. */
517 pid = strtol (argv[0], &end, 10);
519 if (*end != '\0')
520 error (_("Invalid identifier '%s'"), argv[0]);
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"));
529 switch_to_thread (tp);
532 detach_command (NULL, 0);
535 void
536 mi_cmd_target_flash_erase (const char *command, char **argv, int argc)
538 flash_erase_command (NULL, 0);
541 void
542 mi_cmd_thread_select (const char *command, char **argv, int argc)
544 if (argc != 1)
545 error (_("-thread-select: USAGE: threadnum."));
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);
552 ptid_t previous_ptid = inferior_ptid;
554 thread_select (argv[0], thr);
556 print_selected_thread_frame (current_uiout,
557 USER_SELECTED_THREAD | USER_SELECTED_FRAME);
559 /* Notify if the thread has effectively changed. */
560 if (inferior_ptid != previous_ptid)
562 gdb::observers::user_selected_context_changed.notify
563 (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
567 void
568 mi_cmd_thread_list_ids (const char *command, char **argv, int argc)
570 if (argc != 0)
571 error (_("-thread-list-ids: No arguments required."));
573 int num = 0;
574 int current_thread = -1;
576 update_thread_list ();
579 ui_out_emit_tuple tuple_emitter (current_uiout, "thread-ids");
581 for (thread_info *tp : all_non_exited_threads ())
583 if (tp->ptid == inferior_ptid)
584 current_thread = tp->global_num;
586 num++;
587 current_uiout->field_signed ("thread-id", tp->global_num);
591 if (current_thread != -1)
592 current_uiout->field_signed ("current-thread-id", current_thread);
593 current_uiout->field_signed ("number-of-threads", num);
596 void
597 mi_cmd_thread_info (const char *command, char **argv, int argc)
599 if (argc != 0 && argc != 1)
600 error (_("Invalid MI command"));
602 print_thread_info (current_uiout, argv[0], -1);
605 struct collect_cores_data
607 int pid;
608 std::set<int> cores;
611 static int
612 collect_cores (struct thread_info *ti, void *xdata)
614 struct collect_cores_data *data = (struct collect_cores_data *) xdata;
616 if (ti->ptid.pid () == data->pid)
618 int core = target_core_of_thread (ti->ptid);
620 if (core != -1)
621 data->cores.insert (core);
624 return 0;
627 struct print_one_inferior_data
629 int recurse;
630 const std::set<int> *inferiors;
633 static void
634 print_one_inferior (struct inferior *inferior, bool recurse,
635 const std::set<int> &ids)
637 struct ui_out *uiout = current_uiout;
639 if (ids.empty () || (ids.find (inferior->pid) != ids.end ()))
641 struct collect_cores_data data;
642 ui_out_emit_tuple tuple_emitter (uiout, NULL);
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);
652 if (inferior->pspace->exec_filename != nullptr)
654 uiout->field_string ("executable",
655 inferior->pspace->exec_filename.get ());
658 if (inferior->pid != 0)
660 data.pid = inferior->pid;
661 iterate_over_threads (collect_cores, &data);
664 if (!data.cores.empty ())
666 ui_out_emit_list list_emitter (uiout, "cores");
668 for (int b : data.cores)
669 uiout->field_signed (NULL, b);
672 if (recurse)
673 print_thread_info (uiout, NULL, inferior->pid);
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. */
681 static void
682 output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
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;
689 for (p = strtok_r (p, ",", &saveptr); p; p = strtok_r (NULL, ",", &saveptr))
690 uiout->field_string (NULL, p);
693 static void
694 list_available_thread_groups (const std::set<int> &ids, int recurse)
696 struct ui_out *uiout = current_uiout;
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;
702 /* get_osdata will throw if it cannot return data. */
703 std::unique_ptr<osdata> data = get_osdata ("processes");
705 if (recurse)
707 std::unique_ptr<osdata> threads = get_osdata ("threads");
709 for (const osdata_item &item : threads->items)
711 const std::string *pid = get_osdata_column (item, "pid");
712 int pid_i = strtoul (pid->c_str (), NULL, 0);
714 tree[pid_i].push_back (item);
718 ui_out_emit_list list_emitter (uiout, "groups");
720 for (const osdata_item &item : data->items)
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");
727 int pid_i = strtoul (pid->c_str (), NULL, 0);
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;
735 ui_out_emit_tuple tuple_emitter (uiout, NULL);
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 ());
746 if (recurse)
748 auto n = tree.find (pid_i);
749 if (n != tree.end ())
751 std::vector<osdata_item> &children = n->second;
753 ui_out_emit_list thread_list_emitter (uiout, "threads");
755 for (const osdata_item &child : children)
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");
761 uiout->field_string ("id", tid->c_str ());
762 if (tcore)
763 uiout->field_string ("core", tcore->c_str ());
770 void
771 mi_cmd_list_thread_groups (const char *command, char **argv, int argc)
773 struct ui_out *uiout = current_uiout;
774 int available = 0;
775 int recurse = 0;
776 std::set<int> ids;
778 enum opt
780 AVAILABLE_OPT, RECURSE_OPT
782 static const struct mi_opt opts[] =
784 {"-available", AVAILABLE_OPT, 0},
785 {"-recurse", RECURSE_OPT, 1},
786 { 0, 0, 0 }
789 int oind = 0;
790 char *oarg;
792 while (1)
794 int opt = mi_getopt ("-list-thread-groups", argc, argv, opts,
795 &oind, &oarg);
797 if (opt < 0)
798 break;
799 switch ((enum opt) opt)
801 case AVAILABLE_OPT:
802 available = 1;
803 break;
804 case RECURSE_OPT:
805 if (strcmp (oarg, "0") == 0)
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;
816 for (; oind < argc; ++oind)
818 char *end;
819 int inf;
821 if (*(argv[oind]) != 'i')
822 error (_("invalid syntax of group id '%s'"), argv[oind]);
824 inf = strtoul (argv[oind] + 1, &end, 0);
826 if (*end != '\0')
827 error (_("invalid syntax of group id '%s'"), argv[oind]);
828 ids.insert (inf);
831 if (available)
833 list_available_thread_groups (ids, recurse);
835 else if (ids.size () == 1)
837 /* Local thread groups, single id. */
838 int id = *(ids.begin ());
839 struct inferior *inf = find_inferior_id (id);
841 if (!inf)
842 error (_("Non-existent thread group id '%d'"), id);
844 print_thread_info (uiout, NULL, inf->pid);
846 else
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);
859 void
860 mi_cmd_data_list_register_names (const char *command, char **argv, int argc)
862 struct gdbarch *gdbarch;
863 struct ui_out *uiout = current_uiout;
864 int regnum, numregs;
865 int i;
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. */
874 gdbarch = get_current_arch ();
875 numregs = gdbarch_num_cooked_regs (gdbarch);
877 ui_out_emit_list list_emitter (uiout, "register-names");
879 if (argc == 0) /* No args, just do all the regs. */
881 for (regnum = 0;
882 regnum < numregs;
883 regnum++)
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));
893 /* Else, list of register #s, just do listed regs. */
894 for (i = 0; i < argc; i++)
896 regnum = atoi (argv[i]);
897 if (regnum < 0 || regnum >= numregs)
898 error (_("bad register number"));
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));
908 void
909 mi_cmd_data_list_changed_registers (const char *command, char **argv, int argc)
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;
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. */
923 prev_regs = std::move (this_regs);
924 this_regs = frame_save_as_regcache (get_selected_frame (NULL));
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. */
933 gdbarch = this_regs->arch ();
934 numregs = gdbarch_num_cooked_regs (gdbarch);
936 ui_out_emit_list list_emitter (uiout, "changed-registers");
938 if (argc == 0)
940 /* No args, just do all the regs. */
941 for (regnum = 0;
942 regnum < numregs;
943 regnum++)
945 if (gdbarch_register_name (gdbarch, regnum) == NULL
946 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
947 continue;
949 if (register_changed_p (regnum, prev_regs.get (),
950 this_regs.get ()))
951 uiout->field_signed (NULL, regnum);
955 /* Else, list of register #s, just do listed regs. */
956 for (i = 0; i < argc; i++)
958 regnum = atoi (argv[i]);
960 if (regnum >= 0
961 && regnum < numregs
962 && gdbarch_register_name (gdbarch, regnum) != NULL
963 && *gdbarch_register_name (gdbarch, regnum) != '\000')
965 if (register_changed_p (regnum, prev_regs.get (),
966 this_regs.get ()))
967 uiout->field_signed (NULL, regnum);
969 else
970 error (_("bad register number"));
974 static bool
975 register_changed_p (int regnum, readonly_detached_regcache *prev_regs,
976 readonly_detached_regcache *this_regs)
978 struct gdbarch *gdbarch = this_regs->arch ();
979 struct value *prev_value, *this_value;
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;
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);
992 auto ret = !value_contents_eq (prev_value, 0, this_value, 0,
993 register_size (gdbarch, regnum));
995 release_value (prev_value);
996 release_value (this_value);
997 return ret;
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. */
1009 void
1010 mi_cmd_data_list_register_values (const char *command, char **argv, int argc)
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
1021 SKIP_UNAVAILABLE,
1023 static const struct mi_opt opts[] =
1025 {"-skip-unavailable", SKIP_UNAVAILABLE, 0},
1026 { 0, 0, 0 }
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. */
1036 while (1)
1038 char *oarg;
1039 int opt = mi_getopt ("-data-list-register-values", argc, argv,
1040 opts, &oind, &oarg);
1042 if (opt < 0)
1043 break;
1044 switch ((enum opt) opt)
1046 case SKIP_UNAVAILABLE:
1047 skip_unavailable = 1;
1048 break;
1052 if (argc - oind < 1)
1053 error (_("-data-list-register-values: Usage: "
1054 "-data-list-register-values [--skip-unavailable] <format>"
1055 " [<regnum1>...<regnumN>]"));
1057 format = (int) argv[oind][0];
1059 frame = get_selected_frame (NULL);
1060 gdbarch = get_frame_arch (frame);
1061 numregs = gdbarch_num_cooked_regs (gdbarch);
1063 ui_out_emit_list list_emitter (uiout, "register-values");
1065 if (argc - oind == 1)
1067 /* No args, beside the format: do all the regs. */
1068 for (regnum = 0;
1069 regnum < numregs;
1070 regnum++)
1072 if (gdbarch_register_name (gdbarch, regnum) == NULL
1073 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
1074 continue;
1076 output_register (frame, regnum, format, skip_unavailable);
1080 /* Else, list of register #s, just do listed regs. */
1081 for (i = 1 + oind; i < argc; i++)
1083 regnum = atoi (argv[i]);
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"));
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. */
1099 static void
1100 output_register (struct frame_info *frame, int regnum, int format,
1101 int skip_unavailable)
1103 struct ui_out *uiout = current_uiout;
1104 struct value *val = value_of_register (regnum, frame);
1105 struct value_print_options opts;
1107 if (skip_unavailable && !value_entirely_available (val))
1108 return;
1110 ui_out_emit_tuple tuple_emitter (uiout, NULL);
1111 uiout->field_signed ("number", regnum);
1113 if (format == 'N')
1114 format = 0;
1116 if (format == 'r')
1117 format = 'z';
1119 string_file stb;
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);
1127 /* Write given values into registers. The registers and values are
1128 given as pairs. The corresponding MI command is
1129 -data-write-register-values <format>
1130 [<regnum1> <value1>...<regnumN> <valueN>] */
1131 void
1132 mi_cmd_data_write_register_values (const char *command, char **argv, int argc)
1134 struct regcache *regcache;
1135 struct gdbarch *gdbarch;
1136 int numregs, i;
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. */
1145 regcache = get_current_regcache ();
1146 gdbarch = regcache->arch ();
1147 numregs = gdbarch_num_cooked_regs (gdbarch);
1149 if (argc == 0)
1150 error (_("-data-write-register-values: Usage: -data-write-register-"
1151 "values <format> [<regnum1> <value1>...<regnumN> <valueN>]"));
1153 if (!target_has_registers ())
1154 error (_("-data-write-register-values: No registers."));
1156 if (!(argc - 1))
1157 error (_("-data-write-register-values: No regs and values specified."));
1159 if ((argc - 1) % 2)
1160 error (_("-data-write-register-values: "
1161 "Regs and vals are not in pairs."));
1163 for (i = 1; i < argc; i = i + 2)
1165 int regnum = atoi (argv[i]);
1167 if (regnum >= 0 && regnum < numregs
1168 && gdbarch_register_name (gdbarch, regnum)
1169 && *gdbarch_register_name (gdbarch, regnum))
1171 LONGEST value;
1173 /* Get the value as a number. */
1174 value = parse_and_eval_address (argv[i + 1]);
1176 /* Write it down. */
1177 regcache_cooked_write_signed (regcache, regnum, value);
1179 else
1180 error (_("bad register number"));
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. */
1188 void
1189 mi_cmd_data_evaluate_expression (const char *command, char **argv, int argc)
1191 struct value *val;
1192 struct value_print_options opts;
1193 struct ui_out *uiout = current_uiout;
1195 if (argc != 1)
1196 error (_("-data-evaluate-expression: "
1197 "Usage: -data-evaluate-expression expression"));
1199 expression_up expr = parse_expression (argv[0]);
1201 val = evaluate_expression (expr.get ());
1203 string_file stb;
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);
1210 uiout->field_stream ("value", stb);
1213 /* This is the -data-read-memory command.
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.
1224 Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
1225 displays them. Returns:
1227 {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
1229 Returns:
1230 The number of bytes read is SIZE*ROW*COL. */
1232 void
1233 mi_cmd_data_read_memory (const char *command, char **argv, int argc)
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
1250 OFFSET_OPT
1252 static const struct mi_opt opts[] =
1254 {"o", OFFSET_OPT, 1},
1255 { 0, 0, 0 }
1258 while (1)
1260 int opt = mi_getopt ("-data-read-memory", argc, argv, opts,
1261 &oind, &oarg);
1263 if (opt < 0)
1264 break;
1265 switch ((enum opt) opt)
1267 case OFFSET_OPT:
1268 offset = atol (oarg);
1269 break;
1272 argv += oind;
1273 argc -= oind;
1275 if (argc < 5 || argc > 6)
1276 error (_("-data-read-memory: Usage: "
1277 "ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR]."));
1279 /* Extract all the arguments. */
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)
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';
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."));
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."));
1320 /* The un-printable character when printing ascii. */
1321 if (argc == 6)
1322 aschar = *argv[5];
1323 else
1324 aschar = 0;
1326 /* Create a buffer and read it in. */
1327 total_bytes = word_size * nr_rows * nr_cols;
1329 gdb::byte_vector mbuf (total_bytes);
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."));
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);
1345 /* Build the result as a two dimensional table. */
1347 int row;
1348 int row_byte;
1350 string_file stream;
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)
1357 int col;
1358 int col_byte;
1359 struct value_print_options print_opts;
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); */
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)
1372 if (col_byte + word_size > nr_bytes)
1374 uiout->field_string (NULL, "N/A");
1376 else
1378 stream.clear ();
1379 print_scalar_formatted (&mbuf[col_byte], word_type,
1380 &print_opts, word_asize, &stream);
1381 uiout->field_stream (NULL, stream);
1386 if (aschar)
1388 int byte;
1390 stream.clear ();
1391 for (byte = row_byte;
1392 byte < row_byte + word_size * nr_cols; byte++)
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]);
1401 uiout->field_stream ("ascii", stream);
1407 void
1408 mi_cmd_data_read_memory_bytes (const char *command, char **argv, int argc)
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
1420 OFFSET_OPT
1422 static const struct mi_opt opts[] =
1424 {"o", OFFSET_OPT, 1},
1425 { 0, 0, 0 }
1428 while (1)
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)
1436 case OFFSET_OPT:
1437 offset = atol (oarg);
1438 break;
1441 argv += oind;
1442 argc -= oind;
1444 if (argc != 2)
1445 error (_("Usage: [ -o OFFSET ] ADDR LENGTH."));
1447 addr = parse_and_eval_address (argv[0]) + offset;
1448 length = atol (argv[1]);
1450 std::vector<memory_read_result> result
1451 = read_memory_robust (current_top_target (), addr, length);
1453 if (result.size () == 0)
1454 error (_("Unable to read memory."));
1456 ui_out_emit_list list_emitter (uiout, "memory");
1457 for (const memory_read_result &read_result : result)
1459 ui_out_emit_tuple tuple_emitter (uiout, NULL);
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);
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 ());
1472 /* Implementation of the -data-write_memory command.
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.
1485 Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
1487 Prints nothing. */
1489 void
1490 mi_cmd_data_write_memory (const char *command, char **argv, int argc)
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
1504 OFFSET_OPT
1506 static const struct mi_opt opts[] =
1508 {"o", OFFSET_OPT, 1},
1509 { 0, 0, 0 }
1512 while (1)
1514 int opt = mi_getopt ("-data-write-memory", argc, argv, opts,
1515 &oind, &oarg);
1517 if (opt < 0)
1518 break;
1519 switch ((enum opt) opt)
1521 case OFFSET_OPT:
1522 offset = atol (oarg);
1523 break;
1526 argv += oind;
1527 argc -= oind;
1529 if (argc != 4)
1530 error (_("-data-write-memory: Usage: "
1531 "[-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE."));
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]);
1539 /* Calculate the real address of the write destination. */
1540 addr += (offset * word_size);
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);
1551 /* Implementation of the -data-write-memory-bytes command.
1553 ADDR: start address
1554 DATA: string of bytes to write at that address
1555 COUNT: number of bytes to be filled (decimal integer). */
1557 void
1558 mi_cmd_data_write_memory_bytes (const char *command, char **argv, int argc)
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;
1566 if (argc != 2 && argc != 3)
1567 error (_("Usage: ADDR DATA [COUNT]."));
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 ());
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);
1579 len_bytes = len_hex / 2;
1580 len_units = len_bytes / unit_size;
1582 if (argc == 3)
1583 count_units = strtoul (argv[2], NULL, 10);
1584 else
1585 count_units = len_units;
1587 gdb::byte_vector databuf (len_bytes);
1589 for (i = 0; i < len_bytes; ++i)
1591 int x;
1592 if (sscanf (cdata + i * 2, "%02x", &x) != 1)
1593 error (_("Invalid argument"));
1594 databuf[i] = (gdb_byte) x;
1597 gdb::byte_vector data;
1598 if (len_units < count_units)
1600 /* Pattern is made of less units than count:
1601 repeat pattern to fill memory. */
1602 data = gdb::byte_vector (count_units * unit_size);
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);
1611 if (remaining_units > 0)
1612 memcpy (&data[steps * len_bytes], &databuf[0],
1613 remaining_units * unit_size);
1615 else
1617 /* Pattern is longer than or equal to count:
1618 just copy count addressable memory units. */
1619 data = std::move (databuf);
1622 write_memory_with_notification (addr, data.data (), count_units);
1625 void
1626 mi_cmd_enable_timings (const char *command, char **argv, int argc)
1628 if (argc == 0)
1629 do_timings = 1;
1630 else if (argc == 1)
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;
1639 else
1640 goto usage_error;
1642 return;
1644 usage_error:
1645 error (_("-enable-timings: Usage: %s {yes|no}"), command);
1648 void
1649 mi_cmd_list_features (const char *command, char **argv, int argc)
1651 if (argc == 0)
1653 struct ui_out *uiout = current_uiout;
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");
1668 if (ext_lang_initialized_p (get_ext_lang_defn (EXT_LANG_PYTHON)))
1669 uiout->field_string (NULL, "python");
1671 return;
1674 error (_("-list-features should be passed no arguments"));
1677 void
1678 mi_cmd_list_target_features (const char *command, char **argv, int argc)
1680 if (argc == 0)
1682 struct ui_out *uiout = current_uiout;
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;
1692 error (_("-list-target-features should be passed no arguments"));
1695 void
1696 mi_cmd_add_inferior (const char *command, char **argv, int argc)
1698 struct inferior *inf;
1700 if (argc != 0)
1701 error (_("-add-inferior should be passed no arguments"));
1703 inf = add_inferior_with_spaces ();
1705 current_uiout->field_fmt ("inferior", "i%d", inf->num);
1708 void
1709 mi_cmd_remove_inferior (const char *command, char **argv, int argc)
1711 int id;
1712 struct inferior *inf_to_remove;
1714 if (argc != 1)
1715 error (_("-remove-inferior should be passed a single argument"));
1717 if (sscanf (argv[0], "i%d", &id) != 1)
1718 error (_("the thread group id is syntactically invalid"));
1720 inf_to_remove = find_inferior_id (id);
1721 if (inf_to_remove == NULL)
1722 error (_("the specified thread group does not exist"));
1724 if (inf_to_remove->pid != 0)
1725 error (_("cannot remove an active inferior"));
1727 if (inf_to_remove == current_inferior ())
1729 struct thread_info *tp = 0;
1730 struct inferior *new_inferior = NULL;
1732 for (inferior *inf : all_inferiors ())
1734 if (inf != inf_to_remove)
1735 new_inferior = inf;
1738 if (new_inferior == NULL)
1739 error (_("Cannot remove last inferior"));
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);
1751 delete_inferior (inf_to_remove);
1756 /* Execute a command within a safe environment.
1757 Return <0 for error; >=0 for ok.
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). */
1763 static void
1764 captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
1766 struct mi_interp *mi = (struct mi_interp *) command_interp ();
1768 if (do_timings)
1769 current_command_ts = context->cmd_start;
1771 scoped_restore save_token = make_scoped_restore (&current_token,
1772 context->token);
1774 running_result_record_printed = 0;
1775 mi_proceeded = 0;
1776 switch (context->op)
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);
1786 mi_cmd_execute (context);
1788 /* Print the result if there were no errors.
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)
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);
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;
1813 case CLI_COMMAND:
1815 char *argv[2];
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);
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))
1833 if (!running_result_record_printed)
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);
1842 else
1843 mi_out_rewind (uiout);
1845 break;
1850 /* Print a gdb exception to the MI output stream. */
1852 static void
1853 mi_print_exception (const char *token, const struct gdb_exception &exception)
1855 struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
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);
1865 switch (exception.error)
1867 case UNDEFINED_COMMAND_ERROR:
1868 fputs_unfiltered (",code=\"undefined-command\"", mi->raw_stdout);
1869 break;
1872 fputs_unfiltered ("\n", mi->raw_stdout);
1875 /* Determine whether the parsed command already notifies the
1876 user_selected_context_changed observer. */
1878 static int
1879 command_notifies_uscc_observer (struct mi_parse *command)
1881 if (command->op == CLI_COMMAND)
1883 /* CLI commands "thread" and "inferior" already send it. */
1884 return (strncmp (command->command, "thread ", 7) == 0
1885 || strncmp (command->command, "inferior ", 9) == 0);
1887 else /* MI_COMMAND */
1889 if (strcmp (command->command, "interpreter-exec") == 0
1890 && command->argc > 1)
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);
1897 else
1898 /* -thread-select already sends it. */
1899 return strcmp (command->command, "thread-select") == 0;
1903 void
1904 mi_execute_command (const char *cmd, int from_tty)
1906 char *token;
1907 std::unique_ptr<struct mi_parse> command;
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);
1914 target_log_command (cmd);
1918 command = mi_parse (cmd, &token);
1920 catch (const gdb_exception &exception)
1922 mi_print_exception (token, exception);
1923 xfree (token);
1926 if (command != NULL)
1928 ptid_t previous_ptid = inferior_ptid;
1930 gdb::optional<scoped_restore_tmpl<int>> restore_suppress;
1932 if (command->cmd != NULL && command->cmd->suppress_notification != NULL)
1933 restore_suppress.emplace (command->cmd->suppress_notification, 1);
1935 command->token = token;
1937 if (do_timings)
1939 command->cmd_start = new mi_timestamp ();
1940 timestamp (command->cmd_start);
1945 captured_mi_execute_command (current_uiout, command.get ());
1947 catch (const gdb_exception &result)
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;
1956 /* The command execution failed and error() was called
1957 somewhere. */
1958 mi_print_exception (command->token, result);
1959 mi_out_rewind (current_uiout);
1962 bpstat_do_actions ();
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 ()))
1974 int report_change = 0;
1976 if (command->thread == -1)
1978 report_change = (previous_ptid != null_ptid
1979 && inferior_ptid != previous_ptid
1980 && inferior_ptid != null_ptid);
1982 else if (inferior_ptid != null_ptid)
1984 struct thread_info *ti = inferior_thread ();
1986 report_change = (ti->global_num != command->thread);
1989 if (report_change)
1991 gdb::observers::user_selected_context_changed.notify
1992 (USER_SELECTED_THREAD | USER_SELECTED_FRAME);
1998 static void
1999 mi_cmd_execute (struct mi_parse *parse)
2001 scoped_value_mark cleanup = prepare_execute_command ();
2003 if (parse->all && parse->thread_group != -1)
2004 error (_("Cannot specify --thread-group together with --all"));
2006 if (parse->all && parse->thread != -1)
2007 error (_("Cannot specify --thread together with --all"));
2009 if (parse->thread_group != -1 && parse->thread != -1)
2010 error (_("Cannot specify --thread together with --thread-group"));
2012 if (parse->frame != -1 && parse->thread == -1)
2013 error (_("Cannot specify --frame without --thread"));
2015 if (parse->thread_group != -1)
2017 struct inferior *inf = find_inferior_id (parse->thread_group);
2018 struct thread_info *tp = 0;
2020 if (!inf)
2021 error (_("Invalid thread group for the --thread-group option"));
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);
2038 if (parse->thread != -1)
2040 thread_info *tp = find_thread_global_id (parse->thread);
2042 if (tp == NULL)
2043 error (_("Invalid thread id: %d"), parse->thread);
2045 if (tp->state == THREAD_EXITED)
2046 error (_("Thread id: %d has terminated"), parse->thread);
2048 switch_to_thread (tp);
2051 if (parse->frame != -1)
2053 struct frame_info *fid;
2054 int frame = parse->frame;
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);
2064 gdb::optional<scoped_restore_current_language> lang_saver;
2065 if (parse->language != language_unknown)
2067 lang_saver.emplace ();
2068 set_language (parse->language);
2071 current_context = parse;
2073 if (parse->cmd->argv_func != NULL)
2075 parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
2077 else if (parse->cmd->cli.cmd != 0)
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);
2085 else
2087 /* FIXME: DELETE THIS. */
2088 string_file stb;
2090 stb.puts ("Undefined mi command: ");
2091 stb.putstr (parse->command, '"');
2092 stb.puts (" (missing implementation)");
2094 error_stream (stb);
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. */
2102 void
2103 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
2105 if (cmd != 0)
2107 std::string run = cmd;
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 */ );
2119 void
2120 mi_execute_async_cli_command (const char *cli_command, char **argv, int argc)
2122 std::string run = cli_command;
2124 if (argc)
2125 run = run + " " + *argv;
2126 if (mi_async_p ())
2127 run += "&";
2129 execute_command (run.c_str (), 0 /* from_tty */ );
2132 void
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)
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 ();
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. */
2149 std::unique_ptr<ui_out> uiout (mi_out_new (current_interpreter ()->name ()));
2150 if (uiout == nullptr)
2151 return;
2153 scoped_restore save_uiout
2154 = make_scoped_restore (&current_uiout, uiout.get ());
2156 new_section = (previous_sect_name ?
2157 strcmp (previous_sect_name, section_name) : 1);
2158 if (new_section)
2160 xfree (previous_sect_name);
2161 previous_sect_name = xstrdup (section_name);
2163 if (current_token)
2164 fputs_unfiltered (current_token, mi->raw_stdout);
2165 fputs_unfiltered ("+download", mi->raw_stdout);
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);
2172 mi_out_put (uiout.get (), mi->raw_stdout);
2173 fputs_unfiltered ("\n", mi->raw_stdout);
2174 gdb_flush (mi->raw_stdout);
2177 steady_clock::time_point time_now = steady_clock::now ();
2178 if (time_now - last_update > milliseconds (500))
2180 last_update = time_now;
2181 if (current_token)
2182 fputs_unfiltered (current_token, mi->raw_stdout);
2183 fputs_unfiltered ("+download", mi->raw_stdout);
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);
2192 mi_out_put (uiout.get (), mi->raw_stdout);
2193 fputs_unfiltered ("\n", mi->raw_stdout);
2194 gdb_flush (mi->raw_stdout);
2198 static void
2199 timestamp (struct mi_timestamp *tv)
2201 using namespace std::chrono;
2203 tv->wallclock = steady_clock::now ();
2204 run_time_clock::now (tv->utime, tv->stime);
2207 static void
2208 print_diff_now (struct ui_file *file, struct mi_timestamp *start)
2210 struct mi_timestamp now;
2212 timestamp (&now);
2213 print_diff (file, start, &now);
2216 void
2217 mi_print_timing_maybe (struct ui_file *file)
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);
2225 static void
2226 print_diff (struct ui_file *file, struct mi_timestamp *start,
2227 struct mi_timestamp *end)
2229 using namespace std::chrono;
2231 duration<double> wallclock = end->wallclock - start->wallclock;
2232 duration<double> utime = end->utime - start->utime;
2233 duration<double> stime = end->stime - start->stime;
2235 fprintf_unfiltered
2236 (file,
2237 ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
2238 wallclock.count (), utime.count (), stime.count ());
2241 void
2242 mi_cmd_trace_define_variable (const char *command, char **argv, int argc)
2244 LONGEST initval = 0;
2245 struct trace_state_variable *tsv;
2246 char *name = 0;
2248 if (argc != 1 && argc != 2)
2249 error (_("Usage: -trace-define-variable VARIABLE [VALUE]"));
2251 name = argv[0];
2252 if (*name++ != '$')
2253 error (_("Name of trace variable should start with '$'"));
2255 validate_trace_state_variable_name (name);
2257 tsv = find_trace_state_variable (name);
2258 if (!tsv)
2259 tsv = create_trace_state_variable (name);
2261 if (argc == 2)
2262 initval = value_as_long (parse_and_eval (argv[1]));
2264 tsv->initial_value = initval;
2267 void
2268 mi_cmd_trace_list_variables (const char *command, char **argv, int argc)
2270 if (argc != 0)
2271 error (_("-trace-list-variables: no arguments allowed"));
2273 tvariables_info_1 ();
2276 void
2277 mi_cmd_trace_find (const char *command, char **argv, int argc)
2279 char *mode;
2281 if (argc == 0)
2282 error (_("trace selection mode is required"));
2284 mode = argv[0];
2286 if (strcmp (mode, "none") == 0)
2288 tfind_1 (tfind_number, -1, 0, 0, 0);
2289 return;
2292 check_trace_running (current_trace_status ());
2294 if (strcmp (mode, "frame-number") == 0)
2296 if (argc != 2)
2297 error (_("frame number is required"));
2298 tfind_1 (tfind_number, atoi (argv[1]), 0, 0, 0);
2300 else if (strcmp (mode, "tracepoint-number") == 0)
2302 if (argc != 2)
2303 error (_("tracepoint number is required"));
2304 tfind_1 (tfind_tp, atoi (argv[1]), 0, 0, 0);
2306 else if (strcmp (mode, "pc") == 0)
2308 if (argc != 2)
2309 error (_("PC is required"));
2310 tfind_1 (tfind_pc, 0, parse_and_eval_address (argv[1]), 0, 0);
2312 else if (strcmp (mode, "pc-inside-range") == 0)
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);
2319 else if (strcmp (mode, "pc-outside-range") == 0)
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);
2326 else if (strcmp (mode, "line") == 0)
2328 if (argc != 2)
2329 error (_("Line is required"));
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];
2336 if (sal.symtab == 0)
2337 error (_("Could not find the specified line"));
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"));
2345 else
2346 error (_("Invalid mode '%s'"), mode);
2348 if (has_stack_frames () || get_traceframe_number () >= 0)
2349 print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1);
2352 void
2353 mi_cmd_trace_save (const char *command, char **argv, int argc)
2355 int target_saves = 0;
2356 int generate_ctf = 0;
2357 char *filename;
2358 int oind = 0;
2359 char *oarg;
2361 enum opt
2363 TARGET_SAVE_OPT, CTF_OPT
2365 static const struct mi_opt opts[] =
2367 {"r", TARGET_SAVE_OPT, 0},
2368 {"ctf", CTF_OPT, 0},
2369 { 0, 0, 0 }
2372 while (1)
2374 int opt = mi_getopt ("-trace-save", argc, argv, opts,
2375 &oind, &oarg);
2377 if (opt < 0)
2378 break;
2379 switch ((enum opt) opt)
2381 case TARGET_SAVE_OPT:
2382 target_saves = 1;
2383 break;
2384 case CTF_OPT:
2385 generate_ctf = 1;
2386 break;
2390 if (argc - oind != 1)
2391 error (_("Exactly one argument required "
2392 "(file in which to save trace data)"));
2394 filename = argv[oind];
2396 if (generate_ctf)
2397 trace_save_ctf (filename, target_saves);
2398 else
2399 trace_save_tfile (filename, target_saves);
2402 void
2403 mi_cmd_trace_start (const char *command, char **argv, int argc)
2405 start_tracing (NULL);
2408 void
2409 mi_cmd_trace_status (const char *command, char **argv, int argc)
2411 trace_status_mi (0);
2414 void
2415 mi_cmd_trace_stop (const char *command, char **argv, int argc)
2417 stop_tracing (NULL);
2418 trace_status_mi (1);
2421 /* Implement the "-ada-task-info" command. */
2423 void
2424 mi_cmd_ada_task_info (const char *command, char **argv, int argc)
2426 if (argc != 0 && argc != 1)
2427 error (_("Invalid MI command"));
2429 print_ada_task_info (current_uiout, argv[0], current_inferior ());
2432 /* Print EXPRESSION according to VALUES. */
2434 static void
2435 print_variable_or_computed (const char *expression, enum print_values values)
2437 struct value *val;
2438 struct type *type;
2439 struct ui_out *uiout = current_uiout;
2441 string_file stb;
2443 expression_up expr = parse_expression (expression);
2445 if (values == PRINT_SIMPLE_VALUES)
2446 val = evaluate_type (expr.get ());
2447 else
2448 val = evaluate_expression (expr.get ());
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);
2455 switch (values)
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)
2465 struct value_print_options opts;
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);
2472 break;
2473 case PRINT_ALL_VALUES:
2475 struct value_print_options opts;
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);
2482 break;
2486 /* Implement the "-trace-frame-collected" command. */
2488 void
2489 mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
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
2504 VAR_PRINT_VALUES,
2505 COMP_PRINT_VALUES,
2506 REGISTERS_FORMAT,
2507 MEMORY_CONTENTS,
2509 static const struct mi_opt opts[] =
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 }
2518 while (1)
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)
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;
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]"));
2549 /* This throws an error is not inspecting a trace frame. */
2550 tloc = get_traceframe_location (&stepping_frame);
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 ());
2557 encode_actions (tloc, &tracepoint_list, &stepping_list);
2559 if (stepping_frame)
2560 clist = &stepping_list;
2561 else
2562 clist = &tracepoint_list;
2564 tinfo = get_traceframe_info ();
2566 /* Explicitly wholly collected variables. */
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++)
2573 const std::string &str = wholly_collected[i];
2574 print_variable_or_computed (str.c_str (), var_print_values);
2578 /* Computed expressions. */
2580 ui_out_emit_list list_emitter (uiout, "computed-expressions");
2582 const std::vector<std::string> &computed = clist->computed ();
2583 for (size_t i = 0; i < computed.size (); i++)
2585 const std::string &str = computed[i];
2586 print_variable_or_computed (str.c_str (), comp_print_values);
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. */
2595 struct frame_info *frame;
2596 struct gdbarch *gdbarch;
2597 int regnum;
2598 int numregs;
2600 ui_out_emit_list list_emitter (uiout, "registers");
2602 frame = get_selected_frame (NULL);
2603 gdbarch = get_frame_arch (frame);
2604 numregs = gdbarch_num_cooked_regs (gdbarch);
2606 for (regnum = 0; regnum < numregs; regnum++)
2608 if (gdbarch_register_name (gdbarch, regnum) == NULL
2609 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
2610 continue;
2612 output_register (frame, regnum, registers_format, 1);
2616 /* Trace state variables. */
2618 ui_out_emit_list list_emitter (uiout, "tvars");
2620 for (int tvar : tinfo->tvars)
2622 struct trace_state_variable *tsv;
2624 tsv = find_trace_state_variable_by_number (tvar);
2626 ui_out_emit_tuple tuple_emitter (uiout, NULL);
2628 if (tsv != NULL)
2630 uiout->field_fmt ("name", "$%s", tsv->name.c_str ());
2632 tsv->value_known = target_get_trace_state_variable_value (tsv->number,
2633 &tsv->value);
2634 uiout->field_signed ("current", tsv->value);
2636 else
2638 uiout->field_skip ("name");
2639 uiout->field_skip ("current");
2644 /* Memory. */
2646 std::vector<mem_range> available_memory;
2648 traceframe_available_memory (&available_memory, 0, ULONGEST_MAX);
2650 ui_out_emit_list list_emitter (uiout, "memory");
2652 for (const mem_range &r : available_memory)
2654 struct gdbarch *gdbarch = target_gdbarch ();
2656 ui_out_emit_tuple tuple_emitter (uiout, NULL);
2658 uiout->field_core_addr ("address", gdbarch, r.start);
2659 uiout->field_signed ("length", r.length);
2661 gdb::byte_vector data (r.length);
2663 if (memory_contents)
2665 if (target_read_memory (r.start, data.data (), r.length) == 0)
2667 std::string data_str = bin2hex (data.data (), r.length);
2668 uiout->field_string ("contents", data_str.c_str ());
2670 else
2671 uiout->field_skip ("contents");
2677 /* See mi/mi-main.h. */
2679 void
2680 mi_cmd_fix_multi_location_breakpoint_output (const char *command, char **argv,
2681 int argc)
2683 fix_multi_location_breakpoint_output_globally = true;
2686 /* Implement the "-complete" command. */
2688 void
2689 mi_cmd_complete (const char *command, char **argv, int argc)
2691 if (argc != 1)
2692 error (_("Usage: -complete COMMAND"));
2694 if (max_completions == 0)
2695 error (_("max-completions is zero, completion is disabled."));
2697 int quote_char = '\0';
2698 const char *word;
2700 completion_result result = complete (argv[0], &word, &quote_char);
2702 std::string arg_prefix (argv[0], word - argv[0]);
2704 struct ui_out *uiout = current_uiout;
2706 if (result.number_matches > 0)
2707 uiout->field_fmt ("completion", "%s%s",
2708 arg_prefix.c_str (),result.match_list[0]);
2711 ui_out_emit_list completions_emitter (uiout, "matches");
2713 if (result.number_matches == 1)
2714 uiout->field_fmt (NULL, "%s%s",
2715 arg_prefix.c_str (), result.match_list[0]);
2716 else
2718 result.sort_match_list ();
2719 for (size_t i = 0; i < result.number_matches; i++)
2721 uiout->field_fmt (NULL, "%s%s",
2722 arg_prefix.c_str (), result.match_list[i + 1]);
2726 uiout->field_string ("max_completions_reached",
2727 result.number_matches == max_completions ? "1" : "0");
2731 void _initialize_mi_main ();
2732 void
2733 _initialize_mi_main ()
2735 struct cmd_list_element *c;
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);
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");