3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
4 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"
57 #if defined HAVE_SYS_RESOURCE_H
58 #include <sys/resource.h>
71 struct ui_file *raw_stdout;
73 /* This is used to pass the current command timestamp
74 down to continuation routines. */
75 static struct mi_timestamp *current_command_ts;
77 static int do_timings = 0;
80 int running_result_record_printed = 1;
82 /* Flag indicating that the target has proceeded since the last
83 command was issued. */
86 extern void _initialize_mi_main (void);
87 static void mi_cmd_execute (struct mi_parse *parse);
89 static void mi_execute_cli_command (const char *cmd, int args_p,
91 static void mi_execute_async_cli_command (char *cli_command,
92 char **argv, int argc);
93 static int register_changed_p (int regnum, struct regcache *,
95 static void get_register (struct frame_info *, int regnum, int format);
97 /* Command implementations. FIXME: Is this libgdb? No. This is the MI
98 layer that calls libgdb. Any operation used in the below should be
101 static void timestamp (struct mi_timestamp *tv);
103 static void print_diff_now (struct mi_timestamp *start);
104 static void print_diff (struct mi_timestamp *start, struct mi_timestamp *end);
107 mi_cmd_gdb_exit (char *command, char **argv, int argc)
109 /* We have to print everything right here because we never return. */
111 fputs_unfiltered (current_token, raw_stdout);
112 fputs_unfiltered ("^exit\n", raw_stdout);
113 mi_out_put (uiout, raw_stdout);
114 /* FIXME: The function called is not yet a formal libgdb function. */
115 quit_force (NULL, FROM_TTY);
119 mi_cmd_exec_next (char *command, char **argv, int argc)
121 /* FIXME: Should call a libgdb function, not a cli wrapper. */
122 mi_execute_async_cli_command ("next", argv, argc);
126 mi_cmd_exec_next_instruction (char *command, char **argv, int argc)
128 /* FIXME: Should call a libgdb function, not a cli wrapper. */
129 mi_execute_async_cli_command ("nexti", argv, argc);
133 mi_cmd_exec_step (char *command, char **argv, int argc)
135 /* FIXME: Should call a libgdb function, not a cli wrapper. */
136 mi_execute_async_cli_command ("step", argv, argc);
140 mi_cmd_exec_step_instruction (char *command, char **argv, int argc)
142 /* FIXME: Should call a libgdb function, not a cli wrapper. */
143 mi_execute_async_cli_command ("stepi", argv, argc);
147 mi_cmd_exec_finish (char *command, char **argv, int argc)
149 /* FIXME: Should call a libgdb function, not a cli wrapper. */
150 mi_execute_async_cli_command ("finish", argv, argc);
154 mi_cmd_exec_return (char *command, char **argv, int argc)
156 /* This command doesn't really execute the target, it just pops the
157 specified number of frames. */
159 /* Call return_command with from_tty argument equal to 0 so as to
160 avoid being queried. */
161 return_command (*argv, 0);
163 /* Call return_command with from_tty argument equal to 0 so as to
164 avoid being queried. */
165 return_command (NULL, 0);
167 /* Because we have called return_command with from_tty = 0, we need
168 to print the frame here. */
169 print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS);
173 mi_cmd_exec_jump (char *args, char **argv, int argc)
175 /* FIXME: Should call a libgdb function, not a cli wrapper. */
176 return mi_execute_async_cli_command ("jump", argv, argc);
180 proceed_thread_callback (struct thread_info *thread, void *arg)
182 int pid = *(int *)arg;
184 if (!is_stopped (thread->ptid))
187 if (PIDGET (thread->ptid) != pid)
190 switch_to_thread (thread->ptid);
191 clear_proceed_status ();
192 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
197 mi_cmd_exec_continue (char *command, char **argv, int argc)
201 else if (argc == 1 && strcmp (argv[0], "--all") == 0)
203 else if (argc == 2 && strcmp (argv[0], "--thread-group") == 0)
205 struct cleanup *old_chain;
207 if (argv[1] == NULL || argv[1] == '\0')
208 error ("Thread group id not specified");
209 pid = atoi (argv[1]);
210 if (!in_inferior_list (pid))
211 error ("Invalid thread group id '%s'", argv[1]);
213 old_chain = make_cleanup_restore_current_thread ();
214 iterate_over_threads (proceed_thread_callback, &pid);
215 do_cleanups (old_chain);
218 error ("Usage: -exec-continue [--all|--thread-group id]");
222 interrupt_thread_callback (struct thread_info *thread, void *arg)
224 int pid = *(int *)arg;
226 if (!is_running (thread->ptid))
229 if (PIDGET (thread->ptid) != pid)
232 target_stop (thread->ptid);
236 /* Interrupt the execution of the target. Note how we must play around
237 with the token variables, in order to display the current token in
238 the result of the interrupt command, and the previous execution
239 token when the target finally stops. See comments in
242 mi_cmd_exec_interrupt (char *command, char **argv, int argc)
246 if (!is_running (inferior_ptid))
247 error ("Current thread is not running.");
249 interrupt_target_1 (0);
251 else if (argc == 1 && strcmp (argv[0], "--all") == 0)
254 error ("Inferior not running.");
256 interrupt_target_1 (1);
258 else if (argc == 2 && strcmp (argv[0], "--thread-group") == 0)
260 struct cleanup *old_chain;
262 if (argv[1] == NULL || argv[1] == '\0')
263 error ("Thread group id not specified");
264 pid = atoi (argv[1]);
265 if (!in_inferior_list (pid))
266 error ("Invalid thread group id '%s'", argv[1]);
268 old_chain = make_cleanup_restore_current_thread ();
269 iterate_over_threads (interrupt_thread_callback, &pid);
270 do_cleanups (old_chain);
273 error ("Usage: -exec-interrupt [--all|--thread-group id]");
277 find_thread_of_process (struct thread_info *ti, void *p)
280 if (PIDGET (ti->ptid) == pid && !is_exited (ti->ptid))
287 mi_cmd_target_detach (char *command, char **argv, int argc)
289 if (argc != 0 && argc != 1)
290 error ("Usage: -target-detach [thread-group]");
294 struct thread_info *tp;
296 int pid = strtol (argv[0], &end, 10);
298 error (_("Cannot parse thread group id '%s'"), argv[0]);
300 /* Pick any thread in the desired process. Current
301 target_detach deteches from the parent of inferior_ptid. */
302 tp = iterate_over_threads (find_thread_of_process, &pid);
304 error (_("Thread group is empty"));
306 switch_to_thread (tp->ptid);
309 detach_command (NULL, 0);
313 mi_cmd_thread_select (char *command, char **argv, int argc)
316 char *mi_error_message;
319 error ("mi_cmd_thread_select: USAGE: threadnum.");
321 rc = gdb_thread_select (uiout, argv[0], &mi_error_message);
323 if (rc == GDB_RC_FAIL)
325 make_cleanup (xfree, mi_error_message);
326 error ("%s", mi_error_message);
331 mi_cmd_thread_list_ids (char *command, char **argv, int argc)
334 char *mi_error_message;
337 error ("mi_cmd_thread_list_ids: No arguments required.");
339 rc = gdb_list_thread_ids (uiout, &mi_error_message);
341 if (rc == GDB_RC_FAIL)
343 make_cleanup (xfree, mi_error_message);
344 error ("%s", mi_error_message);
349 mi_cmd_thread_info (char *command, char **argv, int argc)
353 if (argc != 0 && argc != 1)
354 error ("Invalid MI command");
357 thread = atoi (argv[0]);
359 print_thread_info (uiout, thread, -1);
363 print_one_inferior (struct inferior *inferior, void *arg)
365 if (inferior->pid != 0)
367 struct cleanup *back_to
368 = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
370 ui_out_field_fmt (uiout, "id", "%d", inferior->pid);
371 ui_out_field_string (uiout, "type", "process");
372 ui_out_field_int (uiout, "pid", inferior->pid);
374 do_cleanups (back_to);
381 mi_cmd_list_thread_groups (char *command, char **argv, int argc)
383 struct cleanup *back_to;
387 if (argc > 0 && strcmp (argv[0], "--available") == 0)
397 back_to = make_cleanup (null_cleanup, NULL);
401 error (_("Can only report top-level available thread groups"));
406 struct osdata_item *item;
409 data = get_osdata ("processes");
410 make_cleanup_osdata_free (data);
412 make_cleanup_ui_out_list_begin_end (uiout, "groups");
415 VEC_iterate (osdata_item_s, data->items,
419 struct cleanup *back_to =
420 make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
422 const char *pid = get_osdata_column (item, "pid");
423 const char *cmd = get_osdata_column (item, "command");
424 const char *user = get_osdata_column (item, "user");
426 ui_out_field_fmt (uiout, "id", "%s", pid);
427 ui_out_field_string (uiout, "type", "process");
429 ui_out_field_string (uiout, "description", cmd);
431 ui_out_field_string (uiout, "user", user);
433 do_cleanups (back_to);
439 if (!in_inferior_list (pid))
440 error ("Invalid thread group id '%s'", id);
441 print_thread_info (uiout, -1, pid);
445 make_cleanup_ui_out_list_begin_end (uiout, "groups");
446 iterate_over_inferiors (print_one_inferior, NULL);
449 do_cleanups (back_to);
453 mi_cmd_data_list_register_names (char *command, char **argv, int argc)
455 struct frame_info *frame;
456 struct gdbarch *gdbarch;
459 struct cleanup *cleanup;
461 /* Note that the test for a valid register must include checking the
462 gdbarch_register_name because gdbarch_num_regs may be allocated for
463 the union of the register sets within a family of related processors.
464 In this case, some entries of gdbarch_register_name will change depending
465 upon the particular processor being debugged. */
467 frame = get_selected_frame (NULL);
468 gdbarch = get_frame_arch (frame);
469 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
471 cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-names");
473 if (argc == 0) /* No args, just do all the regs. */
479 if (gdbarch_register_name (gdbarch, regnum) == NULL
480 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
481 ui_out_field_string (uiout, NULL, "");
483 ui_out_field_string (uiout, NULL,
484 gdbarch_register_name (gdbarch, regnum));
488 /* Else, list of register #s, just do listed regs. */
489 for (i = 0; i < argc; i++)
491 regnum = atoi (argv[i]);
492 if (regnum < 0 || regnum >= numregs)
493 error ("bad register number");
495 if (gdbarch_register_name (gdbarch, regnum) == NULL
496 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
497 ui_out_field_string (uiout, NULL, "");
499 ui_out_field_string (uiout, NULL,
500 gdbarch_register_name (gdbarch, regnum));
502 do_cleanups (cleanup);
506 mi_cmd_data_list_changed_registers (char *command, char **argv, int argc)
508 static struct regcache *this_regs = NULL;
509 struct regcache *prev_regs;
510 struct gdbarch *gdbarch;
511 int regnum, numregs, changed;
513 struct cleanup *cleanup;
515 /* The last time we visited this function, the current frame's register
516 contents were saved in THIS_REGS. Move THIS_REGS over to PREV_REGS,
517 and refresh THIS_REGS with the now-current register contents. */
519 prev_regs = this_regs;
520 this_regs = frame_save_as_regcache (get_selected_frame (NULL));
521 cleanup = make_cleanup_regcache_xfree (prev_regs);
523 /* Note that the test for a valid register must include checking the
524 gdbarch_register_name because gdbarch_num_regs may be allocated for
525 the union of the register sets within a family of related processors.
526 In this case, some entries of gdbarch_register_name will change depending
527 upon the particular processor being debugged. */
529 gdbarch = get_regcache_arch (this_regs);
530 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
532 make_cleanup_ui_out_list_begin_end (uiout, "changed-registers");
534 if (argc == 0) /* No args, just do all the regs. */
540 if (gdbarch_register_name (gdbarch, regnum) == NULL
541 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
543 changed = register_changed_p (regnum, prev_regs, this_regs);
545 error ("mi_cmd_data_list_changed_registers: Unable to read register contents.");
547 ui_out_field_int (uiout, NULL, regnum);
551 /* Else, list of register #s, just do listed regs. */
552 for (i = 0; i < argc; i++)
554 regnum = atoi (argv[i]);
558 && gdbarch_register_name (gdbarch, regnum) != NULL
559 && *gdbarch_register_name (gdbarch, regnum) != '\000')
561 changed = register_changed_p (regnum, prev_regs, this_regs);
563 error ("mi_cmd_data_list_register_change: Unable to read register contents.");
565 ui_out_field_int (uiout, NULL, regnum);
568 error ("bad register number");
570 do_cleanups (cleanup);
574 register_changed_p (int regnum, struct regcache *prev_regs,
575 struct regcache *this_regs)
577 struct gdbarch *gdbarch = get_regcache_arch (this_regs);
578 gdb_byte prev_buffer[MAX_REGISTER_SIZE];
579 gdb_byte this_buffer[MAX_REGISTER_SIZE];
581 /* Registers not valid in this frame return count as unchanged. */
582 if (!regcache_valid_p (this_regs, regnum))
585 /* First time through or after gdbarch change consider all registers as
586 changed. Same for registers not valid in the previous frame. */
587 if (!prev_regs || get_regcache_arch (prev_regs) != gdbarch
588 || !regcache_valid_p (prev_regs, regnum))
591 /* Get register contents and compare. */
592 regcache_cooked_read (prev_regs, regnum, prev_buffer);
593 regcache_cooked_read (this_regs, regnum, this_buffer);
595 return memcmp (prev_buffer, this_buffer,
596 register_size (gdbarch, regnum)) != 0;
599 /* Return a list of register number and value pairs. The valid
600 arguments expected are: a letter indicating the format in which to
601 display the registers contents. This can be one of: x (hexadecimal), d
602 (decimal), N (natural), t (binary), o (octal), r (raw). After the
603 format argumetn there can be a sequence of numbers, indicating which
604 registers to fetch the content of. If the format is the only argument,
605 a list of all the registers with their values is returned. */
607 mi_cmd_data_list_register_values (char *command, char **argv, int argc)
609 struct frame_info *frame;
610 struct gdbarch *gdbarch;
611 int regnum, numregs, format;
613 struct cleanup *list_cleanup, *tuple_cleanup;
615 /* Note that the test for a valid register must include checking the
616 gdbarch_register_name because gdbarch_num_regs may be allocated for
617 the union of the register sets within a family of related processors.
618 In this case, some entries of gdbarch_register_name will change depending
619 upon the particular processor being debugged. */
622 error ("mi_cmd_data_list_register_values: Usage: -data-list-register-values <format> [<regnum1>...<regnumN>]");
624 format = (int) argv[0][0];
626 frame = get_selected_frame (NULL);
627 gdbarch = get_frame_arch (frame);
628 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
630 list_cleanup = make_cleanup_ui_out_list_begin_end (uiout, "register-values");
632 if (argc == 1) /* No args, beside the format: do all the regs. */
638 if (gdbarch_register_name (gdbarch, regnum) == NULL
639 || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
641 tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
642 ui_out_field_int (uiout, "number", regnum);
643 get_register (frame, regnum, format);
644 do_cleanups (tuple_cleanup);
648 /* Else, list of register #s, just do listed regs. */
649 for (i = 1; i < argc; i++)
651 regnum = atoi (argv[i]);
655 && gdbarch_register_name (gdbarch, regnum) != NULL
656 && *gdbarch_register_name (gdbarch, regnum) != '\000')
658 tuple_cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
659 ui_out_field_int (uiout, "number", regnum);
660 get_register (frame, regnum, format);
661 do_cleanups (tuple_cleanup);
664 error ("bad register number");
666 do_cleanups (list_cleanup);
669 /* Output one register's contents in the desired format. */
671 get_register (struct frame_info *frame, int regnum, int format)
673 struct gdbarch *gdbarch = get_frame_arch (frame);
674 gdb_byte buffer[MAX_REGISTER_SIZE];
679 static struct ui_stream *stb = NULL;
681 stb = ui_out_stream_new (uiout);
686 frame_register (frame, regnum, &optim, &lval, &addr, &realnum, buffer);
689 error ("Optimized out");
694 char *ptr, buf[1024];
698 for (j = 0; j < register_size (gdbarch, regnum); j++)
700 int idx = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ?
701 j : register_size (gdbarch, regnum) - 1 - j;
702 sprintf (ptr, "%02x", (unsigned char) buffer[idx]);
705 ui_out_field_string (uiout, "value", buf);
706 /*fputs_filtered (buf, gdb_stdout); */
710 struct value_print_options opts;
711 get_formatted_print_options (&opts, format);
713 val_print (register_type (gdbarch, regnum), buffer, 0, 0,
714 stb->stream, 0, &opts, current_language);
715 ui_out_field_stream (uiout, "value", stb);
716 ui_out_stream_delete (stb);
720 /* Write given values into registers. The registers and values are
721 given as pairs. The corresponding MI command is
722 -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]*/
724 mi_cmd_data_write_register_values (char *command, char **argv, int argc)
726 struct regcache *regcache;
727 struct gdbarch *gdbarch;
731 /* Note that the test for a valid register must include checking the
732 gdbarch_register_name because gdbarch_num_regs may be allocated for
733 the union of the register sets within a family of related processors.
734 In this case, some entries of gdbarch_register_name will change depending
735 upon the particular processor being debugged. */
737 regcache = get_current_regcache ();
738 gdbarch = get_regcache_arch (regcache);
739 numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
742 error ("mi_cmd_data_write_register_values: Usage: -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]");
744 format = (int) argv[0][0];
746 if (!target_has_registers)
747 error ("mi_cmd_data_write_register_values: No registers.");
750 error ("mi_cmd_data_write_register_values: No regs and values specified.");
753 error ("mi_cmd_data_write_register_values: Regs and vals are not in pairs.");
755 for (i = 1; i < argc; i = i + 2)
757 int regnum = atoi (argv[i]);
759 if (regnum >= 0 && regnum < numregs
760 && gdbarch_register_name (gdbarch, regnum)
761 && *gdbarch_register_name (gdbarch, regnum))
765 /* Get the value as a number. */
766 value = parse_and_eval_address (argv[i + 1]);
769 regcache_cooked_write_signed (regcache, regnum, value);
772 error ("bad register number");
776 /* Evaluate the value of the argument. The argument is an
777 expression. If the expression contains spaces it needs to be
778 included in double quotes. */
780 mi_cmd_data_evaluate_expression (char *command, char **argv, int argc)
782 struct expression *expr;
783 struct cleanup *old_chain = NULL;
785 struct ui_stream *stb = NULL;
786 struct value_print_options opts;
788 stb = ui_out_stream_new (uiout);
792 ui_out_stream_delete (stb);
793 error ("mi_cmd_data_evaluate_expression: Usage: -data-evaluate-expression expression");
796 expr = parse_expression (argv[0]);
798 old_chain = make_cleanup (free_current_contents, &expr);
800 val = evaluate_expression (expr);
802 /* Print the result of the expression evaluation. */
803 get_user_print_options (&opts);
805 val_print (value_type (val), value_contents (val),
806 value_embedded_offset (val), value_address (val),
807 stb->stream, 0, &opts, current_language);
809 ui_out_field_stream (uiout, "value", stb);
810 ui_out_stream_delete (stb);
812 do_cleanups (old_chain);
817 ADDR: start address of data to be dumped.
818 WORD-FORMAT: a char indicating format for the ``word''. See
820 WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes.
821 NR_ROW: Number of rows.
822 NR_COL: The number of colums (words per row).
823 ASCHAR: (OPTIONAL) Append an ascii character dump to each row. Use
824 ASCHAR for unprintable characters.
826 Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and
827 displayes them. Returns:
829 {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...}
832 The number of bytes read is SIZE*ROW*COL. */
835 mi_cmd_data_read_memory (char *command, char **argv, int argc)
837 struct gdbarch *gdbarch = get_current_arch ();
838 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
844 struct type *word_type;
857 static struct mi_opt opts[] =
859 {"o", OFFSET_OPT, 1},
865 int opt = mi_getopt ("mi_cmd_data_read_memory", argc, argv, opts,
869 switch ((enum opt) opt)
872 offset = atol (optarg);
879 if (argc < 5 || argc > 6)
880 error ("mi_cmd_data_read_memory: Usage: ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].");
882 /* Extract all the arguments. */
884 /* Start address of the memory dump. */
885 addr = parse_and_eval_address (argv[0]) + offset;
886 /* The format character to use when displaying a memory word. See
887 the ``x'' command. */
888 word_format = argv[1][0];
889 /* The size of the memory word. */
890 word_size = atol (argv[2]);
894 word_type = builtin_type (gdbarch)->builtin_int8;
898 word_type = builtin_type (gdbarch)->builtin_int16;
902 word_type = builtin_type (gdbarch)->builtin_int32;
906 word_type = builtin_type (gdbarch)->builtin_int64;
910 word_type = builtin_type (gdbarch)->builtin_int8;
913 /* The number of rows. */
914 nr_rows = atol (argv[3]);
916 error ("mi_cmd_data_read_memory: invalid number of rows.");
918 /* Number of bytes per row. */
919 nr_cols = atol (argv[4]);
921 error ("mi_cmd_data_read_memory: invalid number of columns.");
923 /* The un-printable character when printing ascii. */
929 /* Create a buffer and read it in. */
930 total_bytes = word_size * nr_rows * nr_cols;
931 mbuf = xcalloc (total_bytes, 1);
932 make_cleanup (xfree, mbuf);
934 /* Dispatch memory reads to the topmost target, not the flattened
936 nr_bytes = target_read_until_error (current_target.beneath,
937 TARGET_OBJECT_MEMORY, NULL, mbuf,
940 error ("Unable to read memory.");
942 /* Output the header information. */
943 ui_out_field_core_addr (uiout, "addr", gdbarch, addr);
944 ui_out_field_int (uiout, "nr-bytes", nr_bytes);
945 ui_out_field_int (uiout, "total-bytes", total_bytes);
946 ui_out_field_core_addr (uiout, "next-row",
947 gdbarch, addr + word_size * nr_cols);
948 ui_out_field_core_addr (uiout, "prev-row",
949 gdbarch, addr - word_size * nr_cols);
950 ui_out_field_core_addr (uiout, "next-page", gdbarch, addr + total_bytes);
951 ui_out_field_core_addr (uiout, "prev-page", gdbarch, addr - total_bytes);
953 /* Build the result as a two dimentional table. */
955 struct ui_stream *stream = ui_out_stream_new (uiout);
956 struct cleanup *cleanup_list_memory;
959 cleanup_list_memory = make_cleanup_ui_out_list_begin_end (uiout, "memory");
960 for (row = 0, row_byte = 0;
962 row++, row_byte += nr_cols * word_size)
966 struct cleanup *cleanup_tuple;
967 struct cleanup *cleanup_list_data;
968 struct value_print_options opts;
970 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
971 ui_out_field_core_addr (uiout, "addr", gdbarch, addr + row_byte);
972 /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */
973 cleanup_list_data = make_cleanup_ui_out_list_begin_end (uiout, "data");
974 get_formatted_print_options (&opts, word_format);
975 for (col = 0, col_byte = row_byte;
977 col++, col_byte += word_size)
979 if (col_byte + word_size > nr_bytes)
981 ui_out_field_string (uiout, NULL, "N/A");
985 ui_file_rewind (stream->stream);
986 print_scalar_formatted (mbuf + col_byte, word_type, &opts,
987 word_asize, stream->stream);
988 ui_out_field_stream (uiout, NULL, stream);
991 do_cleanups (cleanup_list_data);
995 ui_file_rewind (stream->stream);
996 for (byte = row_byte; byte < row_byte + word_size * nr_cols; byte++)
998 if (byte >= nr_bytes)
1000 fputc_unfiltered ('X', stream->stream);
1002 else if (mbuf[byte] < 32 || mbuf[byte] > 126)
1004 fputc_unfiltered (aschar, stream->stream);
1007 fputc_unfiltered (mbuf[byte], stream->stream);
1009 ui_out_field_stream (uiout, "ascii", stream);
1011 do_cleanups (cleanup_tuple);
1013 ui_out_stream_delete (stream);
1014 do_cleanups (cleanup_list_memory);
1016 do_cleanups (cleanups);
1019 /* DATA-MEMORY-WRITE:
1021 COLUMN_OFFSET: optional argument. Must be preceeded by '-o'. The
1022 offset from the beginning of the memory grid row where the cell to
1024 ADDR: start address of the row in the memory grid where the memory
1025 cell is, if OFFSET_COLUMN is specified. Otherwise, the address of
1026 the location to write to.
1027 FORMAT: a char indicating format for the ``word''. See
1029 WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
1030 VALUE: value to be written into the memory address.
1032 Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
1036 mi_cmd_data_write_memory (char *command, char **argv, int argc)
1038 struct gdbarch *gdbarch = get_current_arch ();
1039 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1043 /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big
1044 enough when using a compiler other than GCC. */
1047 struct cleanup *old_chain;
1055 static struct mi_opt opts[] =
1057 {"o", OFFSET_OPT, 1},
1063 int opt = mi_getopt ("mi_cmd_data_write_memory", argc, argv, opts,
1067 switch ((enum opt) opt)
1070 offset = atol (optarg);
1078 error ("mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
1080 /* Extract all the arguments. */
1081 /* Start address of the memory dump. */
1082 addr = parse_and_eval_address (argv[0]);
1083 /* The format character to use when displaying a memory word. See
1084 the ``x'' command. */
1085 word_format = argv[1][0];
1086 /* The size of the memory word. */
1087 word_size = atol (argv[2]);
1089 /* Calculate the real address of the write destination. */
1090 addr += (offset * word_size);
1092 /* Get the value as a number. */
1093 value = parse_and_eval_address (argv[3]);
1094 /* Get the value into an array. */
1095 buffer = xmalloc (word_size);
1096 old_chain = make_cleanup (xfree, buffer);
1097 store_signed_integer (buffer, word_size, byte_order, value);
1098 /* Write it down to memory. */
1099 write_memory (addr, buffer, word_size);
1100 /* Free the buffer. */
1101 do_cleanups (old_chain);
1105 mi_cmd_enable_timings (char *command, char **argv, int argc)
1111 if (strcmp (argv[0], "yes") == 0)
1113 else if (strcmp (argv[0], "no") == 0)
1124 error ("mi_cmd_enable_timings: Usage: %s {yes|no}", command);
1128 mi_cmd_list_features (char *command, char **argv, int argc)
1132 struct cleanup *cleanup = NULL;
1133 cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");
1135 ui_out_field_string (uiout, NULL, "frozen-varobjs");
1136 ui_out_field_string (uiout, NULL, "pending-breakpoints");
1137 ui_out_field_string (uiout, NULL, "thread-info");
1140 ui_out_field_string (uiout, NULL, "python");
1143 do_cleanups (cleanup);
1147 error ("-list-features should be passed no arguments");
1151 mi_cmd_list_target_features (char *command, char **argv, int argc)
1155 struct cleanup *cleanup = NULL;
1156 cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");
1158 if (target_can_async_p ())
1159 ui_out_field_string (uiout, NULL, "async");
1161 do_cleanups (cleanup);
1165 error ("-list-target-features should be passed no arguments");
1168 /* Execute a command within a safe environment.
1169 Return <0 for error; >=0 for ok.
1171 args->action will tell mi_execute_command what action
1172 to perfrom after the given command has executed (display/suppress
1173 prompt, display error). */
1176 captured_mi_execute_command (struct ui_out *uiout, void *data)
1178 struct cleanup *cleanup;
1179 struct mi_parse *context = (struct mi_parse *) data;
1182 current_command_ts = context->cmd_start;
1184 current_token = xstrdup (context->token);
1185 cleanup = make_cleanup (free_current_contents, ¤t_token);
1187 running_result_record_printed = 0;
1189 switch (context->op)
1192 /* A MI command was read from the input stream. */
1194 /* FIXME: gdb_???? */
1195 fprintf_unfiltered (raw_stdout, " token=`%s' command=`%s' args=`%s'\n",
1196 context->token, context->command, context->args);
1199 mi_cmd_execute (context);
1201 /* Print the result if there were no errors.
1203 Remember that on the way out of executing a command, you have
1204 to directly use the mi_interp's uiout, since the command could
1205 have reset the interpreter, in which case the current uiout
1206 will most likely crash in the mi_out_* routines. */
1207 if (!running_result_record_printed)
1209 fputs_unfiltered (context->token, raw_stdout);
1210 /* There's no particularly good reason why target-connect results
1211 in not ^done. Should kill ^connected for MI3. */
1212 fputs_unfiltered (strcmp (context->command, "target-select") == 0
1213 ? "^connected" : "^done", raw_stdout);
1214 mi_out_put (uiout, raw_stdout);
1215 mi_out_rewind (uiout);
1216 mi_print_timing_maybe ();
1217 fputs_unfiltered ("\n", raw_stdout);
1220 /* The command does not want anything to be printed. In that
1221 case, the command probably should not have written anything
1222 to uiout, but in case it has written something, discard it. */
1223 mi_out_rewind (uiout);
1229 /* A CLI command was read from the input stream. */
1230 /* This "feature" will be removed as soon as we have a
1231 complete set of mi commands. */
1232 /* Echo the command on the console. */
1233 fprintf_unfiltered (gdb_stdlog, "%s\n", context->command);
1234 /* Call the "console" interpreter. */
1235 argv[0] = "console";
1236 argv[1] = context->command;
1237 mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2);
1239 /* If we changed interpreters, DON'T print out anything. */
1240 if (current_interp_named_p (INTERP_MI)
1241 || current_interp_named_p (INTERP_MI1)
1242 || current_interp_named_p (INTERP_MI2)
1243 || current_interp_named_p (INTERP_MI3))
1245 if (!running_result_record_printed)
1247 fputs_unfiltered (context->token, raw_stdout);
1248 fputs_unfiltered ("^done", raw_stdout);
1249 mi_out_put (uiout, raw_stdout);
1250 mi_out_rewind (uiout);
1251 mi_print_timing_maybe ();
1252 fputs_unfiltered ("\n", raw_stdout);
1255 mi_out_rewind (uiout);
1262 do_cleanups (cleanup);
1269 mi_execute_command (char *cmd, int from_tty)
1271 struct mi_parse *command;
1272 struct ui_out *saved_uiout = uiout;
1274 /* This is to handle EOF (^D). We just quit gdb. */
1275 /* FIXME: we should call some API function here. */
1277 quit_force (NULL, from_tty);
1279 command = mi_parse (cmd);
1281 if (command != NULL)
1283 struct gdb_exception result;
1284 ptid_t previous_ptid = inferior_ptid;
1288 command->cmd_start = (struct mi_timestamp *)
1289 xmalloc (sizeof (struct mi_timestamp));
1290 timestamp (command->cmd_start);
1293 result = catch_exception (uiout, captured_mi_execute_command, command,
1295 if (result.reason < 0)
1297 /* The command execution failed and error() was called
1299 fputs_unfiltered (command->token, raw_stdout);
1300 fputs_unfiltered ("^error,msg=\"", raw_stdout);
1301 if (result.message == NULL)
1302 fputs_unfiltered ("unknown error", raw_stdout);
1304 fputstr_unfiltered (result.message, '"', raw_stdout);
1305 fputs_unfiltered ("\"\n", raw_stdout);
1306 mi_out_rewind (uiout);
1309 if (/* The notifications are only output when the top-level
1310 interpreter (specified on the command line) is MI. */
1311 ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ()))
1312 /* Don't try report anything if there are no threads --
1313 the program is dead. */
1314 && thread_count () != 0
1315 /* -thread-select explicitly changes thread. If frontend uses that
1316 internally, we don't want to emit =thread-selected, since
1317 =thread-selected is supposed to indicate user's intentions. */
1318 && strcmp (command->command, "thread-select") != 0)
1320 struct mi_interp *mi = top_level_interpreter_data ();
1321 int report_change = 0;
1323 if (command->thread == -1)
1325 report_change = (!ptid_equal (previous_ptid, null_ptid)
1326 && !ptid_equal (inferior_ptid, previous_ptid)
1327 && !ptid_equal (inferior_ptid, null_ptid));
1329 else if (!ptid_equal (inferior_ptid, null_ptid))
1331 struct thread_info *ti = inferior_thread ();
1332 report_change = (ti->num != command->thread);
1337 struct thread_info *ti = inferior_thread ();
1338 target_terminal_ours ();
1339 fprintf_unfiltered (mi->event_channel,
1340 "thread-selected,id=\"%d\"",
1342 gdb_flush (mi->event_channel);
1346 mi_parse_free (command);
1349 fputs_unfiltered ("(gdb) \n", raw_stdout);
1350 gdb_flush (raw_stdout);
1351 /* Print any buffered hook code. */
1356 mi_cmd_execute (struct mi_parse *parse)
1358 struct cleanup *cleanup;
1361 prepare_execute_command ();
1363 cleanup = make_cleanup (null_cleanup, NULL);
1365 if (parse->frame != -1 && parse->thread == -1)
1366 error (_("Cannot specify --frame without --thread"));
1368 if (parse->thread != -1)
1370 struct thread_info *tp = find_thread_id (parse->thread);
1372 error (_("Invalid thread id: %d"), parse->thread);
1374 if (is_exited (tp->ptid))
1375 error (_("Thread id: %d has terminated"), parse->thread);
1377 switch_to_thread (tp->ptid);
1380 if (parse->frame != -1)
1382 struct frame_info *fid;
1383 int frame = parse->frame;
1384 fid = find_relative_frame (get_current_frame (), &frame);
1386 /* find_relative_frame was successful */
1389 error (_("Invalid frame id: %d"), frame);
1392 if (parse->cmd->argv_func != NULL)
1393 parse->cmd->argv_func (parse->command, parse->argv, parse->argc);
1394 else if (parse->cmd->cli.cmd != 0)
1396 /* FIXME: DELETE THIS. */
1397 /* The operation is still implemented by a cli command. */
1398 /* Must be a synchronous one. */
1399 mi_execute_cli_command (parse->cmd->cli.cmd, parse->cmd->cli.args_p,
1404 /* FIXME: DELETE THIS. */
1405 struct ui_file *stb;
1407 stb = mem_fileopen ();
1409 fputs_unfiltered ("Undefined mi command: ", stb);
1410 fputstr_unfiltered (parse->command, '"', stb);
1411 fputs_unfiltered (" (missing implementation)", stb);
1413 make_cleanup_ui_file_delete (stb);
1416 do_cleanups (cleanup);
1419 /* FIXME: This is just a hack so we can get some extra commands going.
1420 We don't want to channel things through the CLI, but call libgdb directly.
1421 Use only for synchronous commands. */
1424 mi_execute_cli_command (const char *cmd, int args_p, const char *args)
1428 struct cleanup *old_cleanups;
1431 run = xstrprintf ("%s %s", cmd, args);
1433 run = xstrdup (cmd);
1435 /* FIXME: gdb_???? */
1436 fprintf_unfiltered (gdb_stdout, "cli=%s run=%s\n",
1438 old_cleanups = make_cleanup (xfree, run);
1439 execute_command ( /*ui */ run, 0 /*from_tty */ );
1440 do_cleanups (old_cleanups);
1446 mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
1448 struct cleanup *old_cleanups;
1451 if (target_can_async_p ())
1452 run = xstrprintf ("%s %s&", cli_command, argc ? *argv : "");
1454 run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
1455 old_cleanups = make_cleanup (xfree, run);
1457 execute_command ( /*ui */ run, 0 /*from_tty */ );
1459 if (target_can_async_p ())
1461 /* If we're not executing, an exception should have been throw. */
1462 gdb_assert (is_running (inferior_ptid));
1463 do_cleanups (old_cleanups);
1467 /* Do this before doing any printing. It would appear that some
1468 print code leaves garbage around in the buffer. */
1469 do_cleanups (old_cleanups);
1474 mi_load_progress (const char *section_name,
1475 unsigned long sent_so_far,
1476 unsigned long total_section,
1477 unsigned long total_sent,
1478 unsigned long grand_total)
1480 struct timeval time_now, delta, update_threshold;
1481 static struct timeval last_update;
1482 static char *previous_sect_name = NULL;
1484 struct ui_out *saved_uiout;
1486 /* This function is called through deprecated_show_load_progress
1487 which means uiout may not be correct. Fix it for the duration
1488 of this function. */
1489 saved_uiout = uiout;
1491 if (current_interp_named_p (INTERP_MI)
1492 || current_interp_named_p (INTERP_MI2))
1493 uiout = mi_out_new (2);
1494 else if (current_interp_named_p (INTERP_MI1))
1495 uiout = mi_out_new (1);
1496 else if (current_interp_named_p (INTERP_MI3))
1497 uiout = mi_out_new (3);
1501 update_threshold.tv_sec = 0;
1502 update_threshold.tv_usec = 500000;
1503 gettimeofday (&time_now, NULL);
1505 delta.tv_usec = time_now.tv_usec - last_update.tv_usec;
1506 delta.tv_sec = time_now.tv_sec - last_update.tv_sec;
1508 if (delta.tv_usec < 0)
1511 delta.tv_usec += 1000000L;
1514 new_section = (previous_sect_name ?
1515 strcmp (previous_sect_name, section_name) : 1);
1518 struct cleanup *cleanup_tuple;
1519 xfree (previous_sect_name);
1520 previous_sect_name = xstrdup (section_name);
1523 fputs_unfiltered (current_token, raw_stdout);
1524 fputs_unfiltered ("+download", raw_stdout);
1525 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1526 ui_out_field_string (uiout, "section", section_name);
1527 ui_out_field_int (uiout, "section-size", total_section);
1528 ui_out_field_int (uiout, "total-size", grand_total);
1529 do_cleanups (cleanup_tuple);
1530 mi_out_put (uiout, raw_stdout);
1531 fputs_unfiltered ("\n", raw_stdout);
1532 gdb_flush (raw_stdout);
1535 if (delta.tv_sec >= update_threshold.tv_sec &&
1536 delta.tv_usec >= update_threshold.tv_usec)
1538 struct cleanup *cleanup_tuple;
1539 last_update.tv_sec = time_now.tv_sec;
1540 last_update.tv_usec = time_now.tv_usec;
1542 fputs_unfiltered (current_token, raw_stdout);
1543 fputs_unfiltered ("+download", raw_stdout);
1544 cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1545 ui_out_field_string (uiout, "section", section_name);
1546 ui_out_field_int (uiout, "section-sent", sent_so_far);
1547 ui_out_field_int (uiout, "section-size", total_section);
1548 ui_out_field_int (uiout, "total-sent", total_sent);
1549 ui_out_field_int (uiout, "total-size", grand_total);
1550 do_cleanups (cleanup_tuple);
1551 mi_out_put (uiout, raw_stdout);
1552 fputs_unfiltered ("\n", raw_stdout);
1553 gdb_flush (raw_stdout);
1557 uiout = saved_uiout;
1561 timestamp (struct mi_timestamp *tv)
1564 gettimeofday (&tv->wallclock, NULL);
1565 #ifdef HAVE_GETRUSAGE
1566 getrusage (RUSAGE_SELF, &rusage);
1567 tv->utime.tv_sec = rusage.ru_utime.tv_sec;
1568 tv->utime.tv_usec = rusage.ru_utime.tv_usec;
1569 tv->stime.tv_sec = rusage.ru_stime.tv_sec;
1570 tv->stime.tv_usec = rusage.ru_stime.tv_usec;
1572 usec = get_run_time ();
1573 tv->utime.tv_sec = usec/1000000L;
1574 tv->utime.tv_usec = usec - 1000000L*tv->utime.tv_sec;
1575 tv->stime.tv_sec = 0;
1576 tv->stime.tv_usec = 0;
1581 print_diff_now (struct mi_timestamp *start)
1583 struct mi_timestamp now;
1585 print_diff (start, &now);
1589 mi_print_timing_maybe (void)
1591 /* If the command is -enable-timing then do_timings may be
1592 true whilst current_command_ts is not initialized. */
1593 if (do_timings && current_command_ts)
1594 print_diff_now (current_command_ts);
1598 timeval_diff (struct timeval start, struct timeval end)
1600 return ((end.tv_sec - start.tv_sec) * 1000000L)
1601 + (end.tv_usec - start.tv_usec);
1605 print_diff (struct mi_timestamp *start, struct mi_timestamp *end)
1609 ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}",
1610 timeval_diff (start->wallclock, end->wallclock) / 1000000.0,
1611 timeval_diff (start->utime, end->utime) / 1000000.0,
1612 timeval_diff (start->stime, end->stime) / 1000000.0);