3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
4 2011 Free Software Foundation, Inc.
6 Contributed by Cygnus Solutions (a Red Hat company).
8 This file is part of GDB.
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 /* Work in progress. */
26 #include "arch-utils.h"
29 #include "gdb_string.h"
30 #include "exceptions.h"
32 #include "gdbthread.h"
35 #include "mi-getopt.h"
36 #include "mi-console.h"
40 #include "event-loop.h"
41 #include "event-top.h"
42 #include "gdbcore.h" /* For write_memory(). */
48 #include "mi-common.h"
53 #include "splay-tree.h"
54 #include "tracepoint.h"
59 #if defined HAVE_SYS_RESOURCE_H
60 #include <sys/resource.h>
73 struct ui_file *raw_stdout;
75 /* This is used to pass the current command timestamp
76 down to continuation routines. */
77 static struct mi_timestamp *current_command_ts;
79 static int do_timings = 0;
82 /* Few commands would like to know if options like --thread-group
83 were explicitly specified. This variable keeps the current
84 parsed command including all option, and make it possible. */
85 static struct mi_parse *current_context;
87 int running_result_record_printed = 1;
89 /* Flag indicating that the target has proceeded since the last
90 command was issued. */
93 extern void _initialize_mi_main (void);
94 static void mi_cmd_execute (struct mi_parse *parse);
96 static void mi_execute_cli_command (const char *cmd, int args_p,
98 static void mi_execute_async_cli_command (char *cli_command,
99 char **argv, int argc);
100 static int register_changed_p (int regnum, struct regcache *,
102 static void get_register (struct frame_info *, int regnum, int format);
104 /* Command implementations. FIXME: Is this libgdb? No. This is the MI
105 layer that calls libgdb. Any operation used in the below should be
108 static void timestamp (struct mi_timestamp *tv);
110 static void print_diff_now (struct mi_timestamp *start);
111 static void print_diff (struct mi_timestamp *start, struct mi_timestamp *end);
114 mi_cmd_gdb_exit (char *command, char **argv, int argc)
116 /* We have to print everything right here because we never return. */
118 fputs_unfiltered (current_token, raw_stdout);
119 fputs_unfiltered ("^exit\n", raw_stdout);
120 mi_out_put (current_uiout, raw_stdout);
121 gdb_flush (raw_stdout);
122 /* FIXME: The function called is not yet a formal libgdb function. */
123 quit_force (NULL, FROM_TTY);
127 mi_cmd_exec_next (char *command, char **argv, int argc)
129 /* FIXME: Should call a libgdb function, not a cli wrapper. */
130 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
131 mi_execute_async_cli_command ("reverse-next", argv + 1, argc - 1);
133 mi_execute_async_cli_command ("next", argv, argc);
137 mi_cmd_exec_next_instruction (char *command, char **argv, int argc)
139 /* FIXME: Should call a libgdb function, not a cli wrapper. */
140 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
141 mi_execute_async_cli_command ("reverse-nexti", argv + 1, argc - 1);
143 mi_execute_async_cli_command ("nexti", argv, argc);
147 mi_cmd_exec_step (char *command, char **argv, int argc)
149 /* FIXME: Should call a libgdb function, not a cli wrapper. */
150 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
151 mi_execute_async_cli_command ("reverse-step", argv + 1, argc - 1);
153 mi_execute_async_cli_command ("step", argv, argc);
157 mi_cmd_exec_step_instruction (char *command, char **argv, int argc)
159 /* FIXME: Should call a libgdb function, not a cli wrapper. */
160 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
161 mi_execute_async_cli_command ("reverse-stepi", argv + 1, argc - 1);
163 mi_execute_async_cli_command ("stepi", argv, argc);
167 mi_cmd_exec_finish (char *command, char **argv, int argc)
169 /* FIXME: Should call a libgdb function, not a cli wrapper. */
170 if (argc > 0 && strcmp(argv[0], "--reverse") == 0)
171 mi_execute_async_cli_command ("reverse-finish", argv + 1, argc - 1);
173 mi_execute_async_cli_command ("finish", argv, argc);
177 mi_cmd_exec_return (char *command, char **argv, int argc)
179 /* This command doesn't really execute the target, it just pops the
180 specified number of frames. */
182 /* Call return_command with from_tty argument equal to 0 so as to
183 avoid being queried. */
184 return_command (*argv, 0);
186 /* Call return_command with from_tty argument equal to 0 so as to
187 avoid being queried. */
188 return_command (NULL, 0);
190 /* Because we have called return_command with from_tty = 0, we need
191 to print the frame here. */
192 print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS);
196 mi_cmd_exec_jump (char *args, char **argv, int argc)
198 /* FIXME: Should call a libgdb function, not a cli wrapper. */
199 mi_execute_async_cli_command ("jump", argv, argc);
203 proceed_thread (struct thread_info *thread, int pid)
205 if (!is_stopped (thread->ptid))
208 if (pid != 0 && PIDGET (thread->ptid) != pid)
211 switch_to_thread (thread->ptid);
212 clear_proceed_status ();
213 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
218 proceed_thread_callback (struct thread_info *thread, void *arg)
220 int pid = *(int *)arg;
222 proceed_thread (thread, pid);
227 exec_continue (char **argv, int argc)
231 /* In non-stop mode, 'resume' always resumes a single thread. Therefore,
232 to resume all threads of the current inferior, or all threads in all
233 inferiors, we need to iterate over threads.
235 See comment on infcmd.c:proceed_thread_callback for rationale. */
236 if (current_context->all || current_context->thread_group != -1)
239 struct cleanup *back_to = make_cleanup_restore_current_thread ();
241 if (!current_context->all)
244 = find_inferior_id (current_context->thread_group);
248 iterate_over_threads (proceed_thread_callback, &pid);
249 do_cleanups (back_to);
258 struct cleanup *back_to = make_cleanup_restore_integer (&sched_multi);
260 if (current_context->all)
267 /* In all-stop mode, -exec-continue traditionally resumed either
268 all threads, or one thread, depending on the 'scheduler-locking'
269 variable. Let's continue to do the same. */
272 do_cleanups (back_to);
277 exec_direction_forward (void *notused)
279 execution_direction = EXEC_FORWARD;
283 exec_reverse_continue (char **argv, int argc)
285 enum exec_direction_kind dir = execution_direction;
286 struct cleanup *old_chain;
288 if (dir == EXEC_REVERSE)
289 error (_("Already in reverse mode."));
291 if (!target_can_execute_reverse)
292 error (_("Target %s does not support this command."), target_shortname);
294 old_chain = make_cleanup (exec_direction_forward, NULL);
295 execution_direction = EXEC_REVERSE;
296 exec_continue (argv, argc);
297 do_cleanups (old_chain);
301 mi_cmd_exec_continue (char *command, char **argv, int argc)
303 if (argc > 0 && strcmp (argv[0], "--reverse") == 0)
304 exec_reverse_continue (argv + 1, argc - 1);
306 exec_continue (argv, argc);
310 interrupt_thread_callback (struct thread_info *thread, void *arg)
312 int pid = *(int *)arg;
314 if (!is_running (thread->ptid))
317 if (PIDGET (thread->ptid) != pid)
320 target_stop (thread->ptid);
324 /* Interrupt the execution of the target. Note how we must play around
325 with the token variables, in order to display the current token in
326 the result of the interrupt command, and the previous execution
327 token when the target finally stops. See comments in
330 mi_cmd_exec_interrupt (char *command, char **argv, int argc)
332 /* In all-stop mode, everything stops, so we don't need to try
333 anything specific. */
336 interrupt_target_1 (0);
340 if (current_context->all)
342 /* This will interrupt all threads in all inferiors. */
343 interrupt_target_1 (1);
345 else if (current_context->thread_group != -1)
347 struct inferior *inf = find_inferior_id (current_context->thread_group);
349 iterate_over_threads (interrupt_thread_callback, &inf->pid);
353 /* Interrupt just the current thread -- either explicitly
354 specified via --thread or whatever was current before
355 MI command was sent. */
356 interrupt_target_1 (0);
361 run_one_inferior (struct inferior *inf, void *arg)
365 if (inf->pid != ptid_get_pid (inferior_ptid))
367 struct thread_info *tp;
369 tp = any_thread_of_process (inf->pid);
371 error (_("Inferior has no threads."));
373 switch_to_thread (tp->ptid);
378 set_current_inferior (inf);
379 switch_to_thread (null_ptid);
380 set_current_program_space (inf->pspace);
382 mi_execute_cli_command ("run", target_can_async_p (),
383 target_can_async_p () ? "&" : NULL);
388 mi_cmd_exec_run (char *command, char **argv, int argc)
390 if (current_context->all)
392 struct cleanup *back_to = save_current_space_and_thread ();
394 iterate_over_inferiors (run_one_inferior, NULL);
395 do_cleanups (back_to);
399 mi_execute_cli_command ("run", target_can_async_p (),
400 target_can_async_p () ? "&" : NULL);
406 find_thread_of_process (struct thread_info *ti, void *p)
410 if (PIDGET (ti->ptid) == pid && !is_exited (ti->ptid))
417 mi_cmd_target_detach (char *command, char **argv, int argc)
419 if (argc != 0 && argc != 1)
420 error (_("Usage: -target-detach [pid | thread-group]"));
424 struct thread_info *tp;
428 /* First see if we are dealing with a thread-group id. */
431 struct inferior *inf;
432 int id = strtoul (argv[0] + 1, &end, 0);
435 error (_("Invalid syntax of thread-group id '%s'"), argv[0]);
437 inf = find_inferior_id (id);
439 error (_("Non-existent thread-group id '%d'"), id);
445 /* We must be dealing with a pid. */
446 pid = strtol (argv[0], &end, 10);
449 error (_("Invalid identifier '%s'"), argv[0]);
452 /* Pick any thread in the desired process. Current
453 target_detach detaches from the parent of inferior_ptid. */
454 tp = iterate_over_threads (find_thread_of_process, &pid);
456 error (_("Thread group is empty"));
458 switch_to_thread (tp->ptid);
461 detach_command (NULL, 0);
465 mi_cmd_thread_select (char *command, char **argv, int argc)
468 char *mi_error_message;
471 error (_("-thread-select: USAGE: threadnum."));
473 rc = gdb_thread_select (current_uiout, argv[0], &mi_error_message);
475 if (rc == GDB_RC_FAIL)
477 make_cleanup (xfree, mi_error_message);
478 error ("%s", mi_error_message);
483 mi_cmd_thread_list_ids (char *command, char **argv, int argc)
486 char *mi_error_message;
489 error (_("-thread-list-ids: No arguments required."));
491 rc = gdb_list_thread_ids (current_uiout, &mi_error_message);
493 if (rc == GDB_RC_FAIL)
495 make_cleanup (xfree, mi_error_message);
496 error ("%s", mi_error_message);
501 mi_cmd_thread_info (char *command, char **argv, int argc)
503 if (argc != 0 && argc != 1)
504 error (_("Invalid MI command"));
506 print_thread_info (current_uiout, argv[0], -1);
509 struct collect_cores_data
517 collect_cores (struct thread_info *ti, void *xdata)
519 struct collect_cores_data *data = xdata;
521 if (ptid_get_pid (ti->ptid) == data->pid)
523 int core = target_core_of_thread (ti->ptid);
526 VEC_safe_push (int, data->cores, core);
533 unique (int *b, int *e)
543 struct print_one_inferior_data
546 VEC (int) *inferiors;
550 print_one_inferior (struct inferior *inferior, void *xdata)
552 struct print_one_inferior_data *top_data = xdata;
553 struct ui_out *uiout = current_uiout;
555 if (VEC_empty (int, top_data->inferiors)
556 || bsearch (&(inferior->pid), VEC_address (int, top_data->inferiors),
557 VEC_length (int, top_data->inferiors), sizeof (int),
558 compare_positive_ints))
560 struct collect_cores_data data;
561 struct cleanup *back_to
562 = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
564 ui_out_field_fmt (uiout, "id", "i%d", inferior->num);
565 ui_out_field_string (uiout, "type", "process");
566 if (inferior->pid != 0)
567 ui_out_field_int (uiout, "pid", inferior->pid);
569 if (inferior->pspace->ebfd)
571 ui_out_field_string (uiout, "executable",
572 bfd_get_filename (inferior->pspace->ebfd));
576 if (inferior->pid != 0)
578 data.pid = inferior->pid;
579 iterate_over_threads (collect_cores, &data);
582 if (!VEC_empty (int, data.cores))
585 struct cleanup *back_to_2 =
586 make_cleanup_ui_out_list_begin_end (uiout, "cores");
588 qsort (VEC_address (int, data.cores),
589 VEC_length (int, data.cores), sizeof (int),
590 compare_positive_ints);
592 b = VEC_address (int, data.cores);
593 e = b + VEC_length (int, data.cores);
597 ui_out_field_int (uiout, NULL, *b);
599 do_cleanups (back_to_2);
602 if (top_data->recurse)
603 print_thread_info (uiout, NULL, inferior->pid);
605 do_cleanups (back_to);
611 /* Output a field named 'cores' with a list as the value. The elements of
612 the list are obtained by splitting 'cores' on comma. */
615 output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
617 struct cleanup *back_to = make_cleanup_ui_out_list_begin_end (uiout,
619 char *cores = xstrdup (xcores);
622 make_cleanup (xfree, cores);
624 for (p = strtok (p, ","); p; p = strtok (NULL, ","))
625 ui_out_field_string (uiout, NULL, p);
627 do_cleanups (back_to);
631 free_vector_of_ints (void *xvector)
633 VEC (int) **vector = xvector;
635 VEC_free (int, *vector);
639 do_nothing (splay_tree_key k)
644 free_vector_of_osdata_items (splay_tree_value xvalue)
646 VEC (osdata_item_s) *value = (VEC (osdata_item_s) *) xvalue;
648 /* We don't free the items itself, it will be done separately. */
649 VEC_free (osdata_item_s, value);
653 splay_tree_int_comparator (splay_tree_key xa, splay_tree_key xb)
662 free_splay_tree (void *xt)
665 splay_tree_delete (t);
669 list_available_thread_groups (VEC (int) *ids, int recurse)
672 struct osdata_item *item;
674 struct ui_out *uiout = current_uiout;
676 /* This keeps a map from integer (pid) to VEC (struct osdata_item *)*
677 The vector contains information about all threads for the given pid.
678 This is assigned an initial value to avoid "may be used uninitialized"
680 splay_tree tree = NULL;
682 /* get_osdata will throw if it cannot return data. */
683 data = get_osdata ("processes");
684 make_cleanup_osdata_free (data);
688 struct osdata *threads = get_osdata ("threads");
690 make_cleanup_osdata_free (threads);
691 tree = splay_tree_new (splay_tree_int_comparator,
693 free_vector_of_osdata_items);
694 make_cleanup (free_splay_tree, tree);
697 VEC_iterate (osdata_item_s, threads->items,
701 const char *pid = get_osdata_column (item, "pid");
702 int pid_i = strtoul (pid, NULL, 0);
703 VEC (osdata_item_s) *vec = 0;
705 splay_tree_node n = splay_tree_lookup (tree, pid_i);
708 VEC_safe_push (osdata_item_s, vec, item);
709 splay_tree_insert (tree, pid_i, (splay_tree_value)vec);
713 vec = (VEC (osdata_item_s) *) n->value;
714 VEC_safe_push (osdata_item_s, vec, item);
715 n->value = (splay_tree_value) vec;
720 make_cleanup_ui_out_list_begin_end (uiout, "groups");
723 VEC_iterate (osdata_item_s, data->items,
727 struct cleanup *back_to;
729 const char *pid = get_osdata_column (item, "pid");
730 const char *cmd = get_osdata_column (item, "command");
731 const char *user = get_osdata_column (item, "user");
732 const char *cores = get_osdata_column (item, "cores");
734 int pid_i = strtoul (pid, NULL, 0);
736 /* At present, the target will return all available processes
737 and if information about specific ones was required, we filter
738 undesired processes here. */
739 if (ids && bsearch (&pid_i, VEC_address (int, ids),
740 VEC_length (int, ids),
741 sizeof (int), compare_positive_ints) == NULL)
745 back_to = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
747 ui_out_field_fmt (uiout, "id", "%s", pid);
748 ui_out_field_string (uiout, "type", "process");
750 ui_out_field_string (uiout, "description", cmd);
752 ui_out_field_string (uiout, "user", user);
754 output_cores (uiout, "cores", cores);
758 splay_tree_node n = splay_tree_lookup (tree, pid_i);
761 VEC (osdata_item_s) *children = (VEC (osdata_item_s) *) n->value;
762 struct osdata_item *child;
765 make_cleanup_ui_out_list_begin_end (uiout, "threads");
768 VEC_iterate (osdata_item_s, children, ix_child, child);
771 struct cleanup *back_to_2 =
772 make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
773 const char *tid = get_osdata_column (child, "tid");
774 const char *tcore = get_osdata_column (child, "core");
776 ui_out_field_string (uiout, "id", tid);
778 ui_out_field_string (uiout, "core", tcore);
780 do_cleanups (back_to_2);
785 do_cleanups (back_to);
790 mi_cmd_list_thread_groups (char *command, char **argv, int argc)
792 struct ui_out *uiout = current_uiout;
793 struct cleanup *back_to;
800 AVAILABLE_OPT, RECURSE_OPT
802 static struct mi_opt opts[] =
804 {"-available", AVAILABLE_OPT, 0},
805 {"-recurse", RECURSE_OPT, 1},
814 int opt = mi_getopt ("-list-thread-groups", argc, argv, opts,
819 switch ((enum opt) opt)
825 if (strcmp (optarg, "0") == 0)
827 else if (strcmp (optarg, "1") == 0)
830 error (_("only '0' and '1' are valid values "
831 "for the '--recurse' option"));
836 for (; optind < argc; ++optind)
841 if (*(argv[optind]) != 'i')
842 error (_("invalid syntax of group id '%s'"), argv[optind]);
844 inf = strtoul (argv[optind] + 1, &end, 0);
847 error (_("invalid syntax of group id '%s'"), argv[optind]);
848 VEC_safe_push (int, ids, inf);
850 if (VEC_length (int, ids) > 1)
851 qsort (VEC_address (int, ids),
852 VEC_length (int, ids),
853 sizeof (int), compare_positive_ints);
855 back_to = make_cleanup (free_vector_of_ints, &ids);
859 list_available_thread_groups (ids, recurse);
861 else if (VEC_length (int, ids) == 1)
863 /* Local thread groups, single id. */
864 int id = *VEC_address (int, ids);
865 struct inferior *inf = find_inferior_id (id);
868 error (_("Non-existent thread group id '%d'"), id);
870 print_thread_info (uiout, NULL, inf->pid);
874 struct print_one_inferior_data data;
876 data.recurse = recurse;
877 data.inferiors = ids;
879 /* Local thread groups. Either no explicit ids -- and we
880 print everything, or several explicit ids. In both cases,
881 we print more than one group, and have to use 'groups'
882 as the top-level element. */
883 make_cleanup_ui_out_list_begin_end (uiout, "groups");
884 update_thread_list ();
885 iterate_over_inferiors (print_one_inferior, &data);
888 do_cleanups (back_to);
892 mi_cmd_data_list_register_names (char *command, char **argv, int argc)
894 struct gdbarch *gdbarch;
895 struct ui_out *uiout = current_uiout;
898 struct cleanup *cleanup;
900 /* Note that the test for a valid register must include checking the
901 gdbarch_register_name because gdbarch_num_regs may be allocated for
902 the union of the register sets within a family of related processors.
903 In this case, some entries of gdbarch_register_name will change depending
904 upon the particular processor being debugged. */
906 gdbarch = get_current_arch ();
907 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
909 cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-names");
911 if (argc == 0) /* No args, just do all the regs. */
917 if (gdbarch_register_name (gdbarch, regnum) == NULL
918 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
919 ui_out_field_string (uiout, NULL, "");
921 ui_out_field_string (uiout, NULL,
922 gdbarch_register_name (gdbarch, regnum));
926 /* Else, list of register #s, just do listed regs. */
927 for (i = 0; i < argc; i++)
929 regnum = atoi (argv[i]);
930 if (regnum < 0 || regnum >= numregs)
931 error (_("bad register number"));
933 if (gdbarch_register_name (gdbarch, regnum) == NULL
934 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
935 ui_out_field_string (uiout, NULL, "");
937 ui_out_field_string (uiout, NULL,
938 gdbarch_register_name (gdbarch, regnum));
940 do_cleanups (cleanup);
944 mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
946 static struct regcache *this_regs = NULL;
947 struct ui_out *uiout = current_uiout;
948 struct regcache *prev_regs;
949 struct gdbarch *gdbarch;
950 int regnum, numregs, changed;
952 struct cleanup *cleanup;
954 /* The last time we visited this function, the current frame's register
955 contents were saved in THIS_REGS. Move THIS_REGS over to PREV_REGS,
956 and refresh THIS_REGS with the now-current register contents. */
958 prev_regs = this_regs;
959 this_regs = frame_save_as_regcache (get_selected_frame (NULL));
960 cleanup = make_cleanup_regcache_xfree (prev_regs);
962 /* Note that the test for a valid register must include checking the
963 gdbarch_register_name because gdbarch_num_regs may be allocated for
964 the union of the register sets within a family of related processors.
965 In this case, some entries of gdbarch_register_name will change depending
966 upon the particular processor being debugged. */
968 gdbarch = get_regcache_arch (this_regs);
969 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
971 make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
973 if (argc == 0) /* No args, just do all the regs. */
979 if (gdbarch_register_name (gdbarch, regnum) == NULL
980 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
982 changed = register_changed_p (regnum, prev_regs, this_regs);
984 error (_("-data-list-changed-registers: "
985 "Unable to read register contents."));
987 ui_out_field_int (uiout, NULL, regnum);
991 /* Else, list of register #s, just do listed regs. */
992 for (i = 0; i < argc; i++)
994 regnum = atoi (argv[i]);
998 && gdbarch_register_name (gdbarch, regnum) != NULL
999 && *gdbarch_register_name (gdbarch, regnum) != '\000')
1001 changed = register_changed_p (regnum, prev_regs, this_regs);
1003 error (_("-data-list-changed-registers: "
1004 "Unable to read register contents."));
1006 ui_out_field_int (uiout, NULL, regnum);
1009 error (_("bad register number"));
1011 do_cleanups (cleanup);
1015 register_changed_p (int regnum, struct regcache *prev_regs,
1016 struct regcache *this_regs)
1018 struct gdbarch *gdbarch = get_regcache_arch (this_regs);
1019 gdb_byte prev_buffer[MAX_REGISTER_SIZE];
1020 gdb_byte this_buffer[MAX_REGISTER_SIZE];
1021 enum register_status prev_status;
1022 enum register_status this_status;
1024 /* First time through or after gdbarch change consider all registers
1026 if (!prev_regs || get_regcache_arch (prev_regs) != gdbarch)
1029 /* Get register contents and compare. */
1030 prev_status = regcache_cooked_read (prev_regs, regnum, prev_buffer);
1031 this_status = regcache_cooked_read (this_regs, regnum, this_buffer);
1033 if (this_status != prev_status)
1035 else if (this_status == REG_VALID)
1036 return memcmp (prev_buffer, this_buffer,
1037 register_size (gdbarch, regnum)) != 0;
1042 /* Return a list of register number and value pairs. The valid
1043 arguments expected are: a letter indicating the format in which to
1044 display the registers contents. This can be one of: x (hexadecimal), d
1045 (decimal), N (natural), t (binary), o (octal), r (raw). After the
1046 format argumetn there can be a sequence of numbers, indicating which
1047 registers to fetch the content of. If the format is the only argument,
1048 a list of all the registers with their values is returned. */
1050 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
1052 struct ui_out *uiout = current_uiout;
1053 struct frame_info *frame;
1054 struct gdbarch *gdbarch;
1055 int regnum, numregs, format;
1057 struct cleanup *list_cleanup, *tuple_cleanup;
1059 /* Note that the test for a valid register must include checking the
1060 gdbarch_register_name because gdbarch_num_regs may be allocated for
1061 the union of the register sets within a family of related processors.
1062 In this case, some entries of gdbarch_register_name will change depending
1063 upon the particular processor being debugged. */
1066 error (_("-data-list-register-values: Usage: "
1067 "-data-list-register-values <format> [<regnum1>...<regnumN>]"));
1069 format = (int) argv[0][0];
1071 frame = get_selected_frame (NULL);
1072 gdbarch = get_frame_arch (frame);
1073 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1075 list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
1077 if (argc == 1) /* No args, beside the format: do all the regs. */
1083 if (gdbarch_register_name (gdbarch, regnum) == NULL
1084 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
1086 tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1087 ui_out_field_int (uiout, "number", regnum);
1088 get_register (frame, regnum, format);
1089 do_cleanups (tuple_cleanup);
1093 /* Else, list of register #s, just do listed regs. */
1094 for (i = 1; i < argc; i++)
1096 regnum = atoi (argv[i]);
1100 && gdbarch_register_name (gdbarch, regnum) != NULL
1101 && *gdbarch_register_name (gdbarch, regnum) != '\000')
1103 tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1104 ui_out_field_int (uiout, "number", regnum);
1105 get_register (frame, regnum, format);
1106 do_cleanups (tuple_cleanup);
1109 error (_("bad register number"));
1111 do_cleanups (list_cleanup);
1114 /* Output one register's contents in the desired format. */
1116 get_register (struct frame_info *frame, int regnum, int format)
1118 struct gdbarch *gdbarch = get_frame_arch (frame);
1119 struct ui_out *uiout = current_uiout;
1121 enum lval_type lval;
1122 static struct ui_stream *stb = NULL;
1125 stb = ui_out_stream_new (uiout);
1130 val = get_frame_register_value (frame, regnum);
1132 if (value_optimized_out (val))
1133 error (_("Optimized out"));
1138 char *ptr, buf[1024];
1139 const gdb_byte *valaddr = value_contents_for_printing (val);
1143 for (j = 0; j < register_size (gdbarch, regnum); j++)
1145 int idx = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ?
1146 j : register_size (gdbarch, regnum) - 1 - j;
1148 sprintf (ptr, "%02x", (unsigned char) valaddr[idx]);
1151 ui_out_field_string (uiout, "value", buf);
1152 /*fputs_filtered (buf, gdb_stdout); */
1156 struct value_print_options opts;
1158 get_formatted_print_options (&opts, format);
1160 val_print (value_type (val),
1161 value_contents_for_printing (val),
1162 value_embedded_offset (val), 0,
1163 stb->stream, 0, val, &opts, current_language);
1164 ui_out_field_stream (uiout, "value", stb);
1165 ui_out_stream_delete (stb);
1169 /* Write given values into registers. The registers and values are
1170 given as pairs. The corresponding MI command is
1171 -data-write-register-values <format>
1172 [<regnum1> <value1>...<regnumN> <valueN>] */
1174 mi_cmd_data_write_register_values (char *command, char **argv, int argc)
1176 struct regcache *regcache;
1177 struct gdbarch *gdbarch;
1181 /* Note that the test for a valid register must include checking the
1182 gdbarch_register_name because gdbarch_num_regs may be allocated for
1183 the union of the register sets within a family of related processors.
1184 In this case, some entries of gdbarch_register_name will change depending
1185 upon the particular processor being debugged. */
1187 regcache = get_current_regcache ();
1188 gdbarch = get_regcache_arch (regcache);
1189 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
1192 error (_("-data-write-register-values: Usage: -data-write-register-"
1193 "values <format> [<regnum1> <value1>...<regnumN> <valueN>]"));
1195 format = (int) argv[0][0];
1197 if (!target_has_registers)
1198 error (_("-data-write-register-values: No registers."));
1201 error (_("-data-write-register-values: No regs and values specified."));
1204 error (_("-data-write-register-values: "
1205 "Regs and vals are not in pairs."));
1207 for (i = 1; i < argc; i = i + 2)
1209 int regnum = atoi (argv[i]);
1211 if (regnum >= 0 && regnum < numregs
1212 && gdbarch_register_name (gdbarch, regnum)
1213 && *gdbarch_register_name (gdbarch, regnum))
1217 /* Get the value as a number. */
1218 value = parse_and_eval_address (argv[i + 1]);
1220 /* Write it down. */
1221 regcache_cooked_write_signed (regcache, regnum, value);
1224 error (_("bad register number"));
1228 /* Evaluate the value of the argument. The argument is an
1229 expression. If the expression contains spaces it needs to be
1230 included in double quotes. */
1232 mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
1234 struct expression *expr;
1235 struct cleanup *old_chain = NULL;
1237 struct ui_stream *stb = NULL;
1238 struct value_print_options opts;
1239 struct ui_out *uiout = current_uiout;
1241 stb = ui_out_stream_new (uiout);
1245 ui_out_stream_delete (stb);
1246 error (_("-data-evaluate-expression: "
1247 "Usage: -data-evaluate-expression expression"));
1250 expr = parse_expression (argv[0]);
1252 old_chain = make_cleanup (free_current_contents, &expr);
1254 val = evaluate_expression (expr);
1256 /* Print the result of the expression evaluation. */
1257 get_user_print_options (&opts);
1259 common_val_print (val, stb->stream, 0, &opts, current_language);
1261 ui_out_field_stream (uiout, "value", stb);
1262 ui_out_stream_delete (stb);
1264 do_cleanups (old_chain);
1267 /* DATA-MEMORY-READ:
1269 ADDR: start address of data to be dumped.
1270 WORD-FORMAT: a char indicating format for the ``word''. See
1272 WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes.
1273 NR_ROW: Number of rows.
1274 NR_COL: The number of colums (words per row).
1275 ASCHAR: (OPTIONAL) Append an ascii character dump to each row. Use
1276 ASCHAR for unprintable characters.
1278 Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
1279 displayes them. Returns:
1281 {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
1284 The number of bytes read is SIZE*ROW*COL. */
1287 mi_cmd_data_read_memory (char *command, char **argv, int argc)
1289 struct gdbarch *gdbarch = get_current_arch ();
1290 struct ui_out *uiout = current_uiout;
1291 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
1297 struct type *word_type;
1310 static struct mi_opt opts[] =
1312 {"o", OFFSET_OPT, 1},
1318 int opt = mi_getopt ("-data-read-memory", argc, argv, opts,
1323 switch ((enum opt) opt)
1326 offset = atol (optarg);
1333 if (argc < 5 || argc > 6)
1334 error (_("-data-read-memory: Usage: "
1335 "ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR]."));
1337 /* Extract all the arguments. */
1339 /* Start address of the memory dump. */
1340 addr = parse_and_eval_address (argv[0]) + offset;
1341 /* The format character to use when displaying a memory word. See
1342 the ``x'' command. */
1343 word_format = argv[1][0];
1344 /* The size of the memory word. */
1345 word_size = atol (argv[2]);
1349 word_type = builtin_type (gdbarch)->builtin_int8;
1353 word_type = builtin_type (gdbarch)->builtin_int16;
1357 word_type = builtin_type (gdbarch)->builtin_int32;
1361 word_type = builtin_type (gdbarch)->builtin_int64;
1365 word_type = builtin_type (gdbarch)->builtin_int8;
1368 /* The number of rows. */
1369 nr_rows = atol (argv[3]);
1371 error (_("-data-read-memory: invalid number of rows."));
1373 /* Number of bytes per row. */
1374 nr_cols = atol (argv[4]);
1376 error (_("-data-read-memory: invalid number of columns."));
1378 /* The un-printable character when printing ascii. */
1384 /* Create a buffer and read it in. */
1385 total_bytes = word_size * nr_rows * nr_cols;
1386 mbuf = xcalloc (total_bytes, 1);
1387 make_cleanup (xfree, mbuf);
1389 /* Dispatch memory reads to the topmost target, not the flattened
1391 nr_bytes = target_read (current_target.beneath,
1392 TARGET_OBJECT_MEMORY, NULL, mbuf,
1395 error (_("Unable to read memory."));
1397 /* Output the header information. */
1398 ui_out_field_core_addr (uiout, "addr", gdbarch, addr);
1399 ui_out_field_int (uiout, "nr-bytes", nr_bytes);
1400 ui_out_field_int (uiout, "total-bytes", total_bytes);
1401 ui_out_field_core_addr (uiout, "next-row",
1402 gdbarch, addr + word_size * nr_cols);
1403 ui_out_field_core_addr (uiout, "prev-row",
1404 gdbarch, addr - word_size * nr_cols);
1405 ui_out_field_core_addr (uiout, "next-page", gdbarch, addr + total_bytes);
1406 ui_out_field_core_addr (uiout, "prev-page", gdbarch, addr - total_bytes);
1408 /* Build the result as a two dimentional table. */
1410 struct ui_stream *stream = ui_out_stream_new (uiout);
1411 struct cleanup *cleanup_list_memory;
1415 cleanup_list_memory = make_cleanup_ui_out_list_begin_end (uiout, "memory");
1416 for (row = 0, row_byte = 0;
1418 row++, row_byte += nr_cols * word_size)
1422 struct cleanup *cleanup_tuple;
1423 struct cleanup *cleanup_list_data;
1424 struct value_print_options opts;
1426 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1427 ui_out_field_core_addr (uiout, "addr", gdbarch, addr + row_byte);
1428 /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr +
1430 cleanup_list_data = make_cleanup_ui_out_list_begin_end (uiout, "data");
1431 get_formatted_print_options (&opts, word_format);
1432 for (col = 0, col_byte = row_byte;
1434 col++, col_byte += word_size)
1436 if (col_byte + word_size > nr_bytes)
1438 ui_out_field_string (uiout, NULL, "N/A");
1442 ui_file_rewind (stream->stream);
1443 print_scalar_formatted (mbuf + col_byte, word_type, &opts,
1444 word_asize, stream->stream);
1445 ui_out_field_stream (uiout, NULL, stream);
1448 do_cleanups (cleanup_list_data);
1453 ui_file_rewind (stream->stream);
1454 for (byte = row_byte;
1455 byte < row_byte + word_size * nr_cols; byte++)
1457 if (byte >= nr_bytes)
1459 fputc_unfiltered ('X', stream->stream);
1461 else if (mbuf[byte] < 32 || mbuf[byte] > 126)
1463 fputc_unfiltered (aschar, stream->stream);
1466 fputc_unfiltered (mbuf[byte], stream->stream);
1468 ui_out_field_stream (uiout, "ascii", stream);
1470 do_cleanups (cleanup_tuple);
1472 ui_out_stream_delete (stream);
1473 do_cleanups (cleanup_list_memory);
1475 do_cleanups (cleanups);
1479 mi_cmd_data_read_memory_bytes (char *command, char **argv, int argc)
1481 struct gdbarch *gdbarch = get_current_arch ();
1482 struct ui_out *uiout = current_uiout;
1483 struct cleanup *cleanups;
1486 memory_read_result_s *read_result;
1488 VEC(memory_read_result_s) *result;
1496 static struct mi_opt opts[] =
1498 {"o", OFFSET_OPT, 1},
1504 int opt = mi_getopt ("-data-read-memory-bytes", argc, argv, opts,
1508 switch ((enum opt) opt)
1511 offset = atol (optarg);
1519 error (_("Usage: [ -o OFFSET ] ADDR LENGTH."));
1521 addr = parse_and_eval_address (argv[0]) + offset;
1522 length = atol (argv[1]);
1524 result = read_memory_robust (current_target.beneath, addr, length);
1526 cleanups = make_cleanup (free_memory_read_result_vector, result);
1528 if (VEC_length (memory_read_result_s, result) == 0)
1529 error (_("Unable to read memory."));
1531 make_cleanup_ui_out_list_begin_end (uiout, "memory");
1533 VEC_iterate (memory_read_result_s, result, ix, read_result);
1536 struct cleanup *t = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1540 ui_out_field_core_addr (uiout, "begin", gdbarch, read_result->begin);
1541 ui_out_field_core_addr (uiout, "offset", gdbarch, read_result->begin
1543 ui_out_field_core_addr (uiout, "end", gdbarch, read_result->end);
1545 data = xmalloc ((read_result->end - read_result->begin) * 2 + 1);
1547 for (i = 0, p = data;
1548 i < (read_result->end - read_result->begin);
1551 sprintf (p, "%02x", read_result->data[i]);
1553 ui_out_field_string (uiout, "contents", data);
1557 do_cleanups (cleanups);
1561 /* DATA-MEMORY-WRITE:
1563 COLUMN_OFFSET: optional argument. Must be preceded by '-o'. The
1564 offset from the beginning of the memory grid row where the cell to
1566 ADDR: start address of the row in the memory grid where the memory
1567 cell is, if OFFSET_COLUMN is specified. Otherwise, the address of
1568 the location to write to.
1569 FORMAT: a char indicating format for the ``word''. See
1571 WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
1572 VALUE: value to be written into the memory address.
1574 Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
1578 mi_cmd_data_write_memory (char *command, char **argv, int argc)
1580 struct gdbarch *gdbarch = get_current_arch ();
1581 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1585 /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
1586 enough when using a compiler other than GCC. */
1589 struct cleanup *old_chain;
1597 static struct mi_opt opts[] =
1599 {"o", OFFSET_OPT, 1},
1605 int opt = mi_getopt ("-data-write-memory", argc, argv, opts,
1610 switch ((enum opt) opt)
1613 offset = atol (optarg);
1621 error (_("-data-write-memory: Usage: "
1622 "[-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE."));
1624 /* Extract all the arguments. */
1625 /* Start address of the memory dump. */
1626 addr = parse_and_eval_address (argv[0]);
1627 /* The format character to use when displaying a memory word. See
1628 the ``x'' command. */
1629 word_format = argv[1][0];
1630 /* The size of the memory word. */
1631 word_size = atol (argv[2]);
1633 /* Calculate the real address of the write destination. */
1634 addr += (offset * word_size);
1636 /* Get the value as a number. */
1637 value = parse_and_eval_address (argv[3]);
1638 /* Get the value into an array. */
1639 buffer = xmalloc (word_size);
1640 old_chain = make_cleanup (xfree, buffer);
1641 store_signed_integer (buffer, word_size, byte_order, value);
1642 /* Write it down to memory. */
1643 write_memory (addr, buffer, word_size);
1644 /* Free the buffer. */
1645 do_cleanups (old_chain);
1648 /* DATA-MEMORY-WRITE-RAW:
1651 DATA: string of bytes to write at that address. */
1653 mi_cmd_data_write_memory_bytes (char *command, char **argv, int argc)
1659 struct cleanup *back_to;
1662 error (_("Usage: ADDR DATA."));
1664 addr = parse_and_eval_address (argv[0]);
1666 len = strlen (cdata)/2;
1668 data = xmalloc (len);
1669 back_to = make_cleanup (xfree, data);
1671 for (i = 0; i < len; ++i)
1674 sscanf (cdata + i * 2, "%02x", &x);
1675 data[i] = (gdb_byte)x;
1678 r = target_write_memory (addr, data, len);
1680 error (_("Could not write memory"));
1682 do_cleanups (back_to);
1687 mi_cmd_enable_timings (char *command, char **argv, int argc)
1693 if (strcmp (argv[0], "yes") == 0)
1695 else if (strcmp (argv[0], "no") == 0)
1706 error (_("-enable-timings: Usage: %s {yes|no}"), command);
1710 mi_cmd_list_features (char *command, char **argv, int argc)
1714 struct cleanup *cleanup = NULL;
1715 struct ui_out *uiout = current_uiout;
1717 cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");
1718 ui_out_field_string (uiout, NULL, "frozen-varobjs");
1719 ui_out_field_string (uiout, NULL, "pending-breakpoints");
1720 ui_out_field_string (uiout, NULL, "thread-info");
1721 ui_out_field_string (uiout, NULL, "data-read-memory-bytes");
1722 ui_out_field_string (uiout, NULL, "breakpoint-notifications");
1725 ui_out_field_string (uiout, NULL, "python");
1728 do_cleanups (cleanup);
1732 error (_("-list-features should be passed no arguments"));
1736 mi_cmd_list_target_features (char *command, char **argv, int argc)
1740 struct cleanup *cleanup = NULL;
1741 struct ui_out *uiout = current_uiout;
1743 cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");
1744 if (target_can_async_p ())
1745 ui_out_field_string (uiout, NULL, "async");
1746 if (target_can_execute_reverse)
1747 ui_out_field_string (uiout, NULL, "reverse");
1749 do_cleanups (cleanup);
1753 error (_("-list-target-features should be passed no arguments"));
1757 mi_cmd_add_inferior (char *command, char **argv, int argc)
1759 struct inferior *inf;
1762 error (_("-add-inferior should be passed no arguments"));
1764 inf = add_inferior_with_spaces ();
1766 ui_out_field_fmt (current_uiout, "inferior", "i%d", inf->num);
1769 /* Callback used to find the first inferior other than the
1773 get_other_inferior (struct inferior *inf, void *arg)
1775 if (inf == current_inferior ())
1782 mi_cmd_remove_inferior (char *command, char **argv, int argc)
1785 struct inferior *inf;
1788 error (_("-remove-inferior should be passed a single argument"));
1790 if (sscanf (argv[0], "i%d", &id) != 1)
1791 error (_("the thread group id is syntactically invalid"));
1793 inf = find_inferior_id (id);
1795 error (_("the specified thread group does not exist"));
1798 error (_("cannot remove an active inferior"));
1800 if (inf == current_inferior ())
1802 struct thread_info *tp = 0;
1803 struct inferior *new_inferior
1804 = iterate_over_inferiors (get_other_inferior, NULL);
1806 if (new_inferior == NULL)
1807 error (_("Cannot remove last inferior"));
1809 set_current_inferior (new_inferior);
1810 if (new_inferior->pid != 0)
1811 tp = any_thread_of_process (new_inferior->pid);
1812 switch_to_thread (tp ? tp->ptid : null_ptid);
1813 set_current_program_space (new_inferior->pspace);
1816 delete_inferior_1 (inf, 1 /* silent */);
1821 /* Execute a command within a safe environment.
1822 Return <0 for error; >=0 for ok.
1824 args->action will tell mi_execute_command what action
1825 to perfrom after the given command has executed (display/suppress
1826 prompt, display error). */
1829 captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context)
1831 struct cleanup *cleanup;
1834 current_command_ts = context->cmd_start;
1836 current_token = xstrdup (context->token);
1837 cleanup = make_cleanup (free_current_contents, ¤t_token);
1839 running_result_record_printed = 0;
1841 switch (context->op)
1844 /* A MI command was read from the input stream. */
1846 /* FIXME: gdb_???? */
1847 fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
1848 context->token, context->command, context->args);
1851 mi_cmd_execute (context);
1853 /* Print the result if there were no errors.
1855 Remember that on the way out of executing a command, you have
1856 to directly use the mi_interp's uiout, since the command could
1857 have reset the interpreter, in which case the current uiout
1858 will most likely crash in the mi_out_* routines. */
1859 if (!running_result_record_printed)
1861 fputs_unfiltered (context->token, raw_stdout);
1862 /* There's no particularly good reason why target-connect results
1863 in not ^done. Should kill ^connected for MI3. */
1864 fputs_unfiltered (strcmp (context->command, "target-select") == 0
1865 ? "^connected" : "^done", raw_stdout);
1866 mi_out_put (uiout, raw_stdout);
1867 mi_out_rewind (uiout);
1868 mi_print_timing_maybe ();
1869 fputs_unfiltered ("\n", raw_stdout);
1872 /* The command does not want anything to be printed. In that
1873 case, the command probably should not have written anything
1874 to uiout, but in case it has written something, discard it. */
1875 mi_out_rewind (uiout);
1882 /* A CLI command was read from the input stream. */
1883 /* This "feature" will be removed as soon as we have a
1884 complete set of mi commands. */
1885 /* Echo the command on the console. */
1886 fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
1887 /* Call the "console" interpreter. */
1888 argv[0] = "console";
1889 argv[1] = context->command;
1890 mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
1892 /* If we changed interpreters, DON'T print out anything. */
1893 if (current_interp_named_p (INTERP_MI)
1894 || current_interp_named_p (INTERP_MI1)
1895 || current_interp_named_p (INTERP_MI2)
1896 || current_interp_named_p (INTERP_MI3))
1898 if (!running_result_record_printed)
1900 fputs_unfiltered (context->token, raw_stdout);
1901 fputs_unfiltered ("^done", raw_stdout);
1902 mi_out_put (uiout, raw_stdout);
1903 mi_out_rewind (uiout);
1904 mi_print_timing_maybe ();
1905 fputs_unfiltered ("\n", raw_stdout);
1908 mi_out_rewind (uiout);
1915 do_cleanups (cleanup);
1920 /* Print a gdb exception to the MI output stream. */
1923 mi_print_exception (const char *token, struct gdb_exception exception)
1925 fputs_unfiltered (token, raw_stdout);
1926 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1927 if (exception.message == NULL)
1928 fputs_unfiltered ("unknown error", raw_stdout);
1930 fputstr_unfiltered (exception.message, '"', raw_stdout);
1931 fputs_unfiltered ("\"\n", raw_stdout);
1935 mi_execute_command (char *cmd, int from_tty)
1938 struct mi_parse *command = NULL;
1939 volatile struct gdb_exception exception;
1941 /* This is to handle EOF (^D). We just quit gdb. */
1942 /* FIXME: we should call some API function here. */
1944 quit_force (NULL, from_tty);
1946 target_log_command (cmd);
1948 TRY_CATCH (exception, RETURN_MASK_ALL)
1950 command = mi_parse (cmd, &token);
1952 if (exception.reason < 0)
1954 mi_print_exception (token, exception);
1959 volatile struct gdb_exception result;
1960 ptid_t previous_ptid = inferior_ptid;
1962 command->token = token;
1966 command->cmd_start = (struct mi_timestamp *)
1967 xmalloc (sizeof (struct mi_timestamp));
1968 timestamp (command->cmd_start);
1971 TRY_CATCH (result, RETURN_MASK_ALL)
1973 captured_mi_execute_command (current_uiout, command);
1975 if (result.reason < 0)
1977 /* The command execution failed and error() was called
1979 mi_print_exception (command->token, result);
1980 mi_out_rewind (current_uiout);
1983 bpstat_do_actions ();
1985 if (/* The notifications are only output when the top-level
1986 interpreter (specified on the command line) is MI. */
1987 ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
1988 /* Don't try report anything if there are no threads --
1989 the program is dead. */
1990 && thread_count () != 0
1991 /* -thread-select explicitly changes thread. If frontend uses that
1992 internally, we don't want to emit =thread-selected, since
1993 =thread-selected is supposed to indicate user's intentions. */
1994 && strcmp (command->command, "thread-select") != 0)
1996 struct mi_interp *mi = top_level_interpreter_data ();
1997 int report_change = 0;
1999 if (command->thread == -1)
2001 report_change = (!ptid_equal (previous_ptid, null_ptid)
2002 && !ptid_equal (inferior_ptid, previous_ptid)
2003 && !ptid_equal (inferior_ptid, null_ptid));
2005 else if (!ptid_equal (inferior_ptid, null_ptid))
2007 struct thread_info *ti = inferior_thread ();
2009 report_change = (ti->num != command->thread);
2014 struct thread_info *ti = inferior_thread ();
2016 target_terminal_ours ();
2017 fprintf_unfiltered (mi->event_channel,
2018 "thread-selected,id=\"%d\"",
2020 gdb_flush (mi->event_channel);
2024 mi_parse_free (command);
2027 fputs_unfiltered ("(gdb) \n", raw_stdout);
2028 gdb_flush (raw_stdout);
2029 /* Print any buffered hook code. */
2034 mi_cmd_execute (struct mi_parse *parse)
2036 struct cleanup *cleanup;
2038 cleanup = prepare_execute_command ();
2040 if (parse->all && parse->thread_group != -1)
2041 error (_("Cannot specify --thread-group together with --all"));
2043 if (parse->all && parse->thread != -1)
2044 error (_("Cannot specify --thread together with --all"));
2046 if (parse->thread_group != -1 && parse->thread != -1)
2047 error (_("Cannot specify --thread together with --thread-group"));
2049 if (parse->frame != -1 && parse->thread == -1)
2050 error (_("Cannot specify --frame without --thread"));
2052 if (parse->thread_group != -1)
2054 struct inferior *inf = find_inferior_id (parse->thread_group);
2055 struct thread_info *tp = 0;
2058 error (_("Invalid thread group for the --thread-group option"));
2060 set_current_inferior (inf);
2061 /* This behaviour means that if --thread-group option identifies
2062 an inferior with multiple threads, then a random one will be picked.
2063 This is not a problem -- frontend should always provide --thread if
2064 it wishes to operate on a specific thread. */
2066 tp = any_thread_of_process (inf->pid);
2067 switch_to_thread (tp ? tp->ptid : null_ptid);
2068 set_current_program_space (inf->pspace);
2071 if (parse->thread != -1)
2073 struct thread_info *tp = find_thread_id (parse->thread);
2076 error (_("Invalid thread id: %d"), parse->thread);
2078 if (is_exited (tp->ptid))
2079 error (_("Thread id: %d has terminated"), parse->thread);
2081 switch_to_thread (tp->ptid);
2084 if (parse->frame != -1)
2086 struct frame_info *fid;
2087 int frame = parse->frame;
2089 fid = find_relative_frame (get_current_frame (), &frame);
2091 /* find_relative_frame was successful */
2094 error (_("Invalid frame id: %d"), frame);
2097 current_context = parse;
2099 if (strncmp (parse->command, "break-", sizeof ("break-") - 1 ) == 0)
2101 make_cleanup_restore_integer (&mi_suppress_breakpoint_notifications);
2102 mi_suppress_breakpoint_notifications = 1;
2105 if (parse->cmd->argv_func != NULL)
2107 parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
2109 else if (parse->cmd->cli.cmd != 0)
2111 /* FIXME: DELETE THIS. */
2112 /* The operation is still implemented by a cli command. */
2113 /* Must be a synchronous one. */
2114 mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
2119 /* FIXME: DELETE THIS. */
2120 struct ui_file *stb;
2122 stb = mem_fileopen ();
2124 fputs_unfiltered ("Undefined mi command: ", stb);
2125 fputstr_unfiltered (parse->command, '"', stb);
2126 fputs_unfiltered (" (missing implementation)", stb);
2128 make_cleanup_ui_file_delete (stb);
2131 do_cleanups (cleanup);
2134 /* FIXME: This is just a hack so we can get some extra commands going.
2135 We don't want to channel things through the CLI, but call libgdb directly.
2136 Use only for synchronous commands. */
2139 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
2143 struct cleanup *old_cleanups;
2147 run = xstrprintf ("%s %s", cmd, args);
2149 run = xstrdup (cmd);
2151 /* FIXME: gdb_???? */
2152 fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
2154 old_cleanups = make_cleanup (xfree, run);
2155 execute_command ( /*ui */ run, 0 /*from_tty */ );
2156 do_cleanups (old_cleanups);
2162 mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
2164 struct cleanup *old_cleanups;
2167 if (target_can_async_p ())
2168 run = xstrprintf ("%s %s&", cli_command, argc ? *argv : "");
2170 run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
2171 old_cleanups = make_cleanup (xfree, run);
2173 execute_command ( /*ui */ run, 0 /*from_tty */ );
2175 /* Do this before doing any printing. It would appear that some
2176 print code leaves garbage around in the buffer. */
2177 do_cleanups (old_cleanups);
2181 mi_load_progress (const char *section_name,
2182 unsigned long sent_so_far,
2183 unsigned long total_section,
2184 unsigned long total_sent,
2185 unsigned long grand_total)
2187 struct timeval time_now, delta, update_threshold;
2188 static struct timeval last_update;
2189 static char *previous_sect_name = NULL;
2191 struct ui_out *saved_uiout;
2192 struct ui_out *uiout;
2194 /* This function is called through deprecated_show_load_progress
2195 which means uiout may not be correct. Fix it for the duration
2196 of this function. */
2197 saved_uiout = current_uiout;
2199 if (current_interp_named_p (INTERP_MI)
2200 || current_interp_named_p (INTERP_MI2))
2201 current_uiout = mi_out_new (2);
2202 else if (current_interp_named_p (INTERP_MI1))
2203 current_uiout = mi_out_new (1);
2204 else if (current_interp_named_p (INTERP_MI3))
2205 current_uiout = mi_out_new (3);
2209 uiout = current_uiout;
2211 update_threshold.tv_sec = 0;
2212 update_threshold.tv_usec = 500000;
2213 gettimeofday (&time_now, NULL);
2215 delta.tv_usec = time_now.tv_usec - last_update.tv_usec;
2216 delta.tv_sec = time_now.tv_sec - last_update.tv_sec;
2218 if (delta.tv_usec < 0)
2221 delta.tv_usec += 1000000L;
2224 new_section = (previous_sect_name ?
2225 strcmp (previous_sect_name, section_name) : 1);
2228 struct cleanup *cleanup_tuple;
2230 xfree (previous_sect_name);
2231 previous_sect_name = xstrdup (section_name);
2234 fputs_unfiltered (current_token, raw_stdout);
2235 fputs_unfiltered ("+download", raw_stdout);
2236 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2237 ui_out_field_string (uiout, "section", section_name);
2238 ui_out_field_int (uiout, "section-size", total_section);
2239 ui_out_field_int (uiout, "total-size", grand_total);
2240 do_cleanups (cleanup_tuple);
2241 mi_out_put (uiout, raw_stdout);
2242 fputs_unfiltered ("\n", raw_stdout);
2243 gdb_flush (raw_stdout);
2246 if (delta.tv_sec >= update_threshold.tv_sec &&
2247 delta.tv_usec >= update_threshold.tv_usec)
2249 struct cleanup *cleanup_tuple;
2251 last_update.tv_sec = time_now.tv_sec;
2252 last_update.tv_usec = time_now.tv_usec;
2254 fputs_unfiltered (current_token, raw_stdout);
2255 fputs_unfiltered ("+download", raw_stdout);
2256 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
2257 ui_out_field_string (uiout, "section", section_name);
2258 ui_out_field_int (uiout, "section-sent", sent_so_far);
2259 ui_out_field_int (uiout, "section-size", total_section);
2260 ui_out_field_int (uiout, "total-sent", total_sent);
2261 ui_out_field_int (uiout, "total-size", grand_total);
2262 do_cleanups (cleanup_tuple);
2263 mi_out_put (uiout, raw_stdout);
2264 fputs_unfiltered ("\n", raw_stdout);
2265 gdb_flush (raw_stdout);
2269 uiout = saved_uiout;
2273 timestamp (struct mi_timestamp *tv)
2275 gettimeofday (&tv->wallclock, NULL);
2276 #ifdef HAVE_GETRUSAGE
2277 getrusage (RUSAGE_SELF, &rusage);
2278 tv->utime.tv_sec = rusage.ru_utime.tv_sec;
2279 tv->utime.tv_usec = rusage.ru_utime.tv_usec;
2280 tv->stime.tv_sec = rusage.ru_stime.tv_sec;
2281 tv->stime.tv_usec = rusage.ru_stime.tv_usec;
2284 long usec = get_run_time ();
2286 tv->utime.tv_sec = usec/1000000L;
2287 tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
2288 tv->stime.tv_sec = 0;
2289 tv->stime.tv_usec = 0;
2295 print_diff_now (struct mi_timestamp *start)
2297 struct mi_timestamp now;
2300 print_diff (start, &now);
2304 mi_print_timing_maybe (void)
2306 /* If the command is -enable-timing then do_timings may be
2307 true whilst current_command_ts is not initialized. */
2308 if (do_timings && current_command_ts)
2309 print_diff_now (current_command_ts);
2313 timeval_diff (struct timeval start, struct timeval end)
2315 return ((end.tv_sec - start.tv_sec) * 1000000L)
2316 + (end.tv_usec - start.tv_usec);
2320 print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
2324 ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
2325 timeval_diff (start->wallclock, end->wallclock) / 1000000.0,
2326 timeval_diff (start->utime, end->utime) / 1000000.0,
2327 timeval_diff (start->stime, end->stime) / 1000000.0);
2331 mi_cmd_trace_define_variable (char *command, char **argv, int argc)
2333 struct expression *expr;
2334 struct cleanup *back_to;
2335 LONGEST initval = 0;
2336 struct trace_state_variable *tsv;
2339 if (argc != 1 && argc != 2)
2340 error (_("Usage: -trace-define-variable VARIABLE [VALUE]"));
2342 expr = parse_expression (argv[0]);
2343 back_to = make_cleanup (xfree, expr);
2345 if (expr->nelts == 3 && expr->elts[0].opcode == OP_INTERNALVAR)
2347 struct internalvar *intvar = expr->elts[1].internalvar;
2350 name = internalvar_name (intvar);
2353 if (!name || *name == '\0')
2354 error (_("Invalid name of trace variable"));
2356 tsv = find_trace_state_variable (name);
2358 tsv = create_trace_state_variable (name);
2361 initval = value_as_long (parse_and_eval (argv[1]));
2363 tsv->initial_value = initval;
2365 do_cleanups (back_to);
2369 mi_cmd_trace_list_variables (char *command, char **argv, int argc)
2372 error (_("-trace-list-variables: no arguments are allowed"));
2374 tvariables_info_1 ();
2378 mi_cmd_trace_find (char *command, char **argv, int argc)
2383 error (_("trace selection mode is required"));
2387 if (strcmp (mode, "none") == 0)
2389 tfind_1 (tfind_number, -1, 0, 0, 0);
2393 if (current_trace_status ()->running)
2394 error (_("May not look at trace frames while trace is running."));
2396 if (strcmp (mode, "frame-number") == 0)
2399 error (_("frame number is required"));
2400 tfind_1 (tfind_number, atoi (argv[1]), 0, 0, 0);
2402 else if (strcmp (mode, "tracepoint-number") == 0)
2405 error (_("tracepoint number is required"));
2406 tfind_1 (tfind_tp, atoi (argv[1]), 0, 0, 0);
2408 else if (strcmp (mode, "pc") == 0)
2411 error (_("PC is required"));
2412 tfind_1 (tfind_pc, 0, parse_and_eval_address (argv[1]), 0, 0);
2414 else if (strcmp (mode, "pc-inside-range") == 0)
2417 error (_("Start and end PC are required"));
2418 tfind_1 (tfind_range, 0, parse_and_eval_address (argv[1]),
2419 parse_and_eval_address (argv[2]), 0);
2421 else if (strcmp (mode, "pc-outside-range") == 0)
2424 error (_("Start and end PC are required"));
2425 tfind_1 (tfind_outside, 0, parse_and_eval_address (argv[1]),
2426 parse_and_eval_address (argv[2]), 0);
2428 else if (strcmp (mode, "line") == 0)
2430 struct symtabs_and_lines sals;
2431 struct symtab_and_line sal;
2432 static CORE_ADDR start_pc, end_pc;
2433 struct cleanup *back_to;
2436 error (_("Line is required"));
2438 sals = decode_line_spec (argv[1], 1);
2439 back_to = make_cleanup (xfree, sals.sals);
2443 if (sal.symtab == 0)
2444 error (_("Could not find the specified line"));
2446 if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc))
2447 tfind_1 (tfind_range, 0, start_pc, end_pc - 1, 0);
2449 error (_("Could not find the specified line"));
2451 do_cleanups (back_to);
2454 error (_("Invalid mode '%s'"), mode);
2456 if (has_stack_frames () || get_traceframe_number () >= 0)
2458 print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC);
2463 mi_cmd_trace_save (char *command, char **argv, int argc)
2465 int target_saves = 0;
2468 if (argc != 1 && argc != 2)
2469 error (_("Usage: -trace-save [-r] filename"));
2474 if (strcmp (argv[0], "-r") == 0)
2477 error (_("Invalid option: %s"), argv[0]);
2484 trace_save (filename, target_saves);
2489 mi_cmd_trace_start (char *command, char **argv, int argc)
2495 mi_cmd_trace_status (char *command, char **argv, int argc)
2497 trace_status_mi (0);
2501 mi_cmd_trace_stop (char *command, char **argv, int argc)
2504 trace_status_mi (1);